[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
configure
Scripts
Autoconfによって生成される自動設定スクリプトは、configure
と
呼ばれることになってます。configure
は実行されると、
設定パラメタを適切な値に書き換えながらいくつかのファイルを作成します。
configure
が生成するファイルは以下のとおりです:
#define
ディレクティブを含むCヘッダファイル。
ファイル名は設定で変えられます。
(see section 3.4 Configuration Header Files)
configure
がうまく動かなかった場合の
デバッグに使います。
Autoconfを使ってconfigure
スクリプトを作成するためには、
Autoconfの入力ファイル`configure.in'を作り、autoconf
を
実行する必要があります。Autoconfに標準でついてくるものを補うために、
OSの機能をチェックするための自作のshellスクリプトを書いた場合には、
それを`aclocal.m4'と`acsite.m4'に書いておくとよいでしょう。
#define
ディレクティブを含むCヘッダファイルを使うなら、
`acconfig.h'を作成する必要があるかもしれません。
さらに、Autoconfの生成した`config.h.in'をパッケージとともに
配布することになります。
以下の図は、自動設定が行われるときにどのようにファイルが用いられる
のかを示しています。実行されるプログラム名には`*'がつけてあります。
なくてもいいファイルは角カッコ(`[]')でかこんであります。
autoconf
とautoheader
は、下図に加えてAutoconfマクロファイルを
読み込みます(`autoconf.m4'のことです)。
配布用ソフトウェアパッケージの作成時に使われるファイル:
your source files --> [autoscan*] --> [configure.scan] --> configure.in configure.in --. .------> autoconf* -----> configure +---+ [aclocal.m4] --+ `---. [acsite.m4] ---' | +--> [autoheader*] -> [config.h.in] [acconfig.h] ----. | +-----' [config.h.top] --+ [config.h.bot] --' Makefile.in -------------------------------> Makefile.in |
ソフトウェアパッケージの設定時に使われるファイル:
.-------------> config.cache configure* ------------+-------------> config.log | [config.h.in] -. v .-> [config.h] -. +--> config.status* -+ +--> make* Makefile.in ---' `-> Makefile ---' |
2.1 Writing `configure.in' | What to put in an Autoconf input file. | |
2.2 Using autoscan to Create `configure.in' | Semi-automatic `configure.in' writing. | |
2.3 Using ifnames to List Conditionals | Listing the conditionals in source code. | |
2.4 Using autoconf to Create configure | How to create configuration scripts. | |
2.5 Using autoreconf to Update configure Scripts | Remaking multiple configure scripts. |
あるソフトウェアパッケージ用のconfigure
スクリプトを
生成するためには、`configure.in'という名前のファイルを
作成する必要があります。このファイルには、ソフトウェアパッケージが
必要とする、または使う事のできるOSの機能をチェックするための
Autoconfマクロの呼出列が記述されます。
たくさんの機能をチェックするために、Autoconfマクロとして既に
たくさんのものが準備されています。4. Existing Testsを
参照してください。
AutoconfマクロのないOSの機能でも、多くの場合には特製チェックルーチンを
作るのにAutoconfテンプレートマクロを使うことができます。
5. Writing Testsを参照してください。
特にトリッキー、または特殊なOS機能のチェックをする場合、
`configure.in'に手でshellコマンド列を書かないといけないかも
しれません。
autoscan
プログラムを使うと、`configure.in'を
書きはじめるための元ファイルを自動生成してくれます(より詳しくは
see section 2.2 Using autoscan
to Create `configure.in'を参照)。
`configure.in'の中でAutoconfマクロを呼び出す順番は、一部の例外を
除けば重要ではありません。`configure.in'ファイルにはAC_INIT
マクロの呼び出しが一番最初に、AC_OUTPUT
マクロの呼び出しが
一番最後に入っている必要があります(see section 3.2 Creating Output Files参照)。
さらに、一部のマクロは先に呼ばれる他のマクロに依存しています。
先に呼ばれるマクロによって設定される値によって動作を変えるためです。
このようなマクロはそれぞれのマクロの説明に注意書きがしてあります
(see section 4. Existing Tests参照)し、もし逆順に呼んだ場合、configure
の
生成時に警告が出ます。
`configure.in'に統一性をもたせるため、以下の順でAutoconfマクロを 呼ぶことを推奨します。一般にいって、最後の方に書かれているものは 先にあるものに依存しています。例えば、ライブラリ関数のチェックは typedefとライブラリファイルのチェック結果に依存します。
|
`configure.in'に、1行にひとつづつマクロの呼び出しを記述することを
お勧めします。ほとんどのマクロは、余計な改行を生成しません。すなわち、
マクロ呼び出しの直後の改行があることに頼っています。
このようにすることで、余計な空行がなく、読みやすいconfigure
スクリプトを生成することができます。shell変数への代入を
マクロ呼び出しとおなじ行で行うのはたいていの場合安全です。
shellスクリプトでは代入文を改行をはさまず記入することができるからです。
引数をとるマクロを呼び出す場合、マクロ名と左括弧の間にスペースを
入れてはいけません。m4
のquote文字`['と`]'で
囲むことで、複数行にわたる引数を記述できます。ファイル名の羅列などで
長い行を書かないといけない場合、行末にbackslashを置くことで
論理的な行を続ける(backslashの次の改行を無視させる)ことができます。
これはshellによって実現されているもので、Autoconfが特別なことをしている
わけではありません。
マクロには場合分けを含んでいるものがあります: 条件が成立したときに 実行することがらと、条件が成立しなかったときに実行することがらを 記述するような場合です。条件が成立したときにはなにかを実行し、 成立しなかったときにはなにもしないようにしたい(あるいは逆)、ということが あると思います。条件が成立したときになにもしない場合、マクロの 引数action-if-foundに空文字列を渡してください。 条件が成立しなかったときになにもしない場合、マクロの引数 action-if-not-foundを直前のカンマもろとも省略してください。
`configure.in'にはコメントを含めることができます。
コメントはm4
組み込みマクロdnl
で始めます。
dnl
マクロは次の改行までの文字列を単に無視します。
このようにして書かれたコメントは、configure
スクリプトには現れません。
たとえば、`configure.in'を以下のような行ではじめれば
理解を助けることができるでしょう:
dnl Process this file with autoconf to produce a configure script. |
autoscan
to Create `configure.in'
autoscan
プログラム、あるソフトウェアパッケージのための
`configure.in'を生成する際に役立ちます。autoscan
は
コマンドライン引数で指定されたディレクトリ(指定されなかった場合
カレントディレクトリ)以下のソースファイルについて、移植性に
問題のある記述があるかどうかを探します。そして、結果を`configure.scan'
というファイルに出力します。このファイルはこのパッケージのための
`configure.in'の雛型として使えます。
`configure.scan'を`configure.in'にリネームする前に、
内容を確認する必要があります; たぶん手で調整が必要です。
autoscan
の出力した`configure.scan'のマクロ列が、
マクロ間の依存関係からみて正しくない順で並んでいる場合があります。
このような場合、autoconf
は警告を出力しますので、
マクロの順序を手で変更する必要があります。また、configuration header fileを
使いたい場合、AC_CONFIG_HEADER
(see section 3.4 Configuration Header Files)
マクロの呼び出しを追加する必要があります。さらに、プログラムが
Autoconfとうまく動くように、ソースコードの方に#if
ディレクティブを
追加する必要があるでしょう(この作業を楽にするためのツールについては
see section 2.3 Using ifnames
to List Conditionalsを参照)。
autoscan
はいくつかのデータファイルを使って、ソースファイルの中にある
シンボルをみつけたときに出力すべきマクロ名を決定します。
このファイルはAutoconfマクロファイルと一緒に配布され、全て
おなじフォーマットになっています。ファイルの各行はシンボル、スペース、
シンボルをみつけたときに出力するべきAutoconfのマクロ名、というふうに
なっています。`#'で始まる行はコメントです。
autoscan
はPerlがインストールされている場合にのみインストールされます。
autoscan
のオプションには以下があります:
--help
--macrodir=dir
AC_MACRODIR
を
設定しても同じ効果が得られます。
コマンドラインオプションは環境変数の設定より
優先されます。
--verbose
--version
ifnames
to List Conditionals
ifnames
はソフトウェアパッケージ用に`configure.in'を書くのを
支援します。ifnames
は、パッケージ中のソースコードで
Cプリプロセッサの条件文(`#if')に使われている識別子を出力します。
もし、パッケージが既に移植性を高めるように記述されている場合には、
configure
でなにをチェックしないといけないか決めるのに使えます。
autoscan
の出力を穴うめして`configure.in'を作成するのにも
役立ちます(see section 2.2 Using autoscan
to Create `configure.in')。
ifnames
はコマンドラインに指定されたCソースファイル(なにも
指定されなかったら標準入力)をチェックし、結果を標準出力に出力します。
結果は#if
、#elif
、#ifdef
、または#ifndef
の各ディレクティブで使われている識別子をソートして出力します。
各行にはひとつの識別子と、その識別子を使っているファイル名をスペースで
区切ったものが出力されます。
ifnames
は以下のオプションを受け付けます:
--help
-h
--macrodir=dir
-m dir
AC_MACRODIR
を
設定しても同じ効果が得られます。
コマンドラインオプションは環境変数の設定より
優先されます。
--version
autoconf
to Create configure
configure.in
からconfigure
を生成するためには、
autoconf
プログラムをコマンドライン引数なしで実行します。
autoconf
は`configure.in'をAutoconfマクロを使って
m4
マクロプロセッサに通します。autoconf
にコマンドライン
引数を与えた場合、`configure.in'のかわりに引数で指定したファイルが
読み込まれ、結果は標準出力に出力されます(通常は`configure'に結果を
出力します)。`-'をコマンドライン引数として指定した場合、
`configure.in'のかわりに標準入力を読み込み、設定スクリプトを
標準出力に出力します。
Autoconfマクロは複数のファイルで定義されます。
autoconf
はAutoconfといっしょに配布されているマクロファイルを最初に
読み込みます。次に、Autoconfと一緒に配布されるマクロファイルとおなじ
ディレクトリにある、`acsite.m4'を読み込みます。
その次に、カレントディレクトリにある`aclocal.m4'を読み込みます。
各ファイルにはサイト単位の、またはパッケージ単位のAutoconfマクロ定義を
書いておくことができます(マクロの定義法についてはsee section 7. Writing Macros
参照)。同じマクロがautoconf
が読み込むファイルのうち複数のファイルで
定義されていた場合、あとから読み込まれたものが有効になります。
autoconf
は以下のオプションを受け付けます:
--help
-h
--localdir=dir
-l dir
--macrodir=dir
-m dir
AC_MACRODIR
を
設定しても同じ効果が得られます。
コマンドラインオプションは環境変数の設定より
優先されます。
--version
autoreconf
to Update configure
Scripts
Autoconfで生成されたconfigure
スクリプトがたくさんある場合、
autoreconf
を使うと仕事量を減らせるかもしれません。
autoreconf
は、カレントディレクトリ以下のconfigure
スクリプトと
configuration headerテンプレートを、autoconf
(と、必要なら
autoheader
)を繰り返し起動して再生成します。
デフォルトでは、`configure.in'と(もしあれば)`aclocal.m4'よりも
古いファイルのみを再生成します。ただし、これによって行われる作業は
必要最低限の作業とは限りません。これは、autoheader
は出力ファイルの
内容が変化しなかったときにはファイルのタイムスタンプを変更しないためです。
新しいバージョンのAutoconfをインストールした場合、autoreconf
に
`--force'オプションを指定することで、全てのファイルを更新
させることができます。
autoreconf
に、`--macrodir=dir'または
`--localdir=dir'のオプションを与えた場合、
これらはautoreconf
から呼び出されるautoconf
や
autoheader
に渡されます。その際、相対パス名は適切に調整されます。
autoreconf
は同じディレクトリツリーの中で、(`aclocal.m4'と
`acconfig.h'を共有する)大きなパッケージの一部であるディレクトリと
(自身の`aclocal.m4'と`acconfig.h'をそれぞれ持つ)独立したパッケー
ジのディレクトリを両方持つことをサポートしません。もし`--localdir'
を使うならすべてが同じパッケージの一部であると仮定し、使わないなら、それ
ぞれのディレクトリは分割したパッケージであると仮定します。この制限は将来
なくなるかもしれません。
`Makefile'のルールで必要なときにconfigure
スクリプトを
自動再生成させるためにはSee section 3.3.3 Automatic Remakingを参照してください。
この方法を使うとconfiguration headerテンプレートのタイムスタンプは
きちんと取り扱われますが、`--macrodir=dir'や
`--localdir=dir'は渡されません。
autoreconf
は以下のオプションを受け付けます:
--help
-h
--force
-f
--localdir=dir
-l dir
--macrodir=dir
-m dir
AC_MACRODIR
を設定しても同じ効果が
得られます。コマンドラインオプションは環境変数の
設定より優先されます。
--verbose
autoreconf
からautoconf
(と、必要なら
autoheader
)を呼び出すディレクトリ名を表示します。
--version
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |