#! /bin/sh
# Package Rebuild  -  @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


##### =====================      tools    =========================  #####
. /usr/local/libexec/package-library

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

fn_package_scan() {
  echoc CYAN "(*) scanning filesystem"

  # Hold your horses
  echoc GREEN -n "> syncing disks ..."
  sync ; sleep 2
  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 -newer $MILESTONE >>$CHANGETEMP
  echo -n " var "   ; find /var  -cnewer $MILESTONE -newer $MILESTONE >>$CHANGETEMP
  echo -n " bin "   ; find /bin  -cnewer $MILESTONE -newer $MILESTONE >>$CHANGETEMP
  echo -n " etc "   ; find /etc  -cnewer $MILESTONE -newer $MILESTONE >>$CHANGETEMP
  echo -n " lib "   ; find /lib  -cnewer $MILESTONE -newer $MILESTONE >>$CHANGETEMP
  echo -n " root "  ; find /root -cnewer $MILESTONE -newer $MILESTONE >>$CHANGETEMP
  echo -n " sbin "  ; find /sbin -cnewer $MILESTONE -newer $MILESTONE >>$CHANGETEMP
  echo -n " usr "   ; find /usr  -cnewer $MILESTONE -newer $MILESTONE | grep -v "^/usr/src" | grep -v "^/usr/local/src" >>$CHANGETEMP
  echo -n " opt "   ; find /opt  -cnewer $MILESTONE -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"
  edit $CHANGELIST
  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 Rebuild 2.0.0"
echo "======================================================================"

# Constants
DIST_VERSION="/etc/badpenguin/release"
PACKAGE_CONF="/etc/badpenguin/bpp/package.conf"

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

# Define package subdirs
fn_read_settings
#export SOURCE_DEPOTS
#export PKG_SRCDEPOT
#export PKG_WORKDIR
#export PKGROOT="$PKG_PORTSDIR/$1"
export PKGROOT="`findport $PKG_PORTSDIR $1`"
export PKGINST="$PKGROOT/install"
export PKGINFO="$PKGINST/INFO"
export PKGPATCH="$PKGINST/patches"
export PKGCOMPILE="$PKGINST/compile"
export PKGSCRIPT="$PKGINST/scripts"
fn_read_info

# Check stucture
for i in $PKGROOT $PKGINST $PKGCOMPILE $PKGCOMPILE/COMPILE $PKGINFO ; 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
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 here"
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
echo "----------------------------------------------------------------------"

# Check if some other parameters
if [ "$2" != "" ]; then
  echoc GREEN "! package successfully compiled."
  exit 0
fi

# Scan Package
if [ -f "$PKGCOMPILE/NOREPACK" ]; then
  # this is set inside of COMPILE by the mantainer
  exec package-build "$1" "norepack"
fi
if [ ! -f $PKGINST/MANIFEST ]; then
  fn_package_scan
  exec package-repack  "$1"  "$CHANGELIST"
else
  echoc GREEN "- using MANIFEST file to repack, scanning has been skipped"
  exec package-repack  "$1"  "$PKGINST/MANIFEST"
fi
exit 0
