2000-11-09 20:16:21

by Christoph Hellwig

[permalink] [raw]
Subject: [PATCH] generate man pages from inline documentation

Hi Linus,

this patch adds some infrastructure and modifies scripts/kernel-doc to
support generating man pages from the inline documentation.

Please apply (for all the poeple that prefer man pages over sgml)

Christoph

P.S. it does also removed an older stub for this that slipped in some
time ago.

--
Always remember that you are unique. Just like everyone else.


diff -uNr --exclude-from=dontdiff linux-2.4.0t11p1/Documentation/DocBook/Makefile linux/Documentation/DocBook/Makefile
--- linux-2.4.0t11p1/Documentation/DocBook/Makefile Thu Oct 19 13:21:14 2000
+++ linux/Documentation/DocBook/Makefile Thu Nov 9 21:50:26 2000
@@ -82,11 +82,6 @@
$(TOPDIR)/scripts/docgen $(APISOURCES) \
<kernel-api.tmpl >kernel-api.sgml

-kernel-api-man: $(APISOURCES)
- @rm -rf $(TOPDIR)/Documentation/man
- $(TOPDIR)/scripts/kernel-doc -man $^ | \
- $(PERL) $(TOPDIR)/scripts/split-man $(TOPDIR)/Documentation/man
-
parportbook: $(JPG-parportbook)
parportbook.ps: $(EPS-parportbook)
parportbook.sgml: parportbook.tmpl $(TOPDIR)/drivers/parport/init.c
diff -uNr --exclude-from=dontdiff linux-2.4.0t11p1/Makefile linux/Makefile
--- linux-2.4.0t11p1/Makefile Thu Nov 9 15:50:14 2000
+++ linux/Makefile Thu Nov 9 21:50:26 2000
@@ -82,6 +82,13 @@
export MODLIB

#
+# MANPATH specifies where to install the manpages created from
+# inline documentation
+#
+
+MANDIR := /usr/share/man
+
+#
# standard CFLAGS
#

@@ -371,6 +378,7 @@
rm -f net/khttpd/times.h
rm -f submenu*
rm -rf modules
+ rm -rf Documentation/man
$(MAKE) -C Documentation/DocBook clean

mrproper: clean archmrproper
@@ -421,6 +429,25 @@

htmldocs: sgmldocs
$(MAKE) -C Documentation/DocBook html
+
+mandocs:
+ @rm -rf $(TOPDIR)/Documentation/man
+ chmod 755 $(TOPDIR)/scripts/kernel-doc
+ chmod 755 $(TOPDIR)/scripts/split-man
+ ( \
+ find include/asm-$(ARCH) -name '*.h' -print; \
+ find $(SUBDIRS) init -name '*.c' -print; \
+ find include -type d \( -name "asm-*" -o -name config \) \
+ -prune -o -name '*.h' -print \
+ ) | xargs $(TOPDIR)/scripts/kernel-doc | \
+ $(TOPDIR)/scripts/split-man \
+ $(TOPDIR)/Documentation/man
+
+install-man: mandocs
+ test -d $(MANDIR)/man9 || mkdir -p $(MANDIR)/man9
+ cp $(TOPDIR)/Documentation/man/*.9 $(MANDIR)/man9
+
+

sums:
find . -type f -print | sort | xargs sum > .SUMS
diff -uNr --exclude-from=dontdiff linux-2.4.0t11p1/scripts/kernel-doc linux/scripts/kernel-doc
--- linux-2.4.0t11p1/scripts/kernel-doc Wed Oct 18 15:54:06 2000
+++ linux/scripts/kernel-doc Thu Nov 9 22:04:55 2000
@@ -537,7 +537,7 @@
my ($parameter, $section);
my $count;

- print ".TH \"$args{'module'}\" 4 \"$args{'function'}\" \"25 May 1998\" \"API Manual\" LINUX\n";
+ print ".TH \"$args{'function'}\" 9 \"$args{'function'}\" \"25 May 1998\" LINUX\n";

print ".SH NAME\n";
print $args{'function'}." \\- ".$args{'purpose'}."\n";
@@ -563,13 +563,13 @@
$parenth = "";
}

- print ".SH Arguments\n";
+ print ".SH ARGUMENTS\n";
foreach $parameter (@{$args{'parameterlist'}}) {
print ".IP \"".$parameter."\" 12\n";
output_highlight($args{'parameters'}{$parameter});
}
foreach $section (@{$args{'sectionlist'}}) {
- print ".SH \"$section\"\n";
+ print ".SH \"", uc $section, "\"\n";
output_highlight($args{'sections'}{$section});
}
}
diff -uNr --exclude-from=dontdiff linux-2.4.0t11p1/scripts/split-man linux/scripts/split-man
--- linux-2.4.0t11p1/scripts/split-man Thu Jan 1 01:00:00 1970
+++ linux/scripts/split-man Thu Nov 9 21:50:26 2000
@@ -0,0 +1,33 @@
+#!/usr/bin/perl
+#
+# split-man: create man pages from kernel-doc -man output
+#
+# Author: Tim Waugh <[email protected]>
+# Modified by: Christoph Hellwig <[email protected]>
+#
+
+use strict;
+
+die "$0: where do I put the results?\n" unless ($#ARGV >= 0);
+die "$0: can't create $ARGV[0]: $!\n" unless mkdir $ARGV[0], 0777;
+
+my $state = 0;
+
+while (<STDIN>) {
+ s/&amp;(\w+)/\\fB\1\\fP/g; # fix smgl uglinesses
+ s/\$(\w+)/\\fI\1\\fP/g;
+ if (/^\.TH \"[^\"]*\" 9 \"([^\"]*)\"/) {
+ close OUT unless ($state++ == 0);
+ my $fn = "$ARGV[0]/$1.9";
+ if (open OUT, ">$fn") {
+ print STDERR "creating $fn\n";
+ } else {
+ die "can't open $fn: $!\n";
+ }
+ print OUT $_;
+ } elsif ($state != 0) {
+ print OUT $_;
+ }
+}
+
+close OUT;