1#!/usr/bin/perl
2
3my %include = ();
4my %included = ();
5
6for my $text (<*.txt>) {
7 open I, '<', $text || die "cannot read: $text";
8 while (<I>) {
9 if (/^include::/) {
10 chomp;
11 s/^include::\s*//;
12 s/\[\]//;
13 $include{$text}{$_} = 1;
14 $included{$_} = 1;
15 }
16 }
17 close I;
18}
19
20# Do we care about chained includes???
21my $changed = 1;
22while ($changed) {
23 $changed = 0;
24 while (my ($text, $included) = each %include) {
25 print STDERR "Looking at $text...\n";
26 for my $i (keys %$included) {
27 print STDERR "$text includes $i.\n";
28 # $text has include::$i; if $i includes $j
29 # $text indirectly includes $j.
30 if (exists $include{$i}) {
31 print STDERR "$i includes something.\n";
32 for my $j (keys %{$include{$i}}) {
33 print STDERR "$text includes $i include $j\n";
34 if (!exists $include{$text}{$j}) {
35 $include{$text}{$j} = 1;
36 $included{$j} = 1;
37 $changed = 1;
38 }
39 }
40 }
41 }
42 }
43}
44
45while (my ($text, $included) = each %include) {
46 if (! exists $included{$text} &&
47 (my $base = $text) =~ s/\.txt$//) {
48 my ($suffix) = '1';
49 if ($base eq 'git') {
50 $suffix = '7'; # yuck...
51 }
52 print "$base.html $base.$suffix : ", join(" ", keys %$included), "\n";
53 }
54}