automake-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FYI] {maint} tests: prefer using 'is_newest' over 'ls -t' hacks


From: Stefano Lattarini
Subject: [FYI] {maint} tests: prefer using 'is_newest' over 'ls -t' hacks
Date: Fri, 22 Jun 2012 18:49:51 +0200

To verify that a file 'new' is newer than the file 'old', it's much
cleaner to use "is_newest new old" rather than the more clumsy
"ls -t". Adjust several of our tests accordingly.

* syntax-checks.mk (sc_tests_ls_t): New check, guard against uses
of "ls -t" and similar.
(syntax_check_rules): Add it.
* t/maken.sh: Adjust.
* t/autohdr4.sh: Likewise.
* t/extradep2.sh: Likewise.
* t/lex-depend-cxx.sh: Likewise.
* t/extradep.sh: Likewise.
* t/yacc-depend2.sh: Likewise.
* t/yacc-pr204.sh: Likewise.
* t/lex-pr204.sh: Likewise.
* t/yacc8.sh: Likewise.
* t/acloca13.sh: Likewise.
* t/lex-depend.sh: Likewise, and enhance.
* t/acloca14.sh: Likewise.
* t/aclocal7.sh: Likewise.

Signed-off-by: Stefano Lattarini <address@hidden>
---
 syntax-checks.mk    |   11 ++++++++
 t/acloca13.sh       |    3 +--
 t/acloca14.sh       |   24 +++++------------
 t/aclocal7.sh       |   72 ++++++++++++++++++++++++---------------------------
 t/autohdr4.sh       |    8 +++---
 t/extradep.sh       |    4 +--
 t/extradep2.sh      |    4 +--
 t/lex-depend-cxx.sh |    6 ++---
 t/lex-depend.sh     |   12 ++++++---
 t/lex-pr204.sh      |    5 ++--
 t/maken.sh          |    4 +--
 t/yacc-depend2.sh   |   15 ++++-------
 t/yacc-pr204.sh     |    5 ++--
 t/yacc8.sh          |    6 ++---
 14 files changed, 81 insertions(+), 98 deletions(-)

diff --git a/syntax-checks.mk b/syntax-checks.mk
index f610a25..0549bc8 100644
--- a/syntax-checks.mk
+++ b/syntax-checks.mk
@@ -63,6 +63,7 @@ sc_tests_automake_fails \
 sc_tests_required_after_defs \
 sc_tests_overriding_macros_on_cmdline \
 sc_tests_plain_sleep \
+sc_tests_ls_t \
 sc_m4_am_plain_egrep_fgrep \
 sc_tests_no_configure_in \
 sc_tests_PATH_SEPARATOR \
@@ -416,6 +417,16 @@ sc_tests_overriding_macros_on_cmdline:
          exit 1; \
        fi
 
+## Prefer use of our 'is_newest' auxiliary script over the more hacky
+## idiom "test $(ls -1t new old | sed 1q) = new", which is both more
+## cumbersome and more fragile.
+sc_tests_ls_t:
+       @if LC_ALL=C grep -E '\bls(\s+-[a-zA-Z0-9]+)*\s+-[a-zA-Z0-9]*t' \
+           $(xtests); then \
+         echo "Use 'is_newest' rather than hacks based on 'ls -t'" 1>&2; \
+         exit 1; \
+       fi
+
 ## Never use 'sleep 1' to create files with different timestamps.
 ## Use '$sleep' instead.  Some filesystems (e.g., Windows) have only
 ## a 2sec resolution.
diff --git a/t/acloca13.sh b/t/acloca13.sh
index aab2daf..6d6f6c0 100755
--- a/t/acloca13.sh
+++ b/t/acloca13.sh
@@ -59,9 +59,8 @@ grep version1 aclocal.m4
 $sleep
 # aclocal.m4 should change if we touch otherfile.m4
 touch m4/otherfile.m4
-$sleep
 $ACLOCAL -I m4
-test $(ls -1t aclocal.m4 m4/otherfile.m4 | sed 1q) = aclocal.m4
+is_newest aclocal.m4 m4/otherfile.m4
 
 $AUTOCONF
 $AUTOMAKE
diff --git a/t/acloca14.sh b/t/acloca14.sh
index c36538f..2ba8b78 100755
--- a/t/acloca14.sh
+++ b/t/acloca14.sh
@@ -81,31 +81,21 @@ $AUTOMAKE
 ./configure
 $MAKE testdist1
 
-cp aclocal.m4 stamp
+cp aclocal.m4 aclocal.old
 $sleep
-
-cat >>c.m4 <<\EOF
-AC_DEFUN([FOO], [ANOTHER_MACRO])
-EOF
-
+echo 'AC_DEFUN([FOO], [ANOTHER_MACRO])' >> c.m4
 $MAKE
-
 # Because c.m4 has changed, aclocal.m4 must have been rebuilt.
-test $(ls -1t aclocal.m4 stamp | sed 1q) = aclocal.m4
+is_newest aclocal.m4 aclocal.old
 # However, since FOO is not used, f.m4 should not be included
 # and the contents of aclocal.m4 should remain the same
-diff aclocal.m4 stamp
+diff aclocal.m4 aclocal.old
 
-# If FOO where to be used, that would be another story, of course.
-cat >>configure.ac <<EOF
-FOO
-EOF
-
-cp aclocal.m4 stamp
+# If FOO where to be used, that would be another story, of course:
+# f.m4 should be included
 $sleep
-
+echo FOO >> configure.ac
 $MAKE
-
 $FGREP defs/f.m4 aclocal.m4
 $MAKE testdist2
 
diff --git a/t/aclocal7.sh b/t/aclocal7.sh
index ce84983..936d4ea 100755
--- a/t/aclocal7.sh
+++ b/t/aclocal7.sh
@@ -37,70 +37,64 @@ END
 mkdir m4
 echo 'AC_DEFUN([SOME_DEFS], [])' > m4/somedefs.m4
 
-$sleep
-
-$ACLOCAL -I m4
-
 # Automake will take aclocal.m4 to be newer if it has the same timestamp
 # as Makefile.in.  Avoid the confusing by sleeping.
-$sleep
-
-$AUTOMAKE --no-force
+AUTOMAKE_after_aclocal ()
+{
+  $sleep
+  $AUTOMAKE --no-force
+}
 
-$sleep
+$ACLOCAL -I m4
+AUTOMAKE_after_aclocal
 
 touch foo
+$sleep
 $ACLOCAL -I m4
-$AUTOMAKE --no-force
-
+AUTOMAKE_after_aclocal
 # aclocal.m4 and Makefile.in should not have been updated, so 'foo'
 # should be younger
-test $(ls -1t aclocal.m4 Makefile.in sub/Makefile.in foo | sed 1q) = foo
+is_newest foo aclocal.m4 Makefile.in sub/Makefile.in
 
 $sleep
 $ACLOCAL -I m4 --force
-test $(ls -1t aclocal.m4 foo | sed 1q) = aclocal.m4
+is_newest aclocal.m4 foo
 # We still use --no-force for automake, but since aclocal.m4 has
 # changed all Makefile.ins should be updated.
-$sleep
-$AUTOMAKE --no-force
-test $(ls -1t Makefile.in foo | sed 1q) = Makefile.in
-test $(ls -1t sub/Makefile.in foo | sed 1q) = sub/Makefile.in
+AUTOMAKE_after_aclocal
+is_newest Makefile.in aclocal.m4 foo
+is_newest sub/Makefile.in aclocal.m4 foo
 
-touch m4/somedefs.m4
 $sleep
-touch foo
+touch m4/somedefs.m4
 $sleep
 $ACLOCAL -I m4
-$sleep
-$AUTOMAKE --no-force
-
-# aclocal.m4 should have been updated, although its contents haven't changed.
-test $(ls -1t aclocal.m4 foo | sed 1q) = aclocal.m4
-test $(ls -1t Makefile.in foo | sed 1q) = Makefile.in
-test $(ls -1t sub/Makefile.in foo | sed 1q) = sub/Makefile.in
+AUTOMAKE_after_aclocal
+# aclocal.m4 should have been updated, although its contents haven't
+# changed.
+is_newest aclocal.m4 m4/somedefs.m4
+is_newest Makefile.in m4/somedefs.m4
+is_newest sub/Makefile.in m4/somedefs.m4
 
-touch fragment.inc
 $sleep
-touch foo
+touch fragment.inc
 $sleep
 $ACLOCAL -I m4
-$AUTOMAKE --no-force
+AUTOMAKE_after_aclocal
 # Only ./Makefile.in should change.
-test $(ls -1t aclocal.m4 foo | sed 1q) = foo
-test $(ls -1t Makefile.in foo | sed 1q) = Makefile.in
-test $(ls -1t sub/Makefile.in foo | sed 1q) = foo
+is_newest Makefile.in fragment.inc
+is_newest fragment.inc aclocal.m4
+is_newest fragment.inc sub/Makefile.in
 
 grep README Makefile.in && Exit 1
 
-: > README
 $sleep
-touch foo
+: > README
 $sleep
 $AUTOMAKE --no-force
 # Even if no dependency change, the content changed.
-test $(ls -1t Makefile.in foo | sed 1q) = Makefile.in
-test $(ls -1t sub/Makefile.in foo | sed 1q) = foo
+is_newest Makefile.in README
+is_newest README sub/Makefile.in
 
 grep README Makefile.in
 
@@ -111,6 +105,8 @@ $sleep
 $ACLOCAL -I m4
 $AUTOMAKE --no-force
 # Only sub/Makefile.in should change.
-test $(ls -1t aclocal.m4 foo | sed 1q) = foo
-test $(ls -1t Makefile.in foo | sed 1q) = foo
-test $(ls -1t sub/Makefile.in foo | sed 1q) = sub/Makefile.in
+is_newest foo aclocal.m4
+is_newest foo Makefile.in
+is_newest sub/Makefile.in foo
+
+:
diff --git a/t/autohdr4.sh b/t/autohdr4.sh
index 9acbab1..9bdfd13 100755
--- a/t/autohdr4.sh
+++ b/t/autohdr4.sh
@@ -38,8 +38,7 @@ cat > Makefile.am <<'END'
 SUBDIRS = sub3
 .PHONY: test-prog-updated
 test-prog-updated:
-       stat older sub3/run$(EXEEXT) || : For debugging.
-       test `ls -t older sub3/run$(EXEEXT) | sed 1q` = sub3/run$(EXEEXT)
+       is_newest sub3/run$(EXEEXT) sub2/config.bot
 END
 
 cat > sub3/Makefile.am <<'END'
@@ -68,13 +67,12 @@ $AUTOMAKE
 ./configure --enable-dependency-tracking
 $MAKE
 # Sanity check.
-cross_compiling || { sub3/run | grep grepme1; }
+cross_compiling || sub3/run | grep grepme1 || Exit 1
 
-: > older
 $sleep
 echo '#define NAME "grepme2"' > sub2/config.bot
 $MAKE
-cross_compiling || { sub3/run | grep grepme2; }
+cross_compiling || sub3/run | grep grepme2 || Exit 1
 $MAKE test-prog-updated
 
 $MAKE distcheck
diff --git a/t/extradep.sh b/t/extradep.sh
index 77b806a..8398ea6 100755
--- a/t/extradep.sh
+++ b/t/extradep.sh
@@ -48,8 +48,7 @@ EXTRA_DIST = foodep bardep
 
 .PHONY: bar-has-been-updated
 bar-has-been-updated:
-       stat older bar$(EXEEXT) libfoo.a || : For debugging.
-       test `ls -t bar$(EXEEXT) older | sed q` = bar$(EXEEXT)
+       is_newest bar$(EXEEXT) libfoo.a
 END
 
 cat >libfoo.c <<'END'
@@ -96,7 +95,6 @@ $MAKE && Exit 1
 : >bardep
 
 $MAKE
-: > older
 $sleep
 touch libfoo.a
 $MAKE
diff --git a/t/extradep2.sh b/t/extradep2.sh
index 91722bd..011a0d4 100755
--- a/t/extradep2.sh
+++ b/t/extradep2.sh
@@ -43,8 +43,7 @@ EXTRA_DIST = bardep
 
 .PHONY: bar-has-been-updated
 bar-has-been-updated:
-       stat older bar$(EXEEXT) libfoo.la || : For debugging.
-       test `ls -t bar$(EXEEXT) older | sed q` = bar$(EXEEXT)
+       is_newest bar$(EXEEXT) libfoo.la
 END
 
 cat >libfoo.c <<'END'
@@ -77,7 +76,6 @@ $MAKE && Exit 1
 : >bardep
 
 $MAKE
-: > older
 $sleep
 touch libfoo.la
 $MAKE
diff --git a/t/lex-depend-cxx.sh b/t/lex-depend-cxx.sh
index 7bdfdf9..ec592f7 100755
--- a/t/lex-depend-cxx.sh
+++ b/t/lex-depend-cxx.sh
@@ -40,9 +40,8 @@ test-deps-exist:
 
 .PHONY: test-obj-updated
 test-obj-updated: joe.$(OBJEXT) moe.$(OBJEXT)
-       stat older my-hdr.hxx joe.$(OBJEXT) moe.$(OBJEXT) || :
-       test `ls -t older joe.$(OBJEXT) | sed 1q` = joe.$(OBJEXT)
-       test `ls -t older moe.$(OBJEXT) | sed 1q` = moe.$(OBJEXT)
+       is_newest joe.$(OBJEXT) my-hdr.hxx
+       is_newest moe.$(OBJEXT) my-hdr.hxx
 END
 
 cat > joe.ll << 'END'
@@ -86,7 +85,6 @@ $AUTOCONF
 $MAKE test-deps-exist
 $MAKE
 
-: > older
 $sleep
 touch my-hdr.hxx
 $MAKE test-obj-updated
diff --git a/t/lex-depend.sh b/t/lex-depend.sh
index fce198d..be7da7f 100755
--- a/t/lex-depend.sh
+++ b/t/lex-depend.sh
@@ -38,8 +38,7 @@ test-deps-exist:
 
 .PHONY: test-obj-updated
 test-obj-updated: joe.$(OBJEXT)
-       stat older my-hdr.h joe.$(OBJEXT) || : For debugging.
-       test `ls -t older joe.$(OBJEXT) | sed 1q` = joe.$(OBJEXT)
+       is_newest joe.$(OBJEXT) my-hdr.h
 END
 
 cat > joe.l << 'END'
@@ -80,10 +79,15 @@ $AUTOCONF
 
 $MAKE test-deps-exist
 $MAKE
+cross_compiling || test "$(./zoo)" = 'Hello, World!' || Exit 1
 
-: > older
 $sleep
-touch my-hdr.h
+cat >> my-hdr.h << 'END'
+#undef MESSAGE
+#define MESSAGE "Howdy, Earth!"
+END
 $MAKE test-obj-updated
+$MAKE
+cross_compiling || test "$(./zoo)" = 'Howdy, Earth!' || Exit 1
 
 :
diff --git a/t/lex-pr204.sh b/t/lex-pr204.sh
index c12113f..1fc64ad 100755
--- a/t/lex-pr204.sh
+++ b/t/lex-pr204.sh
@@ -82,8 +82,7 @@ $sleep
 touch lexer.l lexer2.l
 $sleep
 $MAKE lexer.c lexer2.c
-stat lexer.c lexer.l lexer2.c lexer2.l || : # For debugging.
-test $(ls -t lexer.c lexer.l | sed 1q) = lexer.c
-test $(ls -t lexer2.c lexer2.l | sed 1q) = lexer2.c
+is_newest lexer.c lexer.l
+is_newest lexer2.c lexer2.l
 
 :
diff --git a/t/maken.sh b/t/maken.sh
index 86c40c3..1257e4a 100755
--- a/t/maken.sh
+++ b/t/maken.sh
@@ -47,7 +47,6 @@ $AUTOCONF
 $AUTOMAKE
 ./configure
 
-$sleep
 echo stamp > stampfile
 $sleep
 for target in dist distcheck; do
@@ -56,7 +55,8 @@ for target in dist distcheck; do
     $MAKE -n $target | grep stamp-sub-dist-hook || Exit 1
   fi
   $MAKE test-no-distdir
-  test $(ls -1t | sed 1q) = stampfile
+  # No file has been actually touched or created.
+  is_newest stampfile $(find .)
 done
 
 :
diff --git a/t/yacc-depend2.sh b/t/yacc-depend2.sh
index df48a0b..5d9aa38 100755
--- a/t/yacc-depend2.sh
+++ b/t/yacc-depend2.sh
@@ -32,14 +32,11 @@ bin_PROGRAMS = foo
 AM_YFLAGS = -d
 foo_SOURCES = foo.y main.c
 BUILT_SOURCES = foo.h
-.PHONY: debug-info test-time-unchanged test-time-changed
-debug-info:
-       ls -l
-       stat *.[ch] *.$(OBJEXT) my-timestamp || :
-test-time-unchanged: debug-info
-       test `ls -1t main.$(OBJEXT) my-timestamp | sed 1q` = my-timestamp
-test-time-changed: debug-info
-       test `ls -1t main.$(OBJEXT) my-timestamp | sed 1q` = main.$(OBJEXT)
+.PHONY: test-time-unchanged test-time-changed
+test-time-unchanged:
+       is_newest foo.y foo.h main.$(OBJEXT)
+test-time-changed:
+       is_newest main.$(OBJEXT) foo.y foo.h
 END
 
 cat > foo.y << 'END'
@@ -72,8 +69,6 @@ $MAKE
 ls -l # For debugging.
 
 $sleep
-: > my-timestamp
-$sleep
 touch foo.y
 $MAKE
 $MAKE test-time-unchanged
diff --git a/t/yacc-pr204.sh b/t/yacc-pr204.sh
index 791066a..f1c8cac 100755
--- a/t/yacc-pr204.sh
+++ b/t/yacc-pr204.sh
@@ -77,8 +77,7 @@ $sleep
 touch parse.y parse2.y
 $sleep
 $MAKE parse.c parse2.c
-stat parse.c parse.y parse2.c parse2.y || : # For debugging.
-test $(ls -t parse.c parse.y | sed 1q) = parse.c
-test $(ls -t parse2.c parse2.y | sed 1q) = parse2.c
+is_newest parse.c parse.y
+is_newest parse2.c parse2.y
 
 :
diff --git a/t/yacc8.sh b/t/yacc8.sh
index 5dead21..6640d32 100755
--- a/t/yacc8.sh
+++ b/t/yacc8.sh
@@ -75,16 +75,14 @@ test -f foo/parse.h
 
 # Make sure foo/parse.h is not updated, unless when needed.
 $sleep
-: > z
-$sleep
 touch ../foo/parse.y
 $MAKE obj
-test $(ls -1t foo/parse.h z | sed 1q) = z
+is_newest ../foo/parse.y foo/parse.h
 $sleep
 sed 's/%%/%token TOKEN\n%%/g' ../foo/parse.y >../foo/parse.yt
 mv -f ../foo/parse.yt ../foo/parse.y
 $MAKE obj
-test $(ls -1t foo/parse.h z | sed 1q) = foo/parse.h
+is_newest foo/parse.h ../foo/parse.y
 
 # Now, adds another parser to test ylwrap.
 
-- 
1.7.9.5




reply via email to

[Prev in Thread] Current Thread [Next in Thread]