#!/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: # # ./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; } tr.wrong td { background: #ff9a69; } tr.correct td { background: #d2ffc4; } </style> </head> <a href=\"#results\">Results</a><br/> <table> <tr> <td rowspan=\"2\">Id</td> <td rowspan=\"2\">Package</td> <td>Patch count</td> <td colspan=\"2\" class=\"centered\">AUTOTARGETS</td> <td colspan=\"2\" class=\"centered\">GENTARGETS</td> <td colspan=\"2\" class=\"centered\">CMAKETARGETS</td> <td colspan=\"2\" class=\"centered\">manual</td> <td rowspan=\"2\" class=\"centered\">Actions</td> </tr> <tr> <td class=\"centered\">host</td> <td class=\"centered\">target</td> <td class=\"centered\">host</td> <td class=\"centered\">target</td> <td class=\"centered\">host</td> <td class=\"centered\">target</td> <td class=\"centered\">host</td> <td class=\"centered\">target</td> </tr>" convert_to_generic_target=0 convert_to_generic_host=0 convert_to_autotools=0 total_patch_count=0 cnt=1 for i in $(find package/ -name '*.mk') ; do if test \ $i = "package/java/java.mk" -o \ $i = "package/games/games.mk" -o \ $i = "package/multimedia/multimedia.mk" -o \ $i = "package/customize/customize.mk" -o \ $i = "package/gnuconfig/gnuconfig.mk" -o \ $i = "package/matchbox/matchbox.mk" -o \ $i = "package/x11r7/x11r7.mk" ; then echo "skipping $i" 1>&2 continue fi cnt=$((cnt+1)) is_auto_host=0 is_auto_target=0 is_cmake_host=0 is_cmake_target=0 is_pkg_target=0 is_pkg_host=0 is_manual_target=0 is_manual_host=0 if grep -E "\(call AUTOTARGETS,[^,]*,[^,]*,host\)" $i > /dev/null ; then is_auto_host=1 fi if grep -E "\(call AUTOTARGETS,[^,]*,[^,]*(,target|)\)" $i > /dev/null ; then is_auto_target=1 fi if grep -E "\(call GENTARGETS,[^,]*,[^,]*,host\)" $i > /dev/null ; then is_pkg_host=1 fi if grep -E "\(call GENTARGETS,[^,]*,[^,]*(,target|)\)" $i > /dev/null ; then is_pkg_target=1 fi if grep -E "\(call CMAKETARGETS,[^,]*,[^,]*,host\)" $i > /dev/null ; then is_cmake_host=1 fi if grep -E "\(call CMAKETARGETS,[^,]*,[^,]*(,target|)\)" $i > /dev/null ; then is_cmake_target=1 fi pkg=$(basename $i) pkg=${pkg%.mk} if grep "^host-$pkg:" $i > /dev/null ; then is_manual_host=1 fi if test $is_pkg_target -eq 0 -a $is_auto_target -eq 0 -a $is_cmake_target -eq 0; then is_manual_target=1 fi tasks="" if [ $is_manual_target -eq 1 ] ; then if grep "/configure" $i > /dev/null ; then tasks=$tasks"<li>convert package to autotools ?</li>" convert_to_target_autotools=$((convert_to_target_autotools+1)) else tasks=$tasks"<li>convert to generic target</li>" convert_to_generic_target=$((convert_to_generic_target+1)) fi fi if [ $is_manual_host -eq 1 ]; then if grep "/configure" $i > /dev/null ; then tasks=$tasks"<li>convert package to autotools ?</li>" convert_to_host_autotools=$((convert_to_host_autotools+1)) else tasks=$tasks"<li>convert to generic host</li>" convert_to_generic_host=$((convert_to_generic_host+1)) fi fi if test -n "$tasks" ; then echo "<tr class=\"wrong\">" else echo "<tr class=\"correct\">" fi 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_color="#00ff00" elif test $patch_count -lt 5 ; then patch_count_color="#ffc600" else patch_count_color="#ff0000" fi echo "<td class=\"centered\" style=\"color: $patch_count_color; font-weight: bold;\">" echo $patch_count echo "</td>" echo "<td class=\"centered\">" if [ $is_auto_host -eq 1 ] ; then echo "<b>YES</b>" else echo "NO" fi echo "</td>" echo "<td class=\"centered\">" if [ $is_auto_target -eq 1 ] ; then echo "<b>YES</b>" else echo "NO" fi echo "</td>" echo "<td class=\"centered\">" if [ $is_pkg_host -eq 1 ] ; then echo "<b>YES</b>" else echo "NO" fi echo "</td>" echo "<td class=\"centered\">" if [ $is_pkg_target -eq 1 ] ; then echo "<b>YES</b>" else echo "NO" fi echo "</td>" echo "<td class=\"centered\">" if [ $is_cmake_host -eq 1 ] ; then echo "<b>YES</b>" else echo "NO" fi echo "</td>" echo "<td class=\"centered\">" if [ $is_cmake_target -eq 1 ] ; then echo "<b>YES</b>" else echo "NO" fi echo "</td>" echo "<td class=\"centered\">" if [ $is_manual_host -eq 1 ] ; then echo "<b>YES</b>" else echo "NO" fi echo "</td>" echo "<td class=\"centered\">" if [ $is_manual_target -eq 1 ] ; then echo "<b>YES</b>" else echo "NO" fi echo "</td>" echo "<td>" echo "<ul>" echo $tasks echo "</ul>" echo "</td>" echo "</tr>" done echo "</table>" echo "<table>" echo "<tr>" echo "<td>Packages to convert to generic target</td>" echo "<td>$convert_to_generic_target</td>" echo "</tr>" echo "<tr>" echo "<td>Packages to convert to generic host</td>" echo "<td>$convert_to_generic_host</td>" echo "</tr>" echo "<tr>" echo "<td>Packages to convert to target autotools</td>" echo "<td>$convert_to_target_autotools</td>" echo "</tr>" echo "<tr>" echo "<td>Packages to convert to host autotools</td>" echo "<td>$convert_to_host_autotools</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>"