#! /bin/sh
# Package Repack - @2000 by Antonio Gallo
# agx@linux.it - www.badpenguin.org - www.linux.it/~agx
# 11 Sep 2000, This script is used to rebuild a .bpp package
#              using his port directory but taking modified
#              files from the root filesystem

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

##### =====================   fn_package_pack          =========================  #####

fn_package_pack() {
  echoc CYAN "(*) packing files from filesystem"
  # Check changelist  
  if grep -q "^#" $CHANGELIST ; then
    echoc RED "! please remove ANY comments from $CHANGELIST, then try it again"
    exit 1
  fi
  # Pack
  echo "> analizyng file ..."
  cat $CHANGELIST | grep -v "^install" | grep -v "^incoming" >${CHANGELIST}.temp1
  echo "> analizyng incoming ..."
  cat $CHANGELIST | grep "^incoming/" | cut -b 10- >>${CHANGELIST}.temp1
  echo "> buildind the packing list ..."
  rm -f ${CHANGELIST}.temp3
  >${CHANGELIST}.temp2
  cat ${CHANGELIST}.temp1 | while read CFILE ; do
    if [ ! -d "/$CFILE" ]; then
      if [ -e "/$CFILE" ]; then
        echo "/$CFILE" >>${CHANGELIST}.temp2
      else
        # DOES NOT EXISTS ... try to zip
	case $CFILE in
	  *.gz)
            BASENAME="/`dirname $CFILE`/`basename $CFILE .gz`"
            if [ -f $BASENAME ]; then
              echoc YELLOW "> compressing $BASENAME"
              gzip -9 $BASENAME
            fi
            ;;
	  *)
	    ;;
        esac
        if [ -e "/$CFILE" ]; then
          continue
        fi
	# SORRY ... i have to give up
        echoc YELLOW "! /$CFILE does not exists !"
	touch ${CHANGELIST}.temp3
	exit
      fi
    fi
  done
  # Check for any error
  if [ -f ${CHANGELIST}.temp3 ]; then
    echoc RED "! cannot continue with missed files"
    exit 1
  fi
  #  
  echo "> gathering files from the root filesystem ..."
  tar -O -p -T ${CHANGELIST}.temp2 -c | tar -v -x -p -C $PKGROOT
  if [ $? -ne 0 ]; then
    echoc RED "! error while gathering files from the filesystem"
    exit 1
  fi
  rm -f ${CHANGELIST}.temp1 ${CHANGELIST}.temp2 ${CHANGELIST}.temp3
  echo "  done." 
}


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

# Banner
echo "======================================================================"
echoc CYAN  "Bad Penguin - Package RePack 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-repack: need at least 1 argument !"
  exit 1
fi

# Define package subdirs
fn_read_settings
#PKGROOT="$PKG_PORTSDIR/$1"
PKGROOT="`findport $PKG_PORTSDIR $1`"
PKGINST="$PKGROOT/install"
PKGINFO="$PKGINST/INFO"
PKGPATCH="$PKGINST/patches"
PKGCOMPILE="$PKGINST/compile"
PKGSCRIPT="$PKGINST/scripts"
if [ "$2" = "" ]; then
  CHANGELIST="$PKGINST/MANIFEST"
else
  CHANGELIST="$2"
fi
fn_read_info

# Checking
for i in $PKGROOT $PKGINST $PKGINFO $CHANGELIST ; do
  if [ ! -e $i ]; then
    echoc RED "! $i does not exists, unable to continue"
    exit 1
  fi
done

# Globals
fn_package_pack
if [ "$3" != "nobuild" ]; then
  echoc GREEN "> building ...."
  exec package-build "$1" "norepack"
fi
echoc GREEN "  done."
exit 0
