bird/tools/progdoc
Jan Moskyto Matejka 7152e5efbb Build system reworked to one global Makefile with includes and no nesting
Also removed the lib-dir merging with sysdep. Updated #include's
accordingly.

Fixed make doc on recent Debian together with moving generated doc into
objdir.

Moved Makefile.in into root dir

Retired all.o and birdlib.a
Linking the final binaries directly from all the .o files.
2016-05-10 14:07:34 +02:00

67 lines
1.4 KiB
Perl
Executable file

#!/usr/bin/perl
$srcdir = $ARGV[0];
$out = $ARGV[1];
open(OUT, ">", $out) || die "Cannot create output file";
process($srcdir);
close OUT;
gen_deps();
exit 0;
sub include {
my $f = shift @_;
open(IN, "$f") || die "Unable to find $f";
push(@deps, "$f");
while (<IN>) {
print OUT;
}
close IN;
}
sub process {
my $dir = shift @_;
print "$dir/Doc\n";
open(IN, "$dir/Doc") || die "Unable to read $dir/Doc";
push(@deps, "$dir/Doc");
my @docfile = <IN>;
close IN;
foreach $_ (@docfile) {
chomp;
/^#/ && next;
/^([A-Z]+)\s*(.*)/ || die "Parse error: $_";
$cmd = $1;
$arg = $2;
if ($cmd eq "C") { process("$dir/$arg"); }
elsif ($cmd eq "H") {
push @stack, "H";
print OUT "<chapt>$arg\n";
} elsif ($cmd eq "S") {
print " $arg\n";
my @files = map("$dir/$_", split(' ', $arg));
my $fargs = join(' ', @files);
open(DOC, "$srcdir/doc/kernel-doc -bird $fargs |") || die "Unable to start kernel-doc";
push(@deps, @files);
while (<DOC>) { print OUT; }
close DOC;
} elsif ($cmd eq "D") {
print " $arg\n";
include("$dir/$arg");
} else { die "Unknown command: $cmd"; }
}
}
sub gen_deps {
open(DEP, ">", "$out.d");
print DEP "$out:";
foreach $f (@deps) {
print DEP " \\\n $f";
}
print DEP "\n\n";
foreach $f (@deps) {
print DEP "$f:\n\n";
}
close DEP;
}