X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=build-aux%2Fsubdirmk-setup;h=11d0f26c8b131d459951ec3a393accf47ae7b7d3;hb=8a218c94fb8d09a8225d1055555aba0a18b0dbc6;hp=c1866f6bcb29ae5f48858a6c3353e691972046dd;hpb=a423046ad42c0fbdf7fd3afad88dfe57dfbd30ca;p=subdirmk.git diff --git a/build-aux/subdirmk-setup b/build-aux/subdirmk-setup index c1866f6..11d0f26 100644 --- a/build-aux/subdirmk-setup +++ b/build-aux/subdirmk-setup @@ -8,41 +8,38 @@ use strict; -our $root = [ '.', [ ] ]; -# each node is [ 'relative subdir name', \@children ] - -sub build_tree () { - foreach my $subdir (@ARGV) { - my @path = $subdir eq '.' ? () : split m{/+}, $subdir; - my $node = $root; - foreach my $d (@path) { - my ($c,) = grep { $_->[0] eq $d } @{ $node->[1] }; - if (!$c) { - $c = [ $d, [ ] ]; - push @{ $node->[1] }, $c; - } - $node = $c; - } - } -} - - +our @allsubdirs = @ARGV; sub write_makefile ($$) { - my ($subdir,$depth) = @_; + my ($subdir,$depth) start_output_file("Makefile"); my $cd = $depth ? join('/', ('..',) x $depth) : '.'; print O < list of descendant subdirs + my ($here) = (@_); + my $prefix = $here eq '.' ? qr{} : qr{$prefix/}; + my @children = grep { m{^$prefix[^/]+$} } @allsubdirs; + my @descendants; + foreach my $child (@children) { + push @descendants, require_subdir( + + $subdir, grep { $_ =~ m{^$subdir/} } + printf O "include $_/Subdir.mk" + + + sub process_subdir ($$) { my ($subdir) = @_; my $depth = $subdir eq '.' ? 0 : scalar split m{/+}, $subdir; write_makefile($subdir,$depth); - filter_subdir_mk(); + require_subdir($subdir); } -build_tree(); +foreach (@allsubdirs) { process_subdir($_); }