Annotation of embedaddon/bird2/tools/progdoc, revision 1.1.1.1

1.1       misho       1: #!/usr/bin/perl
                      2: 
                      3: $srcdir = $ARGV[0];
                      4: $out = $ARGV[1];
                      5: 
                      6: open(OUT, ">", $out) || die "Cannot create output file";
                      7: process($srcdir, "doc/prog-root");
                      8: close OUT;
                      9: gen_deps();
                     10: exit 0;
                     11: 
                     12: sub include {
                     13:   my $f = shift @_;
                     14:   open(IN, "$f") || die "Unable to find $f";
                     15:   push(@deps, "$f");
                     16:   while (<IN>) {
                     17:     print OUT;
                     18:   }
                     19:   close IN;
                     20: }
                     21: 
                     22: sub process {
                     23:   my $dir = shift @_;
                     24:   my $doc = "$dir/" . shift @_;
                     25:   print "$doc\n";
                     26:   open(IN, $doc) || die "Unable to read $doc";
                     27:   push(@deps, $doc);
                     28:   my @docfile = <IN>;
                     29:   close IN;
                     30:   foreach $_ (@docfile) {
                     31:     chomp;
                     32:     /^#/ && next;
                     33:     /^([A-Z]+)\s*(.*)/ || die "Parse error: $_";
                     34:     $cmd = $1;
                     35:     $arg = $2;
                     36:     if ($cmd eq "C") { process("$dir/$arg", "Doc"); }
                     37:     elsif ($cmd eq "H") {
                     38:       push @stack, "H";
                     39:       print OUT "<chapt>$arg\n";
                     40:     } elsif ($cmd eq "S") {
                     41:       print "    $arg\n";
                     42:       my @files = map("$dir/$_", split(' ', $arg));
                     43:       my $fargs = join(' ', @files);
                     44:       open(DOC, "$srcdir/doc/kernel-doc -bird $fargs |") || die "Unable to start kernel-doc";
                     45:       push(@deps, @files);
                     46:       while (<DOC>) { print OUT; }
                     47:       close DOC;
                     48:     } elsif ($cmd eq "D") {
                     49:       print "    $arg\n";
                     50:       include("$dir/$arg");
                     51:     } else { die "Unknown command: $cmd"; }
                     52:   }
                     53: }
                     54: 
                     55: sub gen_deps {
                     56:   open(DEP, ">", "$out.d");
                     57:   print DEP "$out:";
                     58:   foreach $f (@deps) {
                     59:     print DEP " \\\n  $f";
                     60:   }
                     61:   print DEP "\n\n";
                     62: 
                     63:   foreach $f (@deps) {
                     64:     print DEP "$f:\n\n";
                     65:   }
                     66:   close DEP;
                     67: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>