1e0fccd1af
It reduces clutter in root and also avoid collision with doc dir on case-insensitive filesystems when name back to Doc.
67 lines
1.4 KiB
Perl
Executable file
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, "doc/prog-root");
|
|
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 @_;
|
|
my $doc = "$dir/" . shift @_;
|
|
print "$doc\n";
|
|
open(IN, $doc) || die "Unable to read $doc";
|
|
push(@deps, $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", "progdoc"); }
|
|
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;
|
|
}
|