#! /bin/sh
#
#	@(#)Mkfilter	3.8 (motonori/WIDE) 4/9/94
#
#	Script for generation of $CLEANUP and $CONFIG
#

PATH=/bin:/usr/bin:/usr/ucb
export PATH

case "$CF_DEBUG" in
*filter*|*all*)
	exec 2> DEBUG.Mkfilter.$$
	set -vx
	;;
*)	;;
esac

# extract keywords for configuration from prototype files
KEYWORDS=`cat $* | grep '^#%.*%$' | sed 's/^#%\(.*\)%$/\1/p' | sort -u`

### Generation of $CLEANUP ###

cat << EoF > $TOOLDIR/$CLEANUP
# definitions for final cleanup

# magic token for final cleanup
DEFAULT='#%DELETE%'

# set the magic token into undefined variables
EoF

for KW in $KEYWORDS
do
	echo ": \${$KW=\$DEFAULT}" >> $TOOLDIR/$CLEANUP
done


### Generatation of $CONFIG ###

cat << EoF > $CONFIG
#! /bin/sh

PATH=/bin:/usr/bin:/usr/ucb
export PATH

case "\$CF_DEBUG" in
*config*|*all*)
	exec 2> DEBUG.Configure.\$\$
	set -vx
	;;
*)	;;
esac

: \${MASTERDIR=$MASTERDIR}
: \${TOOLDIR=$TOOLDIR}
: \${MKINFO=$MKINFO}
: \${CFSELECT=$CFSELECT}
: \${CLEANUP=$CLEANUP}

# preserve argument vector
ARGV="\$@"

# evaluate definition files
while [ "\$1" ]
do
	if [ -f "\$1" ]
	then
		case "\$1" in
		/*)	. \$1 ;;
		*)	. ./\$1 ;;
		esac
	else
		echo "\$1: no such file." 1>&2
	fi
	shift
done

if [ "\$DEF_REVISION_ID" ]
then
	if [ "\$REVISION_ID_LIST" ]
	then
		REVISION_ID_LIST="\$REVISION_ID_LIST\\\\
# \$DEF_REVISION_ID"
	else
		REVISION_ID_LIST="# \$DEF_REVISION_ID"
	fi
fi
if [ "\$SITE_REVISION_ID" ]
then
	if [ "\$REVISION_ID_LIST" ]
	then
		REVISION_ID_LIST="\$REVISION_ID_LIST\\\\
# \$SITE_REVISION_ID"
	else
		REVISION_ID_LIST="# \$SITE_REVISION_ID"
	fi
fi

# recover argument vector
set "\$ARGV"

# select type of sendmail.cf
. \$MASTERDIR/\$CFSELECT

# get information of config file creation
. \$MASTERDIR/\$MKINFO

if [ "\$FEATURE" = "" ]
then
	echo "No feature found." 1>&2
	exit 1;
fi

# read list features
exec < \$MASTERDIR/\$FEATURE
while read LINE
do
	if [ "\$LINE" ]
	then
		set \$LINE
		case "\$1" in
		\#*) ;;	# comment
		*=*) ;;	# assertion
		*)	# feature file
			if [ -f \$MASTERDIR/\$1 ]
			then
				# save valid filenames
				FEATURES="\$FEATURES \$MASTERDIR/\$1"
			else
				echo "\$1: no such feature file." 1>&2
			fi ;;
		esac
	fi
done

# evaluate feature description files
for FT in \$FEATURES
do
	. \$FT
done

EoF

if [ -f $PERL ]
then
# Yep, we can use the PERL

for KW in $KEYWORDS
do
	echo "export $KW" >> $CONFIG
done

cat << EoF >> $CONFIG

# keyword substitution with PERL
$PERL -e '
EoF

# operands for PERL
cat << 'EoF' >> $CONFIG
while (<>) {
	# replace keywords with values defined in environment variables
	if (/^#%(.*)%/) {
		$val = $ENV{$1};
		# for compatibility with SED version
		$val =~ s/\\(\W)/\1/g;
		print "$val\n" if ($val ne "");
	} else {
		print "$_";
	}
}' $MASTERDIR/$PROTO

EoF

else
# Nope, we have to use the SED.

cat << 'EoF' >> $CONFIG

# read final cleaning up definition
. $TOOLDIR/$CLEANUP

cat $MASTERDIR/$PROTO | sed "
EoF

LN=0
for KW in $KEYWORDS
do
	LN=`expr $LN + 1`
	if [ $LN -gt 30 ]
	then
		LN=0
		echo '" | sed "' >> $CONFIG
	fi
#	echo "s'^#%$KW%'\$$KW'" >> $CONFIG
	echo "s\\\`^#%$KW%\\\`\$$KW\\\`" >> $CONFIG
done

echo '" | sed "/^#%DELETE%\$/d" ' >> $CONFIG

fi

echo 'exit 0' >> $CONFIG

# make $CONFIG executable
chmod +x $CONFIG

exit 0
