]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
automake: Depend on LIBOBJDIR for LIBOBJS and ALLOCA
authorMichael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>
Wed, 16 Aug 2017 16:16:12 +0000 (18:16 +0200)
committerMathieu Lirzin <mthl@gnu.org>
Fri, 15 Sep 2017 08:52:06 +0000 (10:52 +0200)
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
bin/automake.in
t/list-of-tests.mk

diff --git a/NEWS b/NEWS
index eb0a4155dd5959296098169f500f6c4ad089a82e..e50a9556114e36542f138c21b00b33d98b3e4c98 100644 (file)
--- 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:
index 4294736aafc7dd4685c22319bf3ca2b603b2e98b..9709f0638e464a6c868cae8cd482db6fb8cc3a17 100644 (file)
@@ -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');
index dab4a7c20f61f9905c66a45d93f7be2b8b07bd37..ebf96516679eb656ee75185b68e2c245c2fe1679 100644 (file)
@@ -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 \