aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLev Walkin <vlm@lionet.info>2004-08-22 03:08:23 +0000
committerLev Walkin <vlm@lionet.info>2004-08-22 03:08:23 +0000
commitffa71587c487de677dea2a618e9983da4907bed9 (patch)
treee396b454d2eaa3987b264897933b171113cc161a
parentfc0d66f0c84e04235af6e98b319c2546ae96af98 (diff)
better dependency tracking
-rwxr-xr-xasn1c/tests/check-assembly.sh74
1 files 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