chiark / gitweb /
CREDITS: Credit Mark properly (!)
[secnet.git] / subdirmk / generate
index aae2e481e5992fb0068ef1ff2b71a10af75c17e7..48db65246e79683812062458da23e654ac1c0a98 100755 (executable)
@@ -1,10 +1,14 @@
 #!/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
 
@@ -98,8 +102,9 @@ default: all
 %:     FORCE-ALWAYS-RUN
        \@:
 Makefile FORCE-ALWAYS-RUN:
-       \$(MAKE) -C $cd -f main.mk \$(addprefix ${dir_prefix},\$(MAKECMDGOALS))
+       \$(MAKE) -C $cd -f main.mk \$(addprefix ${dir_prefix},\$(or \$(MAKECMDGOALS),all))
 .SUFFIXES:
+.PHONY:        FORCE-ALWAYS-RUN
 END
 }
 
@@ -133,7 +138,7 @@ sub process_input_mk ($$$$$$$$) {
        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)}{}) {
@@ -160,6 +165,8 @@ sub process_input_mk ($$$$$$$$) {
                s{(?<=[ \t])(?=\S)(?!\\\s*$)}{$prefix}g;
                o $_;
                $_ = $after;
+           } elsif (s{^\#}{}) {
+               $_ = '';
            } elsif (s{^![ \t]+}{}) {
                o $_;
                $_ = '';
@@ -247,7 +254,7 @@ sub process_subtree ($$) {
        }
        print O "\n";
     }
-    
+
     return @targets;
 }
 
@@ -257,14 +264,16 @@ sub process_tree() {
     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();