automake-patches
[Top][All Lists]
Advanced

[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



reply via email to

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