1
1
openwrt/tools/automake/patches/310-maintainer-clean-built_sources.patch
Michael Pratt 6d2bfe50d3 tools/automake: control all cleaning with clean variables
Automake previously makes rules for the target maintainer-clean
to remove both the contents of MAINTAINERCLEANFILES and BUILT_SOURCES.

In order to have finer control over what is removed,
let there only be a rule for deleting MAINTAINERCLEANFILES,
and set MAINTAINERCLEANFILES to a default value of BUILT_SOURCES
if only conditional or missing, and append BUILT_SOURCES if user-defined.

In order to maintain conditional values for MAINTAINERCLEANFILES
while keeping a default value, change the behavior of automake
to output unconditional definitions before conditions.

Signed-off-by: Michael Pratt <mcpratt@pm.me>
Link: https://github.com/openwrt/openwrt/pull/16522
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-07-26 14:38:08 +02:00

50 lines
2.0 KiB
Diff

--- a/bin/automake.in
+++ b/bin/automake.in
@@ -4745,12 +4745,42 @@ sub handle_clean
if var ('CLEANFILES');
$clean_files{'$(DISTCLEANFILES)'} = DIST_CLEAN
if var ('DISTCLEANFILES');
- $clean_files{'$(MAINTAINERCLEANFILES)'} = MAINTAINER_CLEAN
- if var ('MAINTAINERCLEANFILES');
# Built sources are automatically removed by maintainer-clean.
- $clean_files{'$(BUILT_SOURCES)'} = MAINTAINER_CLEAN
- if var ('BUILT_SOURCES');
+ # For each defined condition of the maintainer-clean variable, append built sources
+ # and create an unconditional definition with built sources if not already defined.
+ # Then, for each definition of built sources without maintainer-clean defined, define it.
+ # Otherwise, if the variable is not user-defined, define it with built sources.
+ my $mcleanvar = var ('MAINTAINERCLEANFILES');
+ if ($mcleanvar) {
+ foreach my $rcond ($mcleanvar->conditions->conds)
+ {
+ if (! grep { $_ eq '$(BUILT_SOURCES)' } $mcleanvar->value_as_list ($rcond)) {
+ Automake::Variable::define ($mcleanvar->name, VAR_MAKEFILE, '+', $rcond,
+ '$(BUILT_SOURCES)', '', INTERNAL, VAR_ASIS)
+ if vardef ('BUILT_SOURCES', $rcond);
+ }
+ }
+ my $bsources = var ('BUILT_SOURCES');
+ if ($bsources) {
+ foreach my $rcond ($bsources->conditions->conds)
+ {
+ Automake::Variable::define ($mcleanvar->name, VAR_MAKEFILE, '', $rcond,
+ '$(BUILT_SOURCES)', '', INTERNAL, VAR_ASIS)
+ if ! vardef ($mcleanvar, $rcond);
+ }
+ if (! vardef ($mcleanvar, TRUE)) {
+ Automake::Variable::define ($mcleanvar->name, VAR_MAKEFILE, '', TRUE,
+ '$(BUILT_SOURCES)', '', INTERNAL, VAR_ASIS);
+ }
+ }
+ } else {
+ Automake::Variable::define ('MAINTAINERCLEANFILES', VAR_MAKEFILE, '', TRUE,
+ '$(BUILT_SOURCES)', '', INTERNAL, VAR_ASIS)
+ if var ('BUILT_SOURCES');
+ }
+ $clean_files{'$(MAINTAINERCLEANFILES)'} = MAINTAINER_CLEAN
+ if var ('MAINTAINERCLEANFILES');
# Compute a list of "rm"s to run for each target.
my %rms = (MOSTLY_CLEAN, [],