#!/bin/sh
#Barry Kauler 2007
#this script creates the PET packages from the directories.
#it also creates a database package, with info about all the other packages.

#current dir must be puppy-unleashed
PUPPYVERSION="`cat rootfs-complete/etc/puppyversion`"
DIGIT1="`echo "$PUPPYVERSION" | cut -b 1`"
DIGIT2="`echo "$PUPPYVERSION" | cut -b 2`"
DIGIT3="`echo "$PUPPYVERSION" | cut -b 3`"
#mkdir -p rootfs-complete/root/.packages/sfsfile
#DESTINFODIR="rootfs-complete/root/.packages/sfsfile"
DESTINFODIR="packages/0pkgs_db-${DIGIT1}.${DIGIT2}${DIGIT3}/root/.packages/unleashed"

mkdir -p $DESTINFODIR
rm -rf $DESTINFODIR
mkdir $DESTINFODIR

installpkginfofunc () {
 ONEDIR0=""
 APATTERN="s/packages\/$APKGNAME//g"
 #a problem, if pkg has a symbolic link to an absolute path to a file, that is not yet
 #installed, it won't be included in the .files file...
 #so, instead of "-xtype f" will have two finds...
 #finds regular files only...
 PKGFILES="`find packages/$APKGNAME -type f -mount -mindepth 2 | sed -e "$APATTERN" | sed -e 's/\/root0\//\/root\//g'`"
 #this reduces the size of .files file...
 for ONEFILE in $PKGFILES
 do
  ONEBASE="`basename $ONEFILE`"
  ONEDIR1="`dirname $ONEFILE`"
  if [ "$ONEDIR0" = "$ONEDIR1" ];then
   #do not write the path...
   echo "$ONEBASE" >> $DESTINFODIR/$APKGNAME.files
  else
   echo "$ONEFILE" >> $DESTINFODIR/$APKGNAME.files
  fi
  ONEDIR0="$ONEDIR1"
 done
 sync

 #finds symbolic links only...
 PKGFILES="`find packages/$APKGNAME -type l -mount -mindepth 2 | sed -e "$APATTERN" | sed -e 's/\/root0\//\/root\//g'`"
 #this reduces the size of .files file...
 for ONEFILE in $PKGFILES
 do
  ONEBASE="`basename $ONEFILE`"
  ONEDIR1="`dirname $ONEFILE`"
  if [ "$ONEDIR0" = "$ONEDIR1" ];then
   #do not write the path...
   echo "$ONEBASE" >> $DESTINFODIR/$APKGNAME.files
  else
   echo "$ONEFILE" >> $DESTINFODIR/$APKGNAME.files
  fi
  ONEDIR0="$ONEDIR1"
 done
 sync

 if [ -f packages/$APKGNAME/puninstall.sh ];then
  cp packages/$APKGNAME/puninstall.sh $DESTINFODIR/$APKGNAME.remove
 fi
 if [ -f packages/$APKGNAME/keyword ];then
  cp packages/$APKGNAME/keyword $DESTINFODIR/$APKGNAME.keyword
 fi

 #these images must be in .files file so can be uninstalled...
 for ONEIMAGEFILE in `ls -1 packages/$APKGNAME/*[0-9].xpm 2>/dev/null`
 do
  BASEONEIMAGE="`basename $ONEIMAGEFILE`"
  echo "/usr/local/lib/X11/pixmaps/$BASEONEIMAGE" >> $DESTINFODIR/$APKGNAME.files
 done
 for ONEIMAGEFILE in `ls -1 packages/$APKGNAME/*[0-9].png 2>/dev/null`
 do
  BASEONEIMAGE="`basename $ONEIMAGEFILE`"
  echo "/usr/local/lib/X11/pixmaps/$BASEONEIMAGE" >> $DESTINFODIR/$APKGNAME.files
 done
 for ONEIMAGEFILE in `ls -1 packages/$APKGNAME/*[^0-9].xpm 2>/dev/null`
 do
  BASEONEIMAGE="`basename $ONEIMAGEFILE`"
  echo "/usr/local/lib/X11/mini-icons/$BASEONEIMAGE" >> $DESTINFODIR/$APKGNAME.files
 done
} #end installpkginfofunc()


cd packages
ALLPACKAGES="`ls -1 | tr "\n" " "`"
cd ..

echo "Installing pkg info to $DESTINFODIR..."
for APKGNAME in $ALLPACKAGES
do
 ##select "on" packages...
 #FPATTERN="^\"${APKGNAME}\""
 #if [ ! "`cat rootfs-complete/root/.packages/packages.txt | grep "$FPATTERN" | grep '" on "'`" = "" ];then
 echo "Installing pkg info for $APKGNAME..."
 installpkginfofunc
 #fi
done
sync

#now create all the pupget tarballs...
echo "Creating pupget tarballs..."
cd packages
PETDIR="../../pet-packages"
mkdir -p ../../pet-packages
#rm -f ../../pet-packages/*.tar.gz 2>/dev/null
#rm -f ../../pet-packages/*.pet 2>/dev/null
DIRENTRIES="`ls -1 | tr "\n" " "`"
for ONEENTRY in $DIRENTRIES
do
 [ -f $PETDIR/$ONEENTRY.pet ] && continue
 if [ -d ./$ONEENTRY ];then
   echo "Making $ONEENTRY PET package..."
   tar -c -f $ONEENTRY.tar $ONEENTRY/
   sync
   gzip $ONEENTRY.tar
   sync
   tgz2pet $ONEENTRY.tar.gz
   sync
   mv ./$ONEENTRY.pet $PETDIR
   sync
 fi
done
#remove one of them...
rm $PETDIR/0pkgs_db-${DIGIT1}.${DIGIT2}${DIGIT3}.pet
cd ..

#calc all the md5sums...
ALLPKGS="`ls -1 ../pet-packages/ | grep ".pet$"`"

> md5sums-pet-packages.txt
for ONEPKG in $ALLPKGS
do
 md5sum ../pet-packages/$ONEPKG | sed -e 's/..\/pet-packages/pet-packages/g' >> 0md5sums-pet-packages.txt
 sync
done

cp 0md5sums-pet-packages.txt $DESTINFODIR

#now create 0pkgs_db-x.x.x as a pkg...
echo "Creating 0pkgs_db-${DIGIT1}.${DIGIT2}${DIGIT3} database pkg..."
cd packages
ONEENTRY="0pkgs_db-${DIGIT1}.${DIGIT2}${DIGIT3}"
tar -c -f $ONEENTRY.tar $ONEENTRY/
sync
gzip $ONEENTRY.tar
sync
tgz2pet $ONEENTRY.tar.gz
sync
mv ./$ONEENTRY.pet $PETDIR
sync
cd ..

###END###
