From 333b98f2d108111e9a99e7ede17de7f0a1adba03 Mon Sep 17 00:00:00 2001 From: Michael Haubenwallner Date: Wed, 16 Aug 2017 18:16:12 +0200 Subject: automake: Depend on LIBOBJDIR for LIBOBJS and ALLOCA 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. * NEWS: Announce bug fix. --- NEWS | 5 +++++ bin/automake.in | 31 ++++++++++++++++++++----------- t/list-of-tests.mk | 1 - 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/NEWS b/NEWS index eb0a4155d..e50a95561 100644 --- a/NEWS +++ b/NEWS @@ -113,6 +113,11 @@ New in ?.?.?: - Installed 'aclocal' m4 macros can now accept installation directories containing '@' characters (automake bug#20903) + - When combining AC_LIBOBJ or AC_FUNC_ALLOCA with the + "--disable-dependency-tracking" configure option in an out of source + build, the build sub-directory defined by AC_CONFIG_LIBOBJ_DIR is now + properly created. (automake bug#27781) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ New in 1.15.1: diff --git a/bin/automake.in b/bin/automake.in index 4294736aa..9709f0638 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. +# 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,10 +2358,18 @@ 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 or ALLOCA as a side-effect of using + 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 =~ /^LT/); + } + # libtool might create .$(OBJEXT) as a side-effect of using # LTLIBOBJS or LTALLOCA. - $clean_files{"\$($var)"} = MOSTLY_CLEAN if $var =~ s/^LT//; + $clean_files{"$dir$base.\$(OBJEXT)"} = MOSTLY_CLEAN; + $clean_files{"$dir$base.lo"} = MOSTLY_CLEAN + if ($var =~ /^LT/); } else { @@ -2381,14 +2390,14 @@ sub handle_LIBOBJS $var->requires_variables ("\@${lt}LIBOBJS\@ 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$/) @@ -2416,7 +2425,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 ("\@${lt}ALLOCA\@ used", $lt . 'ALLOCA'); diff --git a/t/list-of-tests.mk b/t/list-of-tests.mk index dab4a7c20..ebf965166 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 \ -- cgit v1.2.1