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).
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
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:
@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
@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
## ------------------------------------------ ##
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
## 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)=)
## ---------- ##