#! /bin/sh
# Package Build - @2000 by Antonio Gallo
# agx@linux.it - www.badpenguin.org - www.linux.it/~agx
# 11 Sep 2000, This script is used to build a .bpp package
#              from his port directory
# Requirements: awk, cat, du, grep, df
# Sun Jun 24 08:58:10 2001 by AGX - 2.2.0

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

##### =====================   fn_package_build       =========================  #####

fn_package_build() {
  #echoc CYAN "(*) building BPP packages"

  # Checking BPP structure
  #echo "> checking package structure"
  if [ ! -d $PKGROOT ]; then
      echoc RED "! the package main directory was not found"
      exit 1
  fi
  # Check
  if [ ! -d $PKGINST ]; then
      echoc RED "! the package install directory was not found"
      exit 1
  fi
  # Checking files
  for f in  DESCRIPTION  INFO  ; do
    if [ ! -f $PKGINST/$f ]; then
	echoc RED "! required file $f not found under $PKGINST"
      exit 1
    fi
  done    

  # Checking INFO
  #echo "> checking package infoes"
  if [ "$SONAME" = "" ]; then
    echoc RED "! SONAME is empty"
    exit 1
  fi
  if [ "$VERSION" = "" ]; then
    echoc RED "! VERSION is empty"
    exit 1
  fi

  echo "> cleaning up package root dir..."
  ( cd $PKGROOT ; rm -f *.tar *.gz *.tgz *.bpp install/MANIFEST.* install/AUTOBUILD *.lsm $FULLVERSION )
  find  $PKGROOT \( -name \*~ -or -name \*\# \) -exec rm -vf {} \;

  #echo "> preparing BUILDINFO"
  OSNAME="`uname -s`"
  OSVERSION="`uname -r`"
  DISTRIBUTION="$DISTRELEASE"
  BUILDHOST="`hostname --long`"
  BUILDTIME="`date`"
  BPPVERSION="$PKG_VERSION"

  echo -n "> preparing DISKUSAGES..."
  DISKUSAGES=""
  >$PKGINST/.usagetemp
  for i in $PKGROOT/* ; do
    [ ! -d "$i" ] && continue
    BASEDIR="`basename $i`"
    case $BASEDIR in
      usr) continue;;
      install) continue;;
      incoming) continue;;
    esac
    ( cd $PKGROOT ; du -s -b $BASEDIR ) >>$PKGINST/.usagetemp
  done
  #( cd $PKGROOT ; du -s -b * ; echo ) | grep -v install | grep -v incoming | grep -v usr | grep -v "^$" >$PKGINST/.usagetemp
  if [ -d $PKGROOT/usr ]; then
    ( cd $PKGROOT ; du usr/* -s -b ; echo ) >>$PKGINST/.usagetemp
  fi
  DISKUSAGES=`cat $PKGINST/.usagetemp | while read A B ; do
                [ "$A" = "" ] && continue
                [ "$B" = "" ] && continue
                echo -n "$A:$B "
              done`
  rm -f $PKGINST/.usagetemp
  echo "  ($DISKUSAGES)"
  # check problems
  if [ "$DISKUSAGES" = "" ]; then
    echoc RED "! the package is empty !"
    echoc YELLOW "  check what there is into $PKGROOT"
    exit 1
  fi
  
  # Diskusage
  DISKUSAGE=`du $PKGROOT -s -b | cut -d / -f 1`
  echo "- disk usage of this package is $DISKUSAGE bytes"

  # No more wars to be set then we can save the changes
  BUILDNUMBER=`expr $BUILDNUMBER + 1 `
  fn_write_pkginfo

  echo -n "> calculating MD5 Checksums..."
  >$PKGINST/MD5MANIFEST
  ( cd $PKGROOT ; find . -type f -perm +111 | grep -v "^./install/" 1>$PKGINST/.md5temp ) 
  ( cat $PKGINST/.md5temp ; echo ) | while read f
  do
    [ "$f" = "" ] && continue
    ( cd $PKGROOT ; md5sum "$f" >>$PKGINST/MD5MANIFEST )
  done
  rm -f $PKGINST/.md5temp
  #cat $PKGINST/MD5MANIFEST
  cat $PKGINST/MD5MANIFEST | wc -l 
  gzip -9f $PKGINST/MD5MANIFEST

  # Preparing new manifest
  echo -n "> preparing a new MANIFEST..."
  ( 
    cd $PKGROOT
    > install/MANIFEST
    [ -d install  ] && find install | grep -v "^$" | grep -v "^install/\."  >> install/MANIFEST
    find | cut -b 3- | grep -v "^$" | grep -v "^install/" | sort  >> install/MANIFEST
    cat install/MANIFEST | wc -l 
  )

  echo -n "> packaging..."
  ( 
    cd $PKGROOT
    tar  --exclude "install/.*"  -p -O -c * | \
    gzip -v9 -c 1>"${FULLVERSION}.bpp"
  )
  if [ $? -ne 0 ] ; then 
    echo " * * *  T A R + G Z I P - E R R O R  * * *"
    exit 1
  fi

  # Show result  
  FSIZEB=`filesize $PKGROOT/$FULLVERSION.bpp`
  FSIZEK=`expr $FSIZEB / 1024`
  echoc CYAN "- $FULLVERSION.bpp: $FSIZEK Kb"
  echoc GREEN "! package $FULLVERSION has been successfully builded." 
}

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

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

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

# Get infoes
fn_read_settings $1
fn_read_pkginfo
fn_check_pkgdir

# Build
fn_package_build
exit 0
