[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Fix remake rule-induced test failures with HP-UX make.
From: |
Stefano Lattarini |
Subject: |
Re: Fix remake rule-induced test failures with HP-UX make. |
Date: |
Sat, 15 Jan 2011 13:51:54 +0100 |
User-agent: |
KMail/1.13.3 (Linux/2.6.30-2-686; KDE/4.4.4; i686; ; ) |
On Saturday 15 January 2011, Ralf Wildenhues wrote:
> Quoting parts of:
> http://autobuild.josefsson.org/automake/log-201101150749395803000.txt
>
> | FAIL: colon6.test (exit: 1)
> | ===========================
> |
> |
> /tmp/am/build-hppa2.0w-hp-hpux11.23/tests:/tmp/local/hppa2.0w-hp-hpux11.23/bin:/tmp/bin:/opt/aCC/bin:/opt/ansic/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/bin/X11:/usr/ccs/bin:/usr/contrib/bin/X11:/usr/vue/bin:/opt/imake/bin
> | + set -e
> | + pwd
> | /tmp/am/build-hppa2.0w-hp-hpux11.23/tests/colon6.dir
> | + cat
> | + 1> configure.in 0<<
> | AC_INIT([colon6], [1.0])
> | AM_INIT_AUTOMAKE
> | # With this, version.good should depend from version.gin, while
> | # Makefile should not depend from either of them.
> | AC_CONFIG_FILES([demo/Makefile demo/version.good:demo/version.gin])
> | AC_OUTPUT
> | + mkdir demo
> | + :
> | + 1> demo/version.gin
> | + :
> | + 1> demo/Makefile.am
> | + aclocal-1.11a -Werror
> | + automake-1.11a --foreign -Werror -Wall
> | + /bin/grep -E Makefile:.*(demo|version) demo/Makefile.in
> | + grep version\.good:.*version\.gin demo/Makefile.in
> | version.good: $(top_builddir)/config.status $(srcdir)/version.gin
> | + autoconf
> | + :
> | + srcdir=..
> | + mkdir build
> | + cd build
> | + ../configure
> | checking for a BSD-compatible install... ../install-sh -c
> | checking whether build environment is sane... yes
> | checking for a thread-safe mkdir -p... ../install-sh -c -d
> | checking for gawk... no
> | checking for mawk... no
> | checking for nawk... no
> | checking for awk... awk
> | checking whether make sets $(MAKE)... yes
> | checking that generated files are newer than configure... done
> | configure: creating ./config.status
> | config.status: creating demo/Makefile
> | config.status: creating demo/version.good
> | + test -f demo/version.good
> | + test ! -s demo/version.good
> | + cd demo
> | + sleep 2
> | + echo Rebuilt (srcdir=..)
> | + 1> ../../demo/version.gin
> | + make version.good
> | No suffix list.
> | cd .. && /bin/sh ./config.status demo/version.good
> | config.status: creating demo/version.good
> | + /bin/grep -F Rebuilt (srcdir=..) version.good
> | Rebuilt (srcdir=..)
> | + rm -f version.good
> | + make Makefile
> | No suffix list.
> | Make: Don't know how to make am--refresh. Stop.
> | *** Error exit code 1
> |
> | Stop.
> | + exit_status=1
> | + set +e
> | + cd /tmp/am/build-hppa2.0w-hp-hpux11.23/tests
> | + test 0 != 0
> | + echo colon6: exit 1
> | colon6: exit 1
> | + exit 1
>
> [...]
>
> |
> /tmp/am/build-hppa2.0w-hp-hpux11.23/tests:/tmp/local/hppa2.0w-hp-hpux11.23/bin:/tmp/bin:/opt/aCC/bin:/opt/ansic/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/bin/X11:/usr/ccs/bin:/usr/contrib/bin/X11:/usr/vue/bin:/opt/imake/bin
> | + set -e
> | + pwd
> | /tmp/am/build-hppa2.0w-hp-hpux11.23/tests/remake1a.dir
> | + fingerprint==/FiNgErPrInT/=
> | + cat
> | + 1> configure.in 0<<
> | AC_INIT([remake1a], [1.0])
> | AM_INIT_AUTOMAKE
> | AC_CONFIG_FILES([sub/Makefile])
> | AC_OUTPUT
> | + mkdir sub
> | + :
> | + 1> sub/Makefile.am
> | + aclocal-1.11a -Werror
> | + autoconf
> | + automake-1.11a --foreign -Werror -Wall
> | + ./configure
> | checking for a BSD-compatible install... ./install-sh -c
> | checking whether build environment is sane... yes
> | checking for a thread-safe mkdir -p... ./install-sh -c -d
> | checking for gawk... no
> | checking for mawk... no
> | checking for nawk... no
> | checking for awk... awk
> | checking whether make sets $(MAKE)... yes
> | checking that generated files are newer than configure... done
> | configure: creating ./config.status
> | config.status: creating sub/Makefile
> | + sleep 2
> | + echo # =/FiNgErPrInT/=
> | + 1> sub/Makefile.am
> | + cd sub
> | + make Makefile
> | No suffix list.
> | cd .. && /bin/sh
> /tmp/am/build-hppa2.0w-hp-hpux11.23/tests/remake1a.dir/missing --run
> automake-1.11a --foreign sub/Makefile
> | Make: Don't know how to make am--refresh. Stop.
> | *** Error exit code 1
>
>
> I'm not quite sure why HP-UX make seems to trigger rebuild rules for
> prerequisites that have the exact time stamps as targets (in this case,
> config.status and subdir Makefile, but I also tried with a reduced
> makefile), but it is not Posix conforming. Working around it properly
> would probably require sleeping inside config.status (an obvious no-go),
> and in practice it should not do more harm than updating some rules more
> than necessary.
>
> How about the patch below to not let this cause spurious testsuite
> failures?
>
Seems (almost) good. Just a couple of minor nits below ...
Oh, and please remember ot apply the patch to the maint-based
temporary branch 'tests-colon-extend'. FYI, last commit there
should be `a46eda3752054eccd208f630611fefe0308eafc1'.
> If you prefer, I can split the typo fixes in a separate patch.
>
Well, I usually prefer having cosmetic/typofixing changes separated
from bugfixes -- but not to the point of requiring you to rewrite
this patch ;-)
So, do whatever you deem more appropriate.
> Thanks,
> Ralf
>
> Fix remake rule-induced test failures with HP-UX make.
>
> * tests/colon6.test: Update timestamp of subdir Makefile, to
> ensure we do not spuriously invoke the nonexistent toplevel
> am--refresh rule. Fix comment typos.
> * tests/remake1a.test: Require GNU make.
>
> diff --git a/tests/colon6.test b/tests/colon6.test
> index bf5cf2d..984f13e 100755
> --- a/tests/colon6.test
> +++ b/tests/colon6.test
> @@ -22,8 +22,8 @@
> cat > configure.in <<END
> AC_INIT([$me], [1.0])
> AM_INIT_AUTOMAKE
> -# With this, version.good should depend from version.gin, while
> -# Makefile should not depend from either of them.
> +# With this, version.good should depend on version.gin, while
> +# Makefile should not depend on either of them.
> AC_CONFIG_FILES([demo/Makefile demo/version.good:demo/version.gin])
> AC_OUTPUT
> END
> @@ -35,7 +35,7 @@ mkdir demo
> $ACLOCAL
> $AUTOMAKE
>
> -# These are older "grepping check", kept mostly for backward-copmatibility.
> +# These are older "grepping checks", kept mostly for backward-compatibility.
> # They might (unlikely, but possibly) require updating when automake
> # internals are changed. Just relax or remove if they become too fragile.
> $EGREP 'Makefile:.*(demo|version)' demo/Makefile.in && Exit 1
> @@ -60,27 +60,31 @@ for vpath in : false; do
>
> cd demo
>
> - # version.good should depend from version.gin
> $sleep
> + # Avoid relying on non-existent toplevel am--refresh rule,
> + # presumably due to spurious timestamp issues.
> + touch Makefile
>
The comment seems too terse to me; what about this (stolen from your
explanation above)?
# Some make implementations (e.g., HP-UX make) seems to trigger rebuild
# rules for prerequisites that have the exact time stamps as targets (in
# this case, config.status and subdir Makefile).
# Since our setup here lacks a top-level Makefile, and thus the toplevel
# am--refresh rule, the rebuild rules are doomed to fail.
# We thus touch the Makefile to avoid triggering them.
> +
> + # version.good should depend on version.gin.
> echo "Rebuilt (srcdir=$srcdir)" > ../$srcdir/demo/version.gin
> $MAKE version.good
> $FGREP "Rebuilt (srcdir=$srcdir)" version.good
>
> - # Makefile should not depend from version.good.
> + # Makefile should not depend on version.good.
> rm -f version.good
> $MAKE Makefile
> test ! -r version.good
>
> - # version.good should be rebuilt from version.gin
> + # version.good should be rebuilt from version.gin.
> $MAKE version.good
> test -f version.good
>
> - # Makefile should not depend from version.gin.
> + # Makefile should not depend on version.gin.
> rm -f ../$srcdir/demo/version.gin
> $MAKE Makefile
> test ! -r ../$srcdir/demo/version.gin # sanity check
>
> - # version.good should depend from version.gin
> + # version.good should depend on version.gin.
> rm -f version.good
> $MAKE version.good >output 2>&1 && { cat output; Exit 1; }
> cat output
> diff --git a/tests/remake1a.test b/tests/remake1a.test
> index fc5ba6d..a794a05 100755
> --- a/tests/remake1a.test
> +++ b/tests/remake1a.test
> @@ -17,6 +17,7 @@
> # Make sure remaking rules in subdir are correctly generated.
> # See also sister "grepping" test `remake.test'.
>
> +required=GNUmake
> . ./defs || Exit 1
>
> fingerprint='=/FiNgErPrInT/='
>
[ OK, I'm going to be really nitpicking here ... ]
If you require GNU make in this test, IMHO you can as well change
the line:
$MAKE Makefile
below with simply:
$MAKE
On the other hand, the test is perfectly correct also as it stands,
so you decide if the suggested change is worth the additional noise.
Thanks,
Stefano