6ff35e02faf386f103fd691d8ccca346e181614c
   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}