chiark / gitweb /
11d0f26c8b131d459951ec3a393accf47ae7b7d3
[subdirmk.git] / build-aux / subdirmk-setup
1 #!/usr/bin/perl -w
2 #
3 # $(srcdir)/build-aux/subdirmk-setup SUBDIR...
4 #
5 # generates
6 #   Subdir.mk.tmp
7 #   Makefile.tmp
8
9 use strict;
10
11 our @allsubdirs = @ARGV;
12
13 sub write_makefile ($$) {
14     my ($subdir,$depth)
15     start_output_file("Makefile");
16     my $cd = $depth ? join('/', ('..',) x $depth) : '.';
17     print O <<END;
18 # autogenerated - do not edit
19 %:
20         \$(MAKE) -C $cd $subdir/\$@
21 END
22 }
23
24 sub require_subdir ($) {
25     # => list of descendant subdirs
26     my ($here) = (@_);
27     my $prefix = $here eq '.' ? qr{} : qr{$prefix/};
28     my @children = grep { m{^$prefix[^/]+$} } @allsubdirs;
29     my @descendants;
30     foreach my $child (@children) {
31         push @descendants, require_subdir(
32
33         $subdir, grep { $_ =~ m{^$subdir/} } 
34     printf O "include $_/Subdir.mk"
35         
36
37
38 sub process_subdir ($$) {
39     my ($subdir) = @_;
40     my $depth = $subdir eq '.' ? 0 : scalar split m{/+}, $subdir;
41     write_makefile($subdir,$depth);
42     require_subdir($subdir);
43 }
44
45 foreach (@allsubdirs) { process_subdir($_); }