configure
.
--- The Detailed Node Listing ---
Making configure
Scripts
configure.in
writing.
configure
scripts.
Initialization and Output Files
Makefile
s.
configure
.
Substitutions in Makefiles
Configuration Header Files
Existing Tests
typedef
s that might be missing.
Alternative Programs
Library Functions
Header Files
Typedefs
Writing Tests
Checking Run Time Behavior
Results of Tests
configure
runs.
Caching Results
configure
uses for caching.
Writing Macros
Dependencies Between Macros
Manual Configuration
Site Configuration
configure
local defaults.
Transforming Program Names When Installing
configure
options to transform names.
Makefile
uses of transforming names.
Running configure
Scripts
configure
.
configure
runs.
Questions About Autoconf
configure
scripts.
m4
?
m4
require each other?
configure
instead of Imake.
Upgrading From Version 1
Makefile.in
.
configure.in
.
History of Autoconf
configure
.
m4
and Perl.
物理学者、エンジニアとコンピュータ科学者が神の性質を論じていました。「確 かに物理学者だ」と物理学者が言いました。「なぜなら、創造の早いうちに神が 光を作った。ご存じのように、マックスウェル方程式、電磁波の二重の性質、相 対論者の結果...」。「エンジニアだ!」とエンジニアは言いました。「なぜ なら、光を作る前に神はカオスを土地と水に分けた。それには大量のエンジニア が必要で、大量の泥を処理し、液体から固体を正しく分離し...」。コンピュー タ科学者は叫んだ。「そしてカオス、それはいったいどこからきたと思いますか。 ふーむ?」 ---詠み人知らず
Autoconfは、各種UNIX系システムにあわせてソースコードパッケージを 設定(configure)するためのshellスクリプトを自動生成するツールです。 Autoconfによって生成された自動設定スクリプトは、実行されるときには Autoconfとは独立に動きます。このため、自動設定スクリプトのユーザは Autoconfを持っている必要がありません。
Autoconfによって生成される自動設定スクリプトは、ユーザの介入を 必要としません。普通はシステム種別を引数として指定する必要も ありません。引数を求めたりするかわりに、ソフトウェアパッケージが使う 可能性のあるOSの機能が存在するかどうかがひとつづつチェックされます。 (各チェックの前に、何をチェックしているのかが1行メッセージとして 表示されます。このため、ユーザはスクリプトの実行を待っている間さほど 退屈せずにすみます) 結果として、ターゲットが通常のUNIX系のOSよりもカスタマイズされていたり、 (BSD系とSVR4系の)融合されたOSだったりしても、スクリプトはターゲットOSを うまく扱うことができます。各々のUNIX系OSについて、どの機能がサポート されているかをファイルに記録したりする必要はありません。
Autoconfは、Autoconfを用いる各ソフトウェアパッケージについて、 自動設定スクリプトを作成します。自動設定スクリプトは各パッケージが 必要とする、または用いることのできるOSの機能を並べた テンプレートファイルから生成されます。 OSの機能を検出して反応するshellスクリプトが書けたなら、 Autoconfはそのshellスクリプトを複数のソフトウェアパッケージで 共有する機構を持っています。もし後でshellスクリプトを修正する 必要が生じた場合でも、定義を1箇所だけ変更すればいいようになっています。 各ソフトウェアパッケージの自動生成スクリプトを再生成すれば、 shellスクリプトへの修正が反映されます。
MetaconfigパッケージはAutoconfと似た目的をもっていますが、 Metaconfigによって生成されるスクリプトはユーザの介入を必要とし、 大きなソースツリーを設定する場合には不便です。 Metaconfigの生成するスクリプトと違い、Autoconfはクロスコンパイルの 設定も扱うことができます(設定ファイルを注意深く書けば)。
移植性の高いソフトウェアパッケージを作るためには、Autoconfの
してくれないことがいくつか必要になります。例えば、各ターゲット
プログラムのためのMakefile
の自動生成や、システムに欠けている
標準ライブラリ関数やヘッダファイルを補う、などです。これらを自動化
するための作業は現在進行中です。
Autoconfを使う場合、C言語のプログラムで#ifdef
して使うシンボルの
名前に一部制限が生じます(see Preprocessor Symbol Index)。
Autoconfはスクリプトの生成のためにGNU m4
を必要とします。
Autoconfは一部のUNIXについてくるm4
にはない機能を使っています。
また、Autoconfは(GNU m4
1.0を含む)一部のバージョンのm4
の
内部制限を越えてしまう場合があります。
Autoconfと一緒には、GNU m4
1.1以降を使う必要があります。
バージョン1.3あるいはそれ以降を使った場合、1.1や1.2を使う場合より
大幅に高速になります。
バージョン1からのアップグレードのためにはSee Upgradingを 参照してください。 Autoconfの開発経緯についてはSee Historyを参照してください。 Autoconfに関する質問集はSee Questionsを参照してください。
Autoconfに関する御意見やバグレポートは
bug-gnu-utils@prep.ai.mit.edu
までmailでお寄せください。
Autoconfのバージョン番号を書くのを忘れずに。
バージョン番号はautoconf --version
で調べられます。
訳註: この和訳版は伊藤いとぢゅん純一郎 (itojun@itojun.org
)に
よるものです。
訳し間違いがあっても、犬も食いません。
疑問点があったら、「必ず原文を参照する」ようにしてください。
再配布などについては原文に従います。
訳註: この和訳版のAutoconf version 2.12 -> 2.13 へのマージ作業を新井康司 jca02266@nifty.ne.jpが行いました。一部、翻訳も行いました。訳が おかしな所は新井の担当部分です:-)
configure
ScriptsAutoconfによって生成される自動設定スクリプトは、configure
と
呼ばれることになってます。configure
は実行されると、
設定パラメタを適切な値に書き換えながらいくつかのファイルを作成します。
configure
が生成するファイルは以下のとおりです:
Makefile
。
(see Makefile Substitutions)
#define
ディレクティブを含むCヘッダファイル。
ファイル名は設定で変えられます。
(see Configuration Headers)
config.status
という名前のshellスクリプト。
このスクリプトを実行すると、上記のファイルが
再生成されます。
(see Invoking config.status)
config.cache
という名前のshellスクリプト。
たくさんのテスト結果を保存するファイルです。
(see Cache Files)
config.log
ファイル。
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 ---'
configure.in
writing.
configure
scripts.
configure.in
あるソフトウェアパッケージ用のconfigure
スクリプトを
生成するためには、configure.in
という名前のファイルを
作成する必要があります。このファイルには、ソフトウェアパッケージが
必要とする、または使う事のできるOSの機能をチェックするための
Autoconfマクロの呼出列が記述されます。
たくさんの機能をチェックするために、Autoconfマクロとして既に
たくさんのものが準備されています。Existing Testsを
参照してください。
AutoconfマクロのないOSの機能でも、多くの場合には特製チェックルーチンを
作るのにAutoconfテンプレートマクロを使うことができます。
Writing Testsを参照してください。
特にトリッキー、または特殊なOS機能のチェックをする場合、
configure.in
に手でshellコマンド列を書かないといけないかも
しれません。
autoscan
プログラムを使うと、configure.in
を
書きはじめるための元ファイルを自動生成してくれます(より詳しくは
see Invoking autoscanを参照)。
configure.in
の中でAutoconfマクロを呼び出す順番は、一部の例外を
除けば重要ではありません。configure.in
ファイルにはAC_INIT
マクロの呼び出しが一番最初に、AC_OUTPUT
マクロの呼び出しが
一番最後に入っている必要があります(see Output参照)。
さらに、一部のマクロは先に呼ばれる他のマクロに依存しています。
先に呼ばれるマクロによって設定される値によって動作を変えるためです。
このようなマクロはそれぞれのマクロの説明に注意書きがしてあります
(see Existing Tests参照)し、もし逆順に呼んだ場合、configure
の
生成時に警告が出ます。
configure.in
に統一性をもたせるため、以下の順でAutoconfマクロを
呼ぶことを推奨します。一般にいって、最後の方に書かれているものは
先にあるものに依存しています。例えば、ライブラリ関数のチェックは
typedefとライブラリファイルのチェック結果に依存します。
AC_INIT(file)
checks for programs checks for libraries checks for header files checks for typedefs checks for structures checks for compiler characteristics checks for library functions checks for system servicesAC_OUTPUT([file...])
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 Configuration Headers)
マクロの呼び出しを追加する必要があります。さらに、プログラムが
Autoconfとうまく動くように、ソースコードの方に#if
ディレクティブを
追加する必要があるでしょう(この作業を楽にするためのツールについては
see Invoking ifnamesを参照)。
autoscan
はいくつかのデータファイルを使って、ソースファイルの中にある
シンボルをみつけたときに出力すべきマクロ名を決定します。
このファイルはAutoconfマクロファイルと一緒に配布され、全て
おなじフォーマットになっています。ファイルの各行はシンボル、スペース、
シンボルをみつけたときに出力するべきAutoconfのマクロ名、というふうに
なっています。#
で始まる行はコメントです。
autoscan
はPerlがインストールされている場合にのみインストールされます。
autoscan
のオプションには以下があります:
--help
--macrodir=dir
AC_MACRODIR
を
設定しても同じ効果が得られます。
コマンドラインオプションは環境変数の設定より
優先されます。
--verbose
--version
ifnames
to List Conditionalsifnames
はソフトウェアパッケージ用にconfigure.in
を書くのを
支援します。ifnames
は、パッケージ中のソースコードで
Cプリプロセッサの条件文(#if
)に使われている識別子を出力します。
もし、パッケージが既に移植性を高めるように記述されている場合には、
configure
でなにをチェックしないといけないか決めるのに使えます。
autoscan
の出力を穴うめしてconfigure.in
を作成するのにも
役立ちます(see Invoking autoscan)。
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 Writing Macros
参照)。同じマクロがautoconf
が読み込むファイルのうち複数のファイルで
定義されていた場合、あとから読み込まれたものが有効になります。
autoconf
は以下のオプションを受け付けます:
--help
-h
--localdir=dir
-l dir
aclocal.m4
を探すとき、カレントディレクトリでなしに
ディレクトリdirを探しにいきます。
--macrodir=dir
-m dir
AC_MACRODIR
を
設定しても同じ効果が得られます。
コマンドラインオプションは環境変数の設定より
優先されます。
--version
autoreconf
to Update configure
ScriptsAutoconfで生成された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 Automatic Remakingを参照してください。
この方法を使うとconfiguration headerテンプレートのタイムスタンプは
きちんと取り扱われますが、--macrodir=dir
や
--localdir=dir
は渡されません。
autoreconf
は以下のオプションを受け付けます:
--help
-h
--force
-f
configure
スクリプトとconfiguration headerが
入力ファイルより新しい場合でも、これらの再生成を
行います。入力ファイルとはconfigure.in
と、もし
存在すればaclocal.m4
のことです。
--localdir=dir
-l dir
aclocal.m4
を探すとき、カレントディレクトリで
なしにディレクトリdirを探しにいきます。
autoheader
を呼び出す場合には、
acconfig.h
を探すディレクトリも変わります。
file.top
とfile.bot
に
ついては挙動は変わりません。
--macrodir=dir
-m dir
AC_MACRODIR
を設定しても同じ効果が
得られます。コマンドラインオプションは環境変数の
設定より優先されます。
--verbose
autoreconf
からautoconf
(と、必要なら
autoheader
)を呼び出すディレクトリ名を表示します。
--version
Autoconfで生成されたconfigure
スクリプトは、初期化や結果出力の
ための情報を必要します。たとえば、パッケージのソースファイルは
どこにあるのかとか、どのような出力ファイルを生成すべきか、などです。
以下の節では、初期化と結果出力について説明します。
Makefile
s.
configure
.
configure
Inputconfigure
スクリプトは他の全てのマクロより先に、AC_INIT
マクロを呼び出さねばなりません。必ず呼び出されなければならないマクロは
AC_INIT
とAC_OUTPUT
だけです(see Output)。
AC_INIT (unique-file-in-source-dir) | Macro |
コマンドライン引数を処理し、ソースコードの置かれている
ディレクトリをみつけます。unique-file-in-source-dirは
パッケージのソースコードの置かれたディレクトリにある、
任意のファイルの名前です; configure は、指定された
ディレクトリにソースコードが実際あるかどうか、
そのファイルが存在するかどうかを調べることで判断します。
ときには、ユーザはコマンドラインオプション--srcdir で
間違ったディレクトリを指定するかもしれません; この判定は、
安全のためのチェックです。詳しくはSee Invoking configureを
参照してください。
|
手動で設定を行うパッケージや、install
プログラムを
利用するパッケージでは、AC_CONFIG_AUX_DIR
を使って、
configure
に他のshellスクリプトがどこにあるかを
知らせる必要があるかもしれません。たいていはデフォルトで
調べにいく場所で正しいのですが。
AC_CONFIG_AUX_DIR(dir) | Macro |
ディレクトリdirに格納されている
install-sh 、config.sub 、
config.guess 、それからCygnus
configure スクリプトを利用することを
指定します。dirは絶対パス、または
srcdir からの相対パスで指定します。
デフォルトはsrcdir または
srcdir/.. または
srcdir/../.. のうち、
install-sh が最初にみつかった場所です。
他のファイルの置き場所についてはチェックが
行われません。これはAC_PROG_INSTALL を
使っただけで他のファイルを配布しなければ
ならなくなるのを防ぐためです。
このマクロはinstall.sh もチェックしますが、
このファイル名はobsoleteです。なぜなら、
Makefile がない場合、make が組み込み
ルールを使ってinstall.sh からinstall を
生成しようとするからです。
|
Autoconfで生成されたconfigure
スクリプトは、
最後にAC_OUTPUT
を呼び出さねばなりません。
このマクロは、Makefile
や他のファイルを自動設定結果にしたがって
生成します。configure.in
に必ず含まれなければならない
マクロは、AC_OUTPUT
の他にはAC_INIT
だけです(see Input)。
AC_OUTPUT ([file... [, extra-cmds [, init-cmds]]]) | Macro |
出力ファイルを生成します。このマクロは
1度だけ、configure.in の末尾で
呼び出す必要があります。マクロの
引数file...は、スペースで
区切られた出力ファイル列です;
これは空でも構いません。
このマクロは、入力ファイルを
file へ出力変数の値を
置換しながらコピーすることで生成します。
入力ファイルの名前はデフォルトでは
file.in です。
出力変数の使い方についてはSee Makefile Substitutionsを
参照してください。出力変数を定めるためには、
See Setting Output Variablesを参照してください。
このマクロは出力先のディレクトリがなければ
ディレクトリを作成します(が、さらに親のディレクトリは
作成されません)。通常、このマクロを使って生成する
ファイルはMakefile ですが、他のファイル、たとえば
.gdbinit を生成するのにも使えます。
たいてい、 AC_OUTPUT(Makefile src/Makefile man/Makefile X/Imakefile) 入力ファイルの名前は、fileのあとにコロンをつけて、 そのあとに入力ファイル名を繋げることで変更できます。 たとえば: AC_OUTPUT(Makefile:templates/top.mk lib/Makefile:templates/lib.mk) AC_OUTPUT(Makefile:templates/vars.mk:Makefile.in:templates/rules.mk)こうすることで、ファイル名をMS-DOSでも使える フォーマットにしたり、ファイルの前後に メッセージ(訳註: boilerplate)をつけたり することができます。 extra-cmdsを指定した場合、指定された
コマンドは他の処理の後に実行されるように
|
AC_OUTPUT_COMMANDS (extra-cmds [, init-cmds]) | Macro |
config.status の末尾で実行される
shellコマンドと、shellコマンド呼び出し前に
configure で行うべき変数初期化
手続きを指定します。このマクロは複数回呼び出しても
構いません。実用的でない例題はこんなかんじ:
fubar=27 AC_OUTPUT_COMMANDS([echo this is extra $fubar, and so on.], fubar=$fubar) AC_OUTPUT_COMMANDS([echo this is another, extra, bit], [echo init bit]) |
make
をサブディレクトリで実行する場合には、
変数MAKE
を使ってmake
を呼び出さねば
なりません。ほとんどのmake
では、変数
MAKE
はmake
プログラムと与えられた
オプションに設定されます(が、多くの場合
コマンドラインでの変数値設定は含まれません)。
一部の古いmake
では、変数MAKE
は
設定されません。以下のマクロを使うと、そのような
古いmake
でも変数MAKE
を使うことができます。
AC_PROG_MAKE_SET | Macro |
make が変数MAKE を設定しているなら、
変数SET_MAKE を空にします。
そうでない場合、SET_MAKE をMAKE=make に
設定します。内部でAC_SUBST を
SET_MAKE を置換するように呼び出します。
|
このマクロを利用する場合、MAKE
を利用する
各々のMakefile.in
に以下のような行を置いてください:
@SET_MAKE@
配布パッケージの各サブディレクトリのうちでコンパイルやインストールが
必要なディレクトリには、Makefile.in
を置きます。
configure
はMakefile.in
からMakefile
を生成します。
Makefile
を生成する際には、configure
は単純な
変数置換を行います。これは、Makefile.in
中に登場する
@variable@
をconfigure
が求めた変数値で
置き換えることによって行われます。このようにして出力ファイルで
置換される変数のことをoutput variables(出力変数)と呼びます。
通常、出力変数はconfigure
が設定するshell変数です。
configure
にある変数値で置換を行わせる場合、変数名を
引数にしてマクロAC_SUBST
を呼び出す必要があります。
AC_SUBST
の呼び出されていない変数については、
@variable@
はそのまま出力されます。
AC_SUBST
を使って出力変数を決める方法については
See Setting Output Variablesを参照してください。
configure
スクリプトを用いるソフトウェアパッケージは、
Makefile
ではなくてMakefile.in
と一緒に配布される
必要があります; こうすれば、ユーザはコンパイルの前に必ず
configure
スクリプトを実行して、各々のシステムにあわせた
設定を行うことになります。
Makefile
に何かを書くことに関するより多くの情報のために
See Makefile Conventions, を参照してください。
Autoconfマクロでいくつかの出力変数が前もって設定されています。
Autoconfマクロの一部では、追加の出力変数を設定します。これについては
各マクロの説明のところで述べられています。
出力変数の完全なリストをみるにはSee Output Variable Indexを
参照してください。前もって設定される出力変数の意味を以下に示します。
dir
で終る出力変数については、 See Directory Variables, を参照してください。
bindir | Variable |
ユーザが実行する実行ファイルを格納するディレクトリです。 |
configure_input | Variable |
「このファイルはconfigure によって
自動生成されました」というコメントと、
入力ファイル名を含んだコメント文字列です。
AC_OUTPUT は、生成するMakefile の
先頭に、この文字列を含むコメント行を
付け加えます。他のファイルについては、
この変数を各入力ファイル先頭のコメント
領域の中で参照しましょう。たとえば、
shellスクリプトである入力ファイルの先頭は
以下のようになります:
#! /bin/sh # @configure_input@ また、この行を置いておくことで、ファイルを
編集するひとに |
datadir | Variable |
読み込み専用のアーキテクチャ非依存の データファイルを置くディレクトリ名です。 |
exec_prefix | Variable |
アーキテクチャ依存のファイル名のプレフィックスです。 |
includedir | Variable |
Cヘッダファイルをインストールする先のディレクトリ名です。 |
infodir | Variable |
infoフォーマットのドキュメントをインストールする 先のディレクトリ名です。 |
libdir | Variable |
ライブラリファイルをインストールする先の ディレクトリ名です。 |
libexecdir | Variable |
(ユーザからではなく)他の実行ファイルから呼び出される 実行ファイルをインストールする先のディレクトリ名です。 |
localstatedir | Variable |
各マシンごとの、変更可能なデータを格納するための ディレクトリ名です(訳註: XXX)。 |
mandir | Variable |
manフォーマットのドキュメントをインストールする先の トップディレクトリ名です。 |
oldincludedir | Variable |
gcc以外のコンパイラ向けのCヘッダファイルを インストールする先のディレクトリ名です。 |
prefix | Variable |
アーキテクチャ非依存のファイルをインストールする際の ファイル名のプレフィックスです。 |
sbindir | Variable |
システム管理者によって実行される実行ファイルを インストールする先のディレクトリです。 |
sharedstatedir | Variable |
アーキテクチャ非依存の変更可能なデータを インストールする先のディレクトリ名です。 |
srcdir | Variable |
Makefile の処理すべきソースコードの入っている
ディレクトリ名です。
|
sysconfdir | Variable |
読み込み専用のマシン単位のデータファイルを インストールする先のディレクトリ名です。 |
top_srcdir | Variable |
パッケージのトップディレクトリです。トップディレクトリでは、
srcdir とおなじです。
|
CFLAGS | Variable |
Cコンパイラのデバッグ/最適化のための
オプションです。configure が
実行された環境で指定されていなかった場合、
AC_PROG_CC を呼び出したときの
デフォルト値(または、呼び出さなかったら空)が
設定されます。configure はこの変数の
値を使って、Cコンパイラの機能チェックのための
コンパイルを行います。
|
CPPFLAGS | Variable |
CプリプロセッサとCコンパイラのための、
ヘッダファイル検索対象ディレクトリ
(-Idir )と、その他の
もろもろのオプションです。
もしconfigure が実行された
環境でこの変数が指定されなかった場合、
デフォルト値は空になります。
configure はこの変数の
値を使って、Cコンパイラの機能チェック
のためのコンパイル、または
プリプロセスを行います。
|
CXXFLAGS | Variable |
C++コンパイラのデバッグ/最適化のための
オプションです。configure が
実行された環境で指定されていなかった場合、
AC_PROG_CXX を呼び出したときの
デフォルト値(または、呼び出さなかったら空)が
設定されます。configure はこの変数の
値を使って、C++コンパイラの機能チェックのための
コンパイルを行います。
|
FFLAGS | Variable |
Fortran 77コンパイラのデバッグや最適化オプションです。もし
configure を実行するとき環境変数に設定されていなければ
AC_PROG_F77 を呼ぶときにデフォルト値が設定されます。(または、
AC_PROG_F77 を呼ばなければ空になります) configure はFortran
77 の特徴をテストするプログラムをコンパイルするときにこの変数を使用しま
す。
|
DEFS | Variable |
Cコンパイラに渡す-D オプションです。
AC_CONFIG_HEADER マクロが呼び出された
場合、configure は@DEFS@ を
-D 群でなく、-DHAVE_CONFIG_H で
置き換えます(see Configuration Headers
参照)。この変数はconfigure がテストを
行っている間は定義されません。出力ファイルを
生成するときにだけ定義されます。
既に行われてたテストの結果を参照する
場合には、See Setting Output Variablesを
参照してください。
|
LDFLAGS | Variable |
リンカのためのstrip(-s )のためや
他のもろもろのためのオプションです。
configure が実行された環境で
指定されていなかった場合、
デフォルト値の空文字列が
設定されます。
configure はこの変数の値を
使って、Cコンパイラの機能チェックの
際のリンクを行います。
|
LIBS | Variable |
リンカに渡す-l オプションと
-L です。
|
ソフトウェアパッケージを展開した単一のソースコードツリー上で、 同時に複数のアーキテクチャのためのコンパイルを行うことができます。 オブジェクトファイルは各アーキテクチャ別のディレクトリに格納されます。
このためには、make
はソースコードをみつけるために
make
変数VPATH
を使用します。GNU make
と
最近のmake
のほとんどはこの機能をサポートしています。
古いmake
はVPATH
をサポートしていません;
古いmake
を使う場合、ソースコードとオブジェクトファイルは
同じディレクトリに置かれていなければなりません。
VPATH
をサポートするために、各Makefile.in
には
以下ような行が含まれている必要があります:
srcdir = @srcdir@ VPATH = @srcdir@
VPATH
を他の変数の値を使って設定しないでください(たとえば
VPATH = $(srcdir)
のように)。一部のmake
はVPATH
の
値を設定する場合に変数置換を行います。
configure
はMakefile
を生成する際に、
srcdir
を正しい値に設定し置換します。
make
変数$<
(VPATH
を使ってみつけたソースディレクトリ中の
ファイルのパス名)は、暗黙的ルールの中以外では使わないでください
(暗黙的ルールとは、例えば.c
ファイルから.o
ファイルを
生成するための手順を定義する.c.o
のルールのことです)。
一部のmake
は明示的ルール(訳中: 暗黙的ルールでないルール)の中では、
$<
定義しません; $<
は空になります。
そのかわりに、Makefile
に記述するコマンドラインはソースファイルを
$(srcdir)/
で始めるようにしてください。例えば:
time.info: time.texinfo $(MAKEINFO) $(srcdir)/time.texinfo
以下に示すようなルールをトップレベルのMakefile.in
に含めると、
設定ファイルを変更したら自動的に設定情報を更新させることができます。
この例題にはaclocal.m4
やconfiguration header fileのような、
使っても使わなくてもいいファイルが全て含まれています。
Makefile.in
にルールを追加するときには、パッケージ中で
実際使わないものは省略してください。
${srcdir}/
プレフィックスはVPATH
の制限を回避するために
記述されています。
config.h.in
とconfig.h
の内容に変化がない場合、
これらのファイルのタイムスタンプは変わりません。
stamp-
で始まる名前のファイルは、このせいで用いられています。
このようにすることで、余計な再設定を防ぐことができます。
この手法を使う場合、make
がconfig.h.in
が更新済みだと
思うように、stamp-h.in
をパッケージの配布に含める必要があります。
古いBSD系のシステムでは、touch
や他のファイルで空ファイルが
作成される場合、タイムスタンプが変わりません。
このため、逃げ道としてecho
を使っています。
${srcdir}/configure: configure.in aclocal.m4 cd ${srcdir} && autoconf # autoheader might not change config.h.in, so touch a stamp file. ${srcdir}/config.h.in: stamp-h.in ${srcdir}/stamp-h.in: configure.in aclocal.m4 acconfig.h \ config.h.top config.h.bot cd ${srcdir} && autoheader echo timestamp > ${srcdir}/stamp-h.in config.h: stamp-h stamp-h: config.h.in config.status ./config.status Makefile: Makefile.in config.status ./config.status config.status: configure ./config.status --recheck
さらに、echo timestamp > stamp-h
をAC_OUTPUT
の
引数extra-cmdsに指定する必要があります。
config.status
を実行したときに、config.h
が更新されたという
ことがわかるようにするためです。AC_OUTPUT
の詳細については
See Outputを参照。
設定ファイルにまつわる依存関係については、See Invoking config.statusを 参照。
パッケージの移植性テストで、Cプリプロセッサシンボルをいくつか以上
使う場合、コンパイラを起動するときのコマンドラインは、-D
オプションを
渡さなければならないので非常に長くなります。
この手法にはふたつの問題があります。まずmake
の出力を眺めて間違いを
みつけるのが難しくなります。もっと深刻なのは、一部のOSのコマンドライン
長の制限を越えてしまう可能性がある、ということです。
-D
オプションを使うかわりに、configure
スクリプトは
#define
ディレクティブを含んだCヘッダファイルを生成することができます。
AC_CONFIG_HEADER
マクロでこのような出力ファイルを選択します。
このマクロはAC_INIT
の直後に呼び出す必要があります。
パッケージ中のソースコードでは、#include
ディレクティブを使って、
configuration header fileを他のどのヘッダファイルよりも前に
読み込む必要があります。
一番最初に読み込むのは、定義の一貫性を保つためです(例えば、const
を
再定義するヘッダを先に読み込んだりしたら困ります)。
#include "config.h"
でなしに、#include <config.h>
を使い、
Cコンパイラに-I.
オプションを渡しましょう
(あるいは-I..
などと、config.h
のあるディレクトリを
指定しましょう)。このようにすることで、ソースファイルのあるディレクトリに
config.h
がある状態でも、他のビルドディレクトリを作成して
そちらのconfig.h
を使ってパッケージをコンパイルすることができます
(訳註: 結構意訳)。
AC_CONFIG_HEADER (header-to-create ...) | Macro |
AC_OUTPUT にCプリプロセッサ向けの
#define ディレクティブ入りの
ファイルを作成させ、@DEFS@ を
(shell変数DEFS の値でなく)
-DHAVE_CONFIG_H に置換させます。
出力ファイル名はheader-to-createに、
スペースで区切って指定します。
通常、header-to-createに使う
ファイル名はconfig.h です。
もしheader-to-createに指定された
ファイルが既に存在していて、 通常、入力ファイルは
AC_CONFIG_HEADER(defines.h:defines.hin) AC_CONFIG_HEADER(defines.h:defs.pre:defines.h.in:defs.post) こうすることで、ファイル名をMS-DOSでも使える フォーマットにしたり、ファイルの前後に メッセージ(訳註: boilerplate)をつけたり することができます。 |
配布パッケージには、ヘッダファイルのテンプレートを含める必要があります。
テンプレートは出力がこうあってほしいと思うとおりに書き、
コメントと、デフォルト値を含めた#define
ディレクティブを
書いておく必要があります。
例えば、configure.in
が以下のマクロ呼び出しを含んでいる場合:
AC_CONFIG_HEADER(conf.h) AC_CHECK_HEADERS(unistd.h)
以下のような行がconf.h.in
に含まれている必要があります。
unistd.h
があるシステムでは、configure
は
#define
の行の0を1に変えて出力します。ないシステムでは、
そのまま出力します。
/* Define as 1 if you have unistd.h. */ #define HAVE_UNISTD_H 0
あなたのプログラムが#if
でなく#ifdef
で
設定オプションを調べている場合、入力ファイルにデフォルト値を設定する
#define
の行を書くかわりに、#undef
の行を書くことができます。
unistd.h
があるシステムでは、configure
は
2行目を#define HAVE_UNISTD_H 1
と書き換えます。
そうでないシステムでは、2行目をコメントアウトして出力します
(コメントアウトするのは、このシンボルがシステムで既に使われている
かもしれないからです)。
/* Define if you have unistd.h. */ #undef HAVE_UNISTD_H
autoheader
to Create config.h.in
autoheader
プログラムは、configure
が使う
Cの#define
ディレクティブ入りのファイルを生成してくれます。
configure.in
がAC_CONFIG_HEADER(file)
を
呼び出している場合、autoheader
はfile.in
を
生成します。複数のファイルが指定されていたら、最初のファイル名を使います。
さもなくば、autoheader
はconfig.h.in
を生成します。
autoheader
にコマンドライン引数を渡した場合、
入力としてconfigure.in
のかわりに指定されたファイルが使われ、
結果は(config.h.in
でなく)標準出力に出力されます。
autoheader
に-
をコマンドライン引数として渡すと、
(configure.in
のかわりに)標準入力が読み込まれ、
結果は標準出力に出力されます。
autoheader
はconfigure.in
を調べ、どんなCプリプロセッサシンボルが
定義される可能性があるか推測します。そして、
acconfig.h
というファイルからコメントと#define
または
#undef
の行をコピーします。
上記のacconfig.h
はAutoconfと一緒に配布され、所定の場所にインストール
されているものです。
カレントディレクトリにもacconfig.h
がある場合、こちらも使われます。
AC_DEFINE
マクロで標準以外のシンボルを定義している場合、
それらのシンボルのぶんのエントリをカレントディレクトリのacconfig.h
に
造っておく必要があります。
AC_CHECK_HEADERS
、AC_CHECK_FUNCS
、AC_CHECK_SIZEOF
、
またはAC_CHECK_LIB
で定義されるシンボルについては、
(acconfig.h
から定義をコピーするのではなく)
autoheader
がコメントと#undef
の行を自動生成します。
なぜなら、これらのマクロで使われる可能性のあるシンボルは事実上無限に
あるからです。
autoheader
の生成したファイルは、主に#define
または
#undef
と、付随するコメントからなります。
./acconfig.h
に@TOP@
という文字列があった場合、
autoheader
は@TOP@
を含む行以前の行を
出力の先頭にコピーします。
同様に、./acconfig.h
に@BOTTOM@
という文字列があった場合、
autoheader
は@BOTTOM@
を含む行以降の行を
出力の末尾にコピーします。
どちらの文字列もなくても構いません。
file.top
(通常config.h.top
になります)や
file.bot
という名前のファイルをカレントディレクトリに
作っておくと、同様の効果が得られます。
もしファイルがあった場合、autoheader
はファイルの内容を
出力の先頭(または末尾)にコピーします。
これらのファイルを使うのはおすすめしません。
なぜなら、これらのファイル名はMS-DOSファイルシステムに格納できないからです;
また、2つのファイルを置くことでディレクトリがごちゃごちゃします。
でも利点もあります。
他のディレクトリにあるacconfig.h
を読み込むために
autoheader
の--localdir=dir
オプションを使う場合には、
これら2つのファイルを使うと全ての出力ファイルに別々のメッセージ
(訳註: boilerplate)をつけることができます。
autoheader
は以下のオプションを受け付けます:
--help
-h
--localdir=dir
-l dir
aclocal.m4
やacconfig.h
を
探すとき、カレントディレクトリでなしに
ディレクトリdirを探しにいきます。
autoheader
を呼び出す場合には、
file.top
とfile.bot
に
ついては挙動は変わりません。
--macrodir=dir
-m dir
acconfig.h
を参照します。
環境変数AC_MACRODIR
を設定しても同じ効果が
得られます。コマンドラインオプションは環境変数の
設定より優先されます。
--version
ほとんどの場合、サブディレクトリにMakefile
を作るには
AC_OUTPUT
を使えば十分です。
しかし、複数の独立したパッケージを制御するconfigure
スクリプトを作る場合には、AC_CONFIG_SUBDIRS
を使うことで
サブディレクトリにあるconfigure
スクリプトを呼び出すことができます。
AC_CONFIG_SUBDIRS (dir ...) | Macro |
AC_OUTPUT マクロに、
dirに指定されたディレクトリ
にあるconfigure を実行させます。
ディレクトリが複数の場合はdirに
ディレクトリをスペースで区切って並べます。
ディレクトリdirがみつからない場合、
エラーにはなりません。これは、
configure 大きなソースコード
ツリーのうちの実在する一部分だけを
設定できるようにするためです。
dirにconfigure.in があって
configure がない場合、Cygnus
ディレクトリAC_CONFIG_AUXDIR にある
Cygnus configure スクリプトが
使われます。
サブディレクトリにある |
デフォルトでは、configure
はインストールのためのファイル名の
ディレクトリプレフィクスを/usr/local
に設定します。configure
の
ユーザは、--prefix
と--exec-prefix
オプションを使って、
他のディレクトリプレフィクスを選択することができます。
デフォルトの設定を変更するにはふたつの方法があります:
configure
生成時と、configure
の実行時です。
一部のソフトウェアパッケージでは、デフォルトで/usr/local
以外のところに
インストールしたい場合があるでしょう。このためには、
AC_PREFIX_DEFAULT
マクロを使ってください。
AC_PREFIX_DEFAULT (prefix) | Macro |
デフォルトのインストールディレクトリ
プレフィクスを、/usr/local
でなくprefixにします。
|
configure
スクリプトが、既にインストールされている
関係あるプログラムのインストール位置から、
インストールディレクトリプレフィクスを推測してくれると
便利なこともあるでしょう。このためには、AC_PREFIX_PROGRAM
を
呼び出しましょう。
AC_PREFIX_PROGRAM (program) | Macro |
ユーザがインストールディレクトリ
プレフィクスを(--prefix オプションで)
指定しなかった場合、値をprogramの
位置から推測します。programは
shellと同様、PATH をたぐって
探されます。もしprogramが
PATH に書かれたディレクトリの
どこかに存在した場合、ディレクトリ
プレフィクスをprogramのある
ディレクトリの親ディレクトリに
設定します; もしなかったら、
Makefile.in に指定された
プレフィクスをそのままにします。
例えば、programがgcc で、
PATH を探した結果
/usr/local/gnu/bin/gcc が
見つかった場合、プレフィクスは
/usr/local/gnu になります。
|
configure
以下のマクロはconfigure
スクリプトのバージョン番号を管理します。
このマクロは使っても使わなくても構いません。
AC_PREREQ (version) | Macro |
Autoconfの十分最近のバージョンが
使われているか確かめます。
configure を生成するのに
使われているAutoconfがversion
以前のものだった場合、エラーメッセージを
標準エラー出力に出力し、configure を
生成しません。例えば:
AC_PREREQ(1.8) このマクロは、 |
AC_REVISION (revision-info) | Macro |
revision-infoに指定したRCS
リビジョンスタンプ(訳註: $ Id $
とかのこと)を、$ マークや
ダブルクォートを取り除いてから
configure スクリプトに埋め込みます。
このマクロを使ってconfigure.in の
リビジョンスタンプconfigure スクリプトに
取り込むと、RCS/CVSによって
configure 内のリビジョンスタンプを
書き換えられずに済みます。
このようにすれば、configure
スクリプトがどのリビジョンの
configure.in から生成されたかを
簡単に知ることができます。
このマクロを 例えば、 AC_REVISION($Revision: 1.30 $)dnl
#! /bin/sh # From configure.in Revision: 1.30 |
以下のマクロは、パッケージが必要な、あるいは使いたい特定のOSの機能を 調べます。以下のマクロに定義されていない機能の有無をチェックしたい場合、 基本テストマクロ(primitive test macro)に適切な引数を渡してチェックを 実現することになります(see Writing Tests参照)。
以下のテストは、どの機能をチェックしているか、なにがわかったかを
知らせるメッセージを出力します。チェック結果はconfigure
を
再度実行したときのためにキャッシュされます(see Caching Results参照)。
マクロには出力変数を設定するものがあります。出力変数の値を 参照するやりかたについてはSee Makefile Substitutionsを参照してください。 以下で、「nameを定義します」という文は、 「Cプリプロセッサシンボルnameを1に定義します」という意味です。 定義された値をプログラム中で参照するやりかたについてはSee Defining Symbols を参照してください。
typedef
s that might be missing.
以下のマクロは特定のプログラムの有無、またはふるまいをチェックします。 マクロは、いくつかの候補となるプログラムからどれかひとつを選んだり、 選んだものをどう利用するかを定めるために使われます。 パッケージで使うプログラム専用のマクロが定義されておらず、 そのプログラムに関する特殊なチェックが必要ない場合、 汎用のマクロのうちいずれかを利用することができます。
以下のマクロは特定のプログラムをチェックします-- プログラムが存在するかどうか、およびいくつかのプログラムについては プログラム特有の機能をチェックします。
AC_DECL_YYTEXT | Macro |
yytext の型がchar [] でなく
char * だった場合、
YYTEXT_POINTER を定義します。
また、lex の出力ファイル名を
出力変数LEX_OUTPUT_ROOT に
定義します。通常はlex.yy ですが
他の値のこともあります。これらの結果は
lex とflex のどちらが
利用されているかによって変わります。
|
AC_PROG_AWK | Macro |
mawk 、gawk 、nawk 、
awk があるかどうかをこの順序で
調べ、出力変数AWK の値を
最初にみつけたプログラムの
名前に設定します。mawk を最初に
調べるのは、これが一番高速動作する
実装だと言われているからです。
|
AC_PROG_CC | Macro |
利用するCコンパイラを決定します。
環境変数CC が設定されて
いなかったら、gcc があるか
どうか調べ、なければcc を
使います。出力変数CC を
みつけたコンパイラの名前に設定します。
このマクロは、GNU Cコンパイラを使う場合
shell変数 現在利用することになっている
Cコンパイラが、 |
AC_PROG_CC_C_O | Macro |
Cコンパイラがコマンドラインオプション
-c と-o を
同時に受け付けない場合、
NO_MINUS_C_MINUS_O を定義します。
|
AC_PROG_CPP | Macro |
出力変数CPP に、Cプリプロセッサを
実行するためのコマンド名を定義します。
$CC -E が動かない場合、
/lib/cpp が使われます。
CPP を.c ファイル以外に
用いるのは移植性がありません。
移植性のために、CPP に通すのは
拡張子が.c のファイルだけにしましょう。
現在選択されている言語がCの場合
(see Language Choice参照)、
一部のテストマクロは出力変数 |
AC_PROG_CXX | Macro |
利用するC++コンパイラを判別します。
環境変数CXX またはCCC が
定義されていないか(CXX を先に)
調べます;
もし定義されていたら、定義されている値を
出力変数CXX にセットします。
さもなくば、C++コンパイラらしい名前の
プログラムを探します
(c++ , g++ , gcc , CC ,
cxx , それからcc++ )。
もし以上のチェックが全て失敗したら、
最後の手段としてCXX をgcc にセットします。
GNU C++コンパイラを利用する場合、
shell変数 現在利用することになっている
C++コンパイラが、 |
AC_PROG_CXXCPP | Macro |
出力変数CXXCPP に、C++プリプロセッサを
実行するためのコマンド名を定義します。
$CXX -E が動かない場合、
/lib/cpp が使われます。
CXXCPP を.c 、.C
または.cc 以外のファイルに
用いるのは移植性がありません。
移植性のために、CPP に通すのは
上記に挙げた拡張子をもつファイルだけにしましょう。
現在選択されている言語がC++の場合
(see Language Choice参照)、
一部のテストマクロは出力変数 |
AC_PROG_F77 | Macro |
利用するFortran 77コンパイラを決定します。環境変数F77 が設定されて
いなかったら、g77 、f77 そして f2c を
この順番で調べます。出力変数F77 をみつけたコンパイラの名前に設定し
ます。
|
AC_PROG_F77_C_O | Macro |
Fortran 77コンパイラがオプション-c と-o を同時に受け付けるか
どうかテストします。もし受け付けなければF77_NO_MINUS_C_MINUS_O を
定義します。
|
AC_PROG_GCC_TRADITIONAL | Macro |
GNU Cコンパイラを使っていて、
-traditional フラグを指定しないと
ioctl がうまく動かない場合、
出力変数CC に-traditional を
付け加えます。
通常、これはGNU Cコンパイラ用に修正された
ヘッダファイルがインストールされていない
古いシステムで起こります。
GNU Cコンパイラの最近のバージョンでは、
インストール時にヘッダファイルを修正するので、
この問題は起きなくなってきました。
|
AC_PROG_INSTALL | Macro |
現在のPATH 上にBSD互換の
install プログラムがあった場合、
出力変数INSTALL をその名前にセットします。
さもなくば、dir/instal-sh -c を
セットします。
後者の場合、AC_CONFIG_AUX_DIR に
指定されたディレクトリ(またはデフォルトの
ディレクトリ)を使ってdirを決定します
(see Output)。
さらに、INSTALL_PROGRAM とINSTALL_SCRIPT を${INSTALL} に、
INSTALL_DATA を${INSTALL} -m 644 にセットします。
このマクロは、うまく動作しない
パッケージに含める(訳註: 意訳)
標準的な |
AC_PROG_LEX | Macro |
flex があったら、出力変数LEX を
flex に、(もしlibfl.a が
標準的な場所にあったら)LEXLIB を
-lfl に設定します。
もしflex がなかったら、
LEX をlex に、
LEXLIB を-ll に設定します。
|
AC_PROG_LN_S | Macro |
ln -s が現在のファイルシステムで
うまく使えたら(すなわち、OSとファイルシステムが
シンボリックリンクをサポートしていたら)、
出力変数LN_S をln -s に設定します。
動かなかったら、ln に設定します。
カレントディレクトリ以外のパス名をリンク先として
指定した場合、 言い替えれば、以下はうまく動きません: $(LN_S) foo /x/bar ので、かわりにこうしましょう: (cd /x && $(LN_S) foo bar) |
AC_PROG_RANLIB | Macro |
もしranlib がみつかったら、出力変数
RANLIB をranlib に設定します。
さもなくば、: (なにもしない)に設定します。
|
AC_PROG_YACC | Macro |
もしbison がみつかったら、出力変数
YACC をbison -y に設定します。
かわりにbyacc がみつかったら、出力変数
YACC をbyacc に設定します。
さもなくば、yacc に設定します。
|
以下のマクロは、プログラムをみつけるための専用マクロが特に
定義されていないプログラムをみつけるために使われます。
プログラムの存在だけでなくプログラムの挙動を調べたい場合、
自分でテストスクリプトを記述する必要があります(see Writing Tests)。
デフォルトでは、マクロは環境変数PATH
を使います。
ユーザのPATH
にないようなプログラムをチェックする場合、
以下のように自分でサーチパスを変更してマクロに渡すことができます:
AC_PATH_PROG(INETD, inetd, /usr/libexec/inetd, $PATH:/usr/libexec:/usr/sbin:/usr/etc:etc)
AC_CHECK_FILE (file [, action-if-found [, action-if-not-found]]) | Macro |
ファイルfileがシステムに存在するかどうかを検査します。 もしみつかればaction-if-foundが実行され、みつからなければ (もし与えられていれば)action-if-not-foundが実行されます。 |
AC_CHECK_FILES (files[, action-if-found [, action-if-not-found]]) | Macro |
AC_CHECK_FILE をfilesに列挙したそれぞれのファイルごとに一度
ずつ実行します。さらに見つけたファイルそれぞれに対して
HAVE_file を1に定義します。
|
AC_CHECK_PROG (variable, prog-to-check-for, value-if-found [, value-if-not-found [, path, [ reject ]]]) | Macro |
プログラムprog-to-check-forがPATH 中に
あるかどうかを調べます。もし発見された場合variableを
value-if-foundに設定します。発見されなかった場合
(value-if-not-foundが指定されていた場合は)
value-if-not-foundに設定します。
このマクロは、reject (絶対パスのファイル名)を
サーチパス上で発見してもそれは無視します。
この場合、variableはパス上でみつかった
prog-to-check-forで、rejectではない
ファイルの絶対パス名になります。
variableが既に設定されていた場合、なにもしません。
variableのために、AC_SUBST を呼び出します。
|
AC_CHECK_PROGS (variable, progs-to-check-for [, value-if-not-found [, path]]) | Macro |
progs-to-check-forに指定された、
スペースで区切られたプログラム名たちがPATH 上に
あるかどうかを調べます。もしあった場合、
そのプログラム名をvariableに設定します。
さもなくば、次のプログラム名を探します。
もし、指定された全てのプログラムがなかった場合、
value-if-not-foundの値をvariableに設定します。
もしvalue-if-not-foundが指定されていなかったら、
variableの値は変更されません。
variableのために、AC_SUBST を呼び出します。
|
AC_CHECK_TOOL (variable, prog-to-check-for [, value-if-not-found [, path]]) | Macro |
AC_CHECK_PROG と同様ですが、prog-to-check-forの
先頭にAC_CANONICAL_HOST で判定されたホストタイプを
つけたものを最初に探します(see Canonicalizing参照)。
例えば、ユーザがconfigure --host=i386-gnu を
実行し、その中で
AC_CHECK_TOOL(RANLIB, ranlib, :) というマクロが使われていたなら、まずパス上の
|
AC_PATH_PROG (variable, prog-to-check-for [, value-if-not-found [, path]]) | Macro |
AC_CHECK_PROG と同様ですが、
プログラムが発見された場合variableを
prog-to-check-forの絶対パスに設定します。
|
AC_PATH_PROGS (variable, progs-to-check-for [, value-if-not-found [, path]]) | Macro |
AC_CHECK_PROGS と同様ですが、
progs-to-check-forの中のいずれかが
見付かったら、プログラムの絶対パスを
variableに設定します。
|
以下のマクロは指定されたC、C++、Fortran 77ライブラリファイル(および中身)が 存在するかどうかを調べます。
AC_CHECK_LIB (library, function [, action-if-found [, action-if-not-found [, other-libraries]]]) | Macro |
現在選択されている言語によって(see Language Choice)、
functionに指定されたC、C++、Fortran 77の関数が存在するか
どうかを調べます。
チェックはテスト用のCプログラムとライブラリ
libraryを一緒にリンクしてみて成功するかどうかで
行われます。
libraryはライブラリのベースネームです。
例えば、-lmp を調べる場合、mp を
引数libraryに指定することになります。
action-if-foundには、リンクが成功した場合に
呼び出されるshellコマンド列を指定します。
action-if-not-foundには、リンクが失敗したときに
呼び出されるshellコマンド列を指定します。
action-if-foundが
指定されなかった場合、デフォルトの動作になります。
デフォルトの動作は もしlibraryだけとリンクするのでは未解決のシンボルが
出てしまい、他のライブラリをリンクしないといけない場合には、
それらのライブラリ名をスペースで区切ってother-librariesに
指定してください: |
AC_HAVE_LIBRARY (library, [, action-if-found [, action-if-not-found [, other-libraries]]]) | Macro |
このマクロはAC_CHECK_LIB を、引数functionを
main にして呼び出すのと同じです。引数libraryは
foo でも-lfoo でも、あるいはlibfoo.a
とでも指定できます。これらの全ての場合に、コンパイラには
引数-lfoo が渡ります。
libraryにshell変数を渡すことはできません。
libraryは文字列リテラルである必要があります。
このマクロはobsoleteです。
|
AC_SEARCH_LIBS (function, search-libs [, action-if-found [, action-if-not-found [, other-libraries]]]) | Macro |
もしまだそのライブラリを利用するように設定されていなければfunction
を定義したライブラリを探します。これはAC_TRY_LINK_FUNC を最初にラ
イブラリなしで、それからsearch-libsに列挙されたライブラリをそれぞ
れ指定して呼び出すのと同じです。
関数が見つかればaction-if-foundを実行します。そうでなければ action-if-not-foundを実行します。 もし、libraryのリンクがシンボル未解決という結果になり、追加のライ
ブラリとともにリンクすることによってそれが解決するようならば、そのような
ライブラリをother-libraries引数に空白区切りで |
AC_SEARCH_LIBS (function, search-libs[, action-if-found [, action-if-not-found]]) | Macro |
このマクロは、それぞれのライブラリをsearch-libsでリストアップした
AC_TRY_LINK_FUNC の一回の呼び出しと同じです。特定のfunction
が見つかった最初のライブラリに対し、-llibrary をLIBS
に追加し、action-if-foundを実行します。それ以外の場合は
action-if-not-foundを実行します。
|
以下のマクロは、Cのライブラリ関数があるかどうかを調べます。 もし、あるマクロをチェックする特別の関数が定義されておらず、 特殊なチェックが必要でない場合には、汎用の関数チェックマクロを 用いることができます。
以下のマクロは、特定のCライブラリ関数をチェックします -- 関数が存在するかどうか、および特定の引数を与えられたときの 挙動がチェックされます。
AC_FUNC_ALLOCA | Macro |
alloca の有無をチェックします。
このチェックでは、なるべくコンパイラ組み込みの
alloca を探そうとします。
このために、alloca.h があるかどうかおよび
Cプリプロセッサマクロ__GNUC__ と
_AIX があらかじめ定義されているかを調べます。
もしalloca.h がみつかったら、
HAVE_ALLOCA_H が定義されます。
上記のチェックが失敗したら、標準Cライブラリに
関数があるかどうかを探します。
ここまでのチェックのいずれかが成功した場合、
このマクロはSystem V R3の
/* AIX requires this to be the first thing in the file. */ #ifndef __GNUC__ # if HAVE_ALLOCA_H # include <alloca.h> # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); # endif # endif # endif #endif |
AC_FUNC_CLOSEDIR_VOID | Macro |
ライブラリ関数closedir が
意味のある値を返さない場合、CLOSEDIR_VOID を
定義します。
定義されなかった場合には、
closedir を呼んだ場合
返り値を用いてエラーチェックを行うべきです。
|
AC_FUNC_FNMATCH | Macro |
ライブラリ関数fnmatch が存在し、かつ動作するなら、
HAVE_FNMATCH を定義します
(ちなみに、SunOS 5.4付属のものは動きません)。
|
AC_FUNC_GETLOADAVG | Macro |
システムのロードアベレージを得る方法をチェックします。
現在のシステムでgetloadavg が利用できるなら、
HAVE_GETLOADAVG を定義し、
LIBS に必要なライブラリファイルを追加します。
もし
|
AC_FUNC_GETMNTENT | Macro |
getmntent がライブラリファイル
sun 、seq およびgen の
いずれかに含まれているかどうか調べます
(順に、Irix 4、PTX、Unixwareの場合の
ライブラリファイルです)。
getmntent が存在した場合、
HAVE_GETMNTENT を定義します。
|
AC_FUNC_GETPGRP | Macro |
getpgrp が引数をとらない場合
(つまりPOSIX.1準拠の場合)、
GETPGRP_VOID を定義します。
定義されなかった場合、getpgrp はBSDでのように
プロセスIDを引数にとります。
このマクロはgetpgrp があるかどうかは
全く調べません; getpgrp がない場合に
対処するには、先にAC_CHECK_FUNC を使って
getpgrp があるかどうか調べてください。
|
AC_FUNC_MEMCMP | Macro |
ライブラリ関数memcmp がないか、
または(SunOS 4.1.3のように)8bitデータに対して
使えない場合、memcmp.o を
出力変数LIBOBJS に追加します。
|
AC_FUNC_MMAP | Macro |
mmap が存在して正常動作する場合、
HAVE_MMAP を定義します。
動作チェックは、既にマップされたメモリを
自プロセスの固定アドレスにマップする場合に関してのみ
行われます。
|
AC_FUNC_SELECT_ARGTYPES | Macro |
関数select の引数それぞれに渡される正しい型を決定し、
SELECT_TYPE_ARG1 、SELECT_TYPE_ARG234 、
SELECT_TYPE_ARG5 それぞれにその型を定義します。
SELECT_TYPE_ARG1 はint にデフォルト設定され、
SELECT_TYPE_ARG234 はint * にデフォルト設定され、
SELECT_TYPE_ARG5 はstruct timeval * にデフォルト設定されます。
|
AC_FUNC_SETPGRP | Macro |
setpgrp が引数をとらない場合
(つまりPOSIX.1準拠の場合)、
SETPGRP_VOID を定義します。
定義されなかった場合、setpgrp はBSDでのように
プロセスIDを引数にとります。
このマクロはsetpgrp があるかどうかは
全く調べません; setpgrp がない場合に
対処するには、先にAC_CHECK_FUNC を使って
setpgrp があるかどうか調べてください。
|
AC_FUNC_SETVBUF_REVERSED | Macro |
setvbuf の第2引数がバッファリングの形式で、
第3引数がバッファへのポインタの場合、
SETVBUF_REVERSED を定義します。
SETVBUF_REVERSED が定義されるのは、
release 3以前のSystem Vの場合です。
|
AC_FUNC_STRCOLL | Macro |
strcoll が存在して正常動作する場合、
HAVE_STRCOLL を定義します。
このマクロはstrcoll があるかどうかを
AC_CHECK_FUNC より詳しく調べます。
一部のシステムでは、strcoll の
定義が誤っているためこの関数を使うべきではないからです。
|
AC_FUNC_STRFTIME | Macro |
strftime がintl ライブラリにあるかどうかを調べます
(これはSCO UNIXのためです)。
もしあった場合、HAVE_STRFTIME を定義します。
|
AC_FUNC_UTIME_NULL | Macro |
utime(file, NULL) がfileの
タイムスタンプを現在時刻に設定する場合、
HAVE_UTIME_NULL を定義します。
|
AC_FUNC_VFORK | Macro |
vfork.h があった場合、HAVE_VFORK_H を定義します。
正常動作動作するvfork が発見されなかった場合、
vfork をfork に#define します。
このマクロは、いくつかのシステムでのvfork の
バグをチェックし、バグつきの場合にはvfork が
みつからなかったかのように振舞います。
ただし、子プロセスでsignal を呼んでも
親プロセスのシグナルハンドラが変更されない場合には
これはバグつきとはみなされません。
子プロセスでシグナルハンドラを変更することは
めったにないからです。
|
AC_FUNC_VPRINTF | Macro |
vprintf が存在する場合、
HAVE_VPRINTF を定義します。
ない場合に_doprnt が存在したら、
HAVE_DOPRNT を定義します。
ちなみに、vprintf が存在したら、
vfprintf とvsprintf も
存在すると仮定して構いません。
|
AC_FUNC_WAIT3 | Macro |
wait3 が存在し、呼び出し時に第3引数
(struct rusage * )の指し先の内容がきちんと
設定される場合、
HAVE_WAIT3 を定義します。
ちなみに、HP-UXでは第3引数の差し先はきちんと設定されません。
|
以下のマクロは、チェックのための特別のマクロがないライブラリ関数について
調べるために用意されています。
ライブラリ関数がデフォルトのCライブラリに入っていない
可能性がある場合には、AC_CHECK_LIB
を用いて
そのライブラリファイルがあるかどうか調べてください。
ライブラリ関数があるかどうかだけでなく、その振舞いも調べる
必要がある場合には、自前でテストを記述する必要があるでしょう
(see Writing Tests)。
AC_CHECK_FUNC (function, [action-if-found [, action-if-not-found]]) | Macro |
Cの関数functionが存在する場合、shellコマンドaction-if-foundを
実行します。
ない場合にはaction-if-not-foundを実行します。
関数のあるなしによってシンボルを定義したいだけであれば、
AC_CHECK_FUNCS を使ったほうがいいでしょう。
このマクロはAC_LANG_CPLUSPLUS が呼ばれているいないに関わらず
C linkageで関数を探します。
C++ではCよりもライブラリ関数がきちんと標準化されているので、
AC_CHECK_FUNC を使う機会は少なそうだからです
(環境を調べる対象の言語を選ぶやりかたについては、
see Language Choiceを参照)。
|
AC_CHECK_FUNCS (function... [, action-if-found [, action-if-not-found]]) | Macro |
スペースで区切られた複数のfunctionのうち、
実際存在するものについてHAVE_function (全部大文字)を定義します。
action-if-foundには、
各々の関数がみつかったときに実行したいshellスクリプトを記述します。
action-if-foundをbreak にすると、
最初に関数が見つかったところでループを抜けることができます。
action-if-not-foundには、
各関数がみつからなかったときに実行されるshellスクリプトを記述します。
|
AC_REPLACE_FUNCS (function...) | Macro |
このマクロは、
特定の関数functionが存在しない場合に
LIBOBJS にfunction.o を追加します。
この動作は、
AC_CHECK_FUNCS で
action-if-not-foundに
「出力変数LIBOBJS にfunction.o を追加する」
と記述した場合と似ています。
ライブラリの置き換え用の関数を定義するときには、
プロトタイプ宣言を#ifndef HAVE_function で
くくっておいた方がいいでしょう。
システムにfunctionがある場合、
システム定義のincludeファイルのどこかにプロトタイプ宣言があるはずです。
定義が矛盾するかもしれないから、システムにfunctionが
あるときには再定義を避けるべきです。
|
以下のマクロはCヘッダファイルがあるかないか調べます。 あなたのチェックしたいヘッダファイルについて 特定ヘッダファイル向けのマクロがなくて、 しかも特殊なことを調べる必要がなければ、 汎用のヘッダファイル検査マクロを使うとよいでしょう。
以下のマクロは特定のシステムヘッダファイルを検査します。 ファイルがあるかどうか、それから必要なときには なにを定義しているかを検査します。
AC_DECL_SYS_SIGLIST | Macro |
sys_siglist がsignal.h またはunistd.h で定義されているなら、
SYS_SIGLIST_DECLARED を定義します。
|
AC_DIR_HEADER | Macro |
AC_HEADER_DIRENT とAC_FUNC_CLOSEDIR_VOID を呼ぶのと似ていますが、
定義するCプリプロセッサマクロが違います。
AC_DIR_HEADER は
どのヘッダファイルがみつかったのかを表すCプリプロセッサマクロを定義します。
AC_DIR_HEADER 、およびこれにより定義されるCプリプロセッサマクロは
obsoleteです。
定義されるCプリプロセッサマクロは以下のとおり:
さらに、関数 |
AC_HEADER_DIRENT | Macro |
以下のヘッダファイルの有無を調べます。
そして、ヘッダファイルが存在しDIR を定義した最初のファイルについて
以下のCプリプロセッサマクロを定義します:
ソースコード中でディレクトリライブラリのための定義をするには、 以下のようにするといいでしょう: #if HAVE_DIRENT_H # include <dirent.h> # define NAMLEN(dirent) strlen((dirent)->d_name) #else # define dirent direct # define NAMLEN(dirent) (dirent)->d_namlen # if HAVE_SYS_NDIR_H # include <sys/ndir.h> # endif # if HAVE_SYS_DIR_H # include <sys/dir.h> # endif # if HAVE_NDIR_H # include <ndir.h> # endif #endif 上記の定義を使う場合、プログラム中では変数を( このマクロはSCO Xenixの |
AC_HEADER_MAJOR | Macro |
sys/types.h にmajor 、minor 、それから
makedev が定義されておらず、
sys/mkdev.h で定義されている場合、
MAJOR_IN_MKDEV を定義します。
sys/sysmacros.h で定義されている場合、
MAJOR_IN_SYSMACROS を定義します。
|
AC_HEADER_STDC | Macro |
システムにANSI Cヘッダファイルがある場合、STDC_HEADERS を定義します。
具体的には、stdlib.h 、stdarg.h 、string.h 、
それからfloat.h をチェックします。
これらのヘッダがあれば、多分他のANSI Cヘッダファイルもあるでしょう。
このマクロは、string.h でmemchr が定義されているかどうか
調べます(もしmemchr があればほかのmem 系関数もあるでしょう)。
それから、stdlib.h でfree が定義されているかどうか
調べます(もしokならmalloc や他の関連関数もあるでしょう)。
さらに、ctype.h で定義されるマクロがANSI Cの定義どおり、
2^7 のビットが立っていても動くかどうか調べます。
ANSI互換のヘッダファイル(とCライブラリ関数)があるかどうか決めるには、
ANSI Cヘッダのないシステムでは、どのヘッダでなにを定義しているかは
全くばらばらです。
ですから、どのヘッダファイルに定義があるか探すよりも、
自分で使う関数を自分で定義した方が簡単です。
あるシステムではANSIとBSDの関数が混在しています。
あるシステムはほぼANSI互換なのに AC_HEADER_STDC AC_CHECK_FUNCS(strchr memcpy) プログラム中では以下のように定義します: #if STDC_HEADERS # include <string.h> #else # ifndef HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr (), *strrchr (); # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif もしプログラム中で |
AC_HEADER_SYS_WAIT | Macro |
sys/wait.h があって、POSIX.1互換なら、
HAVE_SYS_WAIT_H を定義します。
sys/wait.h がない場合、exit statusを保持するのにint でなしに
古いBSDのようにunion wait を使っている場合にはPOSIX.1非互換です。
sys/wait.h がPOSIX.1互換でない場合には、
ヘッダファイルをincludeせず、
POSIX.1マクロを自分で定義しましょう。
例えば:
#include <sys/types.h> #if HAVE_SYS_WAIT_H # include <sys/wait.h> #endif #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif |
AC_MEMORY_H | Macro |
memcpy やmemcmp などがstring.h で定義されておらず、
memory.h が存在する場合、NEED_MEMORY_H を定義します。
このマクロはobsoleteです。
かわりにAC_CHECK_HEADERS(memory.h) を使ってください。
AC_HEADER_STDC の例参照。
|
AC_UNISTD_H | Macro |
unistd.h があればHAVE_UNISTD_H を定義します。
このマクロはobsoleteです。
かわりにAC_CHECK_HEADERS(unistd.h) を使ってください。
POSIX.1互換かどうか調べるには以下のようにします: #if HAVE_UNISTD_H # include <sys/types.h> # include <unistd.h> #endif #ifdef _POSIX_VERSION /* Code for POSIX.1 systems. */ #endif
|
AC_USG | Macro |
strings.h 、rindex やbzero がないシステムなら
USG を定義します。
このマクロは
string.h 、strrchr 、memset 等が存在すると仮定しています。
|
以下のマクロは、特定のヘッダファイル用マクロが定義されていない ヘッダファイルを検査するためのものです。 ヘッダファイルがあるかないかだけでなく、中身もチェックしたい場合、 自力で検査マクロを記述しないといけません(see Writing Tests参照)。
AC_CHECK_HEADER (header-file, [action-if-found [, action-if-not-found]]) | Macro |
システムヘッダファイルheader-fileがあったら
action-if-foundを実行します。
なければaction-if-not-foundを実行します。
単にヘッダファイルがあったときにCプリプロセッサシンボルを定義したいだけなら、
AC_CHECK_HEADERS を使った方がいいでしょう。
|
AC_CHECK_HEADERS (header-file... [, action-if-found [, action-if-not-found]]) | Macro |
スペースで区切られた複数のheader-fileのうち、
実際システムヘッダファイルが存在するものについて
HAVE_header-file (全部大文字)を定義します。
action-if-foundには、
各々のヘッダファイルがみつかったときに実行したいshellスクリプトを記述します。
action-if-foundをbreak にすると、
最初にヘッダファイルが見つかったところでループを抜けることができます。
action-if-not-foundには、
各ヘッダファイルがみつからなかったときに実行されるshellスクリプトを記述します。
|
以下のマクロは特定の構造体や構造体のメンバを検査します。
ここにない構造体を検査したい場合、
AC_EGREP_CPP
(see Examining Declarations)やAC_TRY_COMPILE
(see Examining Syntax)を使ってください。
AC_HEADER_STAT | Macro |
S_ISDIR やS_ISREG などの、sys/stat.h で定義されている
マクロが正しく動かない場合(返り値が嘘の場合)、
STAT_MACROS_BROKEN を定義します。
Tektronix UTekV、Amdahl UTS、それからMotorola System V/88が該当します。
|
AC_HEADER_TIME | Macro |
time.h とsys/time.h の両方をincludeしていいなら、
TIME_WITH_SYS_TIME を定義します。
古いシステムでは、sys/time.h がtime.h をincludeしていて、
しかもtime.h に複数回includeされた場合に対する対処がないことがあります。
この場合、両方のヘッダファイルを明示的にincludeしてはいけません。
このマクロは、例えば、struct timeval やstruct timezone と、
struct tm を同時に使うプログラムに有効です。
HAVE_SYS_TIME_H とあわせて使うのがよいでしょう。
HAVE_SYS_TIME_H は
AC_CHECK_HEADERS(sys/time.h) マクロを使うと定義されます。
#if TIME_WITH_SYS_TIME # include <sys/time.h> # include <time.h> #else # if HAVE_SYS_TIME_H # include <sys/time.h> # else # include <time.h> # endif #endif |
AC_STRUCT_ST_BLKSIZE | Macro |
struct stat にメンバst_blksize が定義されているなら、
HAVE_ST_BLKSIZE を定義します。
|
AC_STRUCT_ST_BLOCKS | Macro |
struct stat にメンバst_blocks が定義されているなら、
HAVE_ST_BLOCKS を定義します。
もしなければ、fileblocks.o を出力変数LIBOBJS に足します。
|
AC_STRUCT_ST_RDEV | Macro |
struct stat にメンバst_rdev が定義されているなら、
HAVE_ST_RDEV を定義します。
|
AC_STRUCT_TM | Macro |
time.h でstruct tm が定義されていなければ、
TM_IN_SYS_TIME を定義します。
TM_IN_SYS_TIME は、struct tm の定義が欲しければ
sys/time.h をincludeせよ、という意味です(訳註: 意訳)。
|
AC_STRUCT_TIMEZONE | Macro |
現在のtimezoneを知る方法を推測します。
struct tm にメンバtm_zone が定義されているなら、
HAVE_TM_ZONE を定義します。
グローバル変数tzname が定義されていたら、HAVE_TZNAME を定義します。
|
以下のマクロはCのtypedefを検査します。 検査したいtypedef用に特定のマクロがなくて、 しかも特殊な検査をしたいわけでないのなら、 汎用のtypedef検査マクロが使えます。
以下のマクロは、sys/types.h
とstdlib.h
の中のC typedefを
検査します(もしファイルがあれば、ですが)。
AC_TYPE_GETGROUPS | Macro |
GETGROUPS_T を、
getgroups の引数の型(配列の基底型)にあわせて、
gid_t またはint に定義します。
|
AC_TYPE_MODE_T | Macro |
mode_t が定義されていない場合、
Cプリプロセッサマクロmode_t をint に#define します。
|
AC_TYPE_OFF_T | Macro |
off_t が定義されていない場合、Cプリプロセッサマクロoff_t を
long に#define します。
|
AC_TYPE_PID_T | Macro |
pid_t が定義されていない場合、Cプリプロセッサマクロpid_t を
int に#define します。
|
AC_TYPE_SIGNAL | Macro |
signal.h で、関数signal が
「返り値がvoid の関数へのポインタ(つまり、(void (*)()) 」を
返す場合、RETSIGTYPE をvoid に定義します。
さもなくば、RETSIGTYPE をint に定義します。
シグナルハンドラ関数を定義するときには、
返り値を RETSIGTYPE hup_handler () { ... } |
AC_TYPE_SIZE_T | Macro |
size_t が定義されていなければ、Cプリプロセッサマクロsize_t を
unsigned と定義します。
|
AC_TYPE_UID_T | Macro |
uid_t が定義されていなければ、
Cプリプロセッサマクロuid_t をint に、
gid_t をint に定義します。
|
このマクロは、 特定のtypedef検査マクロが提供されていないtypedefについて調べるときに 使います。
AC_CHECK_TYPE (type, default) | Macro |
typeがsys/types.h で定義されていない場合、
Cプリプロセッサマクロを使って
C (or C++)のビルトインタイプdefault
(例えば、short とかunsigned とか)に#define します。
もしヘッダファイルが存在するなら、
stdlib.h やstddef.h についても調べます。
|
以下のマクロはCコンパイラやマシンアーキテクチャの特性を調べます。
以下にない性質を調べたい場合、
AC_TRY_COMPILE
(see Examining Syntax) か AC_TRY_RUN
(see Run Time)を使ってください。
AC_C_BIGENDIAN | Macro |
16ビット幅の値を上位の8ビット(2^15 から2^8 の8ビット)から
先に格納するCPUアーキテクチャの場合、WORDS_BIGENDIAN を定義します。
例えばMotorolaやSPARCなどのCPUがこれにあたります。
IntelやVAXは違います。
|
AC_C_CONST | Macro |
Cコンパイラがconst を完全にサポートしていなければ、
const を空に#define します。
世の中にはconst をサポートしているのに__STDC__ を定義していない
Cコンパイラや、
逆にconst を完全にはサポートしていないのに__STDC__ を定義している
Cコンパイラがあります。
AC_C_CONST を使えば、プログラム中では必ずCコンパイラがconst を
サポートしているつもりで、const を書けば大丈夫です。
Cコンパイラがconst をサポートしていなければ、
const はMakefile またはconfiguration header fileで空にされます。
|
AC_C_INLINE | Macro |
Cコンパイラがinline をサポートしていればなにもしません。
inline がサポートされておらず、__inline__ あるいは
__inline がサポートされていれば、
inline を__inline__ か__inline に#define します。
どちらもサポートされていなければ空にします。
|
AC_C_CHAR_UNSIGNED | Macro |
Cの型char が符号なし(unsigned)だったら、
__CHAR_UNSIGNED__ を定義します。
ただし、Cコンパイラが既に__CHAR_UNSIGNED__ を
定義していたらなにもしません。
|
AC_C_LONG_DOUBLE | Macro |
Cコンパイラがlong double 型をサポートしていたら、
HAVE_LONG_DOUBLE を定義します。
世の中には
__STDC__ を定義していないのに
long double をサポートしているCコンパイラや、
__STDC__ を定義しているのに
long double をサポートしていないCコンパイラがあります。
|
AC_C_STRINGIZE | Macro |
Cプリプロセッサが文字列化演算子をサポートしているなら
HAVE_STRINGIZE を定義します。文字列化演算子は# で、以下のよ
うなマクロ定義の中で見出せます。
#define x(y) #y |
AC_CHECK_SIZEOF (type [, cross-size]) | Macro |
SIZEOF_uctype をC(またはC++の)基底型typeの
バイトサイズにします。
typeは例えばint とかchar * とかです。
コンパイラがtype を知らない場合、SIZEOF_uctype は
0になります。
uctypeは、typeの小文字を大文字に、スペースを下線_ に、
アスタリスク(* )をP にしたものです。
クロスコンパイルをしている場合、
cross-sizeを指定していればそれが使われます。
クロスコンパイルをしている場合に
cross-sizeが指定されていないと、
configure はエラーメッセージを出して終了します。
例えば、DEC Alpha AXPで AC_CHECK_SIZEOF(int *) とすると、 |
AC_INT_16_BITS | Macro |
Cの型int が16ビットの場合、INT_16_BITS を定義します。
このマクロはobsoleteです。
かわりにより汎用的なAC_CHECK_SIZEOF(int) を使ってください。
|
AC_LONG_64_BITS | Macro |
Cの型long int が64ビットの場合、LONG_64_BITS を定義します。
このマクロはobsoleteです。
かわりにより汎用的なAC_CHECK_SIZEOF(long) を使ってください。
|
以下のマクロはFortran 77コンパイラの特性を検査します。ここに列挙されてい
ない特性を検査するには、AC_TRY_COMPILE
(see Examining Syntax)
や AC_TRY_RUN
(see Run Time) を使います。まず現在選択されてい
る言語がFortran 77 AC_LANG_FORTRAN77
に設定されていることを確かめ
てください(see Language Choice)。
AC_F77_LIBRARY_LDFLAGS | Macro |
Fortran 77プログラムや共有ライブラリを首尾良くリンクするのに必要な
Fortran 77 固有のものやランタイムなライブラリのための
リンカフラグ(例えば、-L や-l )を決定します。
出力変数FLIBS はこれらのフラグに設定されます。
このマクロは例えば、1つのプログラムや共有ライブラリでC++とFortran 77ソー スコードを混合する必要がある場合に使われることを意図されています。 (see Mixing Fortran 77 With C and C++)。 例えば、もしC++とFortran 77コンパイラからのオブジェクトファイルが一緒に リンクされなければならないなら、C++コンパイラ/リンカはリンクのために使わ れなければなりません(C++特有のものは、リンク時にグローバルコンストラクタ、 インスタンステンプレート、例外処理等を呼び出す必要が生じるためです)。 しかし、Fortran 77イントリンシックとランタイムライブラリも同様にリンクす
る必要がありますが、C++コンパイラ/リンカは、デフォルトでFortran 77ライブ
ラリを加える方法を知りません。そのため、マクロ
|
The following macros check for operating system services or capabilities.
AC_CYGWIN | Macro |
Cygwin環境のための検査をします。もしCygwin環境ならば、シェル変数
CYGWIN をyes に設定します。もしそうでないならCYGWIN
を空文字列に設定します。
|
AC_EXEEXT | Macro |
.c、 .o、 .objファイルが取り除かれた後で(訳註: ??)コンパイラの出力の元
になる代用変数EXEEXT を定義します。典型的にはUNIXなら空文字列に、
Win32やOS/2なら.exe に設定します。
|
AC_OBJEXT | Macro |
.cファイルが取り除かれた後で(訳註: ??)コンパイラの出力の元になる代用変
数OBJEXT を定義します。典型的にはUNIXならo に、Win32なら
obj に設定します。
|
AC_MINGW32 | Macro |
MingW32コンパイラ環境のための検査をします。もしMingW32コンパイラ環境なら
ばシェル変数MINGW32 をyes に設定します。そうでないなら
MINGW32 を空文字列に設定します。
|
AC_PATH_X | Macro |
X Window Systemのincludeファイルとライブラリがどこにあるか調べます。
configure の呼び出し時に、ユーザが
--x-includes=dir や--x-libraries=dir を
指定していたら、指定されたディレクトリを使います。
片方または両方とも指定されていなかったら、
決まっていない値を、
簡単なImakefile をxmkmf に食わせ、
生成されたMakefile を調べることで定めます。
もしこれが(xmkmf がないとかの理由で)失敗したら、
一般的にX Window Systemが置かれるディレクトリを探します。
いずれかの方法で値が決まったら、
shell変数x_includes とx_libraries に結果を格納します。
ただし、ディレクトリがコンパイラのデフォルトサーチパスに入っている場合には
値は設定されません。
上記の方法でもディレクトリがわからなかった場合や、
ユーザが |
AC_PATH_XTRA | Macro |
AC_PATH_X の拡張版です。
X_CFLAGS にXが必要とするCコンパイラのフラグを、
X_LIBS にリンカのフラグを設定します。
Xがない場合にはX_CFLAGS に-DX_DISPLAY_MISSING を追加します。
このマクロは、
Xを使うプログラムをコンパイルするときに特別なライブラリが必要なら、
それもチェックして |
AC_SYS_INTERPRETER | Macro |
このシステムに、
「スクリプトファイルの先頭に#! /bin/csh のような行を付け加えることで、
スクリプトを実行するshellを選択する」機能がついているかどうか調べます。
このマクロを使用したあとは、
configure.in の中に記述するshellスクリプトの中で、
shell変数interpval を使えます。
このshell変数の値はシステムが#! をサポートしていればyes 、
していなければno になります。
|
AC_SYS_LONG_FILE_NAMES | Macro |
システムが14文字以上のファイル名をサポートしていたら、
HAVE_LONG_FILE_NAMES を定義します。
|
AC_SYS_RESTARTABLE_SYSCALLS | Macro |
signalで割り込まれたシステムコールが自動で再開されるなら、
HAVE_RESTARTABLE_SYSCALLS を定義します。
|
以下のマクロは、ヘッダファイルやライブラリに癖があるなどの理由で、 特別な取扱が必要なOSについてチェックします。 これらのマクロは無理矢理作った逃げ道です (訳註: wartだから「目の上のたんこぶ」とか言ってもいいのだけれど、 それでは意味が通じない)。 本来はよりシステマチックに、ライブラリやヘッダファイルの内容および機能や、 OSで提供される環境について調べるべきです。
AC_AIX | Macro |
OSがAIXだったら、_ALL_SOURCE を定義します。
BSDの機能の一部が使えます。
Cコンパイラを実行するマクロより前に使わないといけません。
|
AC_DYNIX_SEQ | Macro |
OSがDynix/PTX (Sequent UNIX)だったら、
-lseq を出力変数LIBS に追加します。
このマクロはobsoleteです。
かわりにAC_FUNC_GETMNTENT を使いましょう。
|
AC_IRIX_SUN | Macro |
OSがIRIX (Silicon Graphics UNIX)だったら、
-lsun を出力変数LIBS に追加します。
このマクロはobsoleteです。
getmntent を使いたいためにこのマクロを使っていたのなら、
AC_FUNC_GETMNTENT を使いましょう。
NISサポート入りのパスワード/gid系関数を使いたければ、
AC_CHECK_LIB(sun, getpwnam) を使いましょう。
|
AC_ISC_POSIX | Macro |
OSがPOSIXサポート入りのISC UNIX(POSIXized ISC UNIX)上だったら、
_POSIX_SOURCE を定義し、-posix (GNU Cコンパイラ用)
または-Xp (他のCコンパイラ用)をCC に追加します。
AC_PROG_CC より後で、しかもCコンパイラを呼び出す他のマクロより先に
呼び出さねばなりません。
|
AC_MINIX | Macro |
OSがMinixだったら、_MINIX と_POSIX_SOURCE を定義し、
_POSIX_1_SOURCE を2に定義します。
こうするとPOSIXの機能が使えます。
Cコンパイラを実行するマクロより前に使わないといけません。
|
AC_SCO_INTL | Macro |
OSがSCO UNIXだったら、-lintl をLIBS に追加します。
このマクロはobsoleteです。
かわりにAC_FUNC_STRFTIME を使いましょう。
|
AC_XENIX_DIR | Macro |
OSがXenixだったら、-lx を出力変数LIBS に追加します。
また、dirent.h が使われていたら、-ldir を出力変数LIBS に
追加します。
このマクロはobsoleteです。
AC_HEADER_DIRENT を使いましょう。
|
あなたの必要としている検査項目が既存のマクロで実現されていない場合、 自分であたらしいマクロを書かねばなりません。 以下のマクロは、マクロの基本部品です 以下のマクロは、他のマクロ内でOS/コンパイラの機能を検査したり、 結果を出力したりするのに使われています。
この章では、推奨されるマクロの書き方、 それから既存のマクロがどうして現在あるように記述されているのかについて 述べています。 既存のマクロがどのように書かれているのか見ることで、 どうやってAutoconfのマクロを記述すべきか学べるでしょう。 Autoconfのテストでなにかがうまくいかなかったら、 マクロがなにを仮定しているのか理解するのに この章の内容が役立つかもしれません。 マクロが仮定していることを理解すれば、 マクロの問題点をどう解くべきなのかを知るにも役立つでしょう (訳註: 相当意訳)。
以下のマクロは、Cコンパイラの出力を調べます。 以下のマクロは結果をキャッシュしません(see Caching Results)。 なぜなら、これらのマクロからは検査している内容がわからないし キャッシュ変数名も決められないからです。 Cコンパイラの特定の機能を調べるマクロは、結果をキャッシュしますし、 なにを調べているのかメッセージも出力されます。
複数のソフトウェアパッケージで利用できる検査を書いた場合、 新しいマクロを定義するのがよいでしょう。 どうやるかはSee Writing Macros参照。
AC_TRY_CPP
は特定のヘッダファイルが存在するか調べるためにあります。
ヘッダファイルひとつづつについて調べることもできますし、
ひとつの目的のために調べるのなら複数のヘッダファイルをまとめて
調べることもできます。
AC_TRY_CPP (includes, [action-if-true [, action-if-false]]) | Macro |
includesには
CまたはC++の#include 文(訳註: ほんとは文じゃないね)と
定義文(訳註: #define とか)を記述します。
他の文を記述しても構いませんが、多分意味ないでしょう。
includesのところにはshell変数、
backquote、backslashによる置換が働きます
(訳註: 置換を避けたければ[ と] で囲め、ということです)。
プリプロセッサが処理中にエラーメッセージを出さなければ、
shellコマンドaction-if-trueが実行されます。
エラーがあればaction-if-falseが実行されます。
このマクロは |
次のマクロはヘッダファイルに特定の定義(typedef、構造体、構造体メンバ、
関数プロトタイプ)が入っているかどうか調べます。
ヘッダファイルを直接grep
せずに、AC_EGREP_HEADER
を使いましょう。
システムによっては、調べたいシンボルが、あなたがgrep
している
ヘッダファイルから#include
されている他のヘッダファイルで
定義されているかもしれません。
AC_EGREP_HEADER (pattern, header-file, action-if-found [, action-if-not-found]) | Macro |
header-fileをCプリプロセッサに通した結果がpatternと
マッチすれば、action-if-foundを実行します。
マッチしなければ、action-if-not-foundを実行します。
patternはegrep の正規表現です。
|
ヘッダファイルで定義されたり、Cプリプロセッサで前もって定義されている
Cプリプロセッサシンボルを調べる場合、
AC_EGREP_CPP
を使いましょう。
以下に例題があります:
AC_EGREP_CPP(yes, [#ifdef _AIX yes #endif ], is_aix=yes, is_aix=no)
AC_EGREP_CPP (pattern, program, [action-if-found [, action-if-not-found]]) | Macro |
programはCまたはC++のプログラムテキストです。
programのところにはshell変数、
backquote、backslashによる置換が働きます。
programをプリプロセッサに通した結果がpatternと
マッチすれば、action-if-foundを実行します。
マッチしなければ、action-if-not-foundを実行します。
patternはegrep の正規表現です。
このマクロは、もしまだ呼ばれていないなら、
|
「特定のキーワードを認識するかどうか」など、
C、C++ や Fortran 77コンパイラの文法的な機能を調べるためには、
AC_TRY_COMPILE
を使ってそのキーワードや機能を使う小さなプログラムを
コンパイルしてみましょう。
AC_TRY_COMPILE
を使うと、特定のシステムにしかない
構造体や構造体メンバを調べることもできます。
AC_TRY_COMPILE (includes, function-body, [action-if-found [, action-if-not-found]]) | Macro |
このマクロは、
関数の中身がfunction-bodyの記述からなるようなテスト用のC、C++、 Fortran 77プログラム(現在選択されている言語に依存 see Language Choice)を書き出し、それがコンパイラでコンパイルできるかどうか調べます。 CとC++のため、includesはfunction-bodyのコードが必要とする、
あらゆる もしコンパイルできたなら、shellコマンドaction-if-foundを実行します。 もしできなかったらaction-if-not-foundを実行します。 このマクロはリンクを行おうとはしません(コンパイルしかしません)。
テストのためにリンクもしたい場合、 |
ライブラリ、関数、またはグローバル変数を調べるために、
Autoconfの生成するconfigure
スクリプトは、小さなプログラムを
コンパイルしてリンクしてみます。
Metaconfigは(デフォルトでは)Cライブラリに対しnm
やar
を
実行することで提供されている関数を調べますが、
AutoconfはMetaconfigとは違います。
実際に関数をリンクしてみる方が判定方法として確実です。
なぜなら、nm
やar
のさまざまなオプションや出力形式、
それから標準ライブラリの置き場所に関する差異を取り扱わなくて済みます。
クロスコンパイルできるかどうかも調べられます。
それに、必要なら関数の実行時の挙動を調べることもできます。
そのかわりに、実際関数をリンクしてみるのは、
ライブラリを一度調べればいいnm
式よりも遅いです。
ごく少数のシステムでは、リンク時に発見できない関数があってもリンカが
「失敗」とのexitステータスを変えしません。
このようなシステムでは、Autoconfで生成されたスクリプトが使えません。
ただし、このようなシステムの一部では、特定のコマンドラインオプションを
与えるとリンカが正しくexitステータスを返すようになります。
Autoconfは現在この問題を自動的に解決していません。
ユーザがこの問題にであった場合、環境変数LDFLAGS
にリンカが必要とする
オプションを設定して渡してやることで解決できるでしょう
(例えばMIPS RISC/OSの場合-Wl,-dn
)。
関数とグローバル変数について調べるためには、AC_TRY_LINK
を使って
テストプログラムをコンパイルしてみます。
このマクロはライブラリの検査(see Libraries)のためにAC_CHECK_LIB
の内部でも使われています。
このためには、LIB
に調べたいライブラリ名を一時的に追加し、
テストプログラムをリンクしてみます。
AC_TRY_LINK (includes, function-body, [action-if-found [, action-if-not-found]]) | Macro |
このマクロは、
現在選択されている言語(see Language Choice)によって、関数の中身が
function-bodyの記述からなるようなテスト用のCプログラムを書き出しま
す。
CやC++では、includeはfunction-bodyのコードで必要となる任意の
もし成功したなら、shellコマンドaction-if-foundを実行します。 もしできなかったらaction-if-not-foundを実行します。 |
AC_TRY_LINK_FUNC (function, [action-if-found [, action-if-not-found]]) | Macro |
現在の言語に依存して(see Language Choice)、本体がプロトタイプからな
り、functionの呼び出しを含むプログラムの、コンパイルとリンクが可能
かどうかを知るために、テストプログラムを作ります。
もし成功したなら、shellコマンドaction-if-foundを実行します。 もしできなかったらaction-if-not-foundを実行します。 |
AC_TRY_LINK_FUNC (function, [action-if-found [, action-if-not-found]]) | Macro |
functionをリンクする、小さなプログラムのコンパイルとリンクを試みま す。もしファイルのコンパイルとリンクが成功したならば、シェルコマンドの action-if-foundを実行し、それ以外ではaction-if-not-foundを実 行します。 |
AC_COMPILE_CHECK (echo-text, includes, function-body, action-if-found [, action-if-not-found]) | Macro |
これはAC_TRY_LINK に類似した、obsoleteなマクロです。
AC_COMPILE_CHECK は、echo-textが空でなければ、テストの前に
checking for echo-text と標準出力に表示します。
テストの進行状況や結果を表示するには、
AC_MSG_CHECKING とAC_MSG_RESULT を使いましょう
(see Printing Messages)。
|
システムの機能に癖やバグがある場合など、 システムが実行時にどう振舞うのか知らないといけないことがあります。 可能なら、コンパイル時でなしにパッケージの実行時に検査しましょう。 例えば、マシンのendianをプログラムの初期化時に調べることは可能です。
実行時のふるまいをどうしてもパッケージのコンパイル前に調べたい場合、
テストプログラムを書き、AC_TRY_RUN
を使ってコンパイルして
実行し、結果を調べることができます。
可能な限りこの種のテストプログラムを使うことは避けましょう。
あなたのパッケージをクロスコンパイルできなくなります。
システムが実行時にどう振舞うのかをコンパイル時に調べるためには、 以下のマクロを使いましょう。
AC_TRY_RUN (program, [action-if-true [, action-if-false [, action-if-cross-compiling]]]) | Macro |
programにはCプログラムコードを指定します。
programに対してはshell変数やbackquoteによる置換が働きます。
programのコンパイルとリンクが成功し、
実行したときにexitステータス0が返ったら、
shellコマンドaction-if-trueを実行します。
さもなくば、action-if-falseを実行します。
このとき、プログラムのexitステータスはshell変数$? に入っています。
このマクロは
CFLAGS 、CXXFLAGS 、CPPFLAGS 、LDFLAGS 、それから
LIBS を利用します。
(クロスコンパイルしている等の理由で)現在使っているCコンパイラが、
|
実行時の振舞いを調べられないクロスコンパイル時のために、
悲観的なデフォルト値を用意しておきましょう。
これは、
AC_TRY_RUN
の最後の引数(action-if-cross-compiling)を
与えることで達成できます。
autoconf
はconfigure
スクリプトを生成する際、
action-if-cross-compilingの指定のないAC_TRY_RUN
があるたび
警告を出します。
警告を無視しても構いませんが、その場合ユーザはあなたのパッケージを
クロスコンパイルできなくなります。
Autoconfと一緒に配布されているマクロには、
このような警告を出すマクロがごく少数あります。
クロスコンパイルのためにパッケージを設定する場合、 正規化されたシステム名(see Manual Configuration)によって action-if-cross-compilingで決める値を変えることができます。 または、各ターゲットシステムにあわせた正しい値を書いた キャッシュファイルを置いておくこともできます(see Caching Results)。
AC_TRY_RUN
は、Autoconf標準添付のマクロを含めて
他のマクロ内部から呼び出されることがあります。
このような場合に、クロスコンパイル時のためのデフォルト値を設定するためには、
AC_TRY_RUN
より前にAC_PROG_CC
を呼んでおくとよいでしょう。
AC_PROG_CC
を呼んだあと、shell変数cross_compile
が
yes
だったら、AC_TRY_RUN
を呼ばず、
かわりの方法を使って設定結果の値を決めるのです。
AC_C_CROSS | Macro |
このマクロはobsoleteです。 何もしません。 |
テストプログラムは標準出力になにも書き出してはいけません。
テストが成功したら0を、成功しなかったら0以外を返してexit
すべきです。
これはテストの成功と、core dumpや他の理由によるテスト失敗とを
明確に区別するためです。
セグメンテーションフォールトやその他が起きたときにはexit statusは
0以外になります。
テストプログラムは関数main
からのreturn
でなしに
exit
で終了すべきです。
一部のシステム(少なくとも古いSun)では関数main
の返り値は無視されます。
テストプログラムは#if
や#ifdef
を使って、
既に実行された他のテストで定義されたプリプロセッサマクロを参照できます。
例えば、AC_HEADER_STDC
を呼び出したら、
以後configure.in
の中で記述するテストプログラムでANSI Cヘッダファイルを
#include
することができます:
#if STDC_HEADERS # include <stdlib.h> #endif
テストプログラムがデータファイルを使ったり作ったりしないといけない場合、
conftest
で始まるファイル名、例えばconftestdata
を使いましょう。
configure
スクリプトは、外部のテストプログラムが終了したときや
スクリプトが中断されたときに、rm -rf conftest*
を実行して
データファイルを消去します。
テストプログラム中の関数定義をするときは、 C処理系の場合とC++処理系の場合とを条件分けして定義しなければなりません。 実際のところは、テストプログラム中で引数をとる関数を 使うことはめったにありません。
#ifdef __cplusplus foo(int i) #else foo(i) int i; #endif
プロトタイプ宣言についても同様に条件分けしなければなりません。
C++処理系はC linkageの関数プロトタイプの前にextern "C"
が必要だからです
(訳註: ちょと補足)。
extern "C"
が入っていないようなヘッダファイルを
#include
しないように注意してください。
#ifdef __cplusplus extern "C" void *malloc(size_t); #else char *malloc(); #endif
テストプログラム中で、(単に関数があるかないか調べるために)
不正な引数を使って関数を呼び出す場合、
間違って関数が呼び出されないように注意してプログラムを記述してください。
これは、目的の関数を、絶対呼び出されない関数foo
の中から
呼び出すよう記述することで実現できます。
exit
の後で目的の関数を呼び出すのではテストになりません。
GCCバージョン2は関数exit
のあと処理が戻らないことを知っていて、
exit
と同じブロックの以後の部分をコンパイルしない最適化を
するからです。
ヘッダファイルを#include
して、その中でプロトタイプ宣言されている
関数を呼び出す場合、
プロトタイプ宣言違反でコンパイルエラーが発生しないよう、
(引数が単に0であっても)引数の個数は定義どおりにしてください。
GCCバージョン2では、インライン展開される一部の関数(memcpy
とか)について
コンパイラ内部でプロトタイプ宣言を持っています。
このような関数の有無をチェックする場合、
正しい個数の引数を渡すか、char
などに返り値を変えて再定義してください
(訳註: 返り値の宣言変えて意味あるのか?)。
自分でテストマクロを記述する場合、
shellスクリプトの移植性を高く保つためにいくつかの記法を使わないように
しないといけません。
Bourne shellと(BashやKorn shell等の)上位互換のshellは
長年発達してきましたが、トラブルを避けるため、
1977年ごろのUNIX version 7以降に追加された機能は使わないようにしてください。
shellスクリプト内関数、alias、character classの反転
(訳註: 「negated character classes」)、それから
必ずしも全てのBourne shell互換shellに入っていない機能は使うべきではありません。
最小公約数的なスクリプトを書くように心がけてください。
一部のshellではunset
すら使えません!
スクリプトインタプリタを指定するための#!
の後には、
以下のようにスペースをつけてください:
#! /usr/bin/perlパス名の前のスペースがないと、 4.2BSD互換のシステム(Sequent DYNIXとか)では行は無視されます。
#! /
を4バイトのmagic nubmerとして解釈しているためです。
configure
スクリプトからは、ごく少数の外部プログラムしか
呼び出してはいけません。
呼び出していいプログラムのリストは
See Utilities in Makefilesにあります。
この制限により、プログラム間の依存関係を最小限にとどめ、
ユーザがパッケージをインストールするために
前もって用意しないといけないプログラムを最小限に抑えることができます。
呼び出していい外部プログラムのリストに載っているプログラムについても、
最低限の共通な機能だけを使いましょう(訳註: すごく意訳)。
例えば、ln
が-f
をサポートしているとか
cat
にコマンドラインオプションがあるとか仮定してはいけません。
sed
スクリプト内には、コメントや8文字以上のラベルがあってはいけません。
grep -s
で出力を抑制しようとしてはいけません。
System Vではgrep -s
は出力を抑制せず、エラーメッセージだけ
抑制するからです。
かわりに、grep
の標準出力と標準エラー出力の両方を/dev/null
に
リダイレクトしましょう
(標準エラー出力もリダイレクトするのは、エラー発生時に出力を出さないように
するためです)。
grep
のexitステータスで、matchする文字列がみつかったかどうか
確認しましょう。
configure
スクリプトは多くのファイルや文字列の特性を検査する必要が
あります。ここではそれら検査を行うときに用心するいくつかの移植性の問題を
あげます。
test
プログラムは多くのファイルや文字列をテストする手段です。それ
はしばしば別の名前[
で実行されます。しかしAutoconfコードの中でその
名前を使うことはそれがm4
のクォート文字の1つであるので災いを招きま
す。
test
を使った多重検査が必要なら、test
プログラムの演算子
-a
と-o
の代わりに、シェル演算子&&
と||
で組み合
わせてください。System V では-a
と-o
の優先順位が単項演算子
に関連して間違っています。したがってPOSIXはそれらを記していません。
だからそれらを使うことは移植性を損ないます。
もしあなたが&&
と||
を同じ文で組み合わせるなら、それらが
同じ優先順位を持つことを覚えておいてください。
configure
スクリプトがクロスコンパイルをサポートできるようにするに
は、ターゲットシステムの代わりにホストシステムの特性を検査するべきではあ
りません。しかし、時々あなたはいくつかの恣意的なファイルが存在するかどう
かを検査する必要を見つけるかも知れません。そうするにはtest -f
や
test -r
を使います。test -x
を使っては行けません。なぜなら
4.3BSDそれを持たないので。
別の移植性を損なうシェルプログラミング構文は以下です。
var=${var:-value}
その意味はまだ値が設定されていないときにだけvarにvalueを設定
し、varがなにか値を持っていれば、空文字列でさえ、そのままにしてお
きます。古いBSDのシェル、Ultrix sh
を含みます、は、コロンを受け付けず、
不平を言って終了します。移植性のある同等なものは以下です。
: ${var=value}
Some operations are accomplished in several possible ways, depending on the UNIX variant. Checking for them essentially requires a "case statement". Autoconf does not directly provide one; however, it is easy to simulate by using a shell variable to keep track of whether a way to perform the operation has been found yet.
UNIXの種類に依存して、いくつかの処理は可能な方法で達成されます。本質的に それを調べるためには、"case文"が必要です。Autoconfは直接それを供給しま せん。しかし、実行する処理が見つかったかどうかの追跡を記録するため、シェ ル変数を使って簡単にシミュレーションができます。
ここに、調べる必要があるもののまだ残っているcaseの追跡を記録するため、シェ
ル変数fstype
を使用する例があります。
AC_MSG_CHECKING(how to get filesystem type) fstype=no # The order of these tests is important. AC_TRY_CPP([#include <sys/statvfs.h> #include <sys/fstyp.h>], AC_DEFINE(FSTYPE_STATVFS) fstype=SVR4) if test $fstype = no; then AC_TRY_CPP([#include <sys/statfs.h> #include <sys/fstyp.h>], AC_DEFINE(FSTYPE_USG_STATFS) fstype=SVR3) fi if test $fstype = no; then AC_TRY_CPP([#include <sys/statfs.h> #include <sys/vmount.h>], AC_DEFINE(FSTYPE_AIX_STATFS) fstype=AIX) fi # (more cases omitted here) AC_MSG_RESULT($fstype)
CとC++の両方を使うパッケージは、両方のコンパイラの特徴をテストする必要が
あります。Autoconfが生成したconfigure
スクリプトは、デフォルトでC
の特徴を調べます。以下のマクロはconfigure.in
のテストで、使ってい
る言語のコンパイラを決定します。
AC_LANG_C | Macro |
CC とCPP を使うコンパイルテストを行い、拡張子が.c のテ
ストプログラムを使います。もし実行されたならば、AC_PROG_CC が求め
た値をシェル変数cross_compiling に、それ以外では空に設定します。
|
AC_LANG_CPLUSPLUS | Macro |
CXX とCXXCPP を使うコンパイルテストを行い、拡張子が.C
のテストプログラムを使います。もし実行されたならば、AC_PROG_CC が
求めた値をシェル変数cross_compiling に、それ以外では空に設定します。
|
AC_LANG_FORTRAN77 | Macro |
Do compilation tests using F77 and use extension .f for
test programs. Set the shell variable cross_compiling to the
value computed by AC_PROG_F77 if it has been run, empty
otherwise.
|
AC_LANG_SAVE | Macro |
(AC_LANG_C 、AC_LANG_CPLUSPLUS やAC_LANG_FORTRAN77 が
設定するように)現在の言語をスタックに覚えさせます。現在の言語を変更しま
せん。このマクロとAC_LANG_RESTORE は、特定の言語を一時的に切替える
必要があるマクロで使ってください。
|
AC_LANG_RESTORE | Macro |
AC_LANG_SAVE が設定するように、スタックのトップに保存されている言
語を選択し、スタックから削除します。このマクロは、AC_LANG_SAVE が
最後に呼ばれた時、最も最近実行されたAC_LANG_C 、
AC_LANG_CPLUSPLUS やAC_LANG_FORTRAN77 と同じです。
このマクロを |
AC_REQUIRE_CPP | Macro |
現在、テストに使われるプリプロセッサの存在を保証します。
AC_PROG_CPP やAC_PROG_CXXCPP の引数で、現在の言語に依存して、
AC_REQUIRE (see Prerequisite Macros)を呼び出してください。
|
一度configure
が特徴の存在を定義した場合、どのようにしてその情報を
記録するのでしょう。それは4種類あり、それらは、Cプリプロセッサシンボルの
定義、出力ファイルで変数をセット、configure
実行時のキャッシュファ
イルに結果を保存、テスト結果をユーザーに知らせるメッセージの出力です。
configure
runs.
特徴テストの応答をもたらす普通の行動は、テストの結果を示すCプリプロセッ
サシンボルを定義することです。それはAC_DEFINE
や
AC_DEFINE_UNQUOTED
と呼ばれるもので行います。
デフォルトで、AC_OUTPUT
はマクロが定義したシンボルを出力変数
DEFS
に置き、それぞれのシンボルで、それは
-Dsymbol=value
を含みます。Autoconf バージョン1と異な
り、configure
が実行中に定義する変数DEFS
はありません。
AutoconfマクロがあるCプリプロセッサシンボルを既に定義しているかどうか調
べるため、以下の例のように適切なキャッシュ変数の値をテストしてください。
AC_CHECK_FUNC(vprintf, AC_DEFINE(HAVE_VPRINTF)) if test "$ac_cv_func_vprintf" != yes; then AC_CHECK_FUNC(_doprnt, AC_DEFINE(HAVE_DOPRNT)) fi
AC_CONFIG_HEADER
が呼び出される場合、DEFS
を作る代わりにテン
プレートファイルに#define
文で正しい値を代入したヘッダファイルを
AC_OUTPUT
で作ってください。この種類の出力の詳細は、
See Configuration Headers.
AC_DEFINE (variable [, value [, description]]) | Macro |
Cプリプロセッサ変数variableを定義します。valueが与えられる場
合は、variableにその値を(逐語的に)セットし、それ以外では1にセット
します。valueは改行リテラルを含むべきではなく、
AC_CONFIG_HEADER を使わない場合はmake が処理してしまうので、
# 文字を含めるべきではありません。シェル変数(m4 の引用符文字
[ や] を含む定義値が必要なもの)を使うために、代わりに
AC_DEFINE_UNQUOTED を使ってください。descriptionは、
AC_CONFIG_HEADER を使う場合のみ役に立ちます。この場合、
descriptionは、生成されたconfig.h.in にマクロ定義前のコメン
トとして置かれます。マクロをacconfig.h に記述する必要はありません。
次の例は、Cプリプロセッサ変数EQUATION を文字定数 "$a > $b"
と定義します。
AC_DEFINE(EQUATION, "$a > $b") |
AC_DEFINE_UNQUOTED (variable [, value [, description]]) | Macro |
AC_DEFINE に似ていますが、3つのシェル拡張は、variableと
valueで一度だけ実行されるもので、変数の拡張($ )、コマンドの
代入(` )と、バックスラッシュエスケープ(\ )です。値のシングル
とダブルクオートの文字列は特別な意味を持ちません。variableや
valueがシェル変数の時は、AC_DEFINE の代わりにこのマクロを使っ
てください。以下が例です。
AC_DEFINE_UNQUOTED(config_machfile, "${machfile}") AC_DEFINE_UNQUOTED(GETGROUPS_T, $ac_cv_type_getgroups) AC_DEFINE_UNQUOTED(${ac_tr_hdr}) |
Bourneシェルの構文の特異性のため、AC_DEFINE
や
AC_DEFINE_UNQUOTED
の他のマクロやシェルコードからの呼び出しをるた
め、セミコロンを使わないでください。それは、configure
スクリプトの
結果、構文エラーの原因となります。以下のようにします。
AC_CHECK_HEADER(elf.h, AC_DEFINE(SVR4) LIBS="$LIBS -lelf")
あるいはこのようにします。
AC_CHECK_HEADER(elf.h, AC_DEFINE(SVR4) LIBS="$LIBS -lelf")
この代わりです。
AC_CHECK_HEADER(elf.h, AC_DEFINE(SVR4); LIBS="$LIBS -lelf")
テストの結果を記録する一つの方法は、出力変数を設定することで、そ
れは、configure
が出力したファイルの中で、値が代入されたシェル変数
です。以下の2つのマクロが新しい出力変数を作ります。利用可能な出力変数
のリストは、See Preset Output Variables.
AC_SUBST (variable) | Macro |
シェル変数から出力変数を作ります。AC_OUTPUT は変数variable
を出力ファイルに代入します(通常、一つ以上のMakefile です)。これは、
AC_OUTPUT が呼び出されたとき、AC_OUTPUT がシェル変数
variableの値を持つ入力ファイルの@variable@ のインス
タンスを置換することを意味します。variableの値は改行を含むべきでは
ありません。
|
AC_SUBST_FILE (variable) | Macro |
シェル変数から出力ファイルを作るもう一つの方法です。出力ファイルに、シェ
ル変数variableで名付けられたファイルの内容をAC_OUTPUT に挿入
させます(代入ではありません)。これは、AC_OUTPUT が呼び出されたとき、
AC_OUTPUT が、シェル変数variableの値を持つ入力ファイルの内容
を(Makefile.in のような)出力ファイルの@variable@ の
インスタンスを置換することを意味します。挿入するファイルがない場合、変数
を/dev/null にセットしてください。
このマクロは、 AC_SUBST_FILE(host_frag)dnl host_frag=$srcdir/conf/sun4.mh そして @host_frag@ |
様々なconfigure
スクリプトで、同じ特徴を繰り返し調べる(あるは何度
も一つのスクリプトを実行する)ことを避けるため、configure
は多くの
調査結果をcache fileに保存します。configure
スクリプト実行時
にキャッシュファイルを見つけた場合、前の実行結果をそれから読みだし、これ
らの再実行を避けます。結果として、configure
は毎回調査を実行するよ
り早くなります。
AC_CACHE_VAL (cache-id, commands-to-set-it) | Macro |
cache-idで識別した調査結果が利用可能だということを保証します。調査
結果が読み込まれたキャッシュファイルにあり、configure に
--quiet や--silent オプションが与えられていない場合、結果が
キャッシュされていることを示すメッセージを出力します。それ以外ではシェル
コマンドcommands-to-set-itを実行します。これらのコマンドは設定され
た変数cache-id以外に副作用をしません。特に、そこでAC_DEFINE
を呼び出すべきではありません。AC_CACHE_VAL の呼び出しに続くコード
はキャッシュ値に基づきそれを行います。同様に、例えば
AC_MSG_CHECKING のメッセージを出力しません。AC_CACHE_VAL を
呼び出す前に行うので、調査結果がキャッシュから得られるかシェルコマンド実
行による定義からかにかかわらず、メッセージは出力されます。シェルコマンド
を値を決定するために実行する場合、値はconfigure が出力ファイルを作
る直前に、キャッシュファイルに保存されます。cache-id変数の名前の選
び方は、See Cache Variable Names.
|
AC_CACHE_CHECK (message, cache-id, commands) | Macro |
メッセージ出力に注意が必要なAC_CACHE_VAL のラッパーです。このマク
ロは、これらのマクロを使う最も普通の方法のための便利な略記法を提供します。
messageのためにAC_MSG_CHECKING を呼び出すと、cache-id
とcommands引数を伴うAC_CACHE_VAL と、cache-idを伴う
AC_MSG_RESULT を呼び出します。
|
AC_CACHE_LOAD | Macro |
存在するキャッシュファイルから値をロードする、または、キャッシュファイル
がない場合、新しいキャッシュファイルを作ります。自動的にAC_INIT
から呼び出されます。
|
AC_CACHE_SAVE | Macro |
キャッシュファイルに全てのキャッシュ値を書き込みます。自動的に
AC_OUTPUT から呼び出されますが、configure.in のキーポイント
でAC_CACHE_SAVE を呼び出すため非常に役に立ちます。すぐにコンフィグ
レーションスクリプトが中断する場合、そのようなチェックポイントでキャッシュ
してください。
|
configure
uses for caching.
キャッシュ変数名は以下のフォーマットにするべきです:
package-prefix_cv_value-type_specific-value[_additional-options]
たとえば、ac_cv_header_stat_broken
とか、
ac_cv_prog_gcc_traditional
などのようになります。
変数名の各部分の意味は以下のとおり:
ac
を使っています。
_cv_
alloca
)、プログラム(gcc
)や、出力変数(INSTALL
)です。
broken
やset
です。名前のこの部分は適応されない場合は削除さ
れます。
キャッシュ変数に割り当てられた値は改行を含めてはいけません。通常、値は真
偽値(yes
やno
)、あるいはファイルや関数の名前なので、重要な
制限ではありません。
キャッシュファイルは、あるシステム上で実行されたconfigureのテスト結果を 蓄えるshellスクリプトです。これにより、configureスクリプト間、 または複数回のconfigureの実行の間でテスト結果を共有できます。 異なるシステム上ではキャッシュファイルは役にたちません。 もしキャッシュファイルの内容がなんらかの理由で不正になった場合、 ユーザはキャッシュファイルを削除したり編集したりできます。
デフォルトでは、configureは./config.cache
をキャッシュファイルとして
使います。もしなければ新規に作成されます。configure
は
キャッシュファイルの切替えのため、--cache-file=file
という
オプションを受け付けます; configure
がサブディレクトリにある
configure
スクリプトを呼び出す際には、このオプションを使って
スクリプト間でキャッシュを共有します。
AC_CONFIG_SUBDIRS
マクロを使ってサブディレクトリの設定を
する方法については、See Subdirectoriesを参照してください。
--cache-file=/dev/null
とすることで、configure
のデバッグのために
キャッシュを無効にできます。config.status
は--recheck
オプションが指定された場合を除いてキャッシュファイルを参照しません。
config.status
に--recheck
には、configure
が
再実行されます。デバッグ期間が長くなりそうな場合には、以下のように
キャッシュ関連マクロをconfigure.in
の先頭で再定義することで、
configure
スクリプトがキャッシュ読み込み/書き出しをしないように
できます。
define([AC_CACHE_LOAD], )dnl define([AC_CACHE_SAVE], )dnl AC_INIT(whatever) ... rest of configure.in ...
特定のシステム用のキャッシュファイルを配布しようとするのはよくないことです。 あまりにもエラーが発生しやすく、管理コストがあまりに高すぎます。 自動判別できないOS機能については、正規化されたシステムタイプ名を得て リンクするファイルを選ぶ方法を使いましょう(see Manual Configuration 参照)。この方法は標準化されています。
あるシステム向けのキャッシュファイルは、configure
スクリプトを
実行するごとに内容が追加されていきます; 初期状態では空です。
configure
を実行すると、configure
は新しいテスト結果と
キャッシュファイルの内容をマージします。サイト向け初期化スクリプトの中で、
デフォルトで利用されるものでない、サイト単位のキャッシュファイルを
指定することができます。サイト単位のキャッシュファイルは、
同じCコンパイラが利用されている限り、透過的に働きます
(see Site Defaults参照)。
configureスクリプトやconfigure.inから呼び出されるマクロがコンフィグレー ションプロセスを中断する場合、数回のキーポイントでのキャッシュのチェック ポイントは役に立ちます。そうすると、(希望通り)以前にエラーを引き起こした 部分を修正したコンフィグレーションスクリプトを再実行する時間を、大幅に削 除します。
... AC_INIT, etc. ... dnl checks for programs AC_PROG_CC AC_PROG_GCC_TRADITIONAL ... more program checks ... AC_CACHE_SAVE dnl checks for libraries AC_CHECK_LIB(nsl, gethostbyname) AC_CHECK_LIB(socket, connect) ... more lib checks ... AC_CACHE_SAVE dnl Might abort... AM_PATH_GTK(1.0.2, , exit 1) AM_PATH_GTKMM(0.9.5, , exit 1)
configure
スクリプトは、configure
を実行しているユーザに
各種の情報を知らせる必要があります。以下のマクロは各種の状況に適した方法で
メッセージを出力します。以下の全てのマクロの引数は、shell用に
ダブルクォートで囲まれます。このため、shellは変数とbackquoteの置換を
行います。カンマを含むメッセージは、m4
のquote文字である角括弧で
メッセージを囲めば出力できます。
AC_MSG_RESULT([never mind, I found the BASIC compiler])
これらのマクロはshellコマンドのecho
のwarpperです。
configure
スクリプトでは、ほとんどの場合
ユーザにメッセージを出力するのにecho
を直接使う必要はありません。
ここで挙げたマクロを使えば、メッセージの出力時期と出力されかたを
簡単に変えることができます。メッセージ出力マクロの定義を変えれば、
全ての呼び出し側マクロの出力を変えられます。
AC_MSG_CHECKING (feature-description) | Macro |
configure が、ある特定のOS機能をチェックしていることをユーザに
知らせます。このマクロはchecking ではじまり、... で終る、
改行なしのメッセージを出力します。このマクロの後にはAC_MSG_RESULT を
呼び出し、チェック結果と改行を出力する必要があります。
feature-descriptionはたとえば
whether the Fortran compiler accepts C++ comments とか、
for c89 とかがよいでしょう。
このマクロは |
AC_MSG_RESULT (result-description) | Macro |
ユーザにテスト結果を知らせます。result-descriptionは
ほとんど常に、キャッシュ変数の値で、たいていyes かno か
ファイル名になります。このマクロはAC_MSG_CHECKING に続いて
呼び出される必要があります。また、result-descriptionに
指定するメッセージはAC_MSG_CHECKING の出力したメッセージを
終結させるさせるものでなければなりません。
このマクロは |
AC_MSG_ERROR (error-description) | Macro |
ユーザにconfigure が中断してしまうようなエラーに関して知らせます。
このマクロは標準エラー出力にエラーメッセージを出力し、
configure を終了します。exit statusは0でない値になります。
error-descriptionはたとえばinvalid value $HOME for \$HOME
などのようなテキストがいいでしょう。
|
AC_MSG_WARN (problem-description) | Macro |
configure のユーザに問題になり得る点を知らせます。
このマクロは標準エラー出力にメッセージを出力します;
configure は以後も実行を続けます。
ので、AC_MSG_WARN を呼び出すマクロは、
警告する内容に関して、デフォルトの(代用の)ふるまいを
提供するべきです。problem-descriptionはたとえば
ln -s seems to make hard links のようなテキストがいいでしょう。
|
以下のふたつのマクロはobsoleteです。
AC_MSG_CHECKING
やAC_MSG_RESULT
を使いましょう。
AC_CHECKING (feature-description) | Macro |
このマクロはAC_MSG_CHECKING と似ていますが、AC_CHECKING は
feature-descriptionのあとに改行を出力します。
このマクロは主に、複数並んだOS機能チェックの全体としての目的を
出力するのに使えます。たとえば:
AC_CHECKING(if stack overflow is detectable) |
AC_VERBOSE (result-description) | Macro |
このマクロはAC_MSG_RESULT と似ています。
ただし、AC_VERBOSE はAC_MSG_CHECKING ではなく、
AC_CHECKING に続いて呼び出される、という点だけが違います。
メッセージはtabに続いて出力されます。
このマクロはobsoleteです。
|
複数のソフトウェアパッケージに適用できるOS機能のテストマクロを記述 する場合、新しいマクロとして定義するのが最もよい方法です。 以下ではAutoconfマクロを記述するための手順とガイドラインを示します。
AutoconfのマクロはAC_DEFUN
マクロを使って定義されます。
これはm4
のdefine
マクロと類似しています。
AC_DEFUN
はマクロを定義する際に、マクロの呼び出し順を
制約するためのコードを加えます(see Prerequisite Macros参照)。
Autoconfマクロの定義は以下のようになります:
AC_DEFUN(macro-name, [macro-body])
角括弧はオプショナルという意味ではありません; 角括弧はマクロ展開の
問題を避けるため、実際に字面の上でもマクロ定義に記述される必要があります
(see Quoting参照)。マクロに渡される引数は、$1
や$2
として
参照できます。
m4
プログラム内にコメントを記述するためには、m4
組み込みの
dnl
を使ってください; これはm4
に次の改行までのテキストを
無視させます。acsite.m4
とaclocal.m4
の中のマクロ定義の間には
dnl
は必要ありません。AC_INIT
が呼び出されるまでの出力は
無視されるからです。
m4
マクロを書く詳細は、See Definitions.
Autoconfマクロの名前は、他の文字列との衝突を避けるため、
全て大文字で、AC_
で始まっています。内部で使われるshell変数は
なるべく全部小文字で、ac_
で始まっています。
既存の/将来のAutoconfマクロと衝突しないために、
自分で定義するマクロの名前およびshell変数の名前には、
先頭に別の文字列を使うべきです。例えばあなたのイニシャル、組織名や
ソフトウェアパッケージの名前の略称などが考えられます。
Autoconfマクロの名前は、ほとんどの場合構造化された名前づけ規則に したがっています。名前はチェックされるOSの機能を示しています。 マクロ名は下線で区切られたいくつかの単語からなり、各単語は 一般的なものから特殊なものへと並んでいます。マクロに対する キャッシュ変数の名前もおなじ規則を使っています(より詳しくは see Cache Variable Names参照)。
AC_
の次にある単語は、調べる対象のOS機能のカテゴリを示しています。
ここに、書く可能性の高いマクロの種類のテストマクロを指定するため、
Autoconfが使うカテゴリがあります。それらはキャッシュ変数でも全て小文字で
使われます。適用可能なものを使ってください。無ければ独自のカテゴリを考え
出してください。
C
DECL
FUNC
GROUP
HEADER
LIB
PATH
PROG
STRUCT
SYS
TYPE
VAR
カテゴリ名の次には、テスト対象のOS機能の名前が来ます。
それ以降の単語はそれぞれOSの機能の持つ特定の意味を表しています。
例えば、AC_FUNC_UTIME_NULL
はutime
関数の引数に
NULL
を与えたときのふるまいをチェックします。
あるマクロの内部サブルーチンとして動作するマクロには、
呼び元マクロ名のあとに、マクロが行うことがらを意味する
ひとつ以上の単語をつけた名前をつけるのがよいです。
たとえば、AC_PATH_X
はAC_PATH_X_XMKMF
と
AC_PATH_X_DIRECT
を内部で呼び出すマクロとして使います。
他のマクロに呼び出されるマクロはm4
によって複数回評価されます;
通常の文字列がマクロやm4
組み込み命令(たとえばdefine
や
$1
)と勘違いされて評価されないように、各評価ごとにもう1重
quoteする必要があるかもしれません。また、カンマを含むマクロの
引数についてはquoteする必要があります。なぜなら、カンマは各引数を
区切るのに使われるからです。改行を含むマクロの引数を与える場合や、
他のマクロを呼び出す場合にはquoteする方がいいでしょう。
Autoconfは、m4
のquote文字を、デフォルトの`
と'
から
[
と]
に変更しています。これは多くのマクロで
`
と'
は対応せずに使われているからです。しかしながら、
ときどき角カッコをマクロ内で使用する必要が出る場合があります
(Cプログラムソースや正規表現など)。そのような場合、m4
の
組み込み命令changequote
を使って一時的にquote文字を<<
と
>>
に切替えます(quoteを全く必要としない場合、quote文字に空文字を
指定することでquoteの機能を殺すこともできます)。
以下、例題です:
AC_TRY_LINK( changequote(<<, >>)dnl <<#include <time.h> #ifndef tzname /* For SGI. */ extern char *tzname[]; /* RS6000 and others reject char **tzname. */ #endif>>, changequote([, ])dnl [atoi(*tzname);], ac_cv_var_tzname=yes, ac_cv_var_tzname=no)
configure
を新しく書いたマクロを使って生成する場合、
マクロ内にquoteを増やす必要があるかないか注意深く確認しましょう。
もしひとつ異常の単語がm4
の出力から落ちていたら、
quoteする必要があります。疑わしいときはとりあえずquoteしましょう。
しかし、quoteしすぎてしまう場合もあります。このような場合、
出力されたconfigure
スクリプトは展開されないままのマクロを
含んでいます。autoconf
はこのような場合を検出するために、内部で
grep AC_ configure
を実行します。
Autoconfマクロの一部は、正常な動作のために他のマクロが先に呼ばれていることを 仮定しています。Autoconfは特定のマクロを必要な場合にだけ呼び出したり、 正常に動作しない可能性のある順でマクロが呼び出された場合に 警告したりする方法を提供しています。
一部のマクロは、他のマクロで求められた値を必要とすることがあります。
例えば、AC_DECL_YYTEXT
はflex
やlex
の出力
結果を調べます。このため、shell変数LEX
を設定するために
AC_PROG_LEX
マクロが先に呼ばれている必要があります。
AC_REQUIRE
マクロを使う事で、ユーザにマクロ間の依存関係を
管理させずに済みます。つまり、自動化できます。AC_REQUIRE
を
使うと、あるマクロを必要な場合にだけ、かつ1度だけ呼び出すことができます。
AC_REQUIRE (macro-name) | Macro |
もしmacro-nameという名前のm4 マクロが
まだ呼び出されていなかったら、そのマクロを
(引数なしで)呼び出します。macro-nameを
角カッコでquoteするのを忘れないでください。
macro-nameに指定されるマクロは
AC_DEFUN で前もって定義されているか、
AC_PROVIDE の呼び出しを含んでいるかする
必要があります。これはmacro-nameが
呼び出されたことを検出するため必要です。
|
AC_DEFUN
を使うかわりに、define
を使ってマクロを定義し、
中でAC_PROVIDE
を呼び出すこともできます。この技法は
メッセージのネストを防ぐ事ができないので、obsoleteです。
AC_PROVIDE (this-macro-name) | Macro |
マクロthis-macro-nameが呼び出されたことを
記録します。this-macro-nameはAC_PROVIDE
マクロを呼び出すマクロの名前でなければなりません
m4 の組み込み変数$0 を使うと簡単に
マクロの名前を得る事ができます。たとえばこんな風:
AC_PROVIDE([$0]) |
あるふたつのマクロについて、両方が呼び出される場合には片方が先に 呼び出されなければならないが、どちらも他方が呼び出されることを 必須としない場合があります。たとえば、Cコンパイラのふるまいを 変えるマクロはCコンパイラを呼び出すマクロ以前に呼び出される 必要があります。このような依存関係の多くはこの文書に記されています。
Autoconfはこのような場合のためにAC_BEFORE
マクロを提供しています。
これは、依存関係があるマクロがconfigure.in
中に逆順で現れた
場合に、ユーザに警告します。警告メッセージはconfigure
を実行する
ときではなく、configure.in
からconfigure
を生成するときに
出力されます。
例えば、AC_PROG_CPP
マクロは、Cコンパイラに-E
オプションをつけたときにCプリプロセッサを実行してくれるかを
調べます。このため、このマクロは利用されるCコンパイラを変更するような
マクロ、たとえばAC_PROG_CC
などより後に呼び出される必要があります。
このため、AC_PROG_CC
は以下の文を含んでいます:
AC_BEFORE([$0], [AC_PROG_CPP])dnl
この文を使うと、AC_PROG_CC
が呼ばれた時点でAC_PROG_CPP
が
既に呼ばれていた場合、ユーザに警告がでます。
AC_BEFORE (this-macro-name, called-macro-name) | Macro |
マクロcalled-macro-nameが既に呼び出されていた
場合、m4 が標準エラー出力に警告メッセージを
出力するようにします。this-macro-nameは
マクロAC_BEFORE を呼び出すマクロの名前である
必要があります。called-macro-nameに
指定されるマクロはAC_DEFUN で前もって
定義されているか、AC_PROVIDE の呼び出しを
含んでいるかする必要があります。これは
called-macro-nameが呼び出されたことを
検出するため必要です。
|
自動設定および移植性向上のための技法は数年かけて徐々に進化しています。
しばしば、ある問題を解決するためのよりよい方法が開発されたり、
やっつけ仕事が系統だてて整理されたりします。このような変化は
Autoconfの多くの部分で置きました。この結果、一部のマクロは
obsoleteとされるようになりました; それらのマクロは
動作はしますが、最適なやりかたではなくなりました。
AutoconfはAC_OBSOLETE
マクロを用意しています。
このマクロは、configure
スクリプトを作っているユーザが
obsoleteなマクロを使用した場合に警告し、あたらしいマクロに
移行するよう勧めます。使用例はこんなかんじ:
AC_OBSOLETE([$0], [; use AC_CHECK_HEADERS(unistd.h) instead])dnl
AC_OBSOLETE (this-macro-name [, suggestion]) | Macro |
m4 から標準エラー出力へ、マクロ
this-macro-nameはobsoleteだ、という
メッセージを出力させます。また、マクロが
使用されたファイル名と行番号も
出力されます。this-macro-nameは
AC_OBSOLETE を呼び出しているマクロの
名前である必要があります。もしsuggestionが
指定されていたら、警告メッセージの末尾に
指定された文字列が出力されます;
例えば、this-macro-nameのかわりに
使うべきマクロ名などがいいでしょう。
|
一部のOS機能は、テストプログラムを実行しても自動的に判定できません。
たとえば、オブジェクトファイルのフォーマットや、コンパイラや
リンカに渡さねばならない特殊なオプションなどがそうです。
uname
の出力結果を調べたり、特定のシステムにしかない
ライブラリを調べるなどのアドホックな手段を使って、
このようなOSの機能をチェックすることができます。
Autoconfは推測することのできないOS機能の判定のために、
統一された方法を提供しています。
他のGNU configure
スクリプトと同様、
Autoconfによって生成されたconfigure
スクリプトは正規化されたシステムタイプ名によって
動作を決定することができます。
システムタイプ名は以下のフォーマットになっています:
cpu-company-system
configure
は通常、configure
の動作している
システムタイプ名を判定することができます。このために、
configure
はconfig.guess
というスクリプトを実行します。
このスクリプトはuname
コマンドや、Cプリプロセッサが
あらかじめ定義しているシンボルを使ってシステムタイプ名を
割り出します。
あるいは、ユーザはconfigure
のコマンドライン引数に
システムタイプ名を指定することができます。
クロスコンパイル時にはこれは必ず必要です。
最も複雑な場合、3つのシステムタイプ名が関係します。
これらを指定するためのオプションは以下のとおり:
--build=build-type
--host=host-type
--target=target-type
ユーザが(オプション名なしで)システムタイプ名をconfigure
の
引数として与えた場合、その値がhost/target/buildのシステムタイプ名の
デフォルト値として使われます。--build
などのオプションを指定
しなかった場合、この値が使われます。targetとbuildのシステムタイプ名は、
targetまたはbuildを指定せずにhostを指定した場合、
hostのシステムタイプ名と同一になります。
クロスコンパイルを行う場合、クロスコンパイル用ツール、特にCコンパイラの
名前を、configure
のコマンドラインに指定する必要があります。
たとえば以下のように:
CC=m68k-coff-gcc configure --target=m68k-coff
configure
は多くのシステムタイプについて、短い別名も認識します。
たとえば、decstation
をmips-dec-ultrix4.2
のかわりに
コマンドラインに指定することができます。configure
は
システムタイプ名の正規化のため、config.sub
というスクリプトを
実行します。
以下のマクロを使うと、configure
スクリプトの中でシステムタイプを
知ることができます。これらのマクロはconfig.guess
というshell
スクリプトを実行します。これにより、ユーザが指定しなかった、host/
target/buildシステムタイプ名などの情報を得ます。また、config.sub
を
実行することでユーザの指定したシステムタイプの別名を正規化します。
以下のマクロを利用する場合、これら2つのshellスクリプトをソースコードと
ともに配布する必要があります。configure
がこれらの
スクリプトを探すディレクトリを指定するためのマクロ、
AC_CONFIG_AUX_DIR
についてはSee Output参照。
以下のマクロを利用しなかった場合、configure
は
指定された--host
、--target
および--build
の
オプションを無視します。
AC_CANONICAL_SYSTEM | Macro |
システムタイプを判定し、正規化されたシステムタイプ名を 出力変数に設定します。設定される変数については See System Type Variablesを参照。 |
AC_CANONICAL_HOST | Macro |
AC_CANONICAL_SYSTEM の一部、ホストタイプに関する
部分だけを実行します。プログラムがコンパイラ関連の
ツールでなければ、このマクロのやることだけでことが足ります。
|
AC_VALIDATE_CACHED_SYSTEM_TUPLE (cmd) | Macro |
キャッシュファイルが、現在のホスト、ターゲットとビルドシステムに一致しな い場合、cmdを実行する、または、デフォルトエラーメッセージを出力し ます。 |
AC_CANONICAL_SYSTEM
を呼び出すと、以下の出力変数に
システムタイプの情報が設定されます。AC_CANONICAL_HOST
の
実行語は、変数host
だけが設定されます。
build
, host
, target
build_alias
, host_alias
, target_alias
config.guess
が
使われた場合には正規化されたシステム名;
build_cpu
, build_vendor
, build_os
host_cpu
, host_vendor
, host_os
target_cpu
, target_vendor
, target_os
正規化されたシステムタイプをどう使いますか? たいていは、システム依存の
Cファイルを選択するために、configure.in
の中のひとつまたは
複数のcase
文で使います。そのようなファイルにはシステム名を
もとにした名前をつけておきます。その後、
host.h
やtarget.c
などの汎用的な名前で
そのファイルへの(シンボリック)リンクを作ります。
case
文のパターンには以下のように、shellのワイルドカードが使えます。
ので、複数の場合をまとめて扱えます:
case "$target" in i386-*-mach* | i386-*-gnu*) obj_format=aout emulation=mach bfd_gas=yes ;; i960-*-bout) obj_format=bout ;; esac
AC_LINK_FILES (source..., dest...) | Macro |
AC_OUTPUT の際に、既存のファイルsourceに対する
destという名前のリンクを作ります。リンクの種類は可能なら
シンボリックリンク、さもなくばハードリンクになります。
destとsourceに指定されるファイル名は
ソースコードのトップレベルから、またはビルドディレクトリからの
相対表記でなければなりません。
このマクロは複数回呼んでも構いません。
例えば、以下を使うと: AC_LINK_FILES(config/${machine}.h config/${obj_format}.h, host.h object.h) 現在のディレクトリに |
ホストのシステムタイプを使って、クロスコンパイル用のツールを
みつけることができます。AC_CHECK_TOOL
マクロがそのために
する内容については、See Generic Programs参照。
configure
スクリプトでは、パッケージがインストールされる場面ごとに
設定の一部を変えるための機能を備えています(訳註: 意訳)。
外部プログラムパッケージの置かれている場所を指定したり、
オプションの機能を含めたり外したり、プログラムを
デフォルトの名前以外でインストールしたり、
configure
のオプションの既定値を定めたりするための方法が
用意されています。
configure
local defaults.
ソフトウェアパッケージが他のソフトウェアパッケージを必要としたり、
あるいは特定の場合だけ利用したりすることがあります。
ユーザはconfigure
を呼び出す際のコマンドラインオプションにより、
どのソフトウェアパッケージを利用するかを指定できます。
オプションは以下のいずれかの形式をしています:
--with-package[=arg] --without-package
例えば、--with-gnu-ld
は他のリンカでなく、GNUリンカを
利用することを指示します。
--with-x
はX Window Systemを利用することを指示します。
ユーザは、パッケージ名の後に=
に続いて引数を渡すことができます。
パッケージ名の後ろにno
を与えると、デフォルトで利用される
パッケージを利用させなくすることがえきます。
yes
でもno
でもない引数は、
より細かく外部パッケージを指定するため、
外部パッケージのパッケージ名やバージョン番号を指定するのに使えるでしょう。
引数が与えられなかった場合、yes
が与えられたのとおなじことになります。
--without-package
は
--with-package=no
とおなじです。
configure
スクリプトは、サポートされていないパッケージについて
--with-package
が指定されてもエラーを出しません。
複数のソフトウェアパッケージをトップレベルのconfigure
スクリプトでまとめて設定する場合のためにこのような動作になっています。
これにより、各ソフトウェアパッケージが異なるオプションを要求している場合でも、
余計なエラー出力なしで設定できます。
残念な副作用として、オプションの綴ミスはチェックされません。
configure
スクリプトを
呼び出したユーザがどんなオプションを指定したか知るためには、
各外部ソフトウェアパッケージについて、
configure.in
中でAC_ARG_WITH
を呼び出す必要があります。
各パッケージがデフォルトで利用されるかされないか、またどんな引数が有効かは
configure.in
を書くあなたまかせです。
AC_ARG_WITH (package, help-string [, action-if-given [, action-if-not-given]]) | Macro |
configure スクリプトにユーザが
--with-package や
--without-package のような
コマンドラインオプションを与えた場合、
shellコマンドaction-if-givenを実行します。
もしどちらも与えられなかった場合、
action-if-not-givenを実行します。
packageは外部ソフトウェアパッケージの名前を示します。
packageは英数字とマイナス記号だけでできている必要があります。
コマンドラインオプションの引数は、
shellコマンドaction-if-givenの中から
shell変数 help-stringはオプションの概説です。 例えば以下のようにします: --with-readline support fancy command line editing help-stringは必要なら2行以上にわたっても構いません。
|
AC_WITH (package, action-if-given [, action-if-not-given]) | Macro |
これは、AC_ARG_WITH の古いバージョンです。
help-stringが使えません。
|
ソフトウェアパッケージに
コンパイル時に使うかどうか選べる機能拡張がある場合、
ユーザはconfigure
のコマンドラインにオプションを指定することで
有効/無効を切り替えられます。
このオプションは以下の形式をとります:
--enable-feature[=arg] --disable-feature
このオプションを使えば、
ユーザはコンパイル/インストールする機能拡張を選べます。
--enable-feature
は、パッケージのある機能のふるまいを変えたり、
機能をさしかえたりするのに使ってはいけません。
プログラムの一部をコンパイルするかしないか選択するためだけに使うべきです。
ユーザは機能名の後に、=
に続けて引数を記述できます。
引数にno
をつけると、その機能は「コンパイルされません」。
引数つきのオプションは例えば「--enable-debug=stabs
」みたいになります。
引数がついていない場合、引数yes
がつけられたのと同等になります。
--disable-feature
は--enable-feature=no
と同等です。
configure
スクリプトは、
サポートしていない--enable-feature
オプションが指定されても
エラーを出しません。
この機能は複数のパッケージを含むソースコードツリーの設定をするとき便利です。
各パッケージがサポートするオプションが違っていても、
トップレベルのconfigure
を呼び出すだけで
(オプションに関するエラーメッセージなしで)
全パッケージの設定ができます(訳註: このへん意訳)。
不幸な副作用としては、オプションの綴ミスをしても警告がでません。
この問題に関して、いまのところよりよい方法は提案されていません。
各オプションについて、
configure.in
でマクロAC_ARG_ENABLE
を呼び出し、
各オプションが指定されたかどうか調べねばなりません。
各オプションがデフォルトで有効/無効かどうか、
どんな引数が有効かはconfigure.in
の作者の自由です。
AC_ARG_ENABLE (feature, help-string [, action-if-given [, action-if-not-given]]) | Macro |
ユーザがconfigure の引数に
--enable-feature または--disable-feature の
オプションを指定した場合、
shellコマンドaction-if-givenを実行します。
どちらも指定されていなければaction-if-not-givenを実行します。
featureはパッケージの機能名です。
featureは英数字とハイフンの組み合わせでないといけません。
action-if-givenの中では、
オプションに |
AC_ENABLE (feature, action-if-given [, action-if-not-given]) | Macro |
このマクロはobsoleteです。
AC_ARG_ENABLE からhelp-stringのサポートを外したようなものです。
|
一部のソフトウェアパッケージは、インストールするサイト依存の情報を 必要とします。 例えば、ある種のサービスにはホスト名が必要です。 コンタクト先として会社名やemailアドレスを使うこともあります。 Metaconfigで生成された設定スクリプトは対話的にこのような情報を 問い合わせます。 Autoconfで生成された設定スクリプトは対話的ではないので、 Autoconfで生成された設定スクリプトではどうやればいいのだろう、と思うでしょう。
このようなサイト依存の設定情報は、プログラムが編集したものではなく、
ユーザだけによって編集されたファイルに格納されている必要があります。
ファイルを置く位置はprefix
変数をもとにしたパス、または
ユーザのホームディレクトリなどの標準的な場所にします。
ファイルを置く位置を環境変数で設定してもよいでしょう。
プログラムはコンパイル時でなく実行時に、そのファイルを調べます。
実行時の設定はユーザにとってより便利で、設定時に情報を取得するよりも設定
の過程がより単純です。データファイルを置く場所についてのより多くの情報の
ために See Directory Variablesを参照してください。
Autoconfはプログラムをインストールするときにそれらの名前の変更をサポート
します。これらの変換を使うにはconfigure.in
がマクロ
AC_ARG_PROGRAM
を呼ばなければなりません。
AC_ARG_PROGRAM | Macro |
出力変数program_transform_name の中にインストールされるプログラム
の名前を変更するためのsed コマンドを置きます。
もし後述するオプションのいくつかが |
configure
options to transform names.
Makefile
uses of transforming names.
以下のコマンドラインオプションをconfigure
に渡すことによって名前の
変換を指定することができます。
--program-prefix=prefix
--program-suffix=suffix
--program-transform-name=expression
sed
の置換演算expressionを行います。
これらの変換はクロスコンパイル開発環境の一部になり得るプログラムで役に立
ちます。例えば、Sun 4で--target=i960-vxworks
つきでconfigureされた
クロスアセンブラは、Sun 4のnativeアセンブラと混同され得るas
より
もむしろi960-vxworks-as
として普通インストールされます。
あなたのシステムにインストールされたGNUプログラムが同じ名前を持った他の
プログラムを隠したくないならあなたはプログラムの名前をg
付きで始め
るように強制できます。例えば、あなたがGNU diff
を
--program-prefix=g
つきでconfigureするなら、あなたがmake
install
を実行するときにそれは/usr/local/bin/gdiff
としてインストー
ルされます。
より洗練された例として、あなたはすでにg
がついたgdb
やGNUプ
ログラムではないless
、lesskey
を除いて、ソースツリーにある
プログラム名のほとんどにg
を付けるように
--program-transform-name='s/^/g/; s/^gg/g/; s/^gless/less/'
を使うことができます。(この特徴を使うため、セットアップされたプログラム を含むソースツリーを持っていることが前提です。)
あるプログラムの複数のバージョンを同時にインストールする1つの方法は、(プ
ログラムの)一方または両方の名前にバージョン番号を付けることです。例えば、
あなたがAutoconfバージョン1をちょっとの間保持したいなら、あなたは
/usr/local/bin/autoconf2
や/usr/local/bin/autoheader2
などを
インストールするためにAutoconfバージョン2を--program-suffix=2
を使っ
てconfigureすることができます。
これはMakefile.in
の中で変数program_transform_name
を使う方
法です。
transform=@program_transform_name@ install: all $(INSTALL_PROGRAM) myprog $(bindir)/`echo myprog|sed '$(transform)'` uninstall: rm -f $(bindir)/`echo myprog|sed '$(transform)'`
もしインストールするプログラムが1つ以上あるなら、あなたはループの中でそ れを行います。
PROGRAMS=cp ls rm install: for p in $(PROGRAMS); do \ $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p|sed '$(transform)'`; \ done uninstall: for p in $(PROGRAMS); do \ rm -f $(bindir)/`echo $$p|sed '$(transform)'`; \ done
ドキュメントファイル(Texinfoやman
)に対して(名前の)変換を行うかど
うかは、手の込んだ疑問(tricky question)です。名前変換に関するいくつかの
理由のために完全な回答はなさそうです。ドキュメントは、特定のアーキテクチャ
に対して普通特別ではありません。そしてTexinfoファイルはシステムドキュメ
ントと衝突しません。しかしそれらは同じファイルの以前のバージョンと衝突す
るかも知れませんし、man
ページはときどきシステムドキュメントと衝突
します。折衷案として、おそらく最も良いのはman
に対しては名前変換を
行い、Texinfoマニュアルには行わないことです。
Autoconfが生成するconfigure
スクリプトは何らかの設定値のためにあな
たのサイトにデフォルト値を与えることを許します。あなたはサイトやシステム
全体の初期化ファイルを作ることでこれを行います。
もし環境変数CONFIG_SITE
が設定されていれば、configure
はその
値を読み込むシェルスクリプトの名前として使用します。そうでなければシェル
スクリプトprefix/share/config.site
をそれが存在すれば読み込
み、prefix/etc/config.site
をそれが存在すれば読み込みます。
したがって、マシン特有のファイルの設定がマシン独自の設定に、それが衝突す
る場合置き換わります。
サイトファイルは恣意的なシェルスクリプトであり得ますが、
but only certain kinds of
code are really appropriate to be in them.configure
は
サイトファイルを読んだ後でキャッシュファイルを読むので、
サイトファイルは、
そのシステムで実行されるconfigure
スクリプトのすべてで共有されるデ
フォルトのキャッシュファイルを定義することができます。もしサイトファイル
でデフォルトキャッシュファイルを設定するならそのサイトファイルの中で出力変数
CC
も設定するのは良い考えです。なぜなら、キャッシュファイルは特定
のコンパイラに対してだけ正当であるのに、多くのシステムはいくつかの(訳註:
コンパイラを?)使うことができるからです。
あなたはサイトファイルの中でconfigure
コマンドラインオプションで設
定された値を検査したり上書きしたりできます。オプションはそのオプションと
同じ名前を持つシェル変数をダッシュをアンダースコアに変えて設定します。例
外は、--without-
と--disable-
オプションは対応する
--with-
や--enable-
オプションとその値no
を与えること
と同じであることです。したがって、--cache-file=localcache
は変数
cache_file
に値localcache
を設定します。
--enable-warnings=no
や--disable-warnings
は変数
enable_warnings
に値no
を設定します。--prefix=/usr
は
変数prefix
に値/usr
を設定します。などなど。
サイトファイルはCFLAGS
のような他の出力変数のためのデフォルト値を
設定する良い場所でもあります。あなたが普段、繰り返しコマンドラインで行っ
ている何らかのノンデフォルト値を与えることを必要とするならば。もしあなた
がprefixやexec_prefix(wherever you locate the site file)にノ
ンデフォルト値を使うなら、あなたはそれらをサイトファイルに設定することが
できます if you specify it with the CONFIG_SITE
environment variable.
あなたはいくつかのキャッシュ変数をサイトファイル自身の中で設定することが
できます。これを行うことはあなたがクロスコンパイルを行うならば役に立ちま
す。テストプログラムの実行に必要な特徴を検査するのは不可能なので。
prefix/etc/config.site
にそのシステムのために正しく値を設定
することによってあなたは"キャッシュを装填"することができます。あなたが
設定することを必要とするキャッシュ変数の名前を見つけるにはaffected
configure
スクリプトやそのマクロのためのAutoconf m4
ソース
コードの中にある、名前に_cv_
が付いたシェル変数を探します。
キャッシュファイルはサイトファイルの中で設定する変数を上書きしないように
注意しています。同様に、サイトファイルの中にあるコマンドラインオプション
を上書きするべきではありません。あなたのコードはprefix
や
cache_file
のような変数がそれらのデフォルト値(configure
の上
位付近にある)を持つようにそれを変更する前に検査するべきです。
ここにサンプルファイル/usr/share/local/gnu/share/config.site
があ
ります。コマンドconfigure --prefix=/usr/share/local/gnu
はこのファ
イルを読み込みます(もしCONFIG_SITE
が違うファイルに設定されてなけ
れば)。
# config.site for configure # # Change some defaults. test "$prefix" = NONE && prefix=/usr/share/local/gnu test "$exec_prefix" = NONE && exec_prefix=/usr/local/gnu test "$sharedstatedir" = '${prefix}/com' && sharedstatedir=/var test "$localstatedir" = '${prefix}/var' && localstatedir=/var # # Give Autoconf 2.x generated configure scripts a shared default # cache file for feature test results, architecture-specific. if test "$cache_file" = ./config.cache; then cache_file="$prefix/var/config.cache" # A cache file is only valid for one C compiler. CC=gcc fi
configure
Scripts以下では、configure
スクリプトを使ったパッケージをどうやって
自動設定するかを述べます。以下のテキストは、パッケージに添付する
INSTALL
ファイルとしても使えます。配布可能なプレーンテキスト版の
INSTALL
はAutoconfパッケージに含まれています。
configure
.
configure
runs.
これらは一般的なインストール説明書です。
configure
シェルスクリプトは、コンパイル時に利用する、様々なシステ
ム依存変数の、正しい値を推測します。パッケージの、それぞれのディレクトリ
のMakefile
を作るために、これらの値は使われます。システム依存の定
義を含む、一つ以上の.h
ファイルも作ります。最終的に、将来、現在の
コンフィグレーションを再生成する、シェルスクリプト config.status
と、再コンフィグレーションのスピードをあげるため、テストの結果を保存する
ファイルconfig.cache
と、コンパイラ出力を含むファイル
config.log
(主にconfigure
のデバッグで役立ちます)を作ります。
パッケージをコンパイルするため、通常でないことをする必要がある場合、そう
するためにconfigure
にチェックさせた方法を理解し、次のリリースに反
映できるように、README
にあるアドレスに、diffの結果や説明をメール
してください。いくつかの点で、保存する必要のないconfig.cache
の結
果は、削除したり編集したりして構いません。
ファイルconfigure.in
は、autoconf
と呼ばれるプログラムで、
configure
を作るために使われます。変更したり、新しいバージョンの
autoconf
で再生成したい場合だけ、configure.in
が必要です。
このパッケージをコンパイルする最も単純な方法は、以下の通りです。
cd
して、システムに対するパッ
ケージのコンフィグレーションのため、./configure
と入力してください。
System Vの古いバージョンのcsh
を使っている場合、 csh
で
configure
を実行させないため、sh ./configure
と入力する必要
がある可能性があります。
configure
の実行には、しばらくかかります。実行中、調べている特徴を
伝えるメッセージを出力します。
make
と入力してください。
make
check
と入力してください。
make install
と入力してください。
make clean
でできます。configure
が作ったファ
イルの削除(他の種類のコンピュータに対するパッケージの、コンパイルできる
ようにするため)は、make distclean
の入力で可能です。 make
maintainer-clean
ターゲットもありますが、主にパッケージ開発者用です。そ
れを使う場合、配布物の付属ファイルを再生成するため、他のプログラムを使う
必要が発生するかも知れません。
configure
スクリプトが知らない、普通使わない、コンパイルやリンクの
オプションが必要なシステムもあります。環境変数に初期値をセットすることで、
configure
にそれを与えることができます。Bourneシェル互換のシェルを
使って、以下のようにコマンドラインで行うことができます。
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
env
プログラムがあるシステムでは、以下のようにしてもできます。
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
それぞれのアーキテクチャのためのオブジェクトファイルを、それ自身のディレ
クトリに置くことで、同時に1種類以上のコンピュータで、パッケージをコンパ
イルすることができます。こうするために、GNU make
の様に、
VPATH
変数をサポートするmake
のバージョンを使う必要がありま
す。オブジェクトファイルと実行可能なファイルを置くディレクトリに
cd
して、configure
スクリプトを実行します。 configure
は、configure
があるディレクトリと..
で、ソースコードを自動
的に調べます。
VPATH
をサポートしないmake
を使う必要がある場合、ソースコー
ドディレクトリで、一度、一つのアーキテクチャのために、パッケージをコンパ
イルする必要があります。一つのアーキテクチャのパッケージをインストールし
た後、他のアーキテクチャに対して再コンフィグレーションするため、
make distclean
を使ってください。
デフォルトで、make install
はパッケージファイルを、
/usr/local/bin
や/usr/local/man
等にインストールします。イン
ストールプレフィクスを、--prefix=path
オプションで
configure
に与えることで、特定することができます。
アーキテクチャ特有のファイルと、アーキテクチャ非依存のファイルを、別々の
インストールプレフィクスに分けて特定することができます。
configure
に--exec-prefix=path
オプションを与えた場合、
パッケージは、プログラムとライブラリをインストールするプレフィクスとして、
pathを使います。ドキュメントと他のデータファイルは通常のプレフィク
スを使います。
さらに、普通でないディレクトリ配置を使う場合、特定の種類のファイルに対し、
異なる値で特定するよう、--bindir=path
のようなオプションを与
えることで可能です。セットできるディレクトリリストと、そこに置きたいファ
イルの種類は、configure --help
で見ることができます。
パッケージがサポートする場合、configure
に
--program-prefix=PREFIX
や
--program-suffix=SUFFIX
オプションを与えることで、プログラム
を、追加のプレフィクスやサフィックスで、インストールすることができます。
configure
への--enable-feature
オプションに注意を払う
パッケージもあり、featureは、パッケージのオプションパートを示しま
す。--with-package
オプションに注意を払うパッケージもあり、
packageは、gnu-as
やx
(X Window System用)の様なもので
す。README
は、パッケージが理解する、 --enable-
と
--with-
オプションに付いて述べています。
X Window Systemを使うパッケージのため、configure
は普通、Xインクルー
ドやリンクファイルを自動的に見つけますが、できなかった場合は、
configure
オプションの、--x-includes=dir
と
--x-libraries=dir
を、場所を特定するために使うことができます。
configure
が自動的に判定できない特徴もありますが、パッケージを実行
する、ホストのタイプを定義する必要があるものもあります。普通
configure
はそれを判定できますが、ホストタイプが分からない旨メッセー
ジを出力した場合、--host=type
オプションで与えてください。
typeは、sun4
の様なシステムタイプの短い名前や、3つのフィール
ドを持つ標準的な名前です。
cpu-company-system
それぞれのフィールドでの可能な値は、ファイルconfig.sub
を見てくだ
さい。config.sub
がパッケージに含まれていない場合は、パッケージに
ホストタイプを知らせる必要がありません。
クロスコンパイルのためのコンパイラツールを作っている場合、同様に、コード
を生成するシステムのタイプを選択するための--target=type
オプ
ションと、パッケージをコンパイルするシステムタイプを選択するための
--build=type
オプションを使うこともできます。
configure
を共有するため、デフォルト値をセットしたい場合、
config.site
と呼ばれる、サイトシェルスクリプトを作ることができ、そ
れは、CC
、cache_file
と、prefix
の様な変数を与えます。
configure
は、prefix/share/config.site
の存在を調べ、
そして、prefix/etc/config.site
の存在を調べます。
CONFIG_SITE
環境変数を、サイトスクリプトのある場所にセットすること
もできます。注意として、全てのconfigure
スクリプトが、サイトスクリ
プトを探すわけではないことがあげられます。
configure
は、処理方法をコントロールする以下のオプションを理解し
ます。
--cache-file=file
./config.cache
の代わりに、fileにテストの結果を保存します。
デバッグのために、キャッシュできないようにするには、fileを
/dev/null
にセットしてください。
--help
configure
オプションの概要を出力して終了します。
--quiet
--silent
-q
/dev/null
に、ファイル
をリダイレクトしてください。
--srcdir=dir
configure
は、ディレクトリを自動的に決定するはずです。
--version
configure
の生成に使った、Autoconfのバージョンを出力し終了します。
configure
は、同様に、広範囲では役に立たないかも知れないが、他のオ
プションも受け入れます。
configure
スクリプトはconfig.status
という名前のファイルを
つくります。このファイルには、前回パッケージが作成されたときに
どういう設定のためのオプションが指定されたのかが記述されています。
このファイルはshellスクリプトで、実行されると、再度おなじ設定を
することができます。
config.status
に--recheck
オプションをつけて実行することで、
config.status
自体を更新することができます。
このオプションはconfigure
自体を変更したときに有効です。
そのような場合、テストの結果は前回と今回で異なっている可能性がありますから。
--recheck
オプションをつけてconfig.status
を実行した場合、
前回つけたのとおなじ引数、それから--no-create
オプションと
--no-recursion
オプションをつけてconfigure
が実行されます。
これらのオプションは、config.status
が実行されるのを防ぎ、
Makefile
や他のファイルが更新されないようにし、
サブディレクトリのconfigure
が実行されないようにします。
(このため、Makefile
の中からconfig.status
が
呼べるようになっています。例題はsee Automatic Remaking参照)
config.status
は--help
と--version
のふたつの
オプションも受け付けます。
--help
をつけると、config.status
のオプションの
概説を出力します。--version
をつけると、Autoconfの
バージョンと、config.status
を作るときに使われた
configure
のオプションを出力します。
config.status
は、いくつかの環境変数を参照して動作を変更します:
CONFIG_SHELL | Variable |
--recheck をつけたときconfigure を実行する際に、
使うべきshellを指定します。Bourne shell互換である必要があります。
デフォルトは/bin/sh です。
|
CONFIG_STATUS | Variable |
設定を記録するためのshellスクリプトの名前です。
デフォルト値は./config.status です。この環境変数は
あるパッケージが他のパッケージの一部を使っていて、
それらが別々に管理されているためconfigure スクリプトを
統合できない場合などに役立ちます。
|
以下の環境変数を使うことで、別々に配布されるパッケージが
configure
で求めたテスト結果を共有することができます。
あるパッケージが他のパッケージ(たとえば共有ライブラリ)の必要とする
OS機能のsupersetを要求している場合に役立ちます。
以下の環境変数を使うと、config.status
にconfigure.in
で
指定された以外のファイルを生成させることができます。
このため、生成されたファイルを他のパッケージから使うことができるのです。
CONFIG_FILES | Variable |
@variable@ の置換を行うべきファイル名。
デフォルトはconfigure.in でAC_OUTPUT に与えられた引数です。
|
CONFIG_HEADERS | Variable |
Cの#define ディレクティブの置換を行うべきファイル名。
デフォルトはAC_CONFIG_HEADER に与えられた引数です。
AC_CONFIG_HEADER マクロが使われていない場合、
config.status はこれを無視します。
|
上記の環境変数を使うことで、一部のファイルだけを再生成するような
Makefile
のルールを記述することができます。
例えば、see Automatic Remakingで挙げたルールでは、
configure.in
が新しくなったときにはconfig.status
が
2回呼ばれます。もしこれが気に入らない場合、各ファイルをひとつづつ
更新するようなルールを記述することができます(訳註: かなり意訳):
config.h: stamp-h stamp-h: config.h.in config.status CONFIG_FILES= CONFIG_HEADERS=config.h ./config.status echo > stamp-h Makefile: Makefile.in config.status CONFIG_FILES=Makefile CONFIG_HEADERS= ./config.status
(configure.in
がAC_CONFIG_HEADER
マクロを使っていない場合、
make
ルール内でCONFIG_HEADERS
を指定する必要はありません)
Autoconfに関しては、いくつかの質問が頻繁に出ます。 それらのいくつかにお答えしましょう。
configure
scripts.
m4
?
m4
require each other?
configure
instead of Imake.
configure
ScriptsAutoconfが生成したconfigure
スクリプトには配布制限はありますか?configure
スクリプトを使うプログラムに影響は?
Autoconfによって生成された設定スクリプトの配布に関しては、 なにも制限がありません。Autoconfバージョン1では、 生成された設定スクリプトもGPLによって保護されていました。 現在でも我々はソフトウェアの作者にGPLのような配布条件で 配布を行うことを推奨しますが、Autoconfを使うからといってそれが 必須なわけではありません。
configure
に使われる可能性のあるファイルのうち、
config.h.in
はあなたが指定したconfigure.in
の
著作権表示に従います。config.h.in
はconfigure.in
と、
パブリックドメインのファイルacconfig.h
から生成されるからです。
config.sub
とconfig.guess
は、Autoconfに生成された
configure
スクリプトとともに使う場合にはあなたの
パッケージの配布条件に従います。これはGPLの例外です。
install-sh
はXコンソーシアムによるもので、
著作権は放棄されています。
m4
?なんでAutoconfはGNU m4
を必要とするんですか?
多くのm4
の実装では、マクロの大きさや数に決め打ちの制限があって、
Autoconfはそれをオーバしてしまいます。また、いくつかの組み込みマクロが
不足している場合があり、それらのマクロなしではAutoconfのような
洗練されたアプリケーションは記述しづらくなります。たとえばこんな
マクロがない場合があります:
builtin indir patsubst __file__ __line__
ソフトウェアの管理者はAutoconfだけを使えばよいし、GNU m4
は
設定やインストールが簡単です。このため、GNU m4
がインストール
されていないといけない、というのは妥当と思われます。
GNUやGNU以外のフリーソフトウェアの管理者にはGNUユーティリティの
多くをインストールしている人がたくさんいます。なぜなら
彼らはGNUユーティリティが気に入っているからです。
AutoconfがGNUm4
を必要としていて、GNUm4
パッケージがAutoconfで 生成されたconfigure
スクリプトを含んでいたら、どこから仕事をはじめたら いいんですか? 鶏と卵問題になりませんか?
それは誤解です。
確かに、GNU m4
パッケージはAutoconfで生成された
configure
スクリプトを含んでいます。
しかし、configure
スクリプトを実行したり
GNU m4
パッケージをインストールしたりするのに
Autoconfは必要ありません。
Autoconfはm4
パッケージに含まれるconfigure
スクリプトを
変更したい場合にだけ必要です。
ふつう、そのような変更はごく少数のひと(主にm4
パッケージの
メインテナ)しか行いません。
なんでconfigure
スクリプトでなしにImakeを使わないのですか?
幾人かのひとがこの質問の答えを書いてくれましたので、 それを翻案して載せたいと思います。
以下の答えはRichard Pixleyの答えをもとにしています:
Autoconfで生成されたスクリプトは、 しばしばパッケージを一度も動かしたことのないマシンでも動作します。 つまり、Autoconfスクリプトは新しいシステムのための設定を類推することが できるのです。 Imakeではこれはできません。
Imakeはホスト依存の情報を得るのに共用のデータベースを使います。 X11の配布はツールの集合でできているので、中央集権的にデータベースを 管理することには意味があります。
しかし、GNUのツールはそのように配布されていません。 各々のGNUツールには個別のmaintainerがいます。 maintainerは世界中に散らばっています。 共用のデータベースを使うと、「データベースの管理」という悪夢が待っています。 Autoconfは共用のデータベースのように見えるかもしれませんが、実際には違います。 Autoconfスクリプトは各ホストへの依存性を記述するのではなく、 プログラムの要求事項を記述しているのです。
GNUツール群を固有のツールの集合としてみるなら、 X11の場合と問題は似ているかもしれません。 でも、GNUの開発ツールはクロス開発にも使えます。 しかも、どんなホストとターゲットの組み合わせについても使えますし、 全ての組み合わせは同時におなじマシンにインストールできます。 さらに、ホスト独立なファイルをマシン間で共有するようにもできます。 Imakeはこの問題に対して解を与えていません。
Imakeのtemplateはある種の標準化です。 GNUのcoding standardは同じ問題について、 Imakeの課する制約をいれることなく解決を与えています。
以下はPer Bothnerによるさらなる解説です:
Imakeの利点として、巨大なMakefileをcpp
の#include
と
マクロ機構を使って簡単に生成できる、ということがあります。
しかし、cpp
はプログラマブルではありません。
cpp
では限られた条件文しか書けませんし、ループは記述できません。
cpp
では実行環境を調べることもできません。
以上の問題点は全て、cpp
でなしにsh
を使うことで解決できます。
shellは完全にプログラマブルです。マクロの置換、他のshellスクリプトの
実行(や取り込み)もできますし、実行環境を調べることもできます。
Paul Eggertがさらに詳細を述べています:
Autoconfを使う場合には、パッケージのインストールをするひとは 「Imake自体がきちんとインストールされて正しく動作する」ことを仮定しなくて 済みます。 Imakeに慣れたひとには、これはたいした利点とは思えないかもしれません。 しかし、多くのホストではImakeはインストールされていなかったり、 標準インストールの状態ではうまく動作しなかったりします。 そして、パッケージのインストールにImakeを使うと、 Imakeはパッケージをホストにインストールする際の障害になります。 例えば、Imake templateと設定ファイルがホストに正しく インストールされていないことがあります。 Imakeを使ったインストール手順では、 全てのソースファイルが巨大なdirectory treeに格納されていると 仮定していることがあります。 Imakeの設定ファイルは単一のコンパイラを仮定していて、 それがパッケージをインストールするのに使いたいコンパイラと 違うかもしれません。 パッケージの仮定しているImakeのバージョンと、 実際ホストにインストールされているImakeのバージョンが異なるかもしれません。 Autoconfを使う場合、このような問題は稀です。 パッケージに、独立して動く自動設定処理プログラムが付属しているからです。
Imakeを使っていると、make
とCプリプロセッサの予期していない
動作に悩まされることがよくあります。
CプリプロセッサはCのプログラムを処理するために設計されたもので、
Makefile
を処理するためのものではありません。
Autoconfを使うなら簡単です。
Autoconfはバックエンドに汎用プリプロセッサm4
を使っています。
m4
を使うのは、
パッケージの作者がconfigure
スクリプトを作成するときです。
つまり、インストールをするときにはプリプロセッサは必要ありません
(訳註: この行激しく意訳)。
最後にMark Eichinが言うには:
Imakeには拡張性がありません。 Imakeに新しい機能を加えようとすると、 独自のproject templateを作成しなければなりません。 しかも、そのtemplateには既存のtemplateの大部分をコピーして含めねば なりません。 つまり、洗練された開発プロジェクトでは、 ベンダが提供するtemplateは必要なところをカバーしてくれないので 意味がありません (開発プロジェクトがX11向けなら話は別ですが)。
逆の見方をすると:
Imakeにはひとつだけ、configure
に対して有利な点があります。多くの
場合、Imakefile
はMakefile.in
よりもずっと短く、冗長性があり
ません。これを改善する方法はあります。Kerberos V5では、ツリーじゅうの
Makefile
の先頭と末尾の部分をpost.in
とpre.in
として共
通化し、Makefile.in
からMakefile
を生成するときにこれらを読
み込むようにしました。これは、多くの共通のものが、普通configure
セッ
トアップにあるものさえ、繰りさえされることを意味します。
Autoconfバージョン2はバージョン1とほぼ互換です。
しかし、いくつかの点についてよりよいやり方が導入されていますし、
バージョン1の汚かった点がいくつか除かれています。
このため、あなたのconfigure.in
の洗練度に依存しますが、
手作業でconfigure.in
を一部書き換える必要があるかもしれません。
この章ではバージョン2への移行のために注意すべき点を挙げます。
移行すると、生成されるconfigure
スクリプトはバージョン2の
新機能によりよりよくなるでしょう。
変更点はAutoconfの配布キットに含まれるNEWS
というファイルに
まとめられています。
まず、バージョン1.1かそれ以降のGNU m4
がインストール
されていることを確認してください。できればバージョン1.3かそれ
以降のものが望ましいです。バージョン1.1以前のものには、Autoconfが
動作しなくなるようなバグがあります。バージョン1.3またはそれ以降は
1.3以前のバージョンより大幅に早く動作します。
バージョン1.3およびそれ以降では、diversionの実装がより効率的になり、
内部状態をファイルに保存することができるため高速に再呼び出しが可能です。
Makefile.in
.
configure.in
.
もし、(特定のパッケージのソースディレクトリに置いてあるのではなくて)
Autoconfと一緒にaclocal.m4
がインストールされていたら
ファイル名をacsite.m4
に変更する必要があります。
See Invoking autoconf
install.sh
をパッケージと一緒に配布する場合、
ファイル名をinstall-sh
にしてください。
これは、make
の組み込みルールが勝手にinstall
というファイルを生成してしまうのを防ぐためです。
AC_PROG_INSTALL
は両方のファイル名を調べますが、
新しい名前を使う方が望ましいです。
config.h.top
またはconfig.h.bot
を使っている場合、
そのまま使い続けることができます。可能ならacconfig.h
に
取り込んだ方がファイルがごみごみしなくていいでしょう。
See Invoking autoheader
Makefile.in
に@CFLAGS@
、@CPPFLAGS@
それから@LDFLAGS@
を追加してください。
追加すると、configure
が実行されたときの環境がそれらの
変数の値に反映されます。これは必ず必要なわけではありませんが、
ユーザの利便のためになります。
Makefile
以外で、AC_OUTPUT
で出力されるファイルのもとの
ファイルには、コメント中に@configure_input@
を追加してください。
追加すると、「このファイルはconfigure
に生成された」という
コメントが出力ファイルに入ります。
AC_OUTPUT
中で、あらゆる形式のコメントを自動選択するのは
無理になりました。
config.log
とconfig.cache
を、Makefile
の
distclean
ターゲットで消去されるファイルのリストに含めてください。
以下のような定義をMakefile.in
にしていたら:
prefix = /usr/local exec_prefix = ${prefix}
以下のように書き換える必要があります:
prefix = @prefix@ exec_prefix = @exec_prefix@
@
が前後についていない変数を書き換えるふるまいは
削除されました。
多くのマクロがAutoconfバージョン2で改名されました。
古い名前を使うこともできますが、新しいものの方がわかりやすく、
ドキュメントとの対応もとれていて探しやすいです。
新しい名前と古い名前の対応表はSee Old Macro Namesを参照してください。
autoupdate
を使うと、古いマクロ名を含むconfigure.in
を
新しいマクロ名を使うように変換できます。See Invoking autoupdate参照。
いくつかのマクロはよりうまく働く類似のマクロで置き換えられましたが、
呼び出し方法が互換でないものがあります。
autoconf
を呼び出した際にobsoleteなマクロを呼び出している
旨警告が表示された場合、警告を無視することもできます。
しかし、警告に従って書き換えを行った方が生成される
configure
スクリプトはうまく動作します。
特に、テストの結果を表示するメカニズムが変更されています。
echo
や(AC_COMPILE_CHECK
経由での)AC_VERBOSE
などを
使っている場合には、AC_MSG_CHECKING
とAC_MSG_RESULT
に
移行した方がconfigure
の出力がうまく見えます。
See Printing Messagesを参照のこと。
これらのマクロはキャッシュとともに使うと最もうまく動きます。
See Caching Results参照。
autoupdate
to Modernize configure
autoupdate
はAutoconfマクロを古い名前で呼び出している
configure.in
を、現在のマクロ名で呼び出すように変換する
プログラムです。
Autoconfのバージョン2では、多くのマクロが統一的でわかりやすい
命名規則に従うよう改名されました。
新しい命名規則についてはSee Macro Namesを参照。
古い名前を使うこともできますが、新しいものに移行した使った方が
configure.in
が読みやすいですし、現在のAutoconfのドキュメントとの
対応もとれていて探しやすいです。
(新しい名前と古い名前の対応表はSee Old Macro Namesを参照)
引数なしで呼ばれた場合、autoupdate
はconfigure.in
を
更新します。その際、もとのファイルはファイル名に~
(または環境変数SIMPLE_BACKUP_SUFFIX
の内容)を追加したファイル名で
保存されます。autoupdate
に引数を与えた場合、
configure.in
のかわりにそのファイルを読み込んで標準出力に
結果を書き出します。
autoupdate
は以下のオプションを受け付けます:
--help
-h
--macrodir=dir
-m dir
AC_MACRODIR
に
設定しても変えられます。
オプションは環境変数より優先されます。
--version
autoupdate
のバージョン番号を表示して終了します。
shell変数DEFS
の値を調べることで以前のテスト結果を参照
している場合、テスト結果のキャッシュをしているshell変数を
調べるように変更する必要があります。
DEFS
は出力ファイル生成時に設定されるようになったので、
configure
実行中には存在しないようになりました。
バージョン1からの変更は、shell変数DEFS
の
設定のたび、つまりAC_DEFINE
を呼ぶたびに
正しく内容をquoteするのが面倒で非効率的であったことによります。
See Cache Variable Names参照。
例えば、Autoconfバージョン1用のconfigure.in
の一部が
このようだったとすると:
AC_HAVE_FUNCS(syslog) case "$DEFS" in *-DHAVE_SYSLOG*) ;; *) # syslog is not in the default libraries. See if it's in some other. saved_LIBS="$LIBS" for lib in bsd socket inet; do AC_CHECKING(for syslog in -l$lib) LIBS="$saved_LIBS -l$lib" AC_HAVE_FUNCS(syslog) case "$DEFS" in *-DHAVE_SYSLOG*) break ;; *) ;; esac LIBS="$saved_LIBS" done ;; esac
バージョン2用はこのようになります:
AC_CHECK_FUNCS(syslog) if test $ac_cv_func_syslog = no; then # syslog is not in the default libraries. See if it's in some other. for lib in bsd socket inet; do AC_CHECK_LIB($lib, syslog, [AC_DEFINE(HAVE_SYSLOG) LIBS="$LIBS $lib"; break]) done fi
AC_DEFINE_UNQUOTED
のバグを回避するためにダブルクォートの
前にbackslashを入れていた場合、それらを取り除く必要があります。
AC_DEFINE_UNQUOTED
は現在想定されるとおりに動き、
backquote以外のquoteを特別扱いしません。
See Setting Output Variables参照。
Autoconfマクロによって設定されるshell変数で真偽値をとるものは、
「真」の場合yes
に設定されるようになりました。
マクロの多くは「偽」の場合no
を使いますが、
バックワードコンパチビリティのために空文字列を使うものもあります。
shell変数が1とかt
とかに設定されることを仮定している場合、
スクリプトを変更する必要があります。
自分でマクロを定義する場合、define
のかわりにAC_DEFUN
を使わねばならないようになりました。AC_DEFUN
は自動的に
AC_PROVIDE
を呼び出します。
これにより、AC_REQUIRE
に呼ばれたマクロが他のマクロを邪魔
しないようなり、checking...
というメッセージがダブって
表示されるのを防止できます。古い方法でマクロを定義しても
実害はありませんが、不便ですしかっこわるいです。
See Macro Definitions参照。
マクロを定義するために、Autoconfについてきたマクロの定義を 読んでらっしゃるのではないかと思います。新しいバージョンの マクロ定義を読むのはいいことだと思います。書き方が わかりやすくなっていますし、新しい機能も活用しています。
ドキュメントに書かれていないAutoconfの内部構造(マクロ、変数や 実装上の抜け道)を使ってトリッキーなことをしている場合、バージョンの 違いによる変化に影響されていないかをチェックしてください。 もしかしたら、ずるをしないでもバージョン2で用意されているやりかたで 同じ事ができるかもしれません。できないかもしれませんけど。
自分で記述したテストを高速にするために、キャッシュを使いましょう。 あなたの記述したテストが、汎用的なマクロとして一般化できるかどうか 考えましょう。
以下のことを不思議に思うかもしれません。なぜAutoconfは元々書かれたのです か? どのようにして現在の形式になったのですか? (なぜそれはゴリラによく似て いるのですか?)不思議に思っていない場合、この章は有用な情報を含んでいない ので省略した方がましです。不思議に思っている場合、軽くながして ください...
configure
.
m4
and Perl.
1991年6月、私はFree Software Foundationのため、GNUユーティリティーの多く
を保守していました。それらが、より多くのプラットホームに移植され、より多
くのプログラムが加えられたので、ユーザーは、Makefile
で、多くの
-D
オプション(およそ20)を選択する必要があり、厄介になりました。
特に私のために、--私は、異なるシステムで、それぞれの新しいいリリースを
テストする必要がありました。そして、私はfileutilsパッケージのため、正し
いセッティングを見つけるため、小さなシェルスクリプトを書き、fileutils
2.0の一部としてリリースしました。そのconfigure
は、翌月、いくつか
の他のGNUユーティリティパッケージのための、configure
スクリプトを
作るため、(手作業で)改造すると良く働きました。Brian Berlinerも、私のスク
リプトを、CVSリビジョンコントロールシステム用に改造しました。
その夏の後、私はRichard StallmanとRichard Pixleyが、GNUコンパイラツール
で使う、類似のスクリプトを開発していたことを知りました。それで、私は
configure
スクリプトを、発展するインタフェースをサポートするため、
改造しました。テンプレートとして、Makefile.in
という名前のファイル
を使い、(多くあるなかの)最初のオプション+srcdir
を追加し、
config.status
ファイルを作りました。
ユーザーからのフィードバックを得るにつれ、私は、スクリプトのそれぞれの良
く似た変更に対し、検索と置換、カットアンドペーストにEmacsを使い、多くの
改良点を組み入れました。私が、GNUユーティリティパッケージに、
configure
スクリプトを使うため改造するにつれ、手作業でのアップグレー
ドは、非現実的になりました。GNUグラフィックユーティリティの管理者Rich
Murpheyは、configure
スクリプトは素晴らしいというメールを送ってく
れ、私がそれらを生成するツールを持っているなら送って欲しいという依頼があ
りました。ダメだと思いましたが、そうするべきだと思いました!。それで、私
はそれらを生成する仕事を始めました。手書きのconfigure
スクリプトの
奴隷から、Autoconfで簡単に始める裕福で簡単な旅が始まりました。
Cygnus configure
は、そのころには開発されていて、表ベースで動いて
いました。それは、主に推測しにくい(オブジェクトファイルの、フォーマット
の詳細としての)特徴の、小さな数字を使って、システムタイプを不連続な数字
で、主に扱われることになっています。Brian Foxが、Bashのために開発してい
た、自動的なコンフィグレーションシステムは、類似のアプローチをとります。
一般的に使うため、それぞれのオペレーティングシステムが持つ、それぞれ異な
る特徴の、最新のデータベースを管理しようとすることは、望みがないように思
われました。それは、その場その場で--特に、人々がローカルでハックしたり、
ベンダーがインストールしたパッチを持つ、ハイブリッドなシステムで、おおま
かな特徴を調べるために、容易で信頼性が高いです。
私は Cygnus configure
に類似のアーキテクチャを使おうと考え、それは
実行時には、configure.in
の部品を読み込む、一つの configure
スクリプトです。しかし、全てのパッケージで、全ての特徴を配布する必要は望
まなかったので、プロセッサーによって、それぞれの configure.in
から、
異なるconfigure
を作らせる処理にしました。そのアプローチは、多くの
制御と柔軟性をもたらしました。
私は、Larry Wall、Harlan Stennと、Raphael Manfrediによる、Metaconfigを使っ
てみようとしましたが、いくつかの理由でやめました。それが生成する
Configure
スクリプトは、対話的で、それが非常に不都合だと分かりまし
た。私は、それが行う(ライブラリ関数のような)特徴の調べ方が、好きでありま
せんでした。さらに、まだ管理されているかどうか分かりませんでした。
Configure
スクリプトは、(System V R4とNeXTのような)近代的なシステ
ムでは働かないように思えました。特徴の有無の反応で、できることがあまり柔
軟ではありませんでした。学ぶことが難しいと思いました。そして、必要以上に、
あまりに大きく複雑でした(私は、そのとき、Autoconfが結局どれくらい成長す
るのか、理解していませんでした)。
私は、configure
スクリプトの私のスタイルを生成するため、Perlを使う
ことを考えましたが、m4
が、簡単なテキスト代入の仕事により適してい
て、出力が暗黙なので、より小さい方法になると思い、決定しました。さらに、
みんな既にそれを持っています。(最初は、私はGNUが拡張したm4
に依存
しませんでした。)また、Maryland大学の私の友達は、tvtwm
を含む、い
くつかのプログラムのフロントエンドとして、m4
を、最近位置付けてい
て、私は新しい言語への挑戦に興味が湧きました。
私のconfigure
スクリプトは、ユーザーの対話的な干渉無しで、システム
の能力を自動的に決定するので、それを生成するプログラムを、Autoconfigと呼
ぶことに決定しました。しかし、バージョンナンバーを付けると、UNIXファイル
システムではあまりに長い名前なので、短くしてAutoconfとしました。
1991年秋、私は、m4
マクロの手書きのスクリプトの部品をまとめ、調査
時に使う特徴を加えたり、テクニックを上達させることを続けるにつれて、私に
フィードバックを与えてもらうため、移植性の聖杯にちなんだ探求者たちのグルー
プ(つまり、アルファテスター)を、呼びました。テスターの間で著明な人は、以
下の通りです。
Pinardは、m4
を実行するためと、未解決のマクロの呼び出しを調べるた
めの、autoconf
シェルスクリプトの作り方の、アイディアを持ってきま
した。Richard Pixleyは、インクルードファイルやシンボルを探すため、より正
確な結果を求めて、ファイルシステムを探す代わりに、コンパイラの実行を提案
しました。Karl Berryは、Autoconfに、コンフィグレーションTeXを与え、ド
キュメントに、マクロインデクッスを加えました。そして、Ian Taylorは、
-D
オプションをMakefile
に置く代わりとして、Cヘッダファイル
を作るためのサポートを加え、UUCPパッケージでAutoconfが使えるようになりま
した。アルファテスターは、リリースからリリースで、変化するAutoconfマクロ
の、名前と呼び出し方法に対し、何度も何度も、ファイルを機嫌良く調整してく
れました。彼らは皆、多くの特定の調査、偉大なアイディアそして、バグフィク
スを提供してくれました。
1992年7月、何カ月ものアルファテストの後で、私は Autoconf 1.0をリリースし、
それを使って多くのGNUパッケージを改造しました。私は、それらに対する、あ
まりに肯定的な反応に驚きました。私が追跡記録できる以上の多くの人々が、そ
れを使い始め、それは、GNUプロジェクトの一部ではない(TCL、FSPとKerberos
V5のような)ソフトウェアで働かせている人も含みます。Autoconfは、
configure
を使っている多くの人が、彼らが遭遇した問題を報告してくれ
るので、急速に改善され続けました。
Autoconfは、m4
実行の良い耐久テストだということが分かりました。
UNIX m4
は、Autoconfが定義する、マクロの長さでコアダンプを吐き始め、
いくつかのバグが、GNU m4
でも同様に明らかになりました。結局、私達
はGNU m4
のみが持つ特徴が必要だと認識しました。4.3BSD m4
は、
特に組み込みマクロのセットが足りず、System Vバージョンはましですが、私達
が必要とするもの全てを、いまだに供給してくれません。
人々が、Autoconfをより強い圧力下(そして、私が予想していなかった利用)の下
で利用するにつれ、更なる開発が発生しました。Karl BerryはX11に対する調査
を加えました。david zuhnはC++サポートを寄付してくれました。
Pinardは、無効な引数を診断させるようにしました。Jim Blandyは勇敢にも、後
の改良のためのワークグランドとなるよう、GNU Emacsのコンフィグレーション
に強要しました。Roland McGrathは、GNU Cライブラリのコンフィグレーション
に使い、Cヘッダテンプレートファイルを自動的に作る、autoheader
スク
リプトを書き、configure
に、--verbose
オプションを加えました。
Noah Friedmanは、--macrodir
オプションと AC_MACRODIR
環境変
数を加えました。(彼は、"ソフトウェアパッケージを、Autoconfを使うものに
改造してください"と言うことを意味する autoconfiscateという言葉も
作り出しました。)RolandとNoahは、 AC_DEFINE
での引用の保護を改善し、
特に私が1993年の2月から6月まで移植性の問題にうんざりしているとき、多くの
バグを直しました。
長い間望まれていた、主な特徴のリストが蓄積され、様々な人々のパッチの、数
年間の効果は、残りのcruftを残したままでした。1994年4月のCygnus Supportの
ための仕事中に、私はautoconfの主な修正を始めました。私は、Autoconfが欠け
ていて、david zuhnとKen Raeburnの助けで、Cygnus configure
が関連し
た部分がほとんどですが、Cygnus configure
の特徴のほとんどを加えま
した。これらの特徴は、config.sub
、config.guess
、
--host
と、--target
を使うサポート、ファイルをリンクさせるこ
と、サブディレクトリでconfigure
を実行することを含みます。これらの
特徴に加え、Autoconfを使うように、KenはGNU as
を対応し、Rob Savoye
はDejaGNUを対応しました。
私は、他の人々の要求に答え、より多くの特徴を加えました。多くの人々は、
configure
スクリプトが、実行時の調査結果を共有できるよう求め、それ
は、(特に、Cygnusのような、大きなソースツリーのコンフィグレーション時に)
イライラする程遅かったためです。Mike Haertelは、サイト特定の初期化スクリ
プトを加えることを提案しました。MS-DOSでアンパックが必要なものを配布して
いる人々は、生成されるファイル名が、config.h.in
のように二つのドッ
トを含むので、ファイル名の.in
拡張子に優先するよう求めました。Jim
Averaは、AC_DEFINE
とAC_SUBST
の引用を使う問題の、拡張試験を
行い、彼の洞察は重要な改良につながりました。Richard Stallmanは、Emacsの
configure
スクリプトをデバッグする人々を助けるため、
/dev/null
の代わりにconfig.log
に、コンパイラ出力を送るよう
頼みました。
私は、プログラム品質に不満があり、他の変更をしました。私は、メッセージで、
あまり曖昧でない調査結果が見えるようにし、常に結果を出力するようにしまし
た。私はマクロの名前を組織化し、コーディングスタイルの矛盾をきれいにしま
した。私は、Autoconfを使う、ソースコードパッケージの改造を助けるため開発
した、追加のユーティリティを加えました。
Pinardの助けで、私は、マクロを、お互いのメッセージが中断しないようにしま
した。(その特徴は、GNU m4
のパフォーマンスのボトルネックを明らかに
し、彼はすぐに修正しました!)私は、人々が解決を望むドキュメント周りの問題
を再編成しました。そして、私は、経験から、Autoconfを変更したとき、明らか
に退化する傾向が分かっているので、テストスイートを始めました。
再び、貴重なフィードバックをくれたアルファテスターです。特に、 Pinard、Jim Meyering、Karl Berry、Rob Savoye、Ken Raeburnと、Mark Eichin です。
最終的に、バージョン2.0が用意できました。そしてたくさんの喜びがありまし た。(そして私は再び自由な時間を持ちます。私は考えます。これは正当な権利 だ。)
Autoconfのバージョン2では、多くのマクロが統一的でわかりやすい 命名規則に従うよう改名されました。
以下は、改名されたマクロの古い名前と現在の名前のリストです。
バックワードコンパチビリティのためにautoconf
は
古い名前を受け付けますが、古い名前はobsoleteです。
新しい命名規則についてはSee Macro Names参照。
AC_ALLOCA
AC_FUNC_ALLOCA
AC_ARG_ARRAY
AC_CHAR_UNSIGNED
AC_C_CHAR_UNSIGNED
AC_CONST
AC_C_CONST
AC_CROSS_CHECK
AC_C_CROSS
AC_ERROR
AC_MSG_ERROR
AC_FIND_X
AC_PATH_X
AC_FIND_XTRA
AC_PATH_XTRA
AC_FUNC_CHECK
AC_CHECK_FUNC
AC_GCC_TRADITIONAL
AC_PROG_GCC_TRADITIONAL
AC_GETGROUPS_T
AC_TYPE_GETGROUPS
AC_GETLOADAVG
AC_FUNC_GETLOADAVG
AC_HAVE_FUNCS
AC_CHECK_FUNCS
AC_HAVE_HEADERS
AC_CHECK_HEADERS
AC_HAVE_POUNDBANG
AC_SYS_INTERPRETER
(呼び出し方法変更)
AC_HEADER_CHECK
AC_CHECK_HEADER
AC_HEADER_EGREP
AC_EGREP_HEADER
AC_INLINE
AC_C_INLINE
AC_LN_S
AC_PROG_LN_S
AC_LONG_DOUBLE
AC_C_LONG_DOUBLE
AC_LONG_FILE_NAMES
AC_SYS_LONG_FILE_NAMES
AC_MAJOR_HEADER
AC_HEADER_MAJOR
AC_MINUS_C_MINUS_O
AC_PROG_CC_C_O
AC_MMAP
AC_FUNC_MMAP
AC_MODE_T
AC_TYPE_MODE_T
AC_OFF_T
AC_TYPE_OFF_T
AC_PID_T
AC_TYPE_PID_T
AC_PREFIX
AC_PREFIX_PROGRAM
AC_PROGRAMS_CHECK
AC_CHECK_PROGS
AC_PROGRAMS_PATH
AC_PATH_PROGS
AC_PROGRAM_CHECK
AC_CHECK_PROG
AC_PROGRAM_EGREP
AC_EGREP_CPP
AC_PROGRAM_PATH
AC_PATH_PROG
AC_REMOTE_TAPE
AC_RESTARTABLE_SYSCALLS
AC_SYS_RESTARTABLE_SYSCALLS
AC_RETSIGTYPE
AC_TYPE_SIGNAL
AC_RSH
AC_SETVBUF_REVERSED
AC_FUNC_SETVBUF_REVERSED
AC_SET_MAKE
AC_PROG_MAKE_SET
AC_SIZEOF_TYPE
AC_CHECK_SIZEOF
AC_SIZE_T
AC_TYPE_SIZE_T
AC_STAT_MACROS_BROKEN
AC_HEADER_STAT
AC_STDC_HEADERS
AC_HEADER_STDC
AC_STRCOLL
AC_FUNC_STRCOLL
AC_ST_BLKSIZE
AC_STRUCT_ST_BLKSIZE
AC_ST_BLOCKS
AC_STRUCT_ST_BLOCKS
AC_ST_RDEV
AC_STRUCT_ST_RDEV
AC_SYS_SIGLIST_DECLARED
AC_DECL_SYS_SIGLIST
AC_TEST_CPP
AC_TRY_CPP
AC_TEST_PROGRAM
AC_TRY_RUN
AC_TIMEZONE
AC_STRUCT_TIMEZONE
AC_TIME_WITH_SYS_TIME
AC_HEADER_TIME
AC_UID_T
AC_TYPE_UID_T
AC_UTIME_NULL
AC_FUNC_UTIME_NULL
AC_VFORK
AC_FUNC_VFORK
AC_VPRINTF
AC_FUNC_VPRINTF
AC_WAIT3
AC_FUNC_WAIT3
AC_WARN
AC_MSG_WARN
AC_WORDS_BIGENDIAN
AC_C_BIGENDIAN
AC_YYTEXT_POINTER
AC_DECL_YYTEXT
以下は、Autoconfが参照する環境変数の名前を、アルファベット順に 並べたリストです。
AC_MACRODIR
: Invoking autoupdate, Invoking autoheader, Invoking autoreconf, Invoking autoconf, Invoking ifnames, Invoking autoscan
CONFIG_FILES
: Invoking config.status
CONFIG_HEADERS
: Invoking config.status
CONFIG_SHELL
: Invoking config.status
CONFIG_SITE
: Site Defaults
CONFIG_STATUS
: Invoking config.status
SIMPLE_BACKUP_SUFFIX
: Invoking autoupdate
以下はAutoconfが(Makefile
などの)出力ファイルを作成する際に、
置換を行う変数名のアルファベット順リストです。
置換動作に関してはSee Setting Output Variablesを参照。
ALLOCA
: Particular Functions
AWK
: Particular Programs
bindir
: Preset Output Variables
build
: System Type Variables
build_alias
: System Type Variables
build_cpu
: System Type Variables
build_os
: System Type Variables
build_vendor
: System Type Variables
CC
: UNIX Variants, Particular Programs
CFLAGS
: Particular Programs, Preset Output Variables
configure_input
: Preset Output Variables
CPP
: Particular Programs
CPPFLAGS
: Preset Output Variables
CXX
: Particular Programs
CXXCPP
: Particular Programs
CXXFLAGS
: Particular Programs, Preset Output Variables
datadir
: Preset Output Variables
DEFS
: Preset Output Variables
exec_prefix
: Preset Output Variables
EXEEXT
: System Services
F77
: Particular Programs
FFLAGS
: Particular Programs, Preset Output Variables
FLIBS
: Fortran 77 Compiler Characteristics
host
: System Type Variables
host_alias
: System Type Variables
host_cpu
: System Type Variables
host_os
: System Type Variables
host_vendor
: System Type Variables
includedir
: Preset Output Variables
infodir
: Preset Output Variables
INSTALL
: Particular Programs
INSTALL_DATA
: Particular Programs
INSTALL_PROGRAM
: Particular Programs
INSTALL_SCRIPT
: Particular Programs
KMEM_GROUP
: Particular Functions
LDFLAGS
: Preset Output Variables
LEX
: Particular Programs
LEX_OUTPUT_ROOT
: Particular Programs
LEXLIB
: Particular Programs
libdir
: Preset Output Variables
libexecdir
: Preset Output Variables
LIBOBJS
: Structures, Generic Functions, Particular Functions
LIBS
: UNIX Variants, Preset Output Variables
LN_S
: Particular Programs
localstatedir
: Preset Output Variables
mandir
: Preset Output Variables
NEED_SETGID
: Particular Functions
OBJEXT
: System Services
oldincludedir
: Preset Output Variables
prefix
: Preset Output Variables
program_transform_name
: Transforming Names
RANLIB
: Particular Programs
sbindir
: Preset Output Variables
sharedstatedir
: Preset Output Variables
srcdir
: Preset Output Variables
subdirs
: Subdirectories
sysconfdir
: Preset Output Variables
target
: System Type Variables
target_alias
: System Type Variables
target_cpu
: System Type Variables
target_os
: System Type Variables
target_vendor
: System Type Variables
top_srcdir
: Preset Output Variables
X_CFLAGS
: System Services
X_EXTRA_LIBS
: System Services
X_LIBS
: System Services
X_PRE_LIBS
: System Services
YACC
: Particular Programs
以下は、Autoconfマクロが定義するCプリプロセッサシンボルの
アルファベット順リストです。
Autoconfを利用する場合、Cソースコード中の#if
ディレクティブで
以下のシンボルを使う必要があります。
__CHAR_UNSIGNED__
: C Compiler Characteristics
_ALL_SOURCE
: UNIX Variants
_MINIX
: UNIX Variants
_POSIX_1_SOURCE
: UNIX Variants
_POSIX_SOURCE
: UNIX Variants
_POSIX_VERSION
: Particular Headers
C_ALLOCA
: Particular Functions
CLOSEDIR_VOID
: Particular Functions
const
: C Compiler Characteristics
DGUX
: Particular Functions
DIRENT
: Particular Headers
F77_NO_MINUS_C_MINUS_O
: Particular Programs
GETGROUPS_T
: Particular Typedefs
GETLODAVG_PRIVILEGED
: Particular Functions
GETPGRP_VOID
: Particular Functions
gid_t
: Particular Typedefs
HAVE_ALLOCA_H
: Particular Functions
HAVE_CONFIG_H
: Configuration Headers
HAVE_DIRENT_H
: Particular Headers
HAVE_DOPRNT
: Particular Functions
HAVE_function
: Generic Functions
HAVE_GETMNTENT
: Particular Functions
HAVE_header
: Generic Headers
HAVE_LONG_DOUBLE
: C Compiler Characteristics
HAVE_LONG_FILE_NAMES
: System Services
HAVE_MMAP
: Particular Functions
HAVE_NDIR_H
: Particular Headers
HAVE_RESTARTABLE_SYSCALLS
: System Services
HAVE_ST_BLKSIZE
: Structures
HAVE_ST_BLOCKS
: Structures
HAVE_ST_RDEV
: Structures
HAVE_STRCOLL
: Particular Functions
HAVE_STRFTIME
: Particular Functions
HAVE_STRINGIZE
: C Compiler Characteristics
HAVE_SYS_DIR_H
: Particular Headers
HAVE_SYS_NDIR_H
: Particular Headers
HAVE_SYS_WAIT_H
: Particular Headers
HAVE_TM_ZONE
: Structures
HAVE_TZNAME
: Structures
HAVE_UNISTD_H
: Particular Headers
HAVE_UTIME_NULL
: Particular Functions
HAVE_VFORK_H
: Particular Functions
HAVE_VPRINTF
: Particular Functions
HAVE_WAIT3
: Particular Functions
inline
: C Compiler Characteristics
INT_16_BITS
: C Compiler Characteristics
LONG_64_BITS
: C Compiler Characteristics
MAJOR_IN_MKDEV
: Particular Headers
MAJOR_IN_SYSMACROS
: Particular Headers
mode_t
: Particular Typedefs
NDIR
: Particular Headers
NEED_MEMORY_H
: Particular Headers
NEED_SETGID
: Particular Functions
NLIST_NAME_UNION
: Particular Functions
NLIST_STRUCT
: Particular Functions
NO_MINUS_C_MINUS_O
: Particular Programs
off_t
: Particular Typedefs
pid_t
: Particular Typedefs
RETSIGTYPE
: Particular Typedefs
SELECT_TYPE_ARG1
: Particular Functions
SELECT_TYPE_ARG234
: Particular Functions
SELECT_TYPE_ARG5
: Particular Functions
SETPGRP_VOID
: Particular Functions
SETVBUF_REVERSED
: Particular Functions
size_t
: Particular Typedefs
STDC_HEADERS
: Particular Headers
SVR4
: Particular Functions
SYS_SIGLIST_DECLARED
: Particular Headers
SYSDIR
: Particular Headers
SYSNDIR
: Particular Headers
TIME_WITH_SYS_TIME
: Structures
TM_IN_SYS_TIME
: Structures
uid_t
: Particular Typedefs
UMAX
: Particular Functions
UMAX4_3
: Particular Functions
USG
: Particular Headers
vfork
: Particular Functions
VOID_CLOSEDIR
: Particular Headers
WORDS_BIGENDIAN
: C Compiler Characteristics
YYTEXT_POINTER
: Particular Programs
以下は、Autoconfマクロのアルファベット順リストです。
リストを使いやすくするため、マクロ名先頭のAC_
は除いてあります。
AIX
: UNIX Variants
ALLOCA
: Old Macro Names
ARG_ARRAY
: Old Macro Names
ARG_ENABLE
: Package Options
ARG_PROGRAM
: Transforming Names
ARG_WITH
: External Software
BEFORE
: Suggested Ordering
C_BIGENDIAN
: C Compiler Characteristics
C_CHAR_UNSIGNED
: C Compiler Characteristics
C_CONST
: C Compiler Characteristics
C_CROSS
: Test Programs
C_INLINE
: C Compiler Characteristics
C_LONG_DOUBLE
: C Compiler Characteristics
C_STRINGIZE
: C Compiler Characteristics
CACHE_CHECK
: Caching Results
CACHE_LOAD
: Caching Results
CACHE_SAVE
: Caching Results
CACHE_VAL
: Caching Results
CANONICAL_HOST
: Canonicalizing
CANONICAL_SYSTEM
: Canonicalizing
CHAR_UNSIGNED
: Old Macro Names
CHECK_FILE
: Generic Programs
CHECK_FILES
: Generic Programs
CHECK_FUNC
: Generic Functions
CHECK_FUNCS
: Generic Functions
CHECK_HEADER
: Generic Headers
CHECK_HEADERS
: Generic Headers
CHECK_LIB
: Libraries
CHECK_PROG
: Generic Programs
CHECK_PROGS
: Generic Programs
CHECK_SIZEOF
: C Compiler Characteristics
CHECK_TOOL
: Generic Programs
CHECK_TYPE
: Generic Typedefs
CHECKING
: Printing Messages
COMPILE_CHECK
: Examining Libraries
CONFIG_AUX_DIR
: Input
CONFIG_HEADER
: Configuration Headers
CONFIG_SUBDIRS
: Subdirectories
CONST
: Old Macro Names
CROSS_CHECK
: Old Macro Names
CYGWIN
: System Services
DECL_SYS_SIGLIST
: Particular Headers
DECL_YYTEXT
: Particular Programs
DEFINE
: Defining Symbols
DEFINE_UNQUOTED
: Defining Symbols
DEFUN
: Macro Definitions
DIR_HEADER
: Particular Headers
DYNIX_SEQ
: UNIX Variants
EGREP_CPP
: Examining Declarations
EGREP_HEADER
: Examining Declarations
ENABLE
: Package Options
ERROR
: Old Macro Names
EXEEXT
: System Services
F77_LIBRARY_LDFLAGS
: Fortran 77 Compiler Characteristics
FIND_X
: Old Macro Names
FIND_XTRA
: Old Macro Names
FUNC_ALLOCA
: Particular Functions
FUNC_CHECK
: Old Macro Names
FUNC_CLOSEDIR_VOID
: Particular Functions
FUNC_FNMATCH
: Particular Functions
FUNC_GETLOADAVG
: Particular Functions
FUNC_GETMNTENT
: Particular Functions
FUNC_GETPGRP
: Particular Functions
FUNC_MEMCMP
: Particular Functions
FUNC_MMAP
: Particular Functions
FUNC_SELECT_ARGTYPES
: Particular Functions
FUNC_SETPGRP
: Particular Functions
FUNC_SETVBUF_REVERSED
: Particular Functions
FUNC_STRCOLL
: Particular Functions
FUNC_STRFTIME
: Particular Functions
FUNC_UTIME_NULL
: Particular Functions
FUNC_VFORK
: Particular Functions
FUNC_VPRINTF
: Particular Functions
FUNC_WAIT3
: Particular Functions
GCC_TRADITIONAL
: Old Macro Names
GETGROUPS_T
: Old Macro Names
GETLOADAVG
: Old Macro Names
HAVE_FUNCS
: Old Macro Names
HAVE_HEADERS
: Old Macro Names
HAVE_LIBRARY
: Libraries
HAVE_POUNDBANG
: Old Macro Names
HEADER_CHECK
: Old Macro Names
HEADER_DIRENT
: Particular Headers
HEADER_EGREP
: Old Macro Names
HEADER_MAJOR
: Particular Headers
HEADER_STAT
: Structures
HEADER_STDC
: Particular Headers
HEADER_SYS_WAIT
: Particular Headers
HEADER_TIME
: Structures
INIT
: Input
INLINE
: Old Macro Names
INT_16_BITS
: C Compiler Characteristics
IRIX_SUN
: UNIX Variants
ISC_POSIX
: UNIX Variants
LANG_C
: Language Choice
LANG_CPLUSPLUS
: Language Choice
LANG_FORTRAN77
: Language Choice
LANG_RESTORE
: Language Choice
LANG_SAVE
: Language Choice
LINK_FILES
: Using System Type
LN_S
: Old Macro Names
LONG_64_BITS
: C Compiler Characteristics
LONG_DOUBLE
: Old Macro Names
LONG_FILE_NAMES
: Old Macro Names
MAJOR_HEADER
: Old Macro Names
MEMORY_H
: Particular Headers
MINGW32
: System Services
MINIX
: UNIX Variants
MINUS_C_MINUS_O
: Old Macro Names
MMAP
: Old Macro Names
MODE_T
: Old Macro Names
MSG_CHECKING
: Printing Messages
MSG_ERROR
: Printing Messages
MSG_RESULT
: Printing Messages
MSG_WARN
: Printing Messages
OBJEXT
: System Services
OBSOLETE
: Obsolete Macros
OFF_T
: Old Macro Names
OUTPUT
: Output
PATH_PROG
: Generic Programs
PATH_PROGS
: Generic Programs
PATH_X
: System Services
PATH_XTRA
: System Services
PID_T
: Old Macro Names
PREFIX
: Old Macro Names
PREFIX_PROGRAM
: Default Prefix
PREREQ
: Versions
PROG_AWK
: Particular Programs
PROG_CC
: Particular Programs
PROG_CC_C_O
: Particular Programs
PROG_CPP
: Particular Programs
PROG_CXX
: Particular Programs
PROG_CXXCPP
: Particular Programs
PROG_F77_C_O
: Particular Programs
PROG_FORTRAN
: Particular Programs
PROG_GCC_TRADITIONAL
: Particular Programs
PROG_INSTALL
: Particular Programs
PROG_LEX
: Particular Programs
PROG_LN_S
: Particular Programs
PROG_MAKE_SET
: Output
PROG_RANLIB
: Particular Programs
PROG_YACC
: Particular Programs
PROGRAM_CHECK
: Old Macro Names
PROGRAM_EGREP
: Old Macro Names
PROGRAM_PATH
: Old Macro Names
PROGRAMS_CHECK
: Old Macro Names
PROGRAMS_PATH
: Old Macro Names
PROVIDE
: Prerequisite Macros
REMOTE_TAPE
: Old Macro Names
REPLACE_FUNCS
: Generic Functions
REQUIRE
: Prerequisite Macros
REQUIRE_CPP
: Language Choice
RESTARTABLE_SYSCALLS
: Old Macro Names
RETSIGTYPE
: Old Macro Names
REVISION
: Versions
RSH
: Old Macro Names
SCO_INTL
: UNIX Variants
SEARCH_LIBS
: Libraries
SET_MAKE
: Old Macro Names
SETVBUF_REVERSED
: Old Macro Names
SIZE_T
: Old Macro Names
SIZEOF_TYPE
: Old Macro Names
ST_BLKSIZE
: Old Macro Names
ST_BLOCKS
: Old Macro Names
ST_RDEV
: Old Macro Names
STAT_MACROS_BROKEN
: Old Macro Names, Structures
STDC_HEADERS
: Old Macro Names
STRCOLL
: Old Macro Names
STRUCT_ST_BLKSIZE
: Structures
STRUCT_ST_BLOCKS
: Structures
STRUCT_ST_RDEV
: Structures
STRUCT_TIMEZONE
: Structures
STRUCT_TM
: Structures
SUBST
: Setting Output Variables
SUBST_FILE
: Setting Output Variables
SYS_INTERPRETER
: System Services
SYS_LONG_FILE_NAMES
: System Services
SYS_RESTARTABLE_SYSCALLS
: System Services
SYS_SIGLIST_DECLARED
: Old Macro Names
TEST_CPP
: Old Macro Names
TEST_PROGRAM
: Old Macro Names
TIME_WITH_SYS_TIME
: Old Macro Names
TIMEZONE
: Old Macro Names
TRY_COMPILE
: Examining Syntax
TRY_CPP
: Examining Declarations
TRY_LINK
: Examining Libraries
TRY_LINK_FUNC
: Examining Libraries
TRY_RUN
: Test Programs
TYPE_GETGROUPS
: Particular Typedefs
TYPE_MODE_T
: Particular Typedefs
TYPE_OFF_T
: Particular Typedefs
TYPE_PID_T
: Particular Typedefs
TYPE_SIGNAL
: Particular Typedefs
TYPE_SIZE_T
: Particular Typedefs
TYPE_UID_T
: Particular Typedefs
UID_T
: Old Macro Names
UNISTD_H
: Particular Headers
USG
: Particular Headers
UTIME_NULL
: Old Macro Names
VALIDATE_CACHED_SYSTEM_TUPLE
: Canonicalizing
VERBOSE
: Printing Messages
VFORK
: Old Macro Names
VPRINTF
: Old Macro Names
WAIT3
: Old Macro Names
WARN
: Old Macro Names
WITH
: External Software
WORDS_BIGENDIAN
: Old Macro Names
XENIX_DIR
: UNIX Variants
YYTEXT_POINTER
: Old Macro Names
configure
Scripts
configure
Scripts