#!/usr/bin/env 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>
<td class=\"centered\">Hash file</td>
<td class=\"centered\">Warnings</td>
</tr>
"

autotools_packages=0
cmake_packages=0
kconfig_packages=0
luarocks_package=0
perl_packages=0
python_packages=0
rebar_packages=0
virtual_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
packages_with_hash_file=0
packages_without_hash_file=0
total_patch_count=0
cnt=0

for i in $(find boot/ linux/ package/ toolchain/ -name '*.mk' | sort) ; do

    if test \
	$i = "boot/common.mk" -o \
	$i = "linux/linux-ext-ev3dev-linux-drivers.mk" -o \
	$i = "linux/linux-ext-fbtft.mk" -o \
	$i = "linux/linux-ext-xenomai.mk" -o \
	$i = "linux/linux-ext-rtai.mk" -o \
	$i = "package/freescale-imx/freescale-imx.mk" -o \
	$i = "package/gcc/gcc.mk" -o \
	$i = "package/gstreamer/gstreamer.mk" -o \
	$i = "package/gstreamer1/gstreamer1.mk" -o \
	$i = "package/gtk2-themes/gtk2-themes.mk" -o \
	$i = "package/matchbox/matchbox.mk" -o \
	$i = "package/opengl/opengl.mk" -o \
	$i = "package/qt5/qt5.mk" -o \
	$i = "package/x11r7/x11r7.mk" -o \
	$i = "package/doc-asciidoc.mk" -o \
	$i = "package/pkg-autotools.mk" -o \
	$i = "package/pkg-cmake.mk" -o \
	$i = "package/pkg-kconfig.mk" -o \
	$i = "package/pkg-luarocks.mk" -o \
	$i = "package/pkg-perl.mk" -o \
	$i = "package/pkg-python.mk" -o \
	$i = "package/pkg-rebar.mk" -o \
	$i = "package/pkg-virtual.mk" -o \
	$i = "package/pkg-download.mk" -o \
	$i = "package/pkg-generic.mk" -o \
	$i = "package/pkg-waf.mk" -o \
	$i = "package/pkg-kernel-module.mk" -o \
	$i = "package/pkg-utils.mk" -o \
	$i = "toolchain/toolchain-external/pkg-toolchain-external.mk" -o \
	$i = "toolchain/toolchain-external/toolchain-external.mk" -o \
	$i = "toolchain/toolchain.mk" -o \
	$i = "toolchain/helpers.mk" -o \
	$i = "toolchain/toolchain-wrapper.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 "\(kconfig-package\)" $i > /dev/null ; then
	infratype="kconfig"
	hastarget=1
    fi

    if grep -E "\(host-luarocks-package\)" $i > /dev/null ; then
	infratype="luarocks"
	hashost=1
    fi

    if grep -E "\(luarocks-package\)" $i > /dev/null ; then
	infratype="luarocks"
	hastarget=1
    fi

    if grep -E "\(host-perl-package\)" $i > /dev/null ; then
	infratype="perl"
	hashost=1
    fi

    if grep -E "\(perl-package\)" $i > /dev/null ; then
	infratype="perl"
	hastarget=1
    fi

    if grep -E "\(host-python-package\)" $i > /dev/null ; then
	infratype="python"
	hashost=1
    fi

    if grep -E "\(python-package\)" $i > /dev/null ; then
	infratype="python"
	hastarget=1
    fi

    if grep -E "\(host-rebar-package\)" $i > /dev/null ; then
	infratype="rebar"
	hashost=1
    fi

    if grep -E "\(rebar-package\)" $i > /dev/null ; then
	infratype="rebar"
	hastarget=1
    fi

    if grep -E "\(host-virtual-package\)" $i > /dev/null ; then
	infratype="virtual"
	hashost=1
    fi

    if grep -E "\(virtual-package\)" $i > /dev/null ; then
	infratype="virtual"
	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

    if grep -E "\(toolchain-external-package\)" $i > /dev/null ; then
	infratype="toolchain-external"
	hastarget=1
    fi

    pkg=$(basename $i)
    dir=$(dirname $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} = "kconfig" ]; then
	kconfig_packages=$(($kconfig_packages+1))
    elif [ ${infratype} = "luarocks" ]; then
	luarocks_packages=$(($luarocks_packages+1))
    elif [ ${infratype} = "perl" ]; then
	perl_packages=$(($perl_packages+1))
    elif [ ${infratype} = "python" ]; then
	python_packages=$(($python_packages+1))
    elif [ ${infratype} = "rebar" ]; then
	rebar_packages=$(($rebar_packages+1))
    elif [ ${infratype} = "virtual" ]; then
	virtual_packages=$(($virtual_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

    if test -f ${dir}/${pkg}.hash; then
	packages_with_hash_file=$(($packages_with_hash_file+1))
	hash_file=1
    else
	packages_without_hash_file=$(($packages_without_hash_file+1))
	hash_file=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

    if [ ${hash_file} -eq 0 ] ; then
	echo "<td class=\"centered wrong\">No</td>"
    else
	echo "<td class=\"centered correct\">Yes</td>"
    fi

    file_list=$(find ${package_dir} -name '*.mk' -o -name '*.in*' -o -name '*.hash')
    nwarnings=$(./support/scripts/check-package ${file_list} 2>&1 | sed '/\([0-9]*\) warnings generated/!d; s//\1/')
    if [ ${nwarnings} -eq 0 ] ; then
	echo "<td class=\"centered correct\">${nwarnings}</td>"
    else
	echo "<td class=\"centered wrong\">${nwarnings}</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 using the <i>luarocks</i> infrastructure</td>"
echo "<td>$luarocks_packages</td>"
echo "</tr>"
echo "<tr>"
echo "<td>Packages using the <i>kconfig</i> infrastructure</td>"
echo "<td>$kconfig_packages</td>"
echo "</tr>"
echo "<tr>"
echo "<td>Packages using the <i>perl</i> infrastructure</td>"
echo "<td>$perl_packages</td>"
echo "</tr>"
echo "<tr>"
echo "<td>Packages using the <i>python</i> infrastructure</td>"
echo "<td>$python_packages</td>"
echo "</tr>"
echo "<tr>"
echo "<td>Packages using the <i>rebar</i> infrastructure</td>"
echo "<td>$rebar_packages</td>"
echo "</tr>"
echo "<tr>"
echo "<td>Packages using the <i>virtual</i> infrastructure</td>"
echo "<td>$virtual_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>Packages having hash file</td>"
echo "<td>$packages_with_hash_file</td>"
echo "</tr>"
echo "<tr>"
echo "<td>Packages not having hash file</td>"
echo "<td>$packages_without_hash_file</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>"
