#!/bin/sh
#
# ***************************************************************************
# *   This program is free software; you can redistribute it and/or modify  *
# *   it under the terms of the GNU General Public License as published by  *
# *   the Free Software Foundation; either version 2 of the License, or     *
# *   (at your option) any later version.                                   *
# *                                                                         *
# *   This program is distributed in the hope that it will be useful,       *
# *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
# *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
# *   GNU General Public License for more details.                          *
#*                                                                         *
# *   You should have received a copy of the GNU General Public License     *
# *   along with this program; if not, write to the                         *
# *   Free Software Foundation, Inc.,                                       *
# *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
# ***************************************************************************/
#
# metagen.sh brought to you by JP <jp.guillemin@free.fr>
# and Stefano Stabellini <stefano@stabellini.net>
#
# DL_URL=http://your_remove_pkg_host.tld/packages/
#



function gen_packages_txt {
	echo '' > PACKAGES.TXT
	find . -type f -name '*.meta' -exec cat {} \; >> PACKAGES.TXT
  cat PACKAGES.TXT | gzip -9 -c - > PACKAGES.TXT.gz
}

function gen_md5_checksums {
	echo '' > CHECKSUMS.md5
	find . -type f -name '*.tgz' -exec md5sum {} \; >> CHECKSUMS.md5
  cat CHECKSUMS.md5 | gzip -9 -c - > CHECKSUMS.md5.gz
}

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
	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=$(tar xzfO $1 install/slack-required 2>/dev/null|xargs -r -iZ echo -n "Z,"|sed -e "s/,$//")
	#CONFLICTS=$(tar xzfO $1 install/slack-conflicts 2>/dev/null|xargs -r -iZ echo -n "Z,"|sed -e "s/,$//")
	#SUGGESTS=$(tar xzfO $1 install/slack-suggests 2>/dev/null|xargs -r )
	METAFILE=${NAME%tgz}meta
	
	if test -f $LOCATION/${NAME%tgz}dep
	then
		REQUIRED="`cat $LOCATION/${NAME%tgz}dep`"
	fi
	echo "PACKAGE NAME:  $NAME" > $LOCATION/$METAFILE
	if [ -n "$DL_URL" ]; then
		echo "PACKAGE MIRROR:  $DL_URL" >> $LOCATION/$METAFILE
	fi
	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
	if test -f $LOCATION/${NAME%gz}xt
	then
		cat $LOCATION/${NAME%gz}xt |grep -E '\w+\:'|grep -v '^#' >> $LOCATION/$METAFILE
	else
		tar xzfO $1 install/slack-desc |grep -E '\w+\:'|grep -v '^#' >> $LOCATION/$METAFILE
		tar xzfO $1 install/slack-desc |grep -E '\w+\:'|grep -v '^#' > $LOCATION/${NAME%gz}xt
	fi
	echo "" >> $LOCATION/$METAFILE
}

case "$1" in
	pkg)
		if [ -n "$2" ]; then
			gen_meta $2
		else
			echo "$0 [pkg [file]|all|new|PACKAGESTXT|MD5]"
		fi
	;;
	all)
		for pkg in `find . -type f -name '*.tgz' -print`
		do
			gen_meta $pkg
		done
		$0 PACKAGESTXT
	;;
	new)
		for pkg in `find . -type f -name '*.tgz' -print`
		do
			if [ ! -f ${pkg%tgz}meta ]; then
				gen_meta $pkg
			fi
		done
	;;
	PACKAGESTXT)
		gen_packages_txt
	;;
	MD5)
		gen_md5_checksums
	;;
	*)
		echo "$0 [pkg [file]|all|new|PACKAGESTXT|MD5]"
	;;
esac

