>From d3ee31dfa106752e82eaa6176451e7126c5bbc08 Mon Sep 17 00:00:00 2001 From: Michael Haubenwallner Date: Wed, 16 Aug 2017 18:16:12 +0200 Subject: [PATCH] automake: Depend on LIBOBJDIR for LIBOBJS. This change fixes automake bug#27781. * bin/automake.in: Add Makefile dependency on LIBOBJDIR/dirstamp for each LIBOBJS/ALLOCA source file found. * t/list-of-tests.mk (XFAIL_TESTS): Drop t/libobj-no-dependency-tracking.sh. --- bin/automake.in | 30 ++++++++++++++++++------------ t/list-of-tests.mk | 1 - 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/bin/automake.in b/bin/automake.in index 3433d3d..376b730 100644 --- a/bin/automake.in +++ b/bin/automake.in @@ -2329,13 +2329,14 @@ sub handle_lib_objects return $seen_libobjs; } -# handle_LIBOBJS_or_ALLOCA ($VAR) -# ------------------------------- +# handle_LIBOBJS_or_ALLOCA ($VAR, $BASE) +# -------------------------------------- # Definitions common to LIBOBJS and ALLOCA. -# VAR should be one of LIBOBJS, LTLIBOBJS, ALLOCA, or LTALLOCA. +# VAR should be one of LIBOBJS, LTLIBOBJS, or ALLOCA. +# BASE should be one base file name from AC_LIBSOURCE, or alloca. sub handle_LIBOBJS_or_ALLOCA { - my ($var) = @_; + my ($var, $base) = @_; my $dir = ''; @@ -2357,9 +2358,14 @@ sub handle_LIBOBJS_or_ALLOCA $dir = backname ($relative_dir) . "/$dir" if $relative_dir ne '.'; define_variable ('LIBOBJDIR', "$dir", INTERNAL); - $clean_files{"\$($var)"} = MOSTLY_CLEAN; - # libtool might create LIBOBJS as a side-effect of using LTLIBOBJS. - $clean_files{"\$(LIBOBJS)"} = MOSTLY_CLEAN if $var eq "LTLIBOBJS"; + if ($dir && !defined $clean_files{"$dir$base.\$(OBJEXT)"}) { + my $dirstamp = require_build_directory ($dir); + $output_rules .= "$dir$base.\$(OBJEXT): $dirstamp\n"; + $output_rules .= "$dir$base.lo: $dirstamp\n" if $var eq "LTLIBOBJS"; + } + # libtool might create .$(OBJEXT) as a side-effect of using LTLIBOBJS. + $clean_files{"$dir$base.\$(OBJEXT)"} = MOSTLY_CLEAN; + $clean_files{"$dir$base.lo"} = MOSTLY_CLEAN if $var eq "LTLIBOBJS"; } else { @@ -2380,14 +2386,14 @@ sub handle_LIBOBJS $var->requires_variables ("address@hidden@ used", $lt . 'LIBOBJS') if ! keys %libsources; - my $dir = handle_LIBOBJS_or_ALLOCA "${lt}LIBOBJS"; - foreach my $iter (keys %libsources) { - if ($iter =~ /\.[cly]$/) + my $dir = ''; + if ($iter =~ /^(.*)(\.[cly])$/) { - saw_extension ($&); + saw_extension ($2); saw_extension ('.c'); + $dir = handle_LIBOBJS_or_ALLOCA ("${lt}LIBOBJS", $1); } if ($iter =~ /\.h$/) @@ -2415,7 +2421,7 @@ sub handle_ALLOCA my ($var, $cond, $lt) = @_; my $myobjext = $lt ? 'lo' : 'o'; $lt ||= ''; - my $dir = handle_LIBOBJS_or_ALLOCA "${lt}ALLOCA"; + my $dir = handle_LIBOBJS_or_ALLOCA ("${lt}ALLOCA", "alloca"); $dir eq '' and $dir = './'; $var->requires_variables ("address@hidden@ used", $lt . 'ALLOCA'); diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk index dab4a7c..ebf9651 100644 --- a/t/list-of-tests.mk +++ b/t/list-of-tests.mk @@ -38,7 +38,6 @@ t/override-conditional-pr13940.sh \ t/dist-pr109765.sh \ t/instdir-cond2.sh \ t/java-nobase.sh \ -t/libobj-no-dependency-tracking.sh \ t/objext-pr10128.sh \ t/remake-timing-bug-pr8365.sh \ t/lex-subobj-nodep.sh \ -- 2.10.2