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


`configure.in'のスキャン

Automakeは,パッケージに関する特定の情報を決定するために,パッケージの `configure.in'をスキャンします.必要なautoconfマクロもあれば, `configure.in'で定義する必要がある変数もあります.Automakeは,出力 物を調整するためにも,`configure.in'からの情報を使用します.

Automakeは,メンテナンスをより容易にするためのAutoconfマクロも提供してい ます.これらのマクロは,aclocalプログラムを使用して自動的に `aclocal.m4'に書き込むことが可能です.

コンフィグレーションの必要条件

Automakeが本当に必要としていることは一つで,`configure.in'でマクロ AM_INIT_AUTOMAKEを呼び出すことです.このマクロは,適切なAutomake の処理に必要なことをいくつか行ないます(see section Automakeが提供するAutoconfマクロ).

Automakeは必要としますが,AM_INIT_AUTOMAKEで実行されないマクロに は,以下のものがあります.

AC_CONFIG_FILES
AC_OUTPUT
Automakeは,作成するファイルを決定するためにこれらを使用します (see section `Creating Output Files' in The Autoconf Manual). 同じ名前のファイルが`.am'拡張子が後置されている状態で存在している場 合,リストアップされているファイルは,Automakeが`Makefile'を生成す るものと考慮します.通常,AC_CONFIG_FILES([foo/Makefile])で, `foo/Makefile.am'が存在する場合は,Automakeが`foo/Makefile.in' を生成します. それ以外のリストアップされているファイルは扱い方が異なります.現在唯一の 違いは,make distclean`Makefile'は削除されますが,他のファ イルはmake cleanで削除されるということです.

その他のAutomakeが理解すること

Automakeは実行されるたびに,`configure.in'を追跡するためにAutoconf を呼び出します.この方法で,特定のマクロの使用を認識し,生成される `Makefile.in'を適切に調整します.現在認識されるマクロとそれらの効果 は,以下のようになっています.

AC_CONFIG_HEADERS
Automakeはこれらのヘッダをリビルドする規則を生成します.古いバージョンの AutomakeはAM_CONFIG_HEADERの使用を要求していました (see section Automakeが提供するAutoconfマクロ).これは今日では既に事実ではありません.
AC_CONFIG_AUX_DIR
Automakeは,`mkinstalldirs'のような様々なヘルパースクリプトを,この マクロの呼び出しで指定されたディレクトリで探します.見つからない場合は, `standard'な位置(トップソースディレクトリか,現在の `Makefile.am'に対応するソースディレクトリの適切な方)で探します. See section `Finding `configure' Input' in The Autoconf Manual. FIXME: give complete list of things looked for in this directory
AC_CANONICAL_HOST
Automakeは,`config.guess'`config.sub'が確実に存在するように します.また,`Makefile'変数の`host_alias'`host_triplet'も導入します.section `Getting the Canonical System Type' in The Autoconf Manualを参照してください.
AC_CANONICAL_SYSTEM
これはAC_CANONICAL_HOSTに似ていますが,`Makefile'変数の `build_alias'`target_alias'も定義します. See section `Getting the Canonical System Type' in The Autoconf Manual.
AC_LIBSOURCE
AC_LIBSOURCES
AC_LIBOBJ
Automakeは,AC_LIBSOURCEAC_LIBSOURCESでリストアップされ ているすべてのファイルを自動的に配布します. AC_LIBOBJSマクロがAC_LIBSOURCEを呼び出すことに注意してくだ さい.そのため,AutoconfマクロがAC_LIBOBJ([file])を呼び出すと説明 されている場合,`file.c'はAutomakeで自動的に配布されます.これには, AC_FUNC_ALLOCAAC_FUNC_MEMCMPAC_REPLACE_FUNCS等 の多くのマクロが含まれます. ところで,直接LIBOBJSに代入することは,既にサポートされていません. この目的では常にAC_LIBOBJを使用すべきです.See section `AC_LIBOBJ vs. LIBOBJS' in The Autoconf Manual.
AC_PROG_RANLIB
これは,ライブラリをビルドするパッケージの場合に必要になります. See section `Particular Program Checks' in The Autoconf Manual.
AC_PROG_CXX
これは,C++ソースが含まれる場合に必要になります.See section `Particular Program Checks' in The Autoconf Manual.
AC_PROG_F77
これは,Fortran77ソースが含まれる場合に必要になります.このマクロは Autoconfのバージョン2.13以降で配布されます.See section `Particular Program Checks' in The Autoconf Manual.
AC_F77_LIBRARY_LDFLAGS
これはFortran77を含む言語が混在しているプログラムと共有ライブラリに対し て必要になります(see section CとC++と,Fortran 77の混在). See section Automakeが提供するAutoconfマクロ.
AC_PROG_LIBTOOL
Automakeはlibtoolに対する処理を開始します(see section `Introduction' in The Libtool Manual).
AC_PROG_YACC
Yaccソースファイルがある場合,このマクロを使用するか, `configure.in'で変数`YACC'を定義する必要があります.前者が好ま れます(see section `Particular Program Checks' in The Autoconf Manual).
AC_PROG_LEX
Lexソースファイルがある場合,このマクロを使用する必要があります. See section `Particular Program Checks' in The Autoconf Manual.
AC_SUBST
最初の引数は,それぞれの生成される`Makefile.in'で,変数として自動的 に定義されます.See section `Setting Output Variables' in The Autoconf Manual. Autoconfマニュアルで,マクロがvarに対してAC_SUBSTを呼び出す とか,出力変数varを定義するといった説明がある場合,varはそれ ぞれの生成される`Makefile.in'で定義されます.例えば, AC_PATH_XTRAX_CFLAGSX_LIBSを定義するので, AC_PATH_XTRAが呼び出されている場合,`Makefile.am'でその変数 と使用することが可能です.
AM_C_PROTOTYPES
これは,de-ANSI-ficationを自動的に使用するときに必要です.section 自動的なde-ANSI-ficationを参 照してください.
AM_GNU_GETTEXT
このマクロはGNU gettextを使うパッケージに対して必要になります (see section Gettext).それはgettextとともに配布されます.Automakeがこのマク ロを見つけた場合,このマクロはパッケージがgettextの必要条件のいくつかを 確実に満たすようにします.
AM_MAINTAINER_MODE
このマクロはconfigure`--enable-maintainer-mode'オプション を加えます.これが使用されている場合,automakeは生成された `Makefile.in'内の`maintainer-only'規則をデフォルトで停止します. このマクロは`MAINTAINER_MODE'条件を定義し,自分の`Makefile.am' で使用することが可能です.

aclocal.m4の自動生成

Automakeには,パッケージで使用可能な多くのAutoconfマクロがあります.状況 によってはAutomakeが実際に必要とするものもあります.これらのマクロは `aclocal.m4'で定義する必要があります.さもなければ,それらは autoconfでは見つからないでしょう.

aclocalプログラムは,`configure.in'の内容に基づいて自動的に `aclocal.m4'ファイルを生成します.これは,Automakeが提供するマクロ を入手する便利な方法を提供し,それらを探し回る必要がないようになっていま す.また,aclocalのメカニズムで,他のパッケージで使用するための独 自のマクロを供給することが可能になります.

はじめに,aclocalはマクロ定義を探しながら見つかったすべての `.m4'ファイルをスキャンします.それから`configure.in'をスキャ ンします.最初のステップで見つかったマクロの記述によって,マクロとマクロ が要求するファイルを`aclocal.m4'に書き込みます.

`acinclude.m4'の内容も,存在する場合は自動的に`aclocal.m4'に含 められます.これは`configure'にローカルなマクロを取り入れるときに役 に立ちます.

aclocalは,スキャンしているファイルの新しいAC_DEFUNを賢い 方法で探します.また,スキャンしているファイルのすべての文章も `aclocal.m4'に含めようとし,それには`#'`dnl'のコメント も含まれます.aclocalがコメントを完全に無視するようにしたい場合は, コメントの最初に`##'を使用して下さい.

aclocalのオプション

aclocalは,以下のオプションを受け入れます.

--acdir=dir
インストールされたディレクトリの代わりに,dirでマクロファイルを探 します.これは,通常デバッグで使用します.
--help
コマンドラインオプションの概要を出力し,終了します.
-I dir
`.m4'ファイルを探すディレクトリのリストに,dirディレクトリを 追加します.
--output=file
`aclocal.m4'の代わりに,fileに出力を書き込みます.
--print-ac-dir
サードパーティーの`.m4'ファイルを見つけるためにaclocalが検索 するディレクトリの名前を出力します.このオプションが与えられているとき, 標準的な処理は行われません.このオプションは,パッケージがマクロファイル をインストールする場所を決定するために使用することが可能です.
--verbose
調査しているファイルの名前を出力します.
--version
Automakeのバージョンナンバーを出力し,終了します.

マクロ検索パス

デフォルトで,@command{aclocal}は`.m4'ファイルを以下のディレクトリ で,この順番に探します.

acdir-APIVERSION
これは,automake自身が配布している`.m4'マクロを保持している場所です. APIVERSIONは,使用しているautomakeのリリースに依存します.automake 1.6.xに対して,APIVERSION = 1.6になります.
acdir
このディレクトリは,サードパーティーの`.m4'ファイルが目的で, @command{automake}自身がビルドされるときにコンフィグレーションされます. これは`@datadir@/aclocal/'で,通常 `${prefix}/share/aclocal/'に展開されます.組み込みのacdirを 知るために,--print-ac-dirオプションを使用してください.

例として,automake-1.6.2が--prefix=/usr/localを用いてコンフィグレー ションされたと仮定します.そのとき検索パスは以下のようになります.

/usr/local/share/aclocal-1.6/
/usr/local/share/aclocal/

(see section aclocalのオプション)で説明したように,この検索パスの変更や拡張で使 用可能なオプションもあります.

マクロ検索パスを変更する: --acdir

検索パスを変更する最も明確なオプションは--acdir=dirで,デフォ ルトのディレクトリを変更し,APIVERSIONディレクトリを取り消します. 例えば,--acdir=/opt/private/を指定した場合,検索パスは以下のよう になります.

/opt/private/

このオプション--acdirの目的は,automakeのテストスイートの内部で使 用することだけです.それはエンドユーザは通常不要です.

マクロ検索パスを変更する: -I dir

-Iオプション(see section aclocalのオプション)を使用して,あらゆる追加ディ レクトリを指定することで,これらの検索リストに前置します.このた め,aclocal -I /foo -I /barは結果として以下のような検索パスになり ます.

/foo
/bar
acdir-APIVERSION
acdir

Modifying the macro search path: `dirlist'

マクロ検索パスを変更する: `dirlist'

検索パスをカスタマイズするため,三番目のメカニズムがあります. `dirlist'ファイルがacdirに存在する場合,そのファイルが,一行 ごとに検索リストに追加するディレクトリリストを含んでいると仮定されます. これらのディレクトリは,すべての他のディレクトリの後に検索されま す.

例えば,`acdir/dirlist'が以下の内容を含んでいると仮定します.

/test1
/test2

そして,aclocal-I /foo -I /barオプションで呼び出したと仮 定します.そのとき検索パスは以下のようになります.

/foo
/bar
acdir-APIVERSION
acdir
/test1
/test2

--acdir=dirオプションが使用されている場合, @command{aclocal}は`dirlist'ファイルをdirで検索します.上記の --acdir=/opt/private/の例では,@command{aclocal}は `/opt/private/dirlist'を探します.しかし,繰り返しますが, --acdirオプションの目的は,automakeのテストスイートの内部で使用さ れることだけです.通常,--acdirはエンドユーザには不要です.

以下のような状況で,`dirlist'は役に立ちます.automakeのバー ジョン1.6.2が,`$prefix=/usr'でシステムベンダーによってイン ストールされていると仮定します.このためデフォルトの検索ディレクトリは以 下のようになります.

/usr/share/aclocal-1.6/
/usr/share/aclocal/

しかし,システムには多くのパッケージが,いつも通りに `$prefix=/usr/local'に手動でインストールされていると仮定します.こ の状況では,これらの"追加の"`.m4'ファイルは `/usr/local/share/aclocal'にあります.これらの"追加の"`.m4' ファイルを見つけるため,`/usr/bin/aclocal'を強制させる方法は,常に aclocal -I /usr/local/share/aclocalを呼び出すことです.これは不便 です.`dirlist'を用いると,以下のファイルを作成することができます.

`/usr/share/aclocal/dirlist'

その内容は以下のようになっています.

`/usr/local/share/aclocal'

さて,システムに影響する"デフォルト"の検索パスは以下のようになります.

/usr/share/aclocal-1.6/
/usr/share/aclocal/
/usr/local/share/aclocal/

-Iオプションは不要です.-Iは,ローカルなシステム依存のツー ルのインストールディレクトリを回避するのではなく,プロジェクト独自のもの が必要な(`my-source-dir/m4/')として予約可能です.

同様に,Automakeのローカルコピーをアカウント内にインストールし, @command{aclocal}でシステムの他の場所にインストールされているマクロを探 したい場合,`dirlist'は手頃なはずです.

Automakeが提供するAutoconfマクロ

Automakeは,`configure.in'で使用可能ないくつかのAutoconfマクロとと もに出荷されています.そのうちの一つを使用するとき,aclocal`aclocal.m4'に含められるでしょう.

パブリックマクロ

AM_CONFIG_HEADER
Automakeは,コンフィグヘッダを自動的に再生成する規則を生成します.この時 代遅れのマクロは,現在はAC_CONFIG_HEADERSと同じです (see section その他のAutomakeが理解すること).
AM_ENABLE_MULTILIB
これは,"multilib"ライブラリをビルドするときに使用します.最初のオプショ ン引数は,生成される`Makefile'の名前です.デフォルトは `Makefile'です.二番目のオプション引数は,ソースディレクトリのトッ プを見つけるために使用します.デフォルトは空の文字列です(内部を理解して いない場合,通常はこれを使用しないほうが良いでしょう.) See section Multilibのサポート.
AM_C_PROTOTYPES
関数プロトタイプをコンパイラが理解するかどうかを調査します.その場合, `PROTOTYPES'を定義して,出力変数`U'`ANSI2KNR'を空の文字 列に設定します.それ以外の場合,`U'`_'に,`ANSI2KNR'`./ansi2knr'にします.Automakeはこれらの値を自動的な de-ANSI-ficationを実装するために使用します.
AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL
TIOCGWINSZを使用するときに`<sys/ioctl.h>'が必要な場合, GWINSZ_IN_SYS_IOCTLを定義します.それ以外の場合, TIOCGWINSZ`<termios.h>'で見つかるはずです.
AM_INIT_AUTOMAKE([OPTIONS])
AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
生成されたMakefileが適切な処理を行なうために必要な多くのマクロを実行しま す. このマクロには二つの形式があり,二番目のものは二つの引数が必要です.パッ ケージとバージョンナンバーです.この後者の形式は,packageversionがAutoconfのAC_INITマクロ(それ自身も古い形式と新しい 形式があります)から得ることが可能なので時代遅れです. `configure.in'が以下の場合を考えます.
AC_INIT(src/foo.c)
AM_INIT_AUTOMAKE(mumble, 1.5)
以下のようにして新しいものにすることが可能です.
AC_INIT(mumble, 1.5)
AC_CONFIG_SRCDIR(src/foo.c)
AM_INIT_AUTOMAKE
`configure.in'を以前のバージョンのAutomakeから更新している場合,上 記の例のように,単純にパッケージバージョンの引数を,直接 AM_INIT_AUTOMAKEからAC_INITへ移動することが常に正しいとは 限りません.AC_INITの最初の引数はパッケージの名前(例えば`GNU Automake')ですが,AM_INIT_AUTOMAKEに渡すために使用しているtarball の名前(例えば`automake')ではありません.パッケージ名からtarball名を 導き出すAutoconfの規則は,ほとんどのパッケージで動作しますが全てで動作す るわけではないでしょう.特に,tarballの名前が全て小文字の場合, AC_INITの四つの引数を用いる形式を使用する必要があるでしょう (Autoconfのバージョン2.52g以上からサポートされています). AM_INIT_AUTOMAKEが単一の引数で呼び出されたとき,それはスペースで 分けられた,ツリーの全ての`Makefile.am'に適用されるAutomakeのオプショ ンのリストとして解釈されます.その影響は,それぞれのオプションを AUTOMAKE_OPTIONSでリストアップしているかのようになります. デフォルトでこのマクロは`PACKAGE'`VERSION'AC_DEFINE します.以下のように`no-define'オプションを渡すことでこれを避けるこ とが可能です.
AM_INIT_AUTOMAKE([gnits 1.5 no-define dist-bzip2])
または時代遅れの形式に空の三番目に引数を渡すことで避けることが可能です.
AM_PATH_LISPDIR
emacsプログラムを検索し,見つかった場合は,Emacsのsite-lispディレ クトリへのフルパスを出力変数lispdirに設定します. このテストは(GNU EmacsやXEmacsのような)Emacs Lispをサポートしている バージョンのemacsが見つかることを想定しています.それ以外の emacsenでは,このテストはハングアップします(古いバージョンのMicroEmacsの ように,対話モードでセットアップされているものは,終了するために `C-x C-c'が必要で,emacsユーザでなければなかなか気付かないでしょう). しかし,ほとんどの状況で,テストを終了するために`C-c'を使用すること が可能でしょう.問題を避けるため,環境変数でEMACSを"no"に設定し たり,(Emacs Lispをサポートしているemacsが確実にある場合は)正しい パスを明示的に設定するために@command{configure}で`--with-lispdir'を 使用することが可能です.
AM_PROG_AS
プロジェクトにアセンブラコードがあるときは,このマクロを使用して下さい. これはアセンブラを選択し(デフォルトはCコンパイラ),CCASを設定し, そして,必要な場合はCCASFLAGSも設定します.
AM_PROG_CC_C_O
これはAC_PROG_CC_C_Oに似ていますが,それはautomakeが要求する形式 の結果を生成します.この機能が必要なときは,AC_PROG_CC_C_Oの代わ りにこれを使用して下さい.
AM_PROG_CC_STDC
CコンパイラがデフォルトでANSI Cモードでない場合,それをANSI Cモードにす るため,出力変数CCにオプションの追加を試みます.このマクロはシス テムごとのANSI Cを選択する様々なオプションを試みます.関数プロトタイプを 正しく処理する場合,コンパイラがANSI Cモードであると考えます. このマクロを使用する場合,それを呼び出した後で,CコンパイラをANSI Cに適 用させる設定があるかどうかを調査する必要があります.そうでない場合,シェ ル変数のam_cv_prog_cc_stdc`no'に設定されます.ANSI Cでソー スコードを書いた場合は,ansi2knrオプションを使用して,非ANSIfied のコピーを作成することが可能です(see section 自動的なde-ANSI-fication).
AM_PROG_LEX
AC_PROG_LEXに似ていますが(see section `Particular Program Checks' in The Autoconf Manual),lexが 無いシステムでmissingスクリプトを使用します.`HP-UX 10'はそ のようなシステムの一つです.
AM_PROG_GCJ
このマクロは,gcjプログラムを見つけるか,そうでなければエラーを発 生します.それは`GCJ'`GCJFLAGS'を設定します.gcjは, GNU Compiler CollectionのJavaフロントエンドです.
AM_SYS_POSIX_TERMIOS
POSIX termiosヘッダと関数がシステムで利用可能かどうか調査します.その場 合,シェル変数am_cv_sys_posix_termios`yes'に設定します.そ うでない場合,その変数を`no'に設定します.
AM_WITH_DMALLOC
dmallocパッケー ジに対するサポートを追加します.ユーザが`--with-demalloc'を用いてコ ンフィグレーションする場合,WITH_DMALLOCを定義し,LIBS`-ldmalloc'を加えます.
AM_WITH_REGEX
configureコマンドラインに`--with-regex'を追加します.指定さ れた(デフォルトの)場合,`regex'の正規表現ライブラリが使用され, `regex.o'`LIBOBJS'に書き込まれ,そして,`WITH_REGEX'が 定義されます.`--without-regex'が与えられる場合,`rx'正規表現 ライブラリが使用され,`rx.o'`LIBOBJS'に書き込まれます.

プライベートマクロ

以下のマクロは,直接呼び出すべきではないプライベートマクロです.それらは 適切なときに他のパブリックマクロから呼び出されます.将来のバージョンで変 更される可能性があるので,それらを呼び出さないでください.それらは実装の 詳細を考察するものと考えてください.または,何も考え内容が良いかもしれま せん.このセクションは読み飛ばしてください!

_AM_DEPENDENCIES
AM_SET_DEPDIR
AM_DEP_TRACK
AM_OUTPUT_DEPENDENCY_COMMANDS
これらのマクロはautomakeの自動的な依存性の追跡手法を実装するために使用さ れます.それらは,要求されたときautomakeから自動的に呼び出され,手動で呼 び出す必然性はありません.
AM_MAKE_INCLUDE
このマクロは,ユーザのmakeinclude文を処理する方法を知る ために使用されます.それらは,必要なとき自動的に呼び出されます.手動で呼 び出す必然性はありません.
AM_PROG_INSTALL_STRIP
これは,インストール時にプログラムをstripするために使用可能な installのバージョンを知るために使用されます.このマクロは要求され るとき自動的に含められます.
AM_SANITY_CHECK
これは,ビルドディレクトリに作成されるファイルがソースディレクトリのファ イルより確実に新しいことを調査します.時計の設定が正しくないシステムで失 敗するはずです.このマクロはAM_INIT_AUTOMAKEから自動的に実行され ます.

独自のaclocalマクロを書く

aclocalプログラムには,マクロ組み込みの知識が全く無いので,独自の マクロでそれを拡張することは容易です.

これは,他のプログラムで使用する独自のAutoconfマクロを供給したいライブラ リに対して主に使用されます.例えばgettextライブラリは, gettextを使用しているあらゆるパッケージで使用されるように, AM_GNU_GETTEXTマクロを供給しています.ライブラリがインストールさ れるとき,aclocalで見つかるように,このマクロをインストールします.

マクロのファイルは一連のAC_DEFUNで行います.aclocalプログ ラムはAC_REQUIREも理解するので,別々のファイルにそれぞれのマクロ を書き込むと安全です.See section `Prerequisite Macros' in The Autoconf Manual.そして,section `Macro Definitions' in The Autoconf Manualを参照してください.

マクロファイルの名前は`.m4'で終わらせすべきです.そのようなファイル は`aclocal --print-ac-dir` (偶然ですが,通常は `$(datadir)/aclocal'になります)にインストールされます.


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