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