summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>2017-08-16 18:16:12 +0200
committerMathieu Lirzin <mthl@gnu.org>2017-09-15 10:52:06 +0200
commit333b98f2d108111e9a99e7ede17de7f0a1adba03 (patch)
treef8cacce54268f3a5f69d1228e177691d852068fa
parent274590d84cf18c4cdbab10b59072169f07c13256 (diff)
downloadautomake-333b98f2d108111e9a99e7ede17de7f0a1adba03.tar.gz
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.
-rw-r--r--NEWS5
-rw-r--r--bin/automake.in31
-rw-r--r--t/list-of-tests.mk1
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 \