kernel-doc nano-HOWTO ===================== ソースツリー内には、ブロックコメント形式で関数を説明した抽出可能な資料 がたくさんあります。このシステムのコンポーネントは次のとおりです。 - scripts/kernel-doc ブロックコメントを探しそれらを直接 DocBook, man, text, HTML へマーク アップできる perl スクリプトです (texinfo はできません)。 - Documentation/DocBook/*.tmpl SGML テンプレートファイルです。普通の SGML ファイルで、抽出された資 料がどこに配置されるべきか指示する特別な場所を保持しています。 - scripts/docproc.c SGML テンプレートファイルを SGML ファイルに変換するためのプログラム です。資料化される関数の一覧を伴って kernel-doc を起動します。 - scripts/gen-all-syms C のファイル一覧内の EXPORT_SYMBOL シンボルをリストするスクリプトで す。 - scripts/docgen このスクリプトは、どの関数が資料化されることになっている (このリスト は gen-all-syms で得られます) か指定し、docproc を起動します。 - Makefile Documentation/DocBook 内に DocBook ファイル、PostScript ファイル、 PDF ファイル、html ファイルを作成するために、ターゲットしてそれぞれ 'sgmldocs', 'psdocs', 'pdfdocs', 'htmldocs' が使用されます。 - Documentation/DocBook/Makefile どの C ファイルが SGML テンプレートと関係するか示しています。 資料の抽出方法 -------------- 様々なサブシステム (Documentation/DocBook/*.tmpl を参照してください) の既製の本を単に読みたいなら、単に 'make psdocs', 'make pdfdocs', 'make htmldocs' のいずれかをあなたの好みにより入力してください。それ以 外の異なるフォーマットで読みたいなら、'make sgmldocs' と入力した後、 DocBook ツールを使用し Documentation/DocBook/*.sgml を希望するフォーマッ トに変換できます (例えば 'make htmldocs' を指定しなかったなら、 'db2html ...')。 man ページを代わりに参照したければ、次で行えます。 $ cd linux $ scripts/kernel-doc -man $(find -name '*.c') | split-man.pl /tmp/man $ scripts/kernel-doc -man $(find -name '*.h') | split-man.pl /tmp/man split-man.pl を以下に示します。 --> #!/usr/bin/perl if ($#ARGV < 0) { die "where do I put the results?\n"; } mkdir $ARGV[0],0777; $state = 0; while () { if (/^\.TH \"[^\"]*\" 4 \"([^\"]*)\"/) { if ($state == 1) { close OUT } $state = 1; $fn = "$ARGV[0]/$1.4"; print STDERR "Creating $fn\n"; open OUT, ">$fn" or die "can't open $fn: $!\n"; print OUT $_; } elsif ($state != 0) { print OUT $_; } } close OUT; <-- あるファイル内のある関数の資料だけを見たければ、次で行えます。 $ scripts/kernel-doc -man -function fn file | nroff -man | less あるいは次の方法で - $ scripts/kernel-doc -text -function fn file ソースファイルへの抽出可能な資料の追加方法 ------------------------------------------ ブロックコメントの書式は以下のようなものです。 /** * function_name(:)? (- short description)? (* @parameterx: (description of parameter x)?)* (* a blank line)? * (Description:)? (Description of function)? * (section header: (section description)? )* (*)?*/ 簡単な関数の説明 (short description) は複数行にできませんが、他の説明 (description) は複数行にできます (また空行も含むことができます)。関数 名の後に見せかけの空行を置かないでください。さもないと説明が繰り返され てしまいます。 さらに説明文はすべて、次の特別なパターンの場合、適切に強調が施されます。 'funcname()' - 関数 '$ENVVAR' - 環境変数 '&struct_name' - 構造体名 ('struct' を含む二つまでの単語) '@parameter' - 引き数名 '%CONST' - 定数名 例はソースツリー内をながめてください。 新しい SGML テンプレートファイルの作成方法 ------------------------------------------ SGML テンプレートファイル (*.tmpl) は、抽出された資料が挿入されるべき 場所を示すエスケープシーケンスを含むことができる以外は、普通の SGML ファ イルと同様です。 !E<ファイル名> は <ファイル名> 内の EXPORT_SYMBOL を使用してエキスポー トされている関数の資料と置きかえられます - 関数の一覧は Documentation/DocBook/Makefile 内に記載されたファイル群から集められま す。 !I<ファイル名> は EXPORT_SYMBOL を使用してエキスポートされていない関数 の資料と置きかえられます。 !F<ファイル名> <関数 [関数...]> は <ファイル名> 内で記載された関数の資 料と置きかえられます。 Tim. */ 日本語訳:野本浩一