#! /bin/sh
# Package Compile  -  @2000 by Antonio Gallo
# agx@linux.it - www.badpenguin.org - www.linux.it/~agx
# 20 May 2000, This script is used to help a mantainer to create
#              a package to be used on Bad Penguin.
# Requirements: awk, cat, du, grep
# Mon Jul 17 20:58:43 2000, can build packages without source
# Mon Aug 21 23:07:05 2000, contribution from Biagio Lucini
# Mon Sep 11 21:58:44 2000, updated to 2.0.3 format
# Sun Jun 24 08:49:24 2001, renamed from package-rebuild


##### =====================      tools    =========================  #####
. /usr/local/libexec/package-library
MYVERSION="2.2.0"

##### =====================   fn_package_scan          =========================  #####

fn_package_scan() {
  echoc CYAN "(*) scanning filesystem to create a reasonable MANIFEST file"

  # Hold your horses
  echo -n "> syncing disks, wait 3 or more seconds... "
  sync ; sleep 3 ; sync
  echo "done."
   
  # Scanning ...
  echo "> finding changes into the filesystem ... "
  echo "# Package Create - scanning on `date` " >$CHANGETEMP
  echo "# Please, edit this file removing comment and unwanted entries " >>$CHANGETEMP
  echoc GREEN -n "> Scanning : "
  echo -n " boot "  ; find /boot -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo -n " var "   ; find /var  -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo -n " bin "   ; find /bin  -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo -n " etc "   ; find /etc  -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo -n " lib "   ; find /lib  -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo -n " root "  ; find /root -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo -n " sbin "  ; find /sbin -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo -n " usr "   ; find /usr  -cnewer $MILESTONE -o -newer $MILESTONE >>$CHANGETEMP
  echo -n " opt "   ; find /opt  -cnewer $MILESTONE -o -newer $MILESTONE | grep -v "^/opt/badpenguin" >>$CHANGETEMP
  echo ", sorting... "
  cat $CHANGETEMP | grep -v "^$PKGROOT" | sort > $CHANGELIST
  rm -f $CHANGETEMP
  echoc GREEN -n "? press ENTER to edit the file with the list of changes"
  vi $CHANGELIST
  if [ $? -eq 0 ]; then
    echoc YELLOW "> creating a new MANIFEST"
    mv -fv $CHANGELIST "$PKGINST/MANIFEST"
  fi
  if [ ! -f "$PKGINST/MANIFEST" ]; then
    echoc YELLOW "> creating a new MANIFEST"
    mv -fv $CHANGELIST "$PKGINST/MANIFEST"
  fi
  echo "- $CHANGELIST done"
  # TODO: This is a test ... removing milestone at the end of each scan
  rm -f $MILESTONE
}



##### =====================   M  A  I  N   =========================  #####

# Banner
echo "======================================================================"
echoc CYAN  "Bad Penguin - Package Compile $MYVERSION"
echo "======================================================================"

# Check Parameters
if [ "$1" = "" ]; then
  echoc RED "package-rebuild: need at least 1 argument !"
  exit 1
fi

# Define package subdirs
fn_read_settings $1
fn_read_pkginfo
fn_check_pkgdir

# Check stucture
for i in $PKGCOMPILE $PKGCOMPILE/COMPILE ; do
  if [ ! -e $i ]; then
    echoc RED "! $i does not exists"
    exit 1
  fi
done
if [ ! -x "$PKGCOMPILE/COMPILE" ]; then
  chmod 700 "$PKGCOMPILE/COMPILE"
fi

# Others
export MILESTONE="$PKGINST/.milestone"
CHANGELIST="$PKGINST/.changelist"
CHANGETEMP="$PKGINST/.changetemp"

# Globals
if [ ! -f $PKGCOMPILE/COMPILE ]; then
  echoc YELLOW "! $PKGCOMPILE/COMPILE not found, skipping ..."
  exit 1
fi

# MILESTONE
if [ ! -f "$MILESTONE" ]; then
  echoc GREEN "> creating MILESTONE"
  >"$MILESTONE"
else
  echo "- MILESTONE is already there"
fi

# RUN COMPILE SCRIPT
echoc CYAN "> running COMPILE"
echo "----------------------------------------------------------------------"
( cd $PKG_WORKDIR && $PKGCOMPILE/COMPILE )
REPLY=$?
if [ $REPLY -ne 0 ]; then
  echoc RED "! COMPILE has returned with error nr. $REPLY"
  exit 1
fi
echoc GREEN "! package successfully compiled."

if [ ! -f $PKGINST/MANIFEST ]; then
  echo "----------------------------------------------------------------------"
  fn_package_scan
  echo "----------------------------------------------------------------------"
  exec package-repack  "$1"  "$PKGINST/MANIFEST"  "nobuild"
fi
exit 0
