]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
For AC_CONFIG_LINKS(X,X), do not clean X in a non-VPATH build.
authorRalf Wildenhues <Ralf.Wildenhues@gmx.de>
Tue, 17 Jun 2008 22:11:36 +0000 (00:11 +0200)
committerRalf Wildenhues <Ralf.Wildenhues@gmx.de>
Tue, 17 Jun 2008 22:11:36 +0000 (00:11 +0200)
* automake.in (rewrite_inputs_into_dependencies): Do distribute
inputs where input and output name are equal.  This relies on
the assumption that it only happens with AC_CONFIG_LINKS.
(handle_configure) <CONFIG_CLEAN_VPATH_FILES>: New variable, for
links where source and dest are equal.
* lib/am/clean.am (distclean-generic): Remove, if build tree not
equal source tree.
* tests/conflnk4.test: New test.
* tests/Makefile.am: Adjust.
* NEWS: Update.

Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
14 files changed:
ChangeLog
Makefile.in
NEWS
automake.in
doc/Makefile.in
lib/Automake/Makefile.in
lib/Automake/tests/Makefile.in
lib/Makefile.in
lib/am/Makefile.in
lib/am/clean.am
m4/Makefile.in
tests/Makefile.am
tests/Makefile.in
tests/conflnk4.test [new file with mode: 0755]

index 4f0a80975951c3b1ae41ba533644e8f2476fdc53..927437de0ad7cf4b34051e8567564fd3a923c13c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2008-06-18  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
+
+       For AC_CONFIG_LINKS(X,X), do not clean X in a non-VPATH build.
+       * automake.in (rewrite_inputs_into_dependencies): Do distribute
+       inputs where input and output name are equal.  This relies on
+       the assumption that it only happens with AC_CONFIG_LINKS.
+       (handle_configure) <CONFIG_CLEAN_VPATH_FILES>: New variable, for
+       links where source and dest are equal.
+       * lib/am/clean.am (distclean-generic): Remove, if build tree not
+       equal source tree.
+       * tests/conflnk4.test: New test.
+       * tests/Makefile.am: Adjust.
+       * NEWS: Update.
+
 2008-06-06  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
        * doc/automake.texi (Extending): Fix ambivalent wording.
index fb1b8c12d5603c774f05995f2f784f9646f38e7e..c9792af0b7d1089f8075f2bb86281bfcd0d5f5ef 100644 (file)
@@ -51,6 +51,7 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
  configure.lineno config.status.lineno
 mkinstalldirs = $(SHELL) $(top_srcdir)/lib/mkinstalldirs
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 am__installdirs = "$(DESTDIR)$(bindir)"
 binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
 SCRIPTS = $(bin_SCRIPTS)
@@ -609,6 +610,7 @@ clean-generic:
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
diff --git a/NEWS b/NEWS
index 4230abbe8d1251e6b240568bb338d912f20ed964..181ba05eb04a0d970ab52105dad3e3f7d9834674 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -63,6 +63,10 @@ New in 1.10a:
   - New macro AM_COND_IF for conditional evaluation and conditional
     config files.
 
+  - For AC_CONFIG_LINKS, if source and destination are equal, do not
+    remove the file in a non-VPATH build.  Such setups work with Autoconf
+    2.62 or newer.
+
 Bugs fixed in 1.10a:
 
 * Long standing bugs:
index 68647e9c62f53b4d024815a01e6f0afb011647cf..dc431feeb5a4c39d830a56fded27b86642fe5222 100755 (executable)
@@ -3936,7 +3936,7 @@ sub prepend_srcdir (@)
 # Compute a list of dependencies appropriate for the rebuild
 # rule of
 #   AC_CONFIG_FILES($OUTPUT:$INPUT[0]:$INPUTS[1]:...)
-# Also distribute $INPUTs which are not build by another AC_CONFIG_FILES.
+# Also distribute $INPUTs which are not built by another AC_CONFIG_FOOS.
 sub rewrite_inputs_into_dependencies ($@)
 {
   my ($file, @inputs) = @_;
@@ -3947,7 +3947,7 @@ sub rewrite_inputs_into_dependencies ($@)
       # We cannot create dependencies on shell variables.
       next if (substitute_ac_subst_variables $i) =~ /\$/;
 
-      if (exists $ac_config_files_location{$i})
+      if (exists $ac_config_files_location{$i} && $i ne $file)
        {
          my $di = dirname $i;
          if ($di eq $relative_dir)
@@ -4152,6 +4152,8 @@ sub handle_configure ($$$@)
   # Now look for other files in this directory which must be remade
   # by config.status, and generate rules for them.
   my @actual_other_files = ();
+  # These get cleaned only in a VPATH build.
+  my @actual_other_vpath_files = ();
   foreach my $lfile (@other_input_files)
     {
       my $file;
@@ -4242,7 +4244,14 @@ sub handle_configure ($$$@)
                  $local = undef;
                }
            }
-         push @actual_other_files, $local if $local;
+         if ($file ne $link)
+           {
+             push @actual_other_files, $local if $local;
+           }
+         else
+           {
+             push @actual_other_vpath_files, $local if $local;
+           }
        }
 
       # Do not process sources that contain shell variables.
@@ -4267,6 +4276,8 @@ sub handle_configure ($$$@)
   # These files get removed by "make distclean".
   define_pretty_variable ('CONFIG_CLEAN_FILES', TRUE, INTERNAL,
                          @actual_other_files);
+  define_pretty_variable ('CONFIG_CLEAN_VPATH_FILES', TRUE, INTERNAL,
+                         @actual_other_vpath_files);
 }
 
 # Handle C headers.
index 5f5dc8e76120c249a71640cfda058c6af0dd66c3..f4b2249b9c410b2fdf3bacbc0a82f570c885c32e 100644 (file)
@@ -50,6 +50,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(SHELL) $(top_srcdir)/lib/mkinstalldirs
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
 INFO_DEPS = $(srcdir)/automake.info
@@ -518,6 +519,7 @@ clean-generic:
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
index 088a405eda90a2a5c49f36c994733cbf804d1d9f..a03bd0f0190762786185986b71687919fd8fe816 100644 (file)
@@ -48,6 +48,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(SHELL) $(top_srcdir)/lib/mkinstalldirs
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
 RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
@@ -508,6 +509,7 @@ clean-generic:
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
index 636ee82a3a2edf8d9907f318998dda1b6facfe6f..8d9cd996d692faa98d8e313f675768e126409c84 100644 (file)
@@ -46,6 +46,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(SHELL) $(top_srcdir)/lib/mkinstalldirs
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
 # If stdout is a non-dumb tty, use colors.  If test -t is not supported,
@@ -327,6 +328,7 @@ clean-generic:
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
index 2cb7cdca603ffe3ecab5b7a0598af0c6d98aeedc..72a2376d226df0d95a9f0caa5efefb1667aac338 100644 (file)
@@ -51,6 +51,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(SHELL) $(top_srcdir)/lib/mkinstalldirs
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
 RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
@@ -483,6 +484,7 @@ clean-generic:
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
index c3366b3de697232a23caf39f2f8366e7fab8ce0c..c4c7d8f5cda8db67dd8528f12a78e1db91e29eb6 100644 (file)
@@ -48,6 +48,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(SHELL) $(top_srcdir)/lib/mkinstalldirs
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
@@ -305,6 +306,7 @@ clean-generic:
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
index f3dd2c6f270565239e5001b1cb1fc929b5a911ba..d74daca3718f8e8f12bbd5dce3ea9d5dd841fe0c 100644 (file)
@@ -1,5 +1,5 @@
 ## automake - create Makefile.in from Makefile.am
-## Copyright (C) 1994, 1995, 1996, 1998, 1999, 2001, 2003, 2004
+## Copyright (C) 1994, 1995, 1996, 1998, 1999, 2001, 2003, 2004, 2008
 ## Free Software Foundation, Inc.
 
 ## This program is free software; you can redistribute it and/or modify
@@ -29,6 +29,7 @@ clean-generic:
 distclean-am: distclean-generic clean-am
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 %DISTCLEAN_RMS%
 
 ## Makefiles and their dependencies cannot be cleaned by
index 3a8fbcdbf75dcd7713e43cf67003171131891e4c..39690cb22ddcbd4ed3030ca85c962740bd2a3219 100644 (file)
@@ -48,6 +48,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(SHELL) $(top_srcdir)/lib/mkinstalldirs
 CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
@@ -302,6 +303,7 @@ clean-generic:
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
index 8cddc579e9b4dc36ee99b13d8ec8216a19c9cbc2..45624affae0da0e731a213e53a79b08a468a445b 100644 (file)
@@ -181,6 +181,7 @@ confincl.test \
 conflnk.test \
 conflnk2.test \
 conflnk3.test \
+conflnk4.test \
 confsub.test \
 confvar.test \
 confvar2.test \
index 1ba9947e79b834a1fbf388b2e0479fe3145973f9..766ab9d50d8e84942b6ca3dcdca74649132fec2c 100644 (file)
@@ -47,6 +47,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(SHELL) $(top_srcdir)/lib/mkinstalldirs
 CONFIG_CLEAN_FILES = defs aclocal-${APIVERSION} automake-${APIVERSION}
+CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
 DIST_SOURCES =
 # If stdout is a non-dumb tty, use colors.  If test -t is not supported,
@@ -331,6 +332,7 @@ confincl.test \
 conflnk.test \
 conflnk2.test \
 conflnk3.test \
+conflnk4.test \
 confsub.test \
 confvar.test \
 confvar2.test \
@@ -971,6 +973,7 @@ clean-generic:
 
 distclean-generic:
        -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
diff --git a/tests/conflnk4.test b/tests/conflnk4.test
new file mode 100755 (executable)
index 0000000..6fc3fb7
--- /dev/null
@@ -0,0 +1,96 @@
+#! /bin/sh
+# Copyright (C) 2003, 2008 Free Software Foundation, Inc.
+#
+# This file is part of GNU Automake.
+#
+# GNU Automake is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Automake is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Automake; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+# Test to make sure links to _identical files_ created by AC_CONFIG_LINKS get
+# removed with `make distclean' only if doing a VPATH build.
+
+. ./defs || exit 1
+
+set -e
+
+mkdir nonmk-subdir sdir sdir/mk-subdir
+: > src
+: > sdir/Makefile.am
+: > sdir/src2
+: > nonmk-subdir/src3
+: > sdir/mk-subdir/src4
+
+cat >> Makefile.am <<'EOF'
+SUBDIRS = sdir
+test: distdir
+       test -f $(distdir)/src
+       test -f $(distdir)/sdir/src2
+EOF
+
+cat >>configure.in << 'EOF'
+AC_CONFIG_FILES(sdir/Makefile)
+AC_CONFIG_LINKS(src:src)
+AC_CONFIG_LINKS(sdir/src2:sdir/src2)
+AC_CONFIG_LINKS(nonmk-subdir/src3:nonmk-subdir/src3)
+AC_CONFIG_LINKS(sdir/mk-subdir/src4:sdir/mk-subdir/src4)
+AC_OUTPUT
+EOF
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+mkdir build
+cd build
+../configure
+
+# TODO: Make sure links are distributed
+$MAKE test
+
+# Make sure nothing is deleted by `make clean'
+$MAKE clean
+
+test -f ../src
+test -f ../sdir/src2
+test -f ../nonmk-subdir/src3
+test -f ../sdir/mk-subdir/src4
+
+# Make sure the links are deleted by `make distclean' and the original files
+# are not.
+$MAKE distclean
+
+test -f ../src
+test -f ../sdir/src2
+test -f ../nonmk-subdir/src3
+test -f ../sdir/mk-subdir/src4
+
+test -r src && exit 1
+test -r sdir/src2 && exit 1
+test -r nonmk-subdir/src3 && exit 1
+test -r sdir/mk-subdir/src4 && exit 1
+
+cd ..
+./configure
+
+# TODO: Make sure links are distributed
+$MAKE test
+
+# Make sure nothing is deleted by `make distclean'
+$MAKE distclean
+
+test -f src
+test -f sdir/src2
+test -f nonmk-subdir/src3
+test -f sdir/mk-subdir/src4