Go to the first, previous, next, last section, table of contents.


@command{configure}スクリプトの作成

Autoconfが生成するコンフィギュレーションスクリプトは,慣習的に @command{configure}と呼ばれます.実行時に,@command{configure}はいくつ かのファイルを作成し,そこで,コンフィギュレーションパラメータを適切な 値に置換します.@command{configure}が作成するファイルは以下の通りです.

Autoconfを用いて@command{configure}スクリプトを作成するために, Autoconfの入力ファイル`configure.ac'(または`configure.in') を書き,@command{autoconf}をそこで実行する必要があります.Autoconfでも たらされたものを補うために独自の機能テストを書く場合, `aclocal.m4'`acsite.m4'という名のファイルも書くことになる でしょう.#defineディレクティブを含むCヘッダファイルを使用する 場合,@command{autoheader}も実行し,パッケージで生成されるファイル `config.h.in'を配布することになるでしょう.

コンフィギュレーションで使用可能なファイルを生成する方法は,以下で示す 図の用になります.実行するプログラムには,`*'が付いています.オプ ションのファイルは角カッコ(`[]')で囲っています. @command{autoconf}と @command{autoheader}は,Autoconfでインストールさ れる(`autoconf.m4'が読む)マクロファイルも読み込みます.

ソフトウェアパッケージを配布する準備で使用されるファイルは,以下のよう になっています.

your source files --> [autoscan*] --> [configure.scan] --> configure.ac

configure.ac --.
               |   .------> autoconf* -----> configure
[aclocal.m4] --+---+
               |   `-----> [autoheader*] --> [config.h.in]
[acsite.m4] ---'

Makefile.in -------------------------------> Makefile.in

ソフトウェアパッケージのコンフィグレーションで使用されるファイルは,以 下のようになっています.

                       .-------------> [config.cache]
configure* ------------+-------------> config.log
                       |
[config.h.in] -.       v            .-> [config.h] -.
               +--> config.status* -+               +--> make*
Makefile.in ---'                    `-> Makefile ---'

`configure.ac'を書く

ソフトウェアパッケージの@command{configure}スクリプトを生成するため, パッケージが必要とする,または利用可能なシステムの特徴をテストする Autoconfマクロの呼び出しを含んでいる,`configure.ac'と呼ばれるファ イルを作成してください.Autoconfマクロには,多くの特徴を調査するものは すでに存在しています.それら関する記述は,section 存在の調査を参照し てください.ほとんどのその他の特徴に対しては,カスタムチェックを生成す るAutoconfのテンプレートマクロを使用することが可能です.それらに関する 詳細は,section テストを書くを参照してください.特にトリッキーな,また は専門的な特徴に対して,`configure.ac'に,若干の手作りのシェルコ マンドを含める必要もあるでしょう.@command{autoscan}プログラムは `configure.ac' を書くための良いきっかけ与えてくれます.(詳細は, see section `configure.ac'を作成するために@command{autoscan}を使用する).

Autoconfのこれまでのバージョンでは,名前`configure.in'を勧めてい ましたが,それは曖昧で(このファイルを処理するために必要なツールは,拡 張子では分かりません),`config.h.in'などで(`.in'は "@command{configure}で生成される"という意味では)ちょっと混乱していま した.現在では,`configure.ac'の使用が好まれます.

シェルスクリプトコンパイラ

他のコンピュータ言語のために,Autoconfで`configure.ac'を正しくプ ログラムするために,言語が解決しようとする問題がで,そうする ためにどうするのかを理解する必要があります.

Autoconfが解決する問題は,世界が混乱しているということです.結局,全て の異なる種類のシステムでパッケージのコンパイルを簡単にするために Autoconfを使用しますが,それを極端に嫌う人も中にはいます.Autoconf自身 は,これらの差を価値あるものとして扱います.@command{configure}をこれ らの全てのシステムで実行する必要があり,そのため,@command{configure} には,機能的にそれらの最小公倍数に制限する必要があります.

通常,シェルスクリプトを考えるでしょう.@command{autoconf}が必要でしょ うか?正しく書かれたシェル関数の組み合わせで,手で@command{configure} スクリプトを書くことを十分に簡単にします.ああ!残念ながら,シェル関数 は最小公倍数ではありません.そのため,関数を定義しそれを十回使用したい ところで,その本体を十回コピーする必要があるでしょう.

そのため,本当に必要なものは,コンパイラのようなもの,すなわち @command{autoconf},Autoconfプログラムが受け入れるもの,すなわち `configure.ac',そして,それを移植性の高いシェルスクリプト @command{configure}に変換するものです.

どのようにして,@command{autoconf}がこの作業を実行するのでしょう?

可能性としては明らかに二つあります.新しい言語を作成すること,または既 存のものを拡張することです.前者は非常に魅力的です.あらゆる最適化が簡 単に実装可能で,Autoconfプログラムで厳密なチェックを実行することが可能 です(例えば,移植性のないあらゆる構成物は除外します).あるいは, sh(Bourne shell) 言語のように,既存の言語を拡張することが可能で す.

Autoconfは後者の方法でで行なっています.それはshの最上位層です. そのため,マクロを展開するものとして@command{autoconf}を実装することが 最も便利になっています.マクロ呼び出しをマクロの本体で置換し,最終的に ピュアなshスクリプトを生成しながら,テキスト入力でマクロ展 開(macro expansion)を繰り返し実行するプログラムです.Autoconfマクロの 展開に専念して実装する代わりに,M4のような既存の一般的な目的を持つマク ロ言語を使用し,M4マクロの組み合わせとして拡張部分を実装する方が自然で す.

Autoconf言語

Autoconf言語は,プレーンテキスト同様に実際のコードを扱うので,多くの他 のコンピュータ言語と全く異なります.例えばCでは,データと命令は全く異 なる構文上のステータスとなりますが,Autoconfでは,それらのステータスは 厳密に同じです.このため,我々はリテラル文字列を展開されたテキストと区 別する手段が必要です.それは引用符です.

引数をとるマクロを呼び出すとき,マクロ名と開いているカッコの間に空白が あってはなりません.引数は,M4の引用符文字`['`]'で囲み,カ ンマで分けるべきです.引数が単純なテキストのときは,引用符がなくても大 丈夫かもしれませんが,他のマクロの呼び出しのような複雑な引数は, 常に引用符で囲んでください.この規則は,他のマクロからの呼び出 しを含め,全てのマクロ呼び出しで再帰的に適用されます.

例えば,以下のようにします.

AC_CHECK_HEADER([stdio.h],
                [AC_DEFINE([HAVE_STDIO_H])],
                [AC_MSG_ERROR([Sorry, can't do anything for you])])

これは,正しく引用符で囲まれます.その引用を以下のように単純にしても大 丈夫かもしれません.

AC_CHECK_HEADER(stdio.h,
                [AC_DEFINE(HAVE_STDIO_H)],
                [AC_MSG_ERROR([Sorry, can't do anything for you])])

AC_MSG_ERRORの引数は,引用符で囲まれたままだということに注意し てください.そうしない場合は,カンマは引数を分離するものとして解釈され るでしょう.

以下の例は,引用符で囲まれていないので,間違っていて危険です.

AC_CHECK_HEADER(stdio.h,
                AC_DEFINE(HAVE_STDIO_H),
                AC_MSG_ERROR([Sorry, can't do anything for you]))

場合によっては,マクロ呼び出しのようなテキストを使用する必要があるかも しれません.マクロ引数として渡されないときでもテキストは引用符で囲む必 要があります.

echo "Hard rock was here!  --[AC_DC]"

結果として以下のようになります.

echo "Hard rock was here!  --AC_DC"

同じテキストをマクロ引数で使用するときは,そのために余分な引用符レベル を追加する必要があります(一つはマクロ置換で削除されるためです).従って 一般的に,全てのリテラル文字列の引数に対して二重で引用符を使用す ることは良い考えです.

AC_MSG_WARN([[AC_DC stinks  --Iron Maiden]])

絶えず誤解されていたAutoconfの構成物の一つを,今では理解できるでしょう @enddots{}第一の規則は,@emph{マクロ展開が予測されるところでは,引用符 の展開を予測してください}ということです.すなわち,引用符のレベルの一 つが失われるということです.例えば,以下のようにします.

AC_COMPILE_IFELSE([char b[10];],, [AC_MSG_ERROR([you lose])])

これは正しいものです.ここで,AC_COMPILE_IFELSE最初の引数は, `char b[10];'で,一度展開されて,結果として`char b10;'になり ます.(M4のchangequoteプリミティブを用いてこの問題を解決するこ とが,一般的な慣習として以前のAutoconfにありましたが,それを使用しない でください!)さて,より詳しく見てみましょう.もう一方では,第一引数は リテラルとして理解され,そのためそれは引用符で二重に囲む必要があります.

AC_COMPILE_IFELSE([[char b[10];]],, [AC_MSG_ERROR([you lose])])

Voil`a,今回は実際に`char b[10];'を生成しているのです!

注意深く読んでいると,これらのガイドラインによれば,上記の例の AC_CHECK_HEADERで引用符で"正しく"囲まれているものは,実際には 三組の引用符が足りないことに気付くでしょう!それにもかかわらず,可読性 のため,リテラルを二重に引用符で囲むことは,このマニュアルでは必要なと ころでのみ使用されます.

オプションの引数を受け入れるマクロもあり,それはこのドキュメントでは (引用符の文字を使用して混乱しないように),@ovar{arg}として表現します. 空のままにしたり,明示的に引数を空にするために`[]'を使用したり, 単純に後置されるカンマを省略したりすることが可能です.以下の三行は等価 となります.

AC_CHECK_HEADERS(stdio.h, [], [], [])
AC_CHECK_HEADERS(stdio.h,,,)
AC_CHECK_HEADERS(stdio.h)

`configure.ac'では,単独行にそれぞれのマクロ呼び出しを書くことが 最善です.ほとんどのマクロは,余分な改行を加えません.それらは,コマン ドを終端するためのマクロ呼び出しの後の改行に依存しています.このアプロー チでは,生成された@command{configure}スクリプトを,多くの空白行を挿入 することなく,若干読みやすくします.シェルは,改行に干渉されることなく 割り当てることが可能なので,シェル変数をマクロ呼び出しと同じ行で設定す ると,通常は安全です.

`configure.ac'ファイルに`#'で始まるコメントを含めることも可 能です.例えば,以下のような行を`configure.ac'ファイルの最初に書 くと役に立つでしょう.

# Process this file with autoconf to produce a configure script.

標準的な`configure.ac'のレイアウト

`configure.ac'でAutoconfマクロを呼び出す順番は,いくつか例外があ りますが重要ではありません.すべての`configure.ac'では,調査の前 のAC_INITの呼び出しと,最後のAC_OUTPUTの呼び出しを含める 必要があります(see section 出力ファイルを生成する).さらに,いくつかの変数については,行な うことを決定するために,前もって設定されている値を調査できるよう,他の マクロが最初に呼ばれることに依存するマクロもあります.これらのマクロは それぞれの説明で書かれ(see section 存在の調査)ていて, @command{configure}が作成されているとき,間違った順番で呼び出されてい る場合は警告されます.

整合性を促進するため,Autoconfマクロを呼び出す順番をここで提案します. 一般的に言って,このリストの終わり近くのものは,その前のものに依存しま す.例えば,ライブラリ関数は型とライブラリの影響があります.

Autoconfの必要条件
AC_INIT(package, version, bug-report-address)
パッケージの情報
プログラムの調査
ライブラリの調査
ヘッダファイルの調査
型の調査
構造体の調査
コンパイラの特徴の調査
ライブラリ関数の調査
システムサービスの調査
AC_CONFIG_FILES([file...])
AC_OUTPUT

`configure.ac'を作成するために@command{autoscan}を使用する

@command{autoscan}プログラムは,ソフトウェアパッケージに対する `configure.ac'ファイルの作成と/または管理に役に立ちます. @command{autoscan}は,コマンドライン引数で与えられたディレクトリをルー トとするディレクトリツリー,または,与えられていない場合はカレントディ レクトリでソースファイルを調査します.それは,ソースファイルの一般的な 移植性の問題を検索して,パッケージに対する`configure.ac'の準備と なるファイル`configure.scan'を作成し,あるいは存在している `configure.ac'の完全性を調査します.

`configure.ac'を作成するために@command{autoscan}を使用するとき, `configure.scan'`configure.ac'に改名する前に,手作業でそれ を調査する必要があります.恐らくなんらかの調整が必要です.時折 @command{autoscan}は,@command{autoconf}が警告を出すような,関連するマ クロに対して間違った順序でマクロを出力する場合もあります.手作業でその ようなマクロを移動する必要があります.また,パッケージでコンフィギュレー ションヘッダファイルを使用する場合も,AC_CONFIG_HEADERの呼び出 しを加える必要があります(see section コンフィグレーションヘッダファイル).また, Autoconfで動作するように,プログラムの#ifディレクティブを変更し たり加えたりする必要があります(そのような仕事に役に立つプログラムの情 報は,see section 条件をリストアップするため@command{ifnames}を使用する).

`configure.ac'を管理するために@command{autoscan}を使用していると き,単純にそれが追加した提案を考えてください.ファイル `autoscan.log'には,マクロが要求される理由に関する詳細な情報が含 まれています.

@command{autoscan}は,パッケージのソースファイルで特定のシンボルを見つ けたときに出力するマクロを決定するため,(Autoconfと一緒にインストール されている)データファイルも使用します.これらのデータファイルはすべて 同じ書式です.それぞれの行は,シンボル,空白スペース,そしてそのシンボ ルがある場合に出力するAutoconfマクロから成り立っています.`#'で始 まる行はコメントです.

@command{autoscan}は以下のオプションを受け入れます.

@option{--help}
@option{-h}
コマンドラインオプションの概要を出力して終了します.
@option{--version}
@option{-V}
Autoconfのバージョンナンバーを出力して終了します.
@option{--verbose}
@option{-v}
調査しているファイルと,その中で見つかった興味深いものとなる可能性のあ るシンボル名を出力します.この出力は大量になるはずです.
@option{--include=dir}
@option{-I dir}
dirをインクルードパスの後に追加します.複数回の呼び出しで累積さ れます.
@option{--prepend-include=dir}
@option{-B dir}
dirをインクルードパスの前に追加します.複数回の呼び出しで累積さ れます.

条件をリストアップするため@command{ifnames}を使用する

@command{ifnames}は,ソフトウェアパッケージに対する`configure.ac' を書くとき役に立つはずです.それは,Cプリプロセッサの条件式でパッケー ジが既に使用している識別子を出力します.パッケージが既に移植性に対して 準備されている場合,@command{ifnames}は@command{configure}で調査するこ とが必要なものを理解することに役く立つはずです.それは @command{autoscan}が生成した`configure.ac'とのギャップを埋める役 にも立つかもしれません(see section `configure.ac'を作成するために@command{autoscan}を使用する).

@command{ifnames}は,コマンドラインで指名されたすべてのCソースファイル を(無い場合は標準入力から)走査し,これらのファイルに現れる#if#elif#ifdef,または#ifndefディレクティブの,す べての識別子をソートしたリストを標準出力に書き出します.それは,識別子 があるファイルの空白で分離されたリストに続いて,一行にぞれぞれの識別子 を出力します.

@command{ifnames}は以下のオプションを受け入れます.

@option{--help}
@option{-h}
コマンドラインオプションの概要を出力して終了します.
@option{--version}
@option{-V}
Autoconfのバージョンナンバーを出力して終了します.

@command{configure}を作成するため@command{autoconf}を使用する

`configure.ac'から@command{configure}を作成するために, @command{autoconf}プログラムを引数無しで実行してください. @command{autoconf}は,Autoconfマクロを使用しながら,M4マクロプロセッサ を用いて`configure.ac'を処理します.@command{autoconf}に引数を与 えている場合,`configure.ac'の代わりにそのファイルを読み, @command{configure}の代わりに,標準出力にコンフィグレーションスクリプ トを書き出します.@command{autoconf}に引数@option{-}を与えた場合, `configure.ac'の代わりに標準入力から読み込み,標準出力にコンフィ グレーションスクリプトを書き出します.

Autoconfマクロは,複数のファイルで定義されています.ファイルは, Autoconfと一緒に配布される物もあります.@command{autoconf}は最初にそれ を読み込みます.オプションのファイル`acsite.m4'を,配布された Autoconfマクロファイルを含むディレクトリで探し,オプションのファイル `aclocal.m4'はカレントディレクトリで探します.これらのファイルは, サイトやパッケージのAutoconfマクロ定義を含めることが可能です(詳細は, see section Autoconfマクロを書く).一つ以上のファイルで定義されているマ クロを@command{autoconf}が読み込む場合,最後の定義がそれ以前の定義に優 先します.

@command{autoconf}は以下のオプションを受け入れます.

@option{--help}
@option{-h}
コマンドラインオプションの概要を出力して終了します.
@option{--version}
@option{-V}
Autoconfのバージョンナンバーを出力して終了します.
@option{--verbose}
@option{-v}
処理しているステップを報告します.
@option{--debug}
@option{-d}
一時的なファイルを削除しません.
@option{--force}
@option{-f}
入力ファイルより`configure'が新しい場合でも,それを再生成します.
@option{--include=dir}
@option{-I dir}
dirをインクルードパスの後に追加します.複数回の呼び出しで累積されます.
@option{--prepend-include=dir}
@option{-B dir}
dirをインクルードパスの前に追加します.複数回の呼び出しで累積さ れます.
@option{--output=file}
@option{-o file}
(出力や追跡の)出力をfileに保存します.ファイル@option{-}は標準出 力に対するものです.
@option{--warnings=category}
@option{-W category}
(実際にはカンマで分けたリストが可能な)categoryに関連する警告を報 告します.カテゴリの総合的なリストは,マクロAC_DIAGNOSEと See section メッセージの報告. 特別な値には,以下のものが含まれています.
`all'
全ての警告を報告します.
`none'
何も報告しません.
`error'
警告をエラーとして扱います.
`no-category'
categoryに分類される警告を利用不可能にします.
`syntax'に関する警告はデフォルトで利用可能で,カンマで分けられた カテゴリリストの環境変数WARNINGSは尊重されます.`-W category'を渡すことで, `--warnings=syntax,$WARNINGS,category'が渡されたかのように 動作します.デフォルトとWARNINGSを利用不可能にしたいが,(例えば) 時代遅れの構成物についての警告は利用可能にしたい場合,@option{-W none,obsolete}を使用してください. @command{autoconf}はバックグラウンドで@command{autom4te}を使用するので, それはエラーのバックトレースを表示しますが,警告については行ないません. そうしたい場合,@option{-W error}のみを渡してください.いくつかの例は, See section @command{autom4te}の呼び出し.
@option{--trace=macro[:format]}
@option{-t macro[:format]}
@command{configure}スクリプトを作成しませんが,formatでマクロの 呼び出しをリストアップします.複数の@option{--trace}の引数は,複数のマ クロをリストアップするために使用可能です.単一のマクロに対する複数の @option{--trace}の引数は,累積的ではありません.その代わりに formatを必要なものにすべきです. formatは,必要な場合は改行をともなう通常の文字列と,いくつかの特 殊なエスケープコードです.デフォルトは`$f:$l:$n:$%'です. formatの詳細は,section @command{autom4te}の呼び出しを参照してください.
@option{--initialization}
@option{-i}
デフォルトで,@option{--trace}はAutoconfマクロ(特にAC_DEFUNの定 義)の初期化を追跡しません.これで顕著に高速化されますが,このオプショ ンで利用不可能にすることができます.

`configure.ac'ファイルの内容を調査する必要があることもよくありま すが,自分で解析することは,非常に脆くエラーを起こしやすいものです. `configure.ac'をスキャンするために,@option{--trace}を信頼してみ てください.例えば,置換される変数のリストを見つけるため,以下のように してみてください.

$ autoconf -t AC_SUBST
configure.ac:2:AC_SUBST:ECHO_C
configure.ac:2:AC_SUBST:ECHO_N
configure.ac:2:AC_SUBST:ECHO_T
More traces deleted

以下の例では,`$@'`$*'$%の違いを強調しています.

$ cat configure.ac
AC_DEFINE(This, is, [an
[example]])
$ autoconf -t 'AC_DEFINE:@: $@
*: $*
$: $%'
@: [This],[is],[an
[example]]
*: This,is,an
[example]
$: This:is:an [example]

formatは,柔軟にできます.

$ autoconf -t 'AC_SUBST:$$ac_subst{"$1"} = "$f:$l";'
$ac_subst{"ECHO_C"} = "configure.ac:2";
$ac_subst{"ECHO_N"} = "configure.ac:2";
$ac_subst{"ECHO_T"} = "configure.ac:2";
More traces deleted

長いseparatorは,複雑な構想の可読性を改善したり,解析を簡単にす るために使用可能です(例えば,分離文字に適した単一文字が無いときです).

$ autoconf -t 'AM_MISSING_PROG:${|:::::|}*'
ACLOCAL|:::::|aclocal|:::::|$missing_dir
AUTOCONF|:::::|autoconf|:::::|$missing_dir
AUTOMAKE|:::::|automake|:::::|$missing_dir
More traces deleted

@command{configure}スクリプトを更新するため@command{autoreconf}を使用する

@acronym{GNU}ビルドシステムの様々なコンポーネントをインストールするこ とは退屈なものです.それは,Gettextに対する@command{autopoint}, `Makefile.in' や@command{automake}等を,それぞれのディレクトリで 実行することを意味します.@command{automake}のようなツールが更新された り,`configure.ac'のようなソースが更新されたり,ただ単純に @acronym{GNU}ビルドシステムを新しいツリーにインストールするためだけで も,そうすることが必要になるかもしれません.

@command{autoreconf}は,指定されたディレクトリとそのサブディレクトリ (see section サブディレクトリで他のパッケージをコンフィグレーションする)で,@acronym{GNU}ビルドシステムを更新するため に,@command{autoconf},@command{autoheader},@command{aclocal}, @command{automake},@command{libtoolize},そして(適切なときは) @command{autopoint}を繰り返し実行します.デフォルトで,ソースファイル より古いファイルだけが再生成されます.

新しいバージョンのツールをインストールした場合,@command{autoreconf}に @option{--force}オプションを与えることで,すべてのファイルを再 生成することが可能です.

ソースファイルを変更したとき,@command{configure}スクリプトを自動的に 再生成する`Makefile'ルールについては,See section 自動的なリメイク. その方法は,コンフィギュレーションヘッダテンプレートのタイムスタンプを 正確に処理しますが,@option{--autoconf-dir=dir}や @option{--localdir=dir}を渡しません.

@command{autoreconf}は以下のオプションを受け入れます.

@option{--help}
@option{-h}
コマンドラインオプションの概要を出力して終了します.
@option{--version}
@option{-V}
Autoconfのバージョンナンバーを出力して終了します.
@option{--verbose}
@command{autoreconf}が@command{autoconf}(と適切な場合は @command{autoheader})を実行している,それぞれのディレクトリ名を出力し ます.
@option{--debug}
@option{-d}
一時ファイルを削除しません.
@option{--force}
@option{-f}
`configure'スクリプトとコンフィグレーションヘッダが入力ファイル (`configure.ac'と,存在する場合は`aclocal.m4')より新しくても 更新します.
@option{--install}
@option{-i}
パッケージの足りない補助ファイルをインストールします.デフォルトで,ファ イルはコピーされます.@option{--symlink}で変更することも可能です. このオプションは,`automake --add-missing'`libtoolize'`autopoint'等を呼び出すきっかけにもなります.
@option{--symlink}
@option{-s}
@option{--install}とともに使用されるとき,足りない補助ファイルをコピー する代わりに,シンボリックリンクを配置します.
@option{--make}
@option{-m}
ディレクトリがコンフィグレーションされるとき,`./config.status --recheck && ./config.status'を実行してコンフィグレーションを更新し, `make'を実行します.
@option{--include=dir}
@option{-I dir}
dirをインクルードパスの後に追加します.複数回の呼び出しで累積さ れます.
@option{--prepend-include=dir}
@option{-B dir}
dirをインクルードパスの前に追加します.複数回の呼び出しで累積さ れます.
@option{--warnings=category}
@option{-W category}
(実際にはカンマで分離されているリストになっている)categoryに関連 する警告を報告します.
`cross'
クロスコンパイルの問題に関連するもの.
`obsolete'
時代遅れの構成物の使用を報告.
`portability'
移植性の問題.
`syntax'
曖昧な構文の構成物.
`all'
すべての警告を報告.
`none'
何も報告しない.
`error'
警告をエラーとして処理.
`no-category'
categoryに分類される警告を利用不可能にする.
`syntax'の警告はデフォルトで利用可能で,カンマでカテゴリを分類し たリストとなっている環境変数WARNINGSは尊重されます.`-W category'を渡すと,実際には `--warnings=syntax,$WARNINGS,category'を渡したかのように動 作します.デフォルトのものとWARNINGSを利用不可能にし,(例えば) 時代遅れの構成物に関する警告を利用可能にしたい場合@option{-W none,obsolete}を使用してください.


Go to the first, previous, next, last section, table of contents.