Quoting Ralf Wildenhues <[EMAIL PROTECTED]>:

Hello Benoit,

* Benoit Sigoure wrote on Sun, Jun 17, 2007 at 01:16:35AM CEST:

I've reviewed the patches I proposed back in March, completed them with
tests, ChangeLog and NEWS entries.  If they are accepted, I'll write the
documentation.

Please write the documentation.  ;-)

PPS: Although this would belong to
{autoconf,automake,[EMAIL PROTECTED], I only sent it to the
Autoconf ML because Autoconf has the biggest patch and I expect Automake
and Libtool maintainers to see this message.  I hope my assumption
wasn't wrong :)

Well.  One purpose of the different lists is that, a couple of years
down the road, one can still dig out useful information from the
archives.  And I personally tend to look for patches to some package
only in my $PACKACKE-patches list archive.  So please send each patch to
its list.  Thank you.


2007-06-17  Benoit Sigoure  <[EMAIL PROTECTED]>

        * 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.
        * aclocal.in (&install_file, &write_aclocal): Likewise.
        * NEWS: Mention the new option.
        * tests/Makefile.am, tests/Makefile.in: Add the new test.
        * tests/unbootstrap.test: New.

--
Benoit Sigoure aka Tsuna
EPITA Research and Development Laboratory

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.

Index: NEWS
===================================================================
RCS file: /sources/automake/automake/NEWS,v
retrieving revision 1.326
diff -u -r1.326 NEWS
--- NEWS        29 Mar 2007 23:01:59 -0000      1.326
+++ NEWS        18 Jun 2007 22:20:06 -0000
@@ -15,6 +15,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.140
diff -u -r1.140 aclocal.in
--- aclocal.in  14 Oct 2006 17:40:25 -0000      1.140
+++ aclocal.in  18 Jun 2007 22:20:06 -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);
@@ -773,6 +784,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);
@@ -857,6 +876,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
@@ -915,6 +935,7 @@
      'diff:s'          => \$diff_command,
      'dry-run'         => \$dry_run,
      'force'           => \$force_output,
+     'clean'           => \$clean,
      'I=s'             => [EMAIL PROTECTED],
      'install'          => \$install,
      'output=s'                => \$output_file,
@@ -986,6 +1007,11 @@
       $dry_run = 1;
     }
 
+  if ($clean && $install)
+    {
+      fatal 'Cannot install and clean at the same time';
+    }
+
   if ($install && [EMAIL PROTECTED])
     {
       fatal ("--install should copy macros in the directory indicated by the"
@@ -1050,7 +1076,29 @@
     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;
+         }
+        print "rm -rf autom4te.cache\n";
+      }
+    else
+      {
+        foreach my $cleanfile (@files_installed)
+         {
+           unlink $cleanfile or fatal "Failed to remove `$cleanfile': $!"
+             unless not -e $cleanfile;
+         }
+        system ('rm -rf autom4te.cache');
+      }
+  }
 
 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 18 Jun 2007 22:20:08 -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;
 
@@ -7068,7 +7074,7 @@
       # The default auxiliary directory is the first
       # of ., .., or ../.. that contains install-sh.
       # Assume . if install-sh doesn't exist yet.
-      for my $dir (qw (. .. ../..))
+      for my $dir (qw(. .. ../..))
        {
          if (-f "$dir/install-sh")
            {
@@ -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
@@ -7860,6 +7877,15 @@
       }
   }
 
+if ($clean)
+  {
+    foreach my $cleanfile (@files_installed)
+      {
+       unlink $cleanfile or fatal "Failed to remove `$cleanfile': $!"
+         unless not -e $cleanfile;
+      }
+  }
+
 exit $exit_code;
 
 
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   18 Jun 2007 22:20:13 -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.
 
[EMAIL PROTECTED] --clean
[EMAIL PROTECTED] --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.
 
[EMAIL PROTECTED] --clean
[EMAIL PROTECTED] --clean
+Remove the files that would otherwise be installed.
+
 @item [EMAIL PROTECTED]
 @opindex --diff
 Run @var{command} on M4 file that would be installed or overwritten
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   18 Jun 2007 22:20:13 -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   18 Jun 2007 22:20:14 -0000
@@ -716,6 +716,7 @@
 txinfo30.test \
 txinfo31.test \
 transform.test \
+unbootstrap.test \
 unused.test \
 upc.test \
 upc2.test \
Index: tests/unbootstrap.test
===================================================================
--- /dev/null   2007-06-19 00:18:28.000000000 +0200
+++ tests/unbootstrap.test      2007-06-18 15:35:28.000000000 +0200
@@ -0,0 +1,55 @@
+#! /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
+
+set -e
+
+# Run the test in a subdir.
+mkdir frob
+cd frob
+
+# The "./." is here so we don't have to mess with subdirs.
+cat > configure.ac << 'END'
+AC_INIT([unbootstrap], [1.0])
+AM_INIT_AUTOMAKE
+AC_CONFIG_FILES([Makefile])
+END
+: > Makefile.am
+
+touch list.after
+find . >list.before
+$ACLOCAL
+$AUTOMAKE --add-missing
+$AUTOMAKE --clean
+$ACLOCAL --clean
+
+find . >list.after
+
+res=false
+
+diff -u list.before list.after && res=:
+
+cd ..
+rm -rf frob
+$res

Reply via email to