#!/bin/bash
# mkslack
# 
# By Eko M. Budi
# Released under GNU GPL
#
# May 2006: modified by John Babiak <johnb316@gmail.com>
# added code to make script usable with lzma-compressed packages
#

function usage() {
cat <<_EOF_
makeslack - make slackware txt information
usage: $0 [all|new]

all : create all info
new : create new info

_EOF_

}

# needed for compatibility with .tlz archives

export TAR=tar
export DIRNAME=/bin/dirname
export BASENAME=/bin/basename
export PKGNAME=/sbin/pkgname

function gen_txt {
    if [ ! -f $1 ]; then
	    echo "File not found: $1"
	    exit 1;
    fi
    DNAME=`$DIRNAME $1`
    BNAME=`$BASENAME $1`
    PNAME=`$PKGNAME $1`
    TFILE="$DNAME/${BNAME%.tgz}.txt"

    echo "$PNAME: generating info"
    # extract install info first
    rm -rf install
    if ! $TAR xzf $1 install; then
	if ! $TAR xzf $1 ./install; then
	    echo "$PNAME: no install information !"
	    exit 1
	fi     
    fi

    # Ok, here we go ..
    if [ -f install/slack-desc ]; then
	cat install/slack-desc | grep -E "(^$PNAME|BUILDDATE|HOST|DISTRO)" > $TFILE
    else
	echo "$PNAME: no description !"
	echo "$PNAME" > $TFILE
    fi
    echo "" >> $TFILE

    # cleaning up
    rm -rf install
}

# this is a clone of the gen_txt function to handle .tlz archives

function gen_txt_tlz {
    if [ ! -f $1 ]; then
	    echo "File not found: $1"
	    exit 1;
    fi
    DNAME=`$DIRNAME $1`
    BNAME=`$BASENAME $1`
    PNAME=`$PKGNAME $1`
    TFILE="$DNAME/${BNAME%.tlz}.txt"

    echo "$PNAME: generating info"
    # extract install info first
    rm -rf install
    if ! $TAR xf $1 install; then
        if ! $TAR xf $1 ./install; then
	    echo "$PNAME: no install information !"
	    exit 1
	fi     
    fi

    # Ok, here we go ..
    if [ -f install/slack-desc ]; then
	cat install/slack-desc | grep -E "(^$PNAME|BUILDDATE|HOST|DISTRO)" > $TFILE
    else
	echo "$PNAME: no description !"
	echo "$PNAME" > $TFILE
    fi
    echo "" >> $TFILE

    # cleaning up
    rm -rf install
}

function gen_txt_txz {
    if [ ! -f $1 ]; then
	    echo "File not found: $1"
	    exit 1;
    fi
    DNAME=`$DIRNAME $1`
    BNAME=`$BASENAME $1`
    PNAME=`$PKGNAME $1`
    TFILE="$DNAME/${BNAME%.txz}.txt"

    echo "$PNAME: generating info"
    # extract install info first
    rm -rf install
    if ! $TAR xJf $1 install; then
        if ! $TAR xJf $1 ./install; then
	    echo "$PNAME: no install information !"
	    exit 1
	fi     
    fi

    # Ok, here we go ..
    if [ -f install/slack-desc ]; then
	cat install/slack-desc | grep -E "(^$PNAME|BUILDDATE|HOST|DISTRO)" > $TFILE
    else
	echo "$PNAME: no description !"
	echo "$PNAME" > $TFILE
    fi
    echo "" >> $TFILE

    # cleaning up
    rm -rf install
}

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