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