#!/usr/bin/perl -w
#
+# subdirmk - &-filter (makefile generation program)
+# Copyright 2019 Ian Jackson
+# SPDX-License-Identifier: LGPL-2.0-or-later
+#
# $(srcdir)/subdirmk/generate [--srcdir=SRCDIR] [--] SUBDIR...
#
# generates in each subdirectory from in each subdirectory
# Subdir.mk.tmp Subdir.sd.mk
-# Makefile
+# Makefile and included files
# and in toplevel and in toplevel
# main.mk.tmp Perdir.sd.mk
my $cd = $depth ? join('/', ('..',) x $depth) : '.';
o <<END;
default: all
- \@: \$@
%: FORCE-ALWAYS-RUN
- \$(MAKE) -C $cd -f main.mk ${dir_prefix}\$@
+ \@:
Makefile FORCE-ALWAYS-RUN:
- \@: \$@
+ \$(MAKE) -C $cd -f main.mk \$(addprefix ${dir_prefix},\$(or \$(MAKECMDGOALS),all))
.SUFFIXES:
+.PHONY: FORCE-ALWAYS-RUN
END
}
for (;;) {
unless (s{^(.*?)(\\)?(?=$esc)}{}) { o $_; last; }
o $1;
- if ($2) { o $$esclitr; next; }
+ if ($2) { s#^$esc##; o $$esclitr; next; }
s{^$esc}{} or die "$_ ?";
if (s{^$esc}{}) { o "$$esclitr$$esclitr" }
elsif (s{^TARGETS(?:_([0-9a-zA-Z_]+))?(?=\W)}{}) {
s{(?<=[ \t])(?=\S)(?!\\\s*$)}{$prefix}g;
o $_;
$_ = $after;
+ } elsif (s{^\#}{}) {
+ $_ = '';
} elsif (s{^![ \t]+}{}) {
o $_;
$_ = '';
}
print O "\n";
}
-
+
return @targets;
}
foreach my $v (qw(top_srcdir abs_top_srcdir)) {
o "$v=\@$v@\n";
}
- o "MAKEFILES += Subdir.mk\n";
+ o "MAKEFILES :=\n";
+ o "MAKEFILE_TEMPLATES :=\n";
+ o "SUBDIRMK_MAKEFILES += Subdir.mk\n";
foreach my $subdir (@subdirs) {
- o "MAKEFILES += $subdir/Subdir.mk\n";
+ o "SUBDIRMK_MAKEFILES += $subdir/Subdir.mk\n";
}
foreach my $input (sort keys %input_files) {
o "MAKEFILE_TEMPLATES += $input\n";
}
- o "include \$(MAKEFILES)";
+ o "include \$(SUBDIRMK_MAKEFILES)";
}
build_tree();