3 # Copyright (C) 2009 by Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 # This script generates an HTML file that contains a report about all
20 # Buildroot packages, their usage of the different package
21 # infrastructure and possible cleanup actions
23 # Run the script from the Buildroot toplevel directory:
25 # ./support/scripts/pkg-stats > /tmp/pkg.html
29 <style type=\"text/css\">
34 border: 1px solid black;
57 <title>Statistics of Buildroot packages</title>
60 <a href=\"#results\">Results</a><br/>
66 <td class=\"centered\">Patch count</td>
67 <td class=\"centered\">Infrastructure</td>
68 <td class=\"centered\">License</td>
69 <td class=\"centered\">License files</td>
70 <td class=\"centered\">Hash file</td>
84 packages_with_licence
=0
85 packages_without_licence
=0
86 packages_with_license_files
=0
87 packages_without_license_files
=0
88 packages_with_hash_file
=0
89 packages_without_hash_file
=0
93 for i
in $
(find boot
/ linux
/ package
/ -name '*.mk' |
sort) ; do
96 $i = "boot/common.mk" -o \
97 $i = "linux/linux-ext-ev3dev-linux-drivers.mk" -o \
98 $i = "linux/linux-ext-fbtft.mk" -o \
99 $i = "linux/linux-ext-xenomai.mk" -o \
100 $i = "linux/linux-ext-rtai.mk" -o \
101 $i = "package/freescale-imx/freescale-imx.mk" -o \
102 $i = "package/gcc/gcc.mk" -o \
103 $i = "package/gstreamer/gstreamer.mk" -o \
104 $i = "package/gstreamer1/gstreamer1.mk" -o \
105 $i = "package/gtk2-themes/gtk2-themes.mk" -o \
106 $i = "package/matchbox/matchbox.mk" -o \
107 $i = "package/opengl/opengl.mk" -o \
108 $i = "package/qt5/qt5.mk" -o \
109 $i = "package/x11r7/x11r7.mk" -o \
110 $i = "package/doc-asciidoc.mk" -o \
111 $i = "package/pkg-autotools.mk" -o \
112 $i = "package/pkg-cmake.mk" -o \
113 $i = "package/pkg-kconfig.mk" -o \
114 $i = "package/pkg-luarocks.mk" -o \
115 $i = "package/pkg-perl.mk" -o \
116 $i = "package/pkg-python.mk" -o \
117 $i = "package/pkg-rebar.mk" -o \
118 $i = "package/pkg-virtual.mk" -o \
119 $i = "package/pkg-download.mk" -o \
120 $i = "package/pkg-generic.mk" -o \
121 $i = "package/pkg-utils.mk" ; then
122 echo "skipping $i" 1>&2
132 # Determine package infrastructure
133 if grep -E "\(host-autotools-package\)" $i > /dev
/null
; then
134 infratype
="autotools"
138 if grep -E "\(autotools-package\)" $i > /dev
/null
; then
139 infratype
="autotools"
143 if grep -E "\(kconfig-package\)" $i > /dev
/null
; then
148 if grep -E "\(host-luarocks-package\)" $i > /dev
/null
; then
153 if grep -E "\(luarocks-package\)" $i > /dev
/null
; then
158 if grep -E "\(host-perl-package\)" $i > /dev
/null
; then
163 if grep -E "\(perl-package\)" $i > /dev
/null
; then
168 if grep -E "\(host-python-package\)" $i > /dev
/null
; then
173 if grep -E "\(python-package\)" $i > /dev
/null
; then
178 if grep -E "\(host-rebar-package\)" $i > /dev
/null
; then
183 if grep -E "\(rebar-package\)" $i > /dev
/null
; then
188 if grep -E "\(host-virtual-package\)" $i > /dev
/null
; then
193 if grep -E "\(virtual-package\)" $i > /dev
/null
; then
198 if grep -E "\(host-generic-package\)" $i > /dev
/null
; then
203 if grep -E "\(generic-package\)" $i > /dev
/null
; then
208 if grep -E "\(host-cmake-package\)" $i > /dev
/null
; then
213 if grep -E "\(cmake-package\)" $i > /dev
/null
; then
221 pkgvariable
=$
(echo ${pkg} |
tr "a-z-" "A-Z_")
224 # Count packages per infrastructure
225 if [ -z ${infratype} ] ; then
227 manual_packages
=$
(($manual_packages+1))
228 elif [ ${infratype} = "autotools" ]; then
229 autotools_packages
=$
(($autotools_packages+1))
230 elif [ ${infratype} = "cmake" ]; then
231 cmake_packages
=$
(($cmake_packages+1))
232 elif [ ${infratype} = "kconfig" ]; then
233 kconfig_packages
=$
(($kconfig_packages+1))
234 elif [ ${infratype} = "luarocks" ]; then
235 luarocks_packages
=$
(($luarocks_packages+1))
236 elif [ ${infratype} = "perl" ]; then
237 perl_packages
=$
(($perl_packages+1))
238 elif [ ${infratype} = "python" ]; then
239 python_packages
=$
(($python_packages+1))
240 elif [ ${infratype} = "rebar" ]; then
241 rebar_packages
=$
(($rebar_packages+1))
242 elif [ ${infratype} = "virtual" ]; then
243 virtual_packages
=$
(($virtual_packages+1))
244 elif [ ${infratype} = "generic" ]; then
245 generic_packages
=$
(($generic_packages+1))
248 if grep -qE "^${pkgvariable}_LICENSE[ ]*=" $i ; then
249 packages_with_license
=$
(($packages_with_license+1))
252 packages_without_license
=$
(($packages_without_license+1))
256 if grep -qE "^${pkgvariable}_LICENSE_FILES[ ]*=" $i ; then
257 packages_with_license_files
=$
(($packages_with_license_files+1))
260 packages_without_license_files
=$
(($packages_without_license_files+1))
264 if test -f ${dir}/${pkg}.
hash; then
265 packages_with_hash_file
=$
(($packages_with_hash_file+1))
268 packages_without_hash_file
=$
(($packages_without_hash_file+1))
277 package_dir
=$
(dirname $i)
278 patch_count
=$
(find ${package_dir} -name '*.patch' |
wc -l)
279 total_patch_count
=$
(($total_patch_count+$patch_count))
281 if test $patch_count -lt 1 ; then
282 patch_count_class
="nopatches"
283 elif test $patch_count -lt 5 ; then
284 patch_count_class
="somepatches"
286 patch_count_class
="lotsofpatches"
289 echo "<td class=\"centered ${patch_count_class}\">"
290 echo "<b>$patch_count</b>"
293 if [ ${infratype} = "manual" ] ; then
294 echo "<td class=\"centered wrong\"><b>manual</b></td>"
296 echo "<td class=\"centered correct\">"
297 echo "<b>${infratype}</b><br/>"
298 if [ ${hashost} -eq 1 -a ${hastarget} -eq 1 ]; then
300 elif [ ${hashost} -eq 1 ]; then
308 if [ ${license} -eq 0 ] ; then
309 echo "<td class=\"centered wrong\">No</td>"
311 echo "<td class=\"centered correct\">Yes</td>"
314 if [ ${license_files} -eq 0 ] ; then
315 echo "<td class=\"centered wrong\">No</td>"
317 echo "<td class=\"centered correct\">Yes</td>"
320 if [ ${hash_file} -eq 0 ] ; then
321 echo "<td class=\"centered wrong\">No</td>"
323 echo "<td class=\"centered correct\">Yes</td>"
331 echo "<a id="results
"></a>"
334 echo "<td>Packages using the <i>generic</i> infrastructure</td>"
335 echo "<td>$generic_packages</td>"
338 echo "<td>Packages using the <i>cmake</i> infrastructure</td>"
339 echo "<td>$cmake_packages</td>"
342 echo "<td>Packages using the <i>autotools</i> infrastructure</td>"
343 echo "<td>$autotools_packages</td>"
346 echo "<td>Packages using the <i>luarocks</i> infrastructure</td>"
347 echo "<td>$luarocks_packages</td>"
350 echo "<td>Packages using the <i>kconfig</i> infrastructure</td>"
351 echo "<td>$kconfig_packages</td>"
354 echo "<td>Packages using the <i>perl</i> infrastructure</td>"
355 echo "<td>$perl_packages</td>"
358 echo "<td>Packages using the <i>python</i> infrastructure</td>"
359 echo "<td>$python_packages</td>"
362 echo "<td>Packages using the <i>rebar</i> infrastructure</td>"
363 echo "<td>$rebar_packages</td>"
366 echo "<td>Packages using the <i>virtual</i> infrastructure</td>"
367 echo "<td>$virtual_packages</td>"
370 echo "<td>Packages not using any infrastructure</td>"
371 echo "<td>$manual_packages</td>"
374 echo "<td>Packages having license information</td>"
375 echo "<td>$packages_with_license</td>"
378 echo "<td>Packages not having licence information</td>"
379 echo "<td>$packages_without_license</td>"
382 echo "<td>Packages having license files information</td>"
383 echo "<td>$packages_with_license_files</td>"
386 echo "<td>Packages not having licence files information</td>"
387 echo "<td>$packages_without_license_files</td>"
390 echo "<td>Packages having hash file</td>"
391 echo "<td>$packages_with_hash_file</td>"
394 echo "<td>Packages not having hash file</td>"
395 echo "<td>$packages_without_hash_file</td>"
398 echo "<td>Number of patches in all packages</td>"
399 echo "<td>$total_patch_count</td>"
402 echo "<td>TOTAL</td>"
408 echo "<i>Updated on $(LANG=C date), Git commit $(git log master -n 1 --pretty=format:%H)</i>"