#!/bin/bash
# mkslapt
# 
# By Eko M. Budi, from slapt-get FAQ
# Released under GNU GPL
#

function usage() {
cat <<_EOF_
makeinfo-slapt - make slapt-get dependency info
usage: $0 [all|new|txt|md5]

all : create all meta info, then make PACKAGES.TXT and CHECKSUMS.MD5
new : create new meta info, then make PACKAGES.TXT and CHECKSUMS.MD5
txt : make PACKAGES.TXT
md5 : make CHECKSUMS.MD5

_EOF_

}

function gen_packages_txt {
    echo Making PACKAGES.TXT
    echo '' > PACKAGES.TXT
    for pkg in `find . -type f -name '*.meta' -print | sort` ; do
	cat $pkg >> PACKAGES.TXT
    done
}

function gen_md5_checksums {
    echo Making CHECKSUMS.MD5
    echo '' > CHECKSUMS.md5
    for pkg in `find . -type f -name '*.tgz' -print | sort` ; do
	md5sum $pkg >> CHECKSUMS.md5
    done
}

function gen_meta {
    if [ ! -f $1 ]; then
	    echo "File not found: $1"
	    exit 1;
    fi
    echo "Generating metafile for $pkg"
    if [ "`echo $1|grep -E '(.*{1,})\-(.*[\.\-].*[\.\-].*).tgz[ ]{0,}$'`" == "" ]; then
	return;
    fi

    # extract install info first
    rm -rf install
    if ! tar xzf $1 install; then
	if ! tar xzf $1 ./install; then
	    echo This archive does not have install information
	    exit 1
	fi     
    fi    

    # Ok, here we go ..
    NAME=$(echo $1|sed -re "s/(.*\/)(.*.tgz)$/\2/")
    LOCATION=$(echo $1|sed -re "s/(.*)\/(.*.tgz)$/\1/")
    SIZE=$( expr `gunzip -l $1 |tail -1|awk '{print $1}'` / 1024 )
    USIZE=$( expr `gunzip -l $1 |tail -1|awk '{print $2}'` / 1024 )
    REQUIRED=""
    if [ -f install/slack-required ]; then
	REQUIRED=$(cat ./install/slack-required |xargs -r -iZ echo -n "Z,"|sed -e "s/,$//")
	#echo "  required=$REQUIRED"
    fi
    CONFLICTS=""
    if [ -f install/slack-conflicts ]; then
	CONFLICTS=$(cat install/slack-conflicts |xargs -r -iZ echo -n "Z,"|sed -e "s/,$//")
	#echo "  conflicts=$CONFLICTS"
    fi
    SUGGESTS=""
    if [ -f install/slack-suggests ]; then
	SUGGESTS=$(cat install/slack-suggests |xargs -r -iZ echo -n "Z,"|sed -e "s/,$//")
	#echo "  suggests=$SUGGESTS"
    fi
    METAFILE=${NAME%tgz}meta
    echo "PACKAGE NAME:  $NAME" > $LOCATION/$METAFILE
    echo "PACKAGE LOCATION:  $LOCATION" >> $LOCATION/$METAFILE
    echo "PACKAGE SIZE (compressed):  $SIZE K" >> $LOCATION/$METAFILE
    echo "PACKAGE SIZE (uncompressed):  $USIZE K" >> $LOCATION/$METAFILE
    echo "PACKAGE REQUIRED:  $REQUIRED" >> $LOCATION/$METAFILE
    echo "PACKAGE CONFLICTS:  $CONFLICTS" >> $LOCATION/$METAFILE
    echo "PACKAGE SUGGESTS:  $SUGGESTS" >> $LOCATION/$METAFILE
    echo "PACKAGE DESCRIPTION:" >> $LOCATION/$METAFILE
    PKGNAME=`basename $1`
    PKGNAME=${PKGNAME%%-*}
    if [ -f install/slack-desc ]; then
	cat install/slack-desc |grep -e "^$PKGNAME" >> $LOCATION/$METAFILE
    fi
    echo "" >> $LOCATION/$METAFILE

    # cleaning up
    rm -rf install
}

#############################################
# main program
case "$1" in
    all)
    for pkg in `find . -type f -name '*.tgz' -print`; do
	gen_meta $pkg
    done
    gen_packages_txt
    gen_md5_checksums
    ;;
    new)
    for pkg in `find . -type f -name '*.tgz' -print`; do
	if [ $pkg -nt ${pkg%tgz}meta ]; then
	    gen_meta $pkg
	fi
    done
    gen_packages_txt
    gen_md5_checksums
    ;;
    pkg)
    if [ -n "$2" ]; then
	gen_meta $2
    else
	usage
    fi
    ;;
    txt)
    gen_packages_txt
    ;;
    md5)
    gen_md5_checksums
    ;;
    *)
    usage
    ;;
esac
