From ffa71587c487de677dea2a618e9983da4907bed9 Mon Sep 17 00:00:00 2001
From: Lev Walkin <vlm@lionet.info>
Date: Sun, 22 Aug 2004 03:08:23 +0000
Subject: [PATCH] better dependency tracking

---
 asn1c/tests/check-assembly.sh | 74 ++++++++++++++++++++++++-----------
 1 file changed, 51 insertions(+), 23 deletions(-)

diff --git a/asn1c/tests/check-assembly.sh b/asn1c/tests/check-assembly.sh
index f3461d3b..11571fc5 100755
--- a/asn1c/tests/check-assembly.sh
+++ b/asn1c/tests/check-assembly.sh
@@ -5,6 +5,11 @@
 # test-* directories, do lots of other magic stuff and exit cleanly.
 #
 
+if [ "x$1" = "x" ]; then
+	echo "Usage: $0 <check-NN.c>"
+	exit
+fi
+
 # Compute the .asn1 spec name by the given file name.
 source=$(echo "$1" | sed -e 's/.*\///')
 testno=`echo "$source" | cut -f2 -d'-' | cut -f1 -d'.'`
@@ -17,45 +22,68 @@ IFS="."
 set $args
 shift
 IFS=$OFS
+AFLAGS="$@"
+
+touch ${testdir}-FAILED		# Create this file to ease post mortem analysis
 
 if [ ! -d $testdir ]; then
 	mkdir $testdir		|| exit $?
 fi
 cd $testdir			|| exit $?
 ln -fs ../$source		|| exit $?
-# Compile the corresponding .asn1 spec.
-set -x
-../../asn1c	\
-	-S ../../../skeletons	\
-	-Wdebug-compiler "$@"	\
-	../../../tests/${testno}-*.asn1 || exit $?
-set +x
+
+asn_module=$(echo ../../../tests/${testno}-*.asn1)
 
 # Create a Makefile for the project.
 cat > Makefile <<EOM
+# This file is autogenerated by ../$0
+
 COMMON_FLAGS= -I. -DEMIT_ASN_DEBUG
 CFLAGS=\${COMMON_FLAGS} ${CFLAGS}
 CXXFLAGS=\${COMMON_FLAGS} ${CXXFLAGS}
-SRCS=`echo *.c*`
-OBJS1=\${SRCS:.c=.o}
-OBJS=\${OBJS1:.cc=.o}
-check-executable: \${OBJS}
-	\$(CC) \$(CFLAGS) -o check-executable \$(OBJS)
-.SUFFIXES:
-.SUFFIXES: .c .cc .o
-.c.o:
-	\$(CC) \$(CFLAGS) -o \$@ -c \$<
-.cc.o:
-	\$(CXX) \$(CXXFLAGS) -o \$@ -c \$<
-check: check-executable
+
+all: check-executable
+check-executable: compiled-module object-files
+	\$(CC) \$(CFLAGS) -o check-executable *.o
+
+# Cannot track dependencies automatically because files are not known beforehand
+object-files: *.c*
+	@for sfile in *.c; do						\\
+		ofile=\`echo "\$\$sfile" | sed -e 's/\.c[c]*\$\$/.o/'\`;	\\
+		if [ "\$\$sfile" -nt "\$\$ofile" ]; then			\\
+			echo "\$(CC) \$(CFLAGS) -o \$\$ofile -c \$\$sfile";	\\
+			\$(CC) \$(CFLAGS) -o \$\$ofile -c \$\$sfile;		\\
+		fi;							\\
+	done
+	@for sfile in *.cc; do						\\
+		ofile=\`echo "\$\$sfile" | sed -e 's/\.c[c]*\$\$/.o/'\`;	\\
+		if [ "\$\$sfile" -nt "\$\$ofile" ]; then			\\
+			echo "\$(CXX) \$(CXXFLAGS) -o \$\$ofile -c \$\$sfile";\\
+			\$(CXX) \$(CXXFLAGS) -o \$\$ofile -c \$\$sfile;	\\
+		fi;							\\
+	done
+	@touch object-files
+
+# Compile the corresponding .asn1 spec.
+compiled-module: ${asn_module} ../../asn1c
+	../../asn1c -S ../../../skeletons -Wdebug-compiler	\\
+		${AFLAGS} ${asn_module}
+	@touch compiled-module
+
+check-succeeded: check-executable
+	@rm -f check-succeeded
 	./check-executable
+	@touch check-succeeded
+
+check: check-succeeded
+
 clean:
 	@rm -f *.o
 EOM
 
-# Perform building and checking 
-make check	|| exit $?
+# Perform building and checking
+make check || exit $?
 
-# Uncomment this to jeopardize debugging
-# make clean
+rm -f ../${testdir}-FAILED
 
+exit 0
-- 
GitLab