#!/bin/bash
#
# Generate a CUPS PPD tree from the foomatic printer database
# (c) 2001 Bernhard Rosenkraenzer <bero@bero.org>
# Hereby released under the terms of the GNU GPL v2

PPDDIR="$1"
FILELISTS="$2"
[ -z "$PPDDIR" ] && PPDDIR=/usr/share/cups/model/foomatic
: ${FOOMATIC_BINDIR=/usr/bin}
: ${FOOMATIC_LIBDIR=/usr/share/foomatic}
: ${FOOMATIC_PERLINC=/usr/lib/perl5/site_perl/5.6.1}
if [ -n "$FILELISTS" ]; then
	echo "%defattr(-,root,root)" >$FILELISTS/filelist.main
	echo "%defattr(-,root,root)" >$FILELISTS/filelist.pnm2ppa
	echo "%defattr(-,root,root)" >$FILELISTS/filelist.hpijs
fi
export PATH="/bin:/usr/bin" # for foomatic-datafile
rm -rf $PPDDIR
mkdir -p $PPDDIR
[ -z "$FOOMATIC_CACHEDIR" ] && export FOOMATIC_CACHEDIR=`mktemp -d /tmp/foomatic-cacheXXXXXX`
echo $FOOMATIC_CACHEDIR
DRIVERS=`perl -I$FOOMATIC_PERLINC $FOOMATIC_BINDIR/foomatic-configure -O |grep "<driver>" | sed -e "s,.*<driver>,,;s,</driver>.*,," | sort | uniq`
TMP=`mktemp /tmp/foomaticXXXXXX`
trap "rm -rf $TMP $FOOMATIC_CACHEDIR; echo WARNING: gen-ppds was aborted. Your PPD tree is incomplete.; exit 1" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
for i in $DRIVERS; do
        PRINTERS=`perl -I$FOOMATIC_PERLINC $FOOMATIC_BINDIR/foomatic-configure -d $i -X | grep "<id>" | sed -e "s,.*<id>,,;s,</id>.*,,;s,printer/,," | sort | uniq`
        for j in $PRINTERS; do
		echo "Handling $j ($i)"
                perl -I$FOOMATIC_PERLINC $FOOMATIC_SBINDIR/foomatic-datafile -t cups -p $j -d $i >$TMP
		FILE=$(cat $TMP |grep "You may save this file as" |sed -e "s,.*You may save this file as .,,;s,'.*,,")
		if echo $FILE |grep -q "You may save this file"; then
			echo "WARNING: Something odd happened. FILE is $FILE."
			echo "Driver for $j ($i) NOT built."
			cat $TMP
			continue
		fi
		MAKE=`cat $TMP |grep "^*Manufacturer:" |sed -e 's,.*:.",,;s,\".*,,'`
		if [ -n "$MAKE" ]; then
			DIR="$PPDDIR/$MAKE"
			if [ ! -d "$DIR" ]; then
				echo "%dir $DIR" >>$FILELISTS/filelist.main
				mkdir -p "$DIR"
			fi
		else
			DIR=$PPDDIR
		fi
		if [ -n "$FILE" ]; then
			FILE="$DIR/$FILE"
		else
			FILE="$DIR/$j-$i.ppd"
		fi
		mv -f $TMP "$FILE"
		if [ -n "$FILELISTS" ]; then
			if egrep -q '(pnm2ppa|pbm2ppa|pbmtpg|test_ppa|detect_ppa|calibrate_ppa)' "$FILE"; then
				echo "$FILE.gz" >>$FILELISTS/filelist.pnm2ppa
			elif grep -q hpijs "$FILE"; then
				echo "$FILE.gz" >>$FILELISTS/filelist.hpijs
			else
				echo "$FILE.gz" >>$FILELISTS/filelist.main
			fi
		fi
		gzip -9f "$FILE"
		chmod 0644 "$FILE.gz"
        done
done
rm -rf $TMP $FOOMATIC_CACHEDIR
