#!/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>
<script src=\"https://www.kryogenix.org/code/browser/sorttable/sorttable.js\"></script>
<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/>

<p id=\"sortable_hint\"></p>

<table class=\"sortable\">
<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
waf_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 = "package/nvidia-tegra23/nvidia-tegra23.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

    if grep -E "\(waf-package\)" $i > /dev/null ; then
	infratype="waf"
	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))
    elif [ ${infratype} = "waf" ]; then
	waf_packages=$(($waf_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=$(./utils/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 using the <i>waf</i> infrastructure</td>"
echo "<td>$waf_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 "<script>
if (typeof sorttable === \"object\") {
  document.getElementById(\"sortable_hint\").innerHTML =
  \"hint: the table can be sorted by clicking the column headers\"
}
</script>
"
echo "</html>"
