#!/bin/sh
# bpp-build @2000-2 by Antonio Gallo

# include bpp library
. /usr/libexec/bpp-functions

# Init vars
[ "$BPPROOT" = "" ] && BPPROOT=/badpenguin

# First of all try to guess about which package we are talking about :-)
if [ -f "$1/install/INFO" ]; then
  PKGROOT="$1"
elif [ -f "`pwd`/install/INFO" ]; then
  PKGROOT="`pwd`"
elif [ -f "$BPPROOT/$1/install/INFO" ]; then
  PKGROOT="$BPPROOT/$1"
else
  echoc RED "bpp-make: it was impossibile to find the directory where is"
  echoc RED "          the package to install. Use it as option"
  exit 1
fi

# Set system variable
PKGINST=${PKGROOT}/install
PKGINFO=${PKGROOT}/install/INFO
WORKDIR=${PKGROOT}/workdir
[ ! -d $PKGINST ] && mkdir -p $PKGINST
[ ! -d $WORKDIR ] && mkdir -p $WORKDIR

# Load package settings
if [ ! -f "$PKGINFO" ]; then
  echoc RED "bpp-make: info file not found ($PKGINFO)"
  exit 1
fi
. "$PKGINFO"


# Other vars
PKGFULLNAME="${PACKAGE}_${VERSION}"
echo "bpp-build: $PKGFULLNAME in $SECTION"


# SQUUEZE
cd "$PKGROOT"
squeeze .
rm -f "$PKGFULLNAME.txt"  "$PKGFULLNAME.tmp"  "$PKGFULLNAME.bpp"


# set package info
fn_clean_INFO  "$PKGINFO"
echo "# Automatically added by bpp-build" >>$PKGINFO
echo "OS_Name=\"`uname -s`\""               >>$PKGINFO
echo "OS_Version=\"`uname -r`\""            >>$PKGINFO
echo "OS_Vendor=\"head -1 /etc/badpenguin\""            >>$PKGINFO
echo "OS_HostName=\"`hostname --long`\""    >>$PKGINFO
echo "OS_HostTime=\"`date`\""               >>$PKGINFO
echo "OS_UnixTime=\"`date +%s`\""           >>$PKGINFO
echo "BPP_Builder=\"$BPP_VERSION\""         >>$PKGINFO


# Total disk usage
echo "- computing diskusage"
for i in * ; do
  [ ! -d "$i" ] && continue
  BASEDIR="`basename $i`"
  case $BASEDIR in
    usr) continue;;
    install) continue;;
    incoming) continue;;
    workdir) continue;;
  esac
  echo "DISK_USAGE=\"`cd $PKGROOT ; du -s -l -k $BASEDIR `\"" >>$PKGINFO
done
if [ -d usr ]; then
  for i in usr/* ; do
    [ ! -d "$i" ] && continue
    BASEDIR="usr/`basename $i`"
    echo "DISK_USAGE=\"`du -s -l -k $BASEDIR `\"" >>$PKGINFO
  done
fi

# Diskusage
DU1=`du -s -l -k | cut -f 1`
DU2=`du -s -l -k workdir 2>/dev/null | cut -f 1`
[ "$DU2" = "" ] && DU2=0
DISKUSAGE=`expr $DU1 - $DU2`
echo "INSTALLED_SIZE=$DISKUSAGE" >>$PKGINFO
echo "- unpacked package size $DISKUSAGE KB"


echo "- computing MD5 checksums"
MD5MANIFEST=$PKGINST/MD5MANIFEST
MD5TEMP=workdir/.md5temp
> $PKGINST/MD5MANIFEST
find . -type f -perm +111 >$MD5TEMP
cat $MD5TEMP | grep -v "^./install" | grep -v "^./workdir" | while read f 
do
  [ "$f" = "" ] && continue
  md5sum "$f" >>$PKGINST/MD5MANIFEST 
done
rm -f $PKGINST/.md5temp
gzip -9f $PKGINST/MD5MANIFEST

# Preparing new manifest
echo -n "- preparing MANIFEST: "
find | cut -b 3- | grep -v "^$" | grep -v "^install" | grep -v "^workdir" | grep -v "^Makefile" | sort  >install/MANIFEST
cat install/MANIFEST | wc -l 


echo -n "- packaging: "
rm -f install/*.tmp

echo -n "install"
tar -p -f "${PKGFULLNAME}.tmp" -c install/
if [ $? -ne 0 ] ; then 
  echoc RED "$0: error while tarring"
  exit 1
fi

for i in * ; do
  [ ! -d $i ] && continue
  [ "$i" = "" ] && continue
  [ "$i" = "install" ] && continue
  [ "$i" = "workdir" ] && continue
  echo -n ", $i"
  tar -p -f "${PKGFULLNAME}.tmp" -r "$i/"
  if [ $? -ne 0 ] ; then 
    echoc RED "$0: error while tarring"
    exit 1
  fi
done
echo " : done"

FSIZEB=`filesize $PKGFULLNAME.tmp`
FSIZEK=`expr $FSIZEB / 1024`
echo "- compressing $FSIZEK KB ..."
gzip -9 "${PKGFULLNAME}.tmp" -S .bpp
if [ $? -ne 0 ] ; then 
  echoc RED "$0: error while gzipping"
  exit 1
fi
mv -f "${PKGFULLNAME}.tmp.bpp"  "${PKGFULLNAME}.bpp"
cp install/INFO "$PKGFULLNAME.txt"
if [ $? -ne 0 ] ; then 
  echoc "$0: unable to create txt info file"
  exit 1
fi

# Show result  
FSIZEB=`filesize $PKGFULLNAME.bpp`
FSIZEK=`expr $FSIZEB / 1024`
echoc GREEN "bpp-build: $FSIZEK KB ready in $PKGFULLNAME.bpp"

