Index: ChangeLog =================================================================== RCS file: /sources/automake/automake/ChangeLog,v retrieving revision 1.2989 diff -u -r1.2989 ChangeLog --- ChangeLog 3 May 2007 17:57:41 -0000 1.2989 +++ ChangeLog 16 Jun 2007 22:47:09 -0000 @@ -1,3 +1,11 @@ +2007-06-17 Benoit Sigoure + + * automake.in, aclocal.in: New option `--clean'. + ($clean, @files_installed): New. + * NEWS: Mention the new option. + * tests/Makefile.am, tests/Makefile.in: Add the new test. + * tests/bootclean.test: New. + 2007-05-03 Stepan Kasal * doc/automake.texi, lib/Automake/Rule.pm: Fix typos. 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 16 Jun 2007 22:47:10 -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 16 Jun 2007 22:47:10 -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); @@ -861,6 +880,7 @@ changed (implies --install and --dry-run) --dry-run pretend to, but do not actually update any file --force always update output file + --clean remove files installed by aclocal --help print this help, then exit -I DIR add directory to search list for .m4 files --install copy third-party files to the first -I directory @@ -915,6 +935,7 @@ 'diff:s' => \$diff_command, 'dry-run' => \$dry_run, 'force' => \$force_output, + 'clean' => \$clean, 'I=s' => address@hidden, '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 && address@hidden) { fatal ("--install should copy macros in the directory indicated by the" @@ -1050,7 +1076,17 @@ last if write_aclocal ($output_file, keys %macro_traced); last if $dry_run; } -check_acinclude; +check_acinclude unless $clean; + +if ($clean) + { + 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 16 Jun 2007 22:47:13 -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"; @@ -7605,6 +7620,7 @@ --version print version number, then exit -v, --verbose verbosely list files processed --no-force only update Makefile.in's that are out of date + --clean remove files installed by automake -W, --warnings=CATEGORY report the warnings falling in CATEGORY Dependency tracking: @@ -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: 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 16 Jun 2007 22:47:15 -0000 @@ -72,6 +72,7 @@ badline.test \ badprog.test \ block.test \ +bootclean.test \ bsource.test \ canon.test \ canon2.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 16 Jun 2007 22:47:15 -0000 @@ -205,6 +205,7 @@ badline.test \ badprog.test \ block.test \ +bootclean.test \ bsource.test \ canon.test \ canon2.test \ Index: tests/bootclean.test =================================================================== diff -u /dev/null tests/bootclean.test --- /dev/null 2007-06-17 00:23:24.000000000 +0200 +++ tests/bootclean.test 2007-06-16 23:56:05.000000000 +0200 @@ -0,0 +1,56 @@ +#! /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([auxdir], [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