#!/bin/sh
#
# This script attempts to compile the given ASN.1 specification and then
# transforms the resulting Makefile.am.sample tailored to that specification
# into a customized Makefile.
#
# The information which is necessary for this script is passed from the
# Makefile which is going to be replaced with an updated Makefile.
# This is called "boot-strapping" and is frequently the source of inside jokes.
#
# $Id$
#

if test -z "$ASN1PDU"	\
 -o  -z "$ASN1MODULES"	\
 -o  -z "$PROGNAME"	\
; then
	echo "ASN1CMDOPTS=\"$ASN1CMDOPTS\""
	echo "ASN1MODULES=\"$ASN1MODULES\""
	echo "ASN1PDU=\"$ASN1PDU\""
	echo "PROGNAME=\"$PROGNAME\""
	echo "ASN1PDU, ASN1MODULES, and PROGNAME are mandatory"
	exit
fi

CMDOPTS="-pdu=${ASN1PDU} ${ASN1CMDOPTS} ${ASN1MODULES}"

if test -x ../../asn1c/asn1c ; then
  echo "Compiling ${ASN1MODULES} using local compiler"
  ../../asn1c/asn1c -S ../../skeletons ${CMDOPTS} || exit $?
else
  echo "Compiling ${ASN1MODULES} using system compiler"
  asn1c ${CMDOPTS} || exit $?
fi

if test ! -f Makefile.am.sample ; then
	echo "Makefile.am.sample is missing"
	exit 1
fi

EXTRA_CFLAGS="-DJUNKTEST"
test -f config.h && EXTRA_CFLAGS="-DHAVE_CONFIG_H ${EXTRA_CFLAGS}"
test -n "$TITLE" && EXTRA_CFLAGS="-DASN_CONVERTER_TITLE=\"$TITLE\" ${EXTRA_CFLAGS}"

set -x
cat Makefile.am.sample						\
	| sed -e "s/^CFLAGS += /CFLAGS += ${EXTRA_CFLAGS} /"	\
	| sed -e "s/^all: /all: ${ASN1PDU}.c /"			\
	| sed -e "s/progname/${PROGNAME}/"			\
	> Makefile.$$
set +x

(	echo
	echo "${ASN1PDU}.c: $0 ${ASN1MODULES}"
	echo "	make regen-makefile"
	echo "	@touch ${ASN1PDU}.c"
	echo "	make"
	echo
	echo "regen-makefile:"
	test -n "$TITLE" && echo "	TITLE=\"$TITLE\" \\"
	echo "	ASN1CMDOPTS=\"${ASN1CMDOPTS}\" \\"
	echo "	ASN1MODULES=\"${ASN1MODULES}\" \\"
	echo "	ASN1PDU=${ASN1PDU} \\"
	echo "	PROGNAME=${PROGNAME} \\"
	echo "	$0"
	echo
	echo 'check: ${TARGET} check-ber check-xer check-per'
	echo '	@echo ================'
	echo '	@echo All tests passed'
	echo '	@echo ================'
	echo
	echo 'check-ber:'
	echo "	@if test -f sample-${ASN1PDU}-1.[db]er ; then \\"
	echo "	for f in sample-${ASN1PDU}-*.[db]er; do \\"
	echo '	for b in 1 17 33 980 8192; do \'
	echo '	echo "Recoding $$f into XER and back ($$b)..."; \'
	echo '	./${TARGET} -b $$b -iber -oxer $$f > ./.tmp.1.$$$$ || exit 2; \'
	echo '	./${TARGET} -b $$b -ixer -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \'
	echo '	diff ./.tmp.1.$$$$ ./.tmp.2.$$$$ || exit 4; \'
	echo '	rm -f ./.tmp.[12].$$$$; \'
	echo '	echo "Test junking $$f (please wait)..."; \'
	echo '	./${TARGET} -J0.0001 -n 1000 -b $$b -iber -onull $$f || exit 5; \'
	echo '	./${TARGET} -J0.001 -n 1000 -b $$b -iber -onull $$f || exit 6; \'
	echo '	done; done; fi'
	echo
	echo 'check-xer:'
	echo "	@if test -f sample-${ASN1PDU}-1.xer ; then \\"
	echo "	for f in sample-${ASN1PDU}-*.xer; do \\"
	echo '	for b in 1 17 33 980 8192; do \'
	echo '	echo "Recoding $$f into DER and back ($$b)..."; \'
	echo '	./${TARGET} -b $$b -ixer -oder $$f > ./.tmp.1.$$$$ || exit 2; \'
	echo '	./${TARGET} -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \'
	echo '	diff $$f ./.tmp.2.$$$$ || exit 4; \'
	echo '	rm -f ./.tmp.[12].$$$$; \'
	echo '	echo "Test junking $$f (please wait)..."; \'
	echo '	./${TARGET} -J0.0001 -n 1000 -b $$b -ixer -onull $$f || exit 5; \'
	echo '	./${TARGET} -J0.001 -n 1000 -b $$b -ixer -onull $$f || exit 6; \'
	echo '	done; done; fi'
	echo
	echo 'check-per:'
	echo "	@if test -f sample-${ASN1PDU}-1-nopad.per ; then \\"
	echo "	for f in sample-${ASN1PDU}-[1-9]-nopad.per; do \\"
	echo '	for b in 1 17 33 980 8192; do \'
	echo '	echo "Recoding non-padded $$f into DER into XER and back ($$b)..."; \'
	echo '	./${TARGET} -b $$b -per-nopad -iper -oder $$f > ./.tmp.1.$$$$ || exit 2; \'
	echo '	./${TARGET} -b $$b -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 3; \'
	echo '	./${TARGET} -b $$b -ixer -oder ./.tmp.2.$$$$ > ./.tmp.3.$$$$ || exit 4; \'
	echo '	diff ./.tmp.1.$$$$ ./.tmp.3.$$$$ || exit 5; \'
	echo '	rm -f ./.tmp.[123].$$$$; \'
	echo '	echo "Test junking $$f (please wait)..."; \'
	echo '	./${TARGET} -J0.0001 -n 1000 -b $$b -per-nopad -iper -onull $$f || exit 6; \'
	echo '	./${TARGET} -J0.001 -n 1000 -b $$b -per-nopad -iper -onull $$f || exit 7; \'
	echo '	done; done; fi'
	echo "	@if test -f sample-${ASN1PDU}-1.per ; then \\"
	echo "	for f in sample-*-[1-9].per; do \\"
	echo '	pdu=`echo $$f | sed -E -e "s/sample-([A-Za-z-]+)-[0-9].*/\\1/"`; \'
	echo '	for b in 1 17 33 980 8192; do \'
	echo '	echo "Recoding $$f into DER into XER and back ($$b)..."; \'
	echo '	./${TARGET} -b $$b -p $$pdu -iper -oder $$f > ./.tmp.1.$$$$ || exit 3; \'
	echo '	./${TARGET} -b $$b -p $$pdu -iber -oxer ./.tmp.1.$$$$ > ./.tmp.2.$$$$ || exit 4; \'
	echo '	./${TARGET} -b $$b -p $$pdu -ixer -oper ./.tmp.2.$$$$ > ./.tmp.1.$$$$ || exit 5; \'
	echo '	diff $$f ./.tmp.1.$$$$ || exit 6; \'
	echo '	rm -f ./.tmp.[12].$$$$; \'
	echo '	echo "Test junking $$f (please wait)..."; \'
	echo '	./${TARGET} -J0.0001 -n 1000 -b $$b -iper -onull $$f || exit 7; \'
	echo '	./${TARGET} -J0.001 -n 1000 -b $$b -iper -onull $$f || exit 8; \'
	echo '	done; done; fi'
	echo
	echo "distclean: clean"
	echo '	rm -f $(ASN_MODULE_SOURCES)'
	echo '	rm -f $(ASN_MODULE_HEADERS)'
	echo '	rm -f $(ASN_CONVERTER_SOURCES) $(ASN_CONVERTER_HEADERS)'
	echo "	rm -f Makefile.am.sample"
) >> Makefile.$$

set -x
mv Makefile.$$ Makefile || exit $?
rm Makefile.am.sample || exit $?
set +x

echo
echo "Makefile generation finished"
