mirror of
				https://gitlab.labs.nic.cz/labs/bird.git
				synced 2024-05-11 16:54:54 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			68 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			68 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", "Doc"); }
 | |
|     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;
 | |
| }
 |