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