#! /bin/sh
# Package Build  -  @2000 by Antonio Gallo
# agx@linux.it - www.badpenguin.org - www.linux.it/~agx
# 19 June 2000, This script is used to build a .bpp 
# package from a directory structure.

# Announce
echo "----------------------------------------------------------------------"
echoc CYAN "Bad Penguin - Package Build $PKG_VERSION"
# Check parameters
TEMPDIR="$1"
if [ "$TEMPDIR" = "" ]; then
    echoc RED "Sorry, you didn't specified a temporary directory"
    exit 1
fi
# Include BPP options
echo "- Reading package.conf"
. /etc/badpenguin/bpp/package.conf

# Checking BPP structure
echo "- Checking package structure"
if [ ! -d $TEMPDIR ]; then
    echoc RED "! Main package directory not found"
    exit 1
fi
TEMPINST="$TEMPDIR/install"
if [ ! -d $TEMPINST ]; then
    echoc RED "! Main package install directory not found"
    exit 1
fi
# Checking files
for f in  CONFLICTS  DESCRIPTION  INFO  REQUEST  SOURCEFILES \
           SOURCEINFO SOURCEMIRRORS  SOURCEREQUEST
do
    if [ ! -f $TEMPINST/$f ]; then
	echoc RED "! Required file $f not found under $TEMPINST"
        exit 1
    fi
done    
# Checking INFO
. "$TEMPINST/INFO"
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 ..."
FULLNAME="${SONAME}_${VERSION}"
( cd $TEMPDIR ; rm -f *.tar *.gz *.tgz *.bpp install/MANIFEST* install/AUTOBUILD *.lsm $FULLNAME )
find  $TEMPDIR \( -name \*~ -or -name \*\# \) -exec rm -vf {} \;

echo "- Preparing BUILDINFO"
echo "OS=\"`uname`\"" 				>"$TEMPINST/BUILDINFO"
echo "DISTRIBUTION=\"Bad Penguin 0.6.0pre2\""	>>"$TEMPINST/BUILDINFO"
echo "BUILDHOST=\"`hostname`.`domainname`\""	>>"$TEMPINST/BUILDINFO"
echo "BUILDTIME=\"`date`\"" 			>>"$TEMPINST/BUILDINFO"
echo "BPPVERSION=\"$PKG_VERSION\""		>>"$TEMPINST/BUILDINFO"

echo "- Preparing DISKUSAGES"
( cd $TEMPDIR ; du -s -k * ) | grep -v install | tee >$TEMPINST/DISKUSAGES
DISKUSAGE=`du $TEMPDIR -s -b | cut -d / -f 1`
echoc GREEN "- Disk usage of this package is $DISKUSAGE bytes"
grep -v "^DISKUSAGE" "$TEMPINST/INFO" > "$TEMPINST/INFO~"
mv "$TEMPINST/INFO~" "$TEMPINST/INFO"
echo "DISKUSAGE=$DISKUSAGE" >>"$TEMPINST/INFO"
( cd $TEMPDIR ; du * -s -b | grep -v install | grep -v incoming | grep -v usr > install/DISKUSAGES )
if [ -d $TEMPDIR/usr ]; then
  ( cd $TEMPDIR ; du usr/* -s -b >> install/DISKUSAGES )
fi

echo "- Calculating MD5 Checksums ..."
>$TEMPINST/MD5SUM
( cd $TEMPDIR ; find . -type f -perm +111 1>$TEMPINST/MD5TEMP ) 
( cat $TEMPINST/MD5TEMP ; echo ) | while read f
do
    [ "$f" = "" ] && continue
    ( cd $TEMPDIR ; md5sum "$f" >>$TEMPINST/MD5SUM )
done
rm -f $TEMPINST/MD5TEMP
cat $TEMPINST/MD5SUM
gzip -9f $TEMPINST/MD5SUM

# Preparing TAR archive
echoc GREEN "- Tarring ..."
( cd $TEMPDIR ; tar  --sparse  --verify  -p  -f $FULLNAME  -c * )
if [ $? -ne 0 ] ; then 
  echo " * * *  T A R - E R R O R  * * *"
  exit 1
fi
# Removing some files
echo "- Removing dot files ..."
( cd $TEMPDIR ; tar -v -f "$TEMPDIR/$FULLNAME" --delete install/.[a-z]* )
if [ $? -ne 0 ] ; then 
  echo " * * *  T A R (u) - E R R O R  * * *"
  exit 1
fi
# Creating Manifest
echo "- Creating MANIFEST file"
rm -f $TEMPINST/MANIFEST
tar -tf "$TEMPDIR/$FULLNAME" > "$TEMPINST/MANIFEST"
# Adding Manifest
echo "- Appending MANIFEST ..."
( cd $TEMPDIR ; tar -f "$TEMPDIR/$FULLNAME" -u install/MANIFEST )
if [ $? -ne 0 ] ; then 
  echo " * * *  T A R (u) - E R R O R  * * *"
  exit 1
fi
# Compressing Package
echo "- Gzipping ..."
( cd $TEMPDIR ; gzip -v9 -S .bpp $FULLNAME )
if [ $? -ne 0 ] ; then
  echo " * * *  G Z I P - E R R O R  * * *"
  exit 1
fi
#
echoc GREEN "Package $FULLNAME has been successfully builded." 

exit
