commented early_printk patch because of rejects.
[linux-flexiantxendom0-3.2.10.git] / scripts / split-man
1 #!/usr/bin/perl
2
3 use strict;
4
5 ## Copyright (C) Michael Still (mikal@stillhq.com)
6 ## Released under the terms of the GNU GPL
7 ##
8 ## Hoon through the specified DocBook SGML file, and split out the
9 ## man pages. These can then be processed into groff format, and
10 ## installed if desired...
11 ##
12 ## Arguements: $1 -- the name of the sgml file
13 ##             $2 -- the directory to put the generated SGML files in
14 ##             $3 -- kernel version
15
16 my($SGML, $REF, $front, $refdata, $mode, $filename);
17
18 if(($ARGV[0] eq "") || ($ARGV[1] eq "") || ($ARGV[2] eq "")){
19   die "Usage: split-man <sgml file> <output dir> <kernel version>\n";
20 }
21
22 open SGML, "< $ARGV[0]" or die "Could not open input file \"$ARGV[0]\"\n";
23 if( ! -d "$ARGV[1]" ){
24   die "Output directory \"$ARGV[1]\" does not exist\n";
25 }
26
27 # Possible modes:
28 #   0: Looking for input I care about
29 #   1: Inside book front matter
30 #   2: Inside a refentry
31 #   3: Inside a refentry, and we know the filename
32
33 $mode = 0;
34 $refdata = "";
35 $front = "";
36 while(<SGML>){
37   # Starting modes
38   if(/<legalnotice>/){
39     $mode = 1;
40   }
41   elsif(/<refentry>/){
42     $mode = 2;
43   }
44   elsif(/<refentrytitle><phrase[^>]*>([^<]*)<.*$/){
45     $mode = 3;
46     $filename = $1;
47
48     $filename =~ s/struct //;
49     $filename =~ s/typedef //;
50
51     print "Found manpage for $filename\n";
52     open REF, "> $ARGV[1]/$filename.sgml" or
53       die "Couldn't open output file \"$ARGV[1]/$filename.sgml\": $!\n";
54     print REF "<!DOCTYPE refentry PUBLIC \"-//Davenport//DTD DocBook V3.0//EN\">\n\n";
55     print REF "$refdata";
56     $refdata = "";
57   }
58
59   # Extraction
60   if($mode == 1){
61     $front = "$front$_";
62   }
63   elsif($mode == 2){
64     $refdata = "$refdata$_";
65   }
66   elsif($mode == 3){
67     # There are some fixups which need to be applied
68     if(/<\/refmeta>/){
69       print REF "<manvolnum>9</manvolnum>\n";
70     }
71     if(/<\/refentry>/){
72       $front =~ s/<legalnotice>//;
73       $front =~ s/<\/legalnotice>//;
74       print REF <<EOF;
75 <refsect1><title>About this document</title>
76 $front
77 <para>
78 If you have comments on the formatting of this manpage, then please contact
79 Michael Still (mikal\@stillhq.com).
80 </para>
81
82 <para>
83 This documentation was generated with kernel version $ARGV[2].
84 </para>
85 </refsect1>
86 EOF
87     }
88
89     # For some reason, we title the synopsis twice in the main DocBook
90     if(! /<title>Synopsis<\/title>/){
91       if(/<refentrytitle>/){
92         s/struct //;
93         s/typedef //;
94       }
95
96       print REF "$_";
97     }
98   }
99
100   # Ending modes
101   if(/<\/legalnotice>/){
102     $mode = 0;
103   }
104   elsif(/<\/refentry>/){
105     $mode = 0;
106     close REF;
107   }
108 }
109
110 # And make sure we don't process this unnessesarily
111 $ARGV[0] =~ s/\.sgml/.9/;
112 `touch $ARGV[0]`;