Documentation / build-docdep.perlon commit CodingGuidelines: Add a note to avoid assignments inside if() (0b0b8cd)
   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        for my $i (keys %$included) {
  26            # $text has include::$i; if $i includes $j
  27            # $text indirectly includes $j.
  28            if (exists $include{$i}) {
  29                for my $j (keys %{$include{$i}}) {
  30                    if (!exists $include{$text}{$j}) {
  31                        $include{$text}{$j} = 1;
  32                        $included{$j} = 1;
  33                        $changed = 1;
  34                    }
  35                }
  36            }
  37        }
  38    }
  39}
  40
  41while (my ($text, $included) = each %include) {
  42    if (! exists $included{$text} &&
  43        (my $base = $text) =~ s/\.txt$//) {
  44        print "$base.html $base.xml : ", join(" ", keys %$included), "\n";
  45    }
  46}