automake
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Automake 1.5 - depcomp not added to DIST_COMMON


From: Alexandre Duret-Lutz
Subject: Re: Automake 1.5 - depcomp not added to DIST_COMMON
Date: 09 Nov 2001 17:46:49 +0100
User-agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/21.1

>>> "Akim" == Akim Demaille <address@hidden> writes:

[...]

 Akim> Given that this is the most important complaint against Automake,
 Akim> please install it.  And NEWS it :P

Ok.  I'm including Pavel's test too.  Here is what I'll commit
once `make check' is finished.

Index: ChangeLog
===================================================================
RCS file: /cvs/automake/automake/ChangeLog,v
retrieving revision 1.1650
diff -u -r1.1650 ChangeLog
--- ChangeLog   2001/11/09 16:27:24     1.1650
+++ ChangeLog   2001/11/09 16:47:10
@@ -1,5 +1,21 @@
 2001-11-09  Alexandre Duret-Lutz  <address@hidden>
 
+       Fix for distcommon2.test:
+       * automake.in (automake_needs_to_reprocess_all_files): New
+       variable.
+       ("main"): Process all Makefiles a second time if
+       $automake_needs_to_reprocess_all_files is set.
+       (maybe_push_required_file): Return 1 or 0 whether the file is
+       pushed or not.
+       (require_file_internal): Set $automake_needs_to_reprocess_all_files
+       if an added file can't be pushed.
+
+       * test/distcommon2.test: New file.
+       * test/Makefile.am (TESTS): Add distcommon2.test.
+       From Pavel Roskin.
+
+2001-11-09  Alexandre Duret-Lutz  <address@hidden>
+
        * automake.in (exec_dir_p): Remove.  Replace by...
        (EXEC_DIR_PATTERN):... this.
        (am_install_var): Adjust to use EXEC_DIR_PATTERN.
Index: NEWS
===================================================================
RCS file: /cvs/automake/automake/NEWS,v
retrieving revision 1.157
diff -u -r1.157 NEWS
--- NEWS        2001/11/09 16:25:02     1.157
+++ NEWS        2001/11/09 16:47:10
@@ -11,6 +11,7 @@
 * Fixed CDPATH portability problems, in particular for MacOS X.
 * Fixed handling of nobase_ targets.
 * Fixed support of implicit rules leading to .lo objects.
+* Fixed late inclusion of --add-missing files (e.g. depcomp) in DIST_COMMON
 
 New in 1.5:
 * Support for `configure.ac'.
Index: automake.in
===================================================================
RCS file: /cvs/automake/automake/automake.in,v
retrieving revision 1.1231
diff -u -r1.1231 automake.in
--- automake.in 2001/11/09 16:27:25     1.1231
+++ automake.in 2001/11/09 16:47:12
@@ -443,6 +443,11 @@
    'install-man' => 1,
   );
 
+# This is set to 1 when Automake needs to be run again.
+# (For instance, this happens when an auxiliary file such as
+# depcomp is added after the toplevel Makefile.in -- which
+# should distribute depcomp -- has been generated.)
+my $automake_needs_to_reprocess_all_files = 0;
 
 
 ################################################################
@@ -966,21 +971,36 @@
 die "$me: no `Makefile.am' found or specified\n"
     if ! @input_files;
 
-# Now do all the work on each file.
-# This guy must be local otherwise it's private to the loop.
-use vars '$am_file';
-local $am_file;
-foreach $am_file (@input_files)
+my $automake_has_run = 0;
+
+do
 {
-    if (! -f ($am_file . '.am'))
+    if ($automake_has_run)
     {
-       &am_error ("`" . $am_file . ".am' does not exist");
+       print "$me: processing Makefiles another time to fix them up.\n";
+       &prog_error ("running more than two times should never be needed.")
+           if $automake_has_run >= 2;
     }
-    else
+    $automake_needs_to_reprocess_all_files = 0;
+
+    # Now do all the work on each file.
+    # This guy must be local otherwise it's private to the loop.
+    use vars '$am_file';
+    local $am_file;
+    foreach $am_file (@input_files)
     {
-       &generate_makefile ($output_files{$am_file}, $am_file);
+       if (! -f ($am_file . '.am'))
+       {
+           &am_error ("`" . $am_file . ".am' does not exist");
+       }
+       else
+       {
+           &generate_makefile ($output_files{$am_file}, $am_file);
+       }
     }
+    ++$automake_has_run;
 }
+while ($automake_needs_to_reprocess_all_files);
 
 exit $exit_status;
 
@@ -7574,6 +7594,7 @@
     if ($dir eq $relative_dir)
     {
        push_dist_common ($file);
+       return 1;
     }
     elsif ($relative_dir eq '.' && ! &is_make_dir ($dir))
     {
@@ -7581,7 +7602,9 @@
        # subdir which does not have a Makefile, then we distribute it
        # here.
        push_dist_common ($fullfile);
+       return 1;
     }
+    return 0;
 }
 
 
@@ -7692,8 +7715,24 @@
                        }
                    }
 
-                   maybe_push_required_file (dirname ($errfile),
-                                             $file, $errfile);
+                   if (! maybe_push_required_file (dirname ($errfile),
+                                                    $file, $errfile))
+                   {
+                       if (! $found_it)
+                       {
+                           # We have added the file but could not push it
+                           # into DIST_COMMON (probably because this is
+                           # an auxiliary file and we are not processing
+                           # the top level Makefile). This is unfortunate,
+                           # since it means we are using a file which is not
+                           # distributed!
+
+                           # Get Automake to be run again: on the second
+                           # run the file will be found, and pushed into
+                           # the toplevel DIST_COMMON automatically.
+                           $automake_needs_to_reprocess_all_files = 1;
+                       }
+                   }
 
                    # Prune the path list.
                    @require_file_paths = &dirname ($errfile);
Index: tests/Makefile.am
===================================================================
RCS file: /cvs/automake/automake/tests/Makefile.am,v
retrieving revision 1.352
diff -u -r1.352 Makefile.am
--- Makefile.am 2001/11/09 16:25:03     1.352
+++ Makefile.am 2001/11/09 16:47:12
@@ -117,6 +117,7 @@
 dirname.test \
 discover.test \
 distcommon.test \
+distcommon2.test \
 distdir.test \
 distname.test \
 double.test \
Index: tests/Makefile.in
===================================================================
RCS file: /cvs/automake/automake/tests/Makefile.in,v
retrieving revision 1.457
diff -u -r1.457 Makefile.in
--- Makefile.in 2001/11/09 16:25:03     1.457
+++ Makefile.in 2001/11/09 16:47:12
@@ -190,6 +190,7 @@
 dirname.test \
 discover.test \
 distcommon.test \
+distcommon2.test \
 distdir.test \
 distname.test \
 double.test \
Index: tests/distcommon2.test
===================================================================
RCS file: distcommon2.test
diff -N distcommon2.test
--- /dev/null   Tue May  5 13:32:27 1998
+++ distcommon2.test    Fri Nov  9 08:47:12 2001
@@ -0,0 +1,53 @@
+#! /bin/sh
+
+# Test to make sure that depcomp and compile are added to DIST_COMMON
+# From Pavel Roskin.
+
+. $srcdir/defs || exit 1
+
+cat > configure.in << 'END'
+AM_INIT_AUTOMAKE(nonesuch, nonesuch)
+PACKAGE=nonesuch
+VERSION=nonesuch
+AC_PROG_CC
+AC_OUTPUT(Makefile subdir/Makefile)
+END
+
+cat > Makefile.am << 'END'
+SUBDIRS = subdir
+END
+
+mkdir subdir
+: > subdir/foo.c
+
+cat > subdir/Makefile.am << 'END'
+noinst_PROGRAMS = foo
+foo_SOURCES = foo.c
+foo_CFLAGS = -DBAR
+END
+
+rm -f compile depcomp
+
+$ACLOCAL || exit 1
+$AUTOMAKE --add-missing || exit 1
+
+test -f compile || exit 1
+test -f depcomp || exit 1
+
+sed -n -e '/^DIST_COMMON =.*\\$/ {
+   :loop
+   p
+   n
+   /\\$/ b loop
+   p
+   n
+   }' -e '/^DIST_COMMON =/ p' Makefile.in | grep compile || exit 1
+
+sed -n -e '/^DIST_COMMON =.*\\$/ {
+   :loop
+   p
+   n
+   /\\$/ b loop
+   p
+   n
+   }' -e '/^DIST_COMMON =/ p' Makefile.in | grep depcomp || exit 1

-- 
Alexandre Duret-Lutz



reply via email to

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