#!/bin/sh

# Used to find files installed in sysroot which are not tracked by sstate manifest

# Global vars
tmpdir=

usage () {
  cat << EOF
Welcome to sysroot cruft finding utility.
$0 <OPTION>

Options:
  -h, --help
        Display this help and exit.

  --tmpdir=<tmpdir>
        Specify tmpdir, will use the environment variable TMPDIR if it is not specified.
	Something like /OE/oe-core/tmp-eglibc (no / at the end).

  --whitelist=<whitelist-file>
        Text file, each line is regular expression for paths we want to ignore in resulting diff.
        You can use diff file from the script output, if it contains only expected exceptions.
        '#' is used as regexp delimiter, so you don't need to prefix forward slashes in paths.
        ^ and $ is automatically added, so provide only the middle part.
        Lines starting with '#' are ignored as comments.
        All paths are relative to "sysroots" directory.
        Directories don't end with forward slash.
EOF
}

# Print error information and exit.
echo_error () {
  echo "ERROR: $1" >&2
  exit 1
}

while [ -n "$1" ]; do
  case $1 in
    --tmpdir=*)
      tmpdir=`echo $1 | sed -e 's#^--tmpdir=##' | xargs readlink -e`
      [ -d "$tmpdir" ] || echo_error "Invalid argument to --tmpdir"
      shift
        ;;
    --whitelist=*)
      fwhitelist=`echo $1 | sed -e 's#^--whitelist=##' | xargs readlink -e`
      [ -f "$fwhitelist" ] || echo_error "Invalid argument to --whitelist"
      shift
        ;;
    --help|-h)
      usage
      exit 0
        ;;
    *)
      echo "Invalid arguments $*"
      echo_error "Try '$0 -h' for more information."
        ;;
  esac
done

# sstate cache directory, use environment variable TMPDIR
# if it was not specified, otherwise, error.
[ -n "$tmpdir" ] || tmpdir=$TMPDIR
[ -n "$tmpdir" ] || echo_error "No tmpdir found!"
[ -d "$tmpdir" ] || echo_error "Invalid tmpdir \"$tmpdir\""

OUTPUT=${tmpdir}/sysroot.cruft.`date "+%s"`

# top level directories
WHITELIST="[^/]*"

# generated by base-passwd recipe
WHITELIST="${WHITELIST} \
  .*/etc/group-\? \
  .*/etc/passwd-\? \
"
# generated by pseudo-native
WHITELIST="${WHITELIST} \
  .*/var/pseudo \
  .*/var/pseudo/[^/]* \
"

# generated by package.bbclass:SHLIBSDIRS = "${PKGDATA_DIR}/${MLPREFIX}shlibs"
WHITELIST="${WHITELIST} \
  .*/shlibs \
  .*/pkgdata \
"

# generated by python
WHITELIST="${WHITELIST} \
  .*\.pyc \
  .*\.pyo \
  .*/__pycache__ \
"

# generated by lua
WHITELIST="${WHITELIST} \
  .*\.luac \
"

# generated by sgml-common-native
WHITELIST="${WHITELIST} \
  .*/etc/sgml/sgml-docbook.bak \
"

# generated by php
WHITELIST="${WHITELIST} \
  .*/usr/lib/php5/php/.channels/.* \
  .*/usr/lib/php5/php/.registry/.* \
  .*/usr/lib/php5/php/.depdb \
  .*/usr/lib/php5/php/.depdblock \
  .*/usr/lib/php5/php/.filemap \
  .*/usr/lib/php5/php/.lock \
"

# generated by toolchain
WHITELIST="${WHITELIST} \
  [^/]*-tcbootstrap/lib \
"

# generated by useradd.bbclass
WHITELIST="${WHITELIST} \
  [^/]*/home \
  [^/]*/home/xuser \
  [^/]*/home/xuser/.bashrc \
  [^/]*/home/xuser/.profile \
  [^/]*/home/builder \
  [^/]*/home/builder/.bashrc \
  [^/]*/home/builder/.profile \
"

# generated by image.py for WIC
# introduced in oe-core commit 861ce6c5d4836df1a783be3b01d2de56117c9863
WHITELIST="${WHITELIST} \
  [^/]*/imgdata \
  [^/]*/imgdata/[^/]*\.env \
"

# generated by fontcache.bbclass
WHITELIST="${WHITELIST} \
  .*/var/cache/fontconfig/ \
"

# created by oe.utils.write_ld_so_conf which is used from few bbclasses and recipes:
# meta/classes/image-prelink.bbclass:    oe.utils.write_ld_so_conf(d)
# meta/classes/insane.bbclass:                oe.utils.write_ld_so_conf(d)
# meta/classes/insane.bbclass:                oe.utils.write_ld_so_conf(d)
# meta/recipes-gnome/gobject-introspection/gobject-introspection_1.48.0.bb:    oe.utils.write_ld_so_conf(d)
# meta/recipes-gnome/gobject-introspection/gobject-introspection_1.48.0.bb:        oe.utils.write_ld_so_conf(d)
# introduced in oe-core commit 7fd1d7e639c2ed7e0699937a5cb245c187b7c811
# and more visible since added to gobject-introspection in 10e0c1a3a452baa05d160a92a54b2e33cf0fd061
WHITELIST="${WHITELIST} \
  [^/]*/etc/ld.so.conf \
"

SYSROOTS="`readlink -f ${tmpdir}`/sysroots/"

mkdir ${OUTPUT}
find ${tmpdir}/sstate-control -name \*.populate-sysroot\* -o -name \*.populate_sysroot\* -o -name \*.package\* | xargs cat | grep sysroots | \
  sed 's#/$##g; s#///*#/#g' | \
  # work around for paths ending with / for directories and multiplied // (e.g. paths to native sysroot)
  sort | sed "s#^${SYSROOTS}##g" > ${OUTPUT}/master.list.all.txt
sort -u ${OUTPUT}/master.list.all.txt > ${OUTPUT}/master.list.txt # -u because some directories are listed for more recipes
find ${tmpdir}/sysroots/ | \
  sort | sed "s#^${SYSROOTS}##g" > ${OUTPUT}/sysroot.list.txt

diff ${OUTPUT}/master.list.all.txt ${OUTPUT}/master.list.txt > ${OUTPUT}/duplicates.txt
diff ${OUTPUT}/master.list.txt ${OUTPUT}/sysroot.list.txt > ${OUTPUT}/diff.all.txt

grep "^> ." ${OUTPUT}/diff.all.txt | sed 's/^> //g' > ${OUTPUT}/diff.txt
for item in ${WHITELIST}; do
  sed -i "\\#^${item}\$#d" ${OUTPUT}/diff.txt;
  echo "${item}" >> ${OUTPUT}/used.whitelist.txt
done

if [ -s "$fwhitelist" ] ; then
  cat $fwhitelist >> ${OUTPUT}/used.whitelist.txt
  cat $fwhitelist | grep -v '^#' | while read item; do
    sed -i "\\#^${item}\$#d" ${OUTPUT}/diff.txt;
  done
fi
# too many false positives for directories
# echo "Following files are installed in sysroot at least twice"
# cat ${OUTPUT}/duplicates

RESULT=`cat ${OUTPUT}/diff.txt | wc -l`

if [ "${RESULT}" != "0" ] ; then
  echo "ERROR: ${RESULT} issues were found."
  echo "ERROR: Following files are installed in sysroot, but not tracked by sstate:"
  cat ${OUTPUT}/diff.txt
else
  echo "INFO: All files are tracked by sstate or were explicitly ignored by this script"
fi

echo "INFO: Output written in: ${OUTPUT}"
exit ${RESULT}
