summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2023-01-03 21:46:38 -0500
committerMike Frysinger <vapier@gentoo.org>2023-01-09 00:07:42 -0500
commitf15852df5f71631cfc4f03c0b8897b0a20fc79d3 (patch)
treebc4eae3c0f0706a376378092d45494a13dfc7eff
parent2c0a22f9c7e05fac0c33e1e241bfc6e2d8df210b (diff)
downloadautomake-f15852df5f71631cfc4f03c0b8897b0a20fc79d3.tar.gz
rm: convert more cases to am__rm_f
Fixes automake bug https://bugs.gnu.org/10828. Clean up a few more cases where we were doing `test ... || rm ...` to avoid calling `rm -f` without arguments by leveraging am__rm_f. These were harder to find in the source due to their constructed nature. The clean programs rules in particular were much more complicated than they needed to be. This logic boiled down to two things: delete the list of programs, and then delete the list without the exeext suffix, but only if the list of programs is non-empty. The check-TESTS rule was converted to am__rm_f, but a simplification was missed where the $list variable is inlined. * bin/automake.in: Delete test -z logic and always call am__rm_f. * contrib/check-html.am: Use $(am__rm_f) helper. * doc/automake.texi: Update examples to match current behavior. * lib/am/check.am: Inline $list variable. * lib/am/progs.am: Rewrite rule to use $(am__rm_f).
-rw-r--r--bin/automake.in7
-rw-r--r--contrib/check-html.am3
-rw-r--r--doc/automake.texi6
-rw-r--r--lib/am/check.am4
-rw-r--r--lib/am/progs.am9
5 files changed, 9 insertions, 20 deletions
diff --git a/bin/automake.in b/bin/automake.in
index b847a0993..306913279 100644
--- a/bin/automake.in
+++ b/bin/automake.in
@@ -4733,12 +4733,7 @@ sub handle_clean
prog_error 'invalid entry in %clean_files'
unless exists $rms{$when};
- my $rm = "rm -f $file";
- # If file is a variable, make sure when don't call 'rm -f' without args.
- $rm ="test -z \"$file\" || $rm"
- if ($file =~ /^\s*\$(\(.*\)|\{.*\})\s*$/);
-
- push @{$rms{$when}}, "\t-$rm\n";
+ push @{$rms{$when}}, "\t-\$(am__rm_f) $file\n";
}
$output_rules .= file_contents
diff --git a/contrib/check-html.am b/contrib/check-html.am
index 1588acf2e..27bb62e8e 100644
--- a/contrib/check-html.am
+++ b/contrib/check-html.am
@@ -24,8 +24,7 @@ TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html)
mostlyclean-local: mostlyclean-check-html
.PHONY: mostlyclean-check-html
mostlyclean-check-html:
-## Expand $(TEST_LOGS) only once, to avoid exceeding line length limits.
- list='$(TEST_LOGS:.log=.html)'; test -z "$$list" || rm -f $$list
+ $(am__rm_f) $(TEST_LOGS:.log=.html)
rm -f $(TEST_SUITE_HTML)
.log.html:
diff --git a/doc/automake.texi b/doc/automake.texi
index 58156d9bf..ec14c5c4c 100644
--- a/doc/automake.texi
+++ b/doc/automake.texi
@@ -7527,8 +7527,8 @@ if you try to run @samp{make foo} explicitly:
@example
% make clean
-test -z "bindir.h" || rm -f bindir.h
-test -z "foo" || rm -f foo
+rm -f bindir.h
+rm -f foo
rm -f *.o
% : > .deps/foo.Po # Suppress previously recorded dependencies
% make foo
@@ -11324,7 +11324,7 @@ gcc -Wall -o foo main.o func.o
@i{Clean up, so that we can rebuild everything from scratch.}
% @kbd{make clean}
-test -z "foo" || rm -f foo
+rm -f foo
rm -f *.o
@i{Silent rules enabled: the output is minimal but informative. In
diff --git a/lib/am/check.am b/lib/am/check.am
index f0c9ddfbe..eca793582 100644
--- a/lib/am/check.am
+++ b/lib/am/check.am
@@ -405,8 +405,8 @@ RECHECK_LOGS = $(TEST_LOGS)
## ------------------------------------------ ##
check-TESTS: %CHECK_DEPS%
- @list='$(RECHECK_LOGS)'; $(am__rm_f) $$list
- @list='$(RECHECK_LOGS:.log=.trs)'; $(am__rm_f) $$list
+ @$(am__rm_f) $(RECHECK_LOGS)
+ @$(am__rm_f) $(RECHECK_LOGS:.log=.trs)
## We always have to remove $(TEST_SUITE_LOG), to ensure its rule is run
## in any case even in lazy mode: otherwise, if no test needs rerunning,
## or a prior run plus reruns all happen within the same timestamp (can
diff --git a/lib/am/progs.am b/lib/am/progs.am
index 0b74cca2e..e665a1f51 100644
--- a/lib/am/progs.am
+++ b/lib/am/progs.am
@@ -114,13 +114,8 @@ clean-%DIR%PROGRAMS:
## Cleaning the '_libs/' or '.libs/' directory is done from clean-libtool.
## FIXME: In the future (i.e., when it works) it would be nice to delegate
## this task to "libtool --mode=clean".
-?LIBTOOL? @list='$(%DIR%_PROGRAMS)'; test -n "$$list" || exit 0; \
-?LIBTOOL? echo " rm -f" $$list; \
-?LIBTOOL? rm -f $$list || exit $$?; \
-?LIBTOOL? test -n "$(EXEEXT)" || exit 0; \
-?LIBTOOL? list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
-?LIBTOOL? echo " rm -f" $$list; \
-?LIBTOOL? rm -f $$list
+?LIBTOOL? $(am__rm_f) $(%DIR%_PROGRAMS)
+?LIBTOOL? test -z "$(EXEEXT)" || $(am__rm_f) $(%DIR%_PROGRAMS:$(EXEEXT)=)
## ---------- ##