#!/bin/bash # Copyright (C) 2009 by Thomas Petazzoni <thomas.petazzoni@free-electrons.com> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # This script generates an HTML file that contains a report about all # Buildroot packages, their usage of the different package # infrastructure and possible cleanup actions # # Run the script from the Buildroot toplevel directory: # # ./support/scripts/pkg-stats > /tmp/pkg.html # echo "<head> <style type=\"text/css\"> table { width: 100%; } td { border: 1px solid black; } td.centered { text-align: center; } td.wrong { background: #ff9a69; } td.correct { background: #d2ffc4; } td.nopatches { background: #d2ffc4; } td.somepatches { background: #ffd870; } td.lotsofpatches { background: #ff9a69; } </style> <title>Statistics of Buildroot packages</title> </head> <a href=\"#results\">Results</a><br/> <table> <tr> <td>Id</td> <td>Package</td> <td class=\"centered\">Patch count</td> <td class=\"centered\">Infrastructure</td> <td class=\"centered\">License</td> <td class=\"centered\">License files</td> </tr> " autotools_packages=0 cmake_packages=0 generic_packages=0 manual_packages=0 packages_with_licence=0 packages_without_licence=0 packages_with_license_files=0 packages_without_license_files=0 total_patch_count=0 cnt=0 for i in $(find boot/ linux/ package/ -name '*.mk' | sort) ; do if test \ $i = "boot/common.mk" -o \ $i = "linux/linux-ext-xenomai.mk" -o \ $i = "linux/linux-ext-rtai.mk" -o \ $i = "linux/linux-ext-ocf-linux.mk" -o \ $i = "package/efl/efl.mk" -o \ $i = "package/games/games.mk" -o \ $i = "package/gtk2-themes/gtk2-themes.mk" -o \ $i = "package/multimedia/multimedia.mk" -o \ $i = "package/customize/customize.mk" -o \ $i = "package/pkg-autotools.mk" -o \ $i = "package/pkg-cmake.mk" -o \ $i = "package/pkg-generic.mk" -o \ $i = "package/pkg-utils.mk" -o \ $i = "package/pkg-download.mk" -o \ $i = "package/matchbox/matchbox.mk" -o \ $i = "package/x11r7/x11r7.mk" ; then echo "skipping $i" 1>&2 continue fi cnt=$((cnt+1)) hashost=0 hastarget=0 infratype="" # Determine package infrastructure if grep -E "\(host-autotools-package\)" $i > /dev/null ; then infratype="autotools" hashost=1 fi if grep -E "\(autotools-package\)" $i > /dev/null ; then infratype="autotools" hastarget=1 fi if grep -E "\(host-generic-package\)" $i > /dev/null ; then infratype="generic" hashost=1 fi if grep -E "\(generic-package\)" $i > /dev/null ; then infratype="generic" hastarget=1 fi if grep -E "\(host-cmake-package\)" $i > /dev/null ; then infratype="cmake" hashost=1 fi if grep -E "\(cmake-package\)" $i > /dev/null ; then infratype="cmake" hastarget=1 fi pkg=$(basename $i) pkg=${pkg%.mk} pkgvariable=$(echo ${pkg} | tr "a-z-" "A-Z_") # Count packages per infrastructure if [ -z ${infratype} ] ; then infratype="manual" manual_packages=$(($manual_packages+1)) elif [ ${infratype} = "autotools" ]; then autotools_packages=$(($autotools_packages+1)) elif [ ${infratype} = "cmake" ]; then cmake_packages=$(($cmake_packages+1)) elif [ ${infratype} = "generic" ]; then generic_packages=$(($generic_packages+1)) fi if grep -qE "^${pkgvariable}_LICENSE[ ]*=" $i ; then packages_with_license=$(($packages_with_license+1)) license=1 else packages_without_license=$(($packages_without_license+1)) license=0 fi if grep -qE "^${pkgvariable}_LICENSE_FILES[ ]*=" $i ; then packages_with_license_files=$(($packages_with_license_files+1)) license_files=1 else packages_without_license_files=$(($packages_without_license_files+1)) license_files=0 fi echo "<tr>" echo "<td>$cnt</td>" echo "<td>$i</td>" package_dir=$(dirname $i) patch_count=$(find ${package_dir} -name '*.patch' | wc -l) total_patch_count=$(($total_patch_count+$patch_count)) if test $patch_count -lt 1 ; then patch_count_class="nopatches" elif test $patch_count -lt 5 ; then patch_count_class="somepatches" else patch_count_class="lotsofpatches" fi echo "<td class=\"centered ${patch_count_class}\">" echo "<b>$patch_count</b>" echo "</td>" if [ ${infratype} = "manual" ] ; then echo "<td class=\"centered wrong\"><b>manual</b></td>" else echo "<td class=\"centered correct\">" echo "<b>${infratype}</b><br/>" if [ ${hashost} -eq 1 -a ${hastarget} -eq 1 ]; then echo "target + host" elif [ ${hashost} -eq 1 ]; then echo "host" else echo "target" fi echo "</td>" fi if [ ${license} -eq 0 ] ; then echo "<td class=\"centered wrong\">No</td>" else echo "<td class=\"centered correct\">Yes</td>" fi if [ ${license_files} -eq 0 ] ; then echo "<td class=\"centered wrong\">No</td>" else echo "<td class=\"centered correct\">Yes</td>" fi echo "</tr>" done echo "</table>" echo "<a id="results"></a>" echo "<table>" echo "<tr>" echo "<td>Packages using the <i>generic</i> infrastructure</td>" echo "<td>$generic_packages</td>" echo "</tr>" echo "<tr>" echo "<td>Packages using the <i>cmake</i> infrastructure</td>" echo "<td>$cmake_packages</td>" echo "</tr>" echo "<tr>" echo "<td>Packages using the <i>autotools</i> infrastructure</td>" echo "<td>$autotools_packages</td>" echo "</tr>" echo "<tr>" echo "<td>Packages not using any infrastructure</td>" echo "<td>$manual_packages</td>" echo "</tr>" echo "<tr>" echo "<td>Packages having license information</td>" echo "<td>$packages_with_license</td>" echo "</tr>" echo "<tr>" echo "<td>Packages not having licence information</td>" echo "<td>$packages_without_license</td>" echo "</tr>" echo "<tr>" echo "<td>Packages having license files information</td>" echo "<td>$packages_with_license_files</td>" echo "</tr>" echo "<tr>" echo "<td>Packages not having licence files information</td>" echo "<td>$packages_without_license_files</td>" echo "</tr>" echo "<tr>" echo "<td>Number of patches in all packages</td>" echo "<td>$total_patch_count</td>" echo "</tr>" echo "<tr>" echo "<td>TOTAL</td>" echo "<td>$cnt</td>" echo "</tr>" echo "</table>" echo "<hr/>" echo "<i>Updated on $(LANG=C date), Git commit $(git log master -n 1 --pretty=format:%H)</i>" echo "</body>" echo "</html>"