2007-06-24  Benoit Sigoure  <tsuna@lrde.epita.fr>

	* automake.in, aclocal.in: New option `--clean'.
	($clean, @files_installed): New.
	* automake.in (&require_conf_file): Save the list of files to be
	removed in @files_installed.
	(trace_used_macros): Invoke `autom4te --clean' in clean mode.
	* aclocal.in (&install_file, &write_aclocal): Likewise.
	* NEWS: Mention the new option.
	* configure.ac: Define am_AUTOM4TE like am_AUTOCONF.
	* tests/Makefile.am: Add the new test.
	* tests/defs.in: Set $AUTOM4TE.
	* tests/unbootstrap.test: New.  Test the new --clean feature as well
	as combination of --clean and --dry-run.
	* doc/automake.texi: Mention the new options of automake and aclocal.

Index: Makefile.in
===================================================================
RCS file: /sources/automake/automake/Makefile.in,v
retrieving revision 1.539
diff -u -r1.539 Makefile.in
--- Makefile.in	28 Mar 2007 22:27:13 -0000	1.539
+++ Makefile.in	24 Jun 2007 22:15:52 -0000
@@ -124,6 +124,7 @@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 am_AUTOCONF = @am_AUTOCONF@
+am_AUTOM4TE = @am_AUTOM4TE@
 am__leading_dot = @am__leading_dot@
 am__tar = @am__tar@
 am__untar = @am__untar@
Index: NEWS
===================================================================
RCS file: /sources/automake/automake/NEWS,v
retrieving revision 1.327
diff -u -r1.327 NEWS
--- NEWS	23 Jun 2007 08:30:46 -0000	1.327
+++ NEWS	24 Jun 2007 22:15:53 -0000
@@ -21,6 +21,9 @@
   - install-sh supports -C, which does not update the installed file
     (and its time stamps) if the contents did not change.
 
+  - automake and aclocal support a new `--clean' option that undoes the job
+    done by `--add-missing'.
+
 Bugs fixed in 1.10a:
 
 * Long standing bugs:
Index: aclocal.in
===================================================================
RCS file: /sources/automake/automake/aclocal.in,v
retrieving revision 1.141
diff -u -r1.141 aclocal.in
--- aclocal.in	23 Jun 2007 08:30:46 -0000	1.141
+++ aclocal.in	24 Jun 2007 22:15:53 -0000
@@ -8,7 +8,7 @@
 # aclocal - create aclocal.m4 by scanning configure.ac
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006  Free Software Foundation, Inc.
+# 2005, 2006, 2007  Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -77,6 +77,12 @@
 # Option --force.
 my $force_output = 0;
 
+# Option --clean.
+my $clean = 0;
+
+# Files to remove with --clean.
+my @files_installed;
+
 # Modification time of the youngest dependency.
 my $greatest_mtime = 0;
 
@@ -248,6 +254,11 @@
 	    if $res;
 	  unlink_tmp;
 	}
+      elsif ($clean)
+	{
+	  # Remember that we must remove this file once we're finished.
+	  push (@files_installed, $dest);
+	}
       elsif (!$dry_run)
 	{
 	  xsystem ('cp', $src, $dest);
@@ -686,6 +697,7 @@
     }
 
   $tracefh->close;
+  xsystem ("$traces --clean $configure_ac") if $clean and not $dry_run;
 
   return %traced;
 }
@@ -773,6 +785,14 @@
       return 0;
     }
 
+  # We are now about to output `$output_file'.  If we're in clean mode, we
+  # shall just stop here.
+  if ($clean)
+    {
+      push (@files_installed, $output_file);
+      return 1;
+    }
+
   # Nothing to output?!
   # FIXME: Shouldn't we diagnose this?
   return 1 if ! length ($output);
@@ -858,6 +878,7 @@
 
 Options:
       --acdir=DIR           directory holding config files (for debugging)
+      --clean               remove files installed by aclocal
       --diff[=COMMAND]      run COMMAND [diff -u] on M4 files that would be
                               changed (implies --install and --dry-run)
       --dry-run             pretend to, but do not actually update any file
@@ -916,6 +937,7 @@
      'diff:s'		=> \$diff_command,
      'dry-run'		=> \$dry_run,
      'force'		=> \$force_output,
+     'clean'		=> \$clean,
      'I=s'		=> \@user_includes,
      'install'          => \$install,
      'output=s'		=> \$output_file,
@@ -987,6 +1009,11 @@
       $dry_run = 1;
     }
 
+  if ($clean && $install)
+    {
+      fatal 'Cannot install and clean at the same time';
+    }
+
   if ($install && !@user_includes)
     {
       fatal ("--install should copy macros in the directory indicated by the"
@@ -1051,7 +1078,27 @@
     last if write_aclocal ($output_file, keys %macro_traced);
     last if $dry_run;
   }
-check_acinclude;
+check_acinclude unless $clean;
+
+if ($clean)
+  {
+    if ($dry_run)
+      {
+        foreach my $cleanfile (@files_installed)
+	  {
+	    print "rm -f $cleanfile\n"
+	      unless not -e $cleanfile;
+	  }
+      }
+    else
+      {
+        foreach my $cleanfile (@files_installed)
+	  {
+	    unlink $cleanfile or fatal "Failed to remove `$cleanfile': $!"
+	      unless not -e $cleanfile;
+	  }
+      }
+  }
 
 exit $exit_code;
 
Index: automake.in
===================================================================
RCS file: /sources/automake/automake/automake.in,v
retrieving revision 1.1645
diff -u -r1.1645 automake.in
--- automake.in	3 May 2007 17:57:41 -0000	1.1645
+++ automake.in	24 Jun 2007 22:15:55 -0000
@@ -291,6 +291,12 @@
 # TRUE if we should copy missing files; otherwise symlink if possible.
 my $copy_missing = 0;
 
+# TRUE if we shoud remove files that would otherwise be installed (--clean).
+my $clean = 0;
+
+# List of files to be removed when we're finished (--clean).
+my @files_installed;
+
 # TRUE if we should always update files that we know about.
 my $force_missing = 0;
 
@@ -3894,7 +3900,7 @@
 	{
 	  msg ('error', $ac_config_files_location{$file},
 	       "required file `$i' not found")
-	    unless $i =~ /\$/ || exists $output_files{$i} || -f $i;
+	    unless $i =~ /\$/ || exists $output_files{$i} || -f $i || $clean;
 	  ($i) = prepend_srcdir ($i);
 	  push_dist_common ($i);
 	}
@@ -7296,6 +7302,7 @@
     $macro = rvar ($macro) unless ref $macro;
     if ($config_libobj_dir)
       {
+	# FIXME: Do we need to put @files in @files_installed when --clean?
 	require_file_internal ($macro->rdef ($cond)->location, $mystrict,
 			       $config_libobj_dir, @files);
       }
@@ -7312,6 +7319,7 @@
 {
     my ($where, $mystrict, @files) = @_;
     require_file_internal ($where, $mystrict, $config_aux_dir, @files);
+    push (@files_installed, map { $_ = $config_aux_dir . '/' . $_ } @files);
 }
 
 
@@ -7532,10 +7540,17 @@
   # defined or overridden variables.
   $output_vars .= output_variables;
 
-  check_typos;
-
   my ($out_file) = $output_directory . '/' . $makefile_in;
 
+  if ($clean && -e $out_file)
+    {
+      unlink ($out_file)
+	or fatal "cannot remove $out_file: $!\n";
+      return;
+    }
+
+  check_typos;
+
   if ($exit_code != 0)
     {
       verb "not writing $out_file because of earlier errors";
@@ -7604,6 +7619,7 @@
       --help               print this help, then exit
       --version            print version number, then exit
   -v, --verbose            verbosely list files processed
+      --clean              remove files installed by automake
       --no-force           only update Makefile.in's that are out of date
   -W, --warnings=CATEGORY  report the warnings falling in CATEGORY
 
@@ -7721,6 +7737,7 @@
      'o|output-dir=s'	=> \$output_directory,
      'a|add-missing' 	=> \$add_missing,
      'c|copy' 	        => \$copy_missing,
+     'clean' 	        => \$clean,
      'v|verbose' 	=> sub { setup_channel 'verb', silent => 0; },
      'W|warnings=s'     => \&parse_warnings,
      # These long options (--Werror and --Wno-error) for backward
@@ -7764,6 +7781,8 @@
       # In the next release we'll remove this entirely.
       $output_directory = '.';
     }
+  msg 'fatal', "Cannot install missing files and clean at the same time\n"
+    if $add_missing and $clean;
 
   return unless @ARGV;
 
@@ -7860,6 +7879,15 @@
       }
   }
 
+if ($clean)
+  {
+    foreach my $cleanfile (@files_installed)
+      {
+	unlink $cleanfile or fatal "Failed to remove `$cleanfile': $!"
+	  unless not -e $cleanfile;
+      }
+  }
+
 exit $exit_code;
 
 
Index: configure.ac
===================================================================
RCS file: /sources/automake/automake/configure.ac,v
retrieving revision 1.34
diff -u -r1.34 configure.ac
--- configure.ac	15 Oct 2006 19:21:49 -0000	1.34
+++ configure.ac	24 Jun 2007 22:15:57 -0000
@@ -31,6 +31,8 @@
 # way we can run Autoconf tests from configure (or from the test
 # suite) without being bothered by `missing'.
 AC_SUBST([am_AUTOCONF], ["${AUTOCONF-autoconf}"])
+# Likewise for autom4te.
+AC_SUBST([am_AUTOM4TE], ["${AUTOM4TE-autom4te}"])
 
 AM_INIT_AUTOMAKE([1.8a dist-bzip2 filename-length-max=99])
 
Index: doc/Makefile.in
===================================================================
RCS file: /sources/automake/automake/doc/Makefile.in,v
retrieving revision 1.66
diff -u -r1.66 Makefile.in
--- doc/Makefile.in	28 Mar 2007 22:27:14 -0000	1.66
+++ doc/Makefile.in	24 Jun 2007 22:15:57 -0000
@@ -122,6 +122,7 @@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 am_AUTOCONF = @am_AUTOCONF@
+am_AUTOM4TE = @am_AUTOM4TE@
 am__leading_dot = @am__leading_dot@
 am__tar = @am__tar@
 am__untar = @am__untar@
Index: doc/automake.texi
===================================================================
RCS file: /sources/automake/automake/doc/automake.texi,v
retrieving revision 1.167
diff -u -r1.167 automake.texi
--- doc/automake.texi	3 May 2007 17:57:41 -0000	1.167
+++ doc/automake.texi	24 Jun 2007 22:16:02 -0000
@@ -2383,6 +2383,10 @@
 When used with @option{--add-missing}, causes installed files to be
 copied.  The default is to make a symbolic link.
 
+@item --clean
+@opindex --clean
+Remove the files that would be installed by @option{--add-missing}.
+
 @item --cygnus
 @opindex --cygnus
 Causes the generated @file{Makefile.in}s to follow Cygnus rules, instead
@@ -2949,6 +2953,10 @@
 Look for the macro files in @var{dir} instead of the installation
 directory.  This is typically used for debugging.
 
+@item --clean
+@opindex --clean
+Remove the files that would otherwise be installed.
+
 @item --diff[=@var{command}]
 @opindex --diff
 Run @var{command} on M4 file that would be installed or overwritten
Index: lib/Makefile.in
===================================================================
RCS file: /sources/automake/automake/lib/Makefile.in,v
retrieving revision 1.138
diff -u -r1.138 Makefile.in
--- lib/Makefile.in	28 Mar 2007 22:27:14 -0000	1.138
+++ lib/Makefile.in	24 Jun 2007 22:16:02 -0000
@@ -121,6 +121,7 @@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 am_AUTOCONF = @am_AUTOCONF@
+am_AUTOM4TE = @am_AUTOM4TE@
 am__leading_dot = @am__leading_dot@
 am__tar = @am__tar@
 am__untar = @am__untar@
Index: lib/Automake/Makefile.in
===================================================================
RCS file: /sources/automake/automake/lib/Automake/Makefile.in,v
retrieving revision 1.149
diff -u -r1.149 Makefile.in
--- lib/Automake/Makefile.in	28 Mar 2007 22:27:14 -0000	1.149
+++ lib/Automake/Makefile.in	24 Jun 2007 22:16:02 -0000
@@ -118,6 +118,7 @@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 am_AUTOCONF = @am_AUTOCONF@
+am_AUTOM4TE = @am_AUTOM4TE@
 am__leading_dot = @am__leading_dot@
 am__tar = @am__tar@
 am__untar = @am__untar@
Index: lib/Automake/tests/Makefile.in
===================================================================
RCS file: /sources/automake/automake/lib/Automake/tests/Makefile.in,v
retrieving revision 1.80
diff -u -r1.80 Makefile.in
--- lib/Automake/tests/Makefile.in	28 Mar 2007 22:27:14 -0000	1.80
+++ lib/Automake/tests/Makefile.in	24 Jun 2007 22:16:02 -0000
@@ -94,6 +94,7 @@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 am_AUTOCONF = @am_AUTOCONF@
+am_AUTOM4TE = @am_AUTOM4TE@
 am__leading_dot = @am__leading_dot@
 am__tar = @am__tar@
 am__untar = @am__untar@
Index: lib/am/Makefile.in
===================================================================
RCS file: /sources/automake/automake/lib/am/Makefile.in,v
retrieving revision 1.124
diff -u -r1.124 Makefile.in
--- lib/am/Makefile.in	28 Mar 2007 22:27:14 -0000	1.124
+++ lib/am/Makefile.in	24 Jun 2007 22:16:02 -0000
@@ -105,6 +105,7 @@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 am_AUTOCONF = @am_AUTOCONF@
+am_AUTOM4TE = @am_AUTOM4TE@
 am__leading_dot = @am__leading_dot@
 am__tar = @am__tar@
 am__untar = @am__untar@
Index: m4/Makefile.in
===================================================================
RCS file: /sources/automake/automake/m4/Makefile.in,v
retrieving revision 1.285
diff -u -r1.285 Makefile.in
--- m4/Makefile.in	28 Mar 2007 22:27:14 -0000	1.285
+++ m4/Makefile.in	24 Jun 2007 22:16:02 -0000
@@ -105,6 +105,7 @@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 am_AUTOCONF = @am_AUTOCONF@
+am_AUTOM4TE = @am_AUTOM4TE@
 am__leading_dot = @am__leading_dot@
 am__tar = @am__tar@
 am__untar = @am__untar@
Index: tests/Makefile.am
===================================================================
RCS file: /sources/automake/automake/tests/Makefile.am,v
retrieving revision 1.621
diff -u -r1.621 Makefile.am
--- tests/Makefile.am	29 Mar 2007 23:26:48 -0000	1.621
+++ tests/Makefile.am	24 Jun 2007 22:16:02 -0000
@@ -583,6 +583,7 @@
 txinfo30.test \
 txinfo31.test \
 transform.test \
+unbootstrap.test \
 unused.test \
 upc.test \
 upc2.test \
Index: tests/Makefile.in
===================================================================
RCS file: /sources/automake/automake/tests/Makefile.in,v
retrieving revision 1.809
diff -u -r1.809 Makefile.in
--- tests/Makefile.in	29 Mar 2007 23:26:48 -0000	1.809
+++ tests/Makefile.in	24 Jun 2007 22:16:03 -0000
@@ -95,6 +95,7 @@
 abs_top_builddir = @abs_top_builddir@
 abs_top_srcdir = @abs_top_srcdir@
 am_AUTOCONF = @am_AUTOCONF@
+am_AUTOM4TE = @am_AUTOM4TE@
 am__leading_dot = @am__leading_dot@
 am__tar = @am__tar@
 am__untar = @am__untar@
@@ -716,6 +717,7 @@
 txinfo30.test \
 txinfo31.test \
 transform.test \
+unbootstrap.test \
 unused.test \
 upc.test \
 upc2.test \
Index: tests/defs.in
===================================================================
RCS file: /sources/automake/automake/tests/defs.in,v
retrieving revision 1.42
diff -u -r1.42 defs.in
--- tests/defs.in	10 Jan 2007 17:57:24 -0000	1.42
+++ tests/defs.in	24 Jun 2007 22:16:03 -0000
@@ -73,6 +73,7 @@
 test -z "$PERL" && PERL='@PERL@'
 test -z "$MAKE" && MAKE=make
 test -z "$AUTOCONF" && AUTOCONF="@am_AUTOCONF@"
+test -z "$AUTOM4TE" && AUTOM4TE="@am_AUTOM4TE@"
 test -z "$AUTOHEADER" && AUTOHEADER="@AUTOHEADER@"
 test -z "$AUTOUPDATE" && AUTOUPDATE=autoupdate
 test -z "$MISSING" && MISSING=`pwd`/../lib/missing
Index: tests/unbootstrap.test
===================================================================
--- /dev/null	2007-06-25 00:15:07.000000000 +0200
+++ tests/unbootstrap.test	2007-06-23 16:36:16.000000000 +0200
@@ -0,0 +1,71 @@
+#! /bin/sh
+# Copyright (C) 2007  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 2, 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 that automake and aclocal --clean remove all the files installed
+# by --add-missing.
+
+. ./defs || exit 1
+
+# We can't always diff with `/dev/null' (DU 5.0 refuses).
+touch testdiff$$
+# Use `diff -u' when possible.
+if at_diff=`diff -u "testdiff$$" "testdiff$$" 2>&1` && test -z "$at_diff"
+then
+  at_diff='diff -u'
+else
+  at_diff=diff
+fi
+rm -f testdiff$$
+
+# We need a version of autom4te that has --clean.
+$AUTOM4TE --help | grep ' --clean' >/dev/null || exit 77
+
+# We need to run this test in a clean subdir.
+test -e chiche && rm -rf chiche
+set -e
+
+# Run the test in a subdir.
+mkdir chiche
+cd chiche
+
+cat >configure.ac << 'END'
+AC_INIT([unbootstrap], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+END
+: >Makefile.am
+
+# Create files so that they are listed in list.before
+touch list.after list.during
+find . | sort >list.before
+$ACLOCAL
+$AUTOMAKE --add-missing
+
+find . | sort >list.during
+$ACLOCAL --clean --dry-run
+find . | sort >list.after
+$at_diff list.during list.after
+
+$AUTOMAKE --clean
+$ACLOCAL --clean
+
+find . | sort >list.after
+
+$at_diff list.before list.after
