GIT 0.99.9f
[git.git] / Documentation / build-docdep.perl
1 #!/usr/bin/perl
2
3 my %include = ();
4 my %included = ();
5
6 for 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???
21 my $changed = 1;
22 while ($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
45 while (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 }