#!/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

_EOF_

}

function gen_meta {
    if [ ! -f $1 ]; then
	    echo "File not found: $1"
	    exit 1;
    fi
    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
}

function gen_info {
    echo Generating SLAPT-GET info
    rm -f CHECKSUMS.md5
    rm -f PACKAGES.TXT
    for PKG in `find . -type f -name '*.tgz' -print | sort`; do
	#PKG=${PKG#./}
	META="${PKG%tgz}meta"
	if [ $PKG -nt $META ]; then
	    gen_meta $PKG
	    cat $META >> PACKAGES.TXT
	    META="meta"
	else
	    cat $META >> PACKAGES.TXT
	    META=""
	fi

	MDLINE=""
	if [ $PKG -ot CHECKSUMS.md5.old ]; then
	    MDLINE=`grep " $PKG\$" CHECKSUMS.md5.old`
	fi
	if [ -z "$MDLINE" ]; then
	    md5sum $PKG >> CHECKSUMS.md5
	    MDLINE="md5"
	else
	    echo $MDLINE >> CHECKSUMS.md5
	    MDLINE=""
	fi
	if [ "${META}${MDLINE}" ]; then
	    printf "%-60s %4s %3s\n" "$PKG" "$META" "$MDLINE"
	fi
    done
}

#############################################
# main program
case "$1" in
    all)
    find . -type f -name '*.meta' -exec rm -f {} \;
    rm -f CHECKSUMS.md5 CHECKSUMS.md5.old
    gen_info
    rm -f CHECKSUMS.md5.old
    ;;
    new)
    mv -f CHECKSUMS.md5 CHECKSUMS.md5.old
    gen_info
    rm -f CHECKSUMS.md5.old
    ;;
    *)
    usage
    ;;
esac
