Next: , Previous: Output, Up: Setup


4.5 コンフィグレーション作業の実行

configureは,自分が行なっていることが全部分かるように設計されてい ますが,隠されている従属物も実際にはあります.それは, config.statusです.configureはシステムの調査を担当していま すが,configureの結果を基に適切な動作を実際に引き受けるのは, config.statusです.config.statusのほとんどの典型的な作業は, ファイルを実際に作成することです.

このセクションでは,実際に何かを作成する基本的な四つのマクロの一般的な動 作を説明します.それらは,AC_CONFIG_FILESAC_CONFIG_HEADERSAC_CONFIG_COMMANDS,そして AC_CONFIG_LINKSです.それらは全て以下のものが原型となっています.

     AC_CONFIG_FOOS(tag..., [commands], [init-cmds])

ここでの引数は,以下のとおりです.

tag...
空白で分けられたタグのリストで,それらは通常,実際に作成されるファイル名 です.

tagsとして,リテラルを使用することを勧めます.特に,以下は避けた方 が良いでしょう.

          ... && my_foos="$my_foos fooo"
          ... && my_foos="$my_foos foooo"
          AC_CONFIG_FOOS($my_foos)

この代わりに以下のようにしてください.

          ... && AC_CONFIG_FOOS(fooo)
          ... && AC_CONFIG_FOOS(foooo)

マクロAC_CONFIG_FILESAC_CONFIG_HEADERSは,特別な tagを使用します.それらは,‘output’や ‘output:inputs’にすることが可能です.ファイル outputは,そのテンプレートinputsから実際に作成されます(デフォ ルトは‘output.in’).

例えば,‘AC_CONFIG_FILES(Makefile:boiler/top.mk:boiler/bot.mk)’は, boiler/top.mkboiler/bot.mkを繋げたものに,出力変数を展開 したMakefileを作成するよう要求します.

特殊な値‘-’は,outputで使用されているときは標準出力を, inputsで使用されているときは標準入力を示すために使用されます.おそ らくconfigure.acでこれを使用する必要はほとんど無いと思いますが, ./config.statusのコマンドラインインターフェースを使用しているとき は便利でしょう.詳細は,config.status Invocation,を参照してくださ い.

inputsは,絶対パスまたは相対パスを用いたファイル名が可能です.後者 の場合,それは最初にビルドツリーで探され,その後でソースツリーで探されま す.

commands
config.statusにそのまま出力されるシェルコマンドで,実行するコマン ドをconfig.statusに伝えるためにユーザが使用することが可能な tagに関連付けされています.tagの要求がconfig.status に与えられるたびにコマンドが実行され,通常はファイルtagが作 成されるたびになります.

configureの実行中に設定される変数は,ここでは利用不可能 です.それらを最初にinit-cmdsで設定する必要があります.それにもか かわらず,以下の変数は前もって求められます.

srcdir
ビルドディレクトリのトップからソースディレクトリのトップへのパスです.こ れは,configureのオプション--srcdirで設定されるもので す.
ac_top_srcdir
現在のビルドディレクトリからソースディレクトリのトップへのパスです.
ac_top_builddir
現在のビルドディレクトリからビルドディレクトリのトップへのパスです.連結 できるように,それを空にしたり,スラッシュで終えることが可能です.
ac_srcdir
現在のビルドディレクトリから対応するソースディレクトリへのパスです.

現在の(current)ディレクトリは,tagsの一部の入力が含まれるディ レクトリ(または疑似ディレクトリ)を参照します.例えば以下を実行したとしま す.

          AC_CONFIG_COMMANDS([deep/dir/out:in/in.in], [...], [...])

--srcdir=../packageを用いると,以下の値が生成されます.

          # Argument of --srcdir
          srcdir='../package'
          # Reversing deep/dir
          ac_top_builddir='../../'
          # Concatenation of $ac_top_builddir and srcdir
          ac_top_srcdir='../../../package'
          # Concatenation of $ac_top_srcdir and deep/dir
          ac_srcdir='../../../package/deep/dir'

in/in.in’とは無関係です.

init-cmds
config.statusの先頭付近に引用符で囲まれることなく出力され るシェルコマンドで,config.statusが実行されるたびに(tag に 関係なく)実行されます.引用符で囲まれていないので,例えば,‘$var’は varの値として出力されます.init-cmdsは通常,commands を実行するために必要な同じ変数をconfig.statusに与えるために, configureで使用されます.

変数名では特に注意すべきです.すべてのinit-cmdsは同じ名前空間を共 有し,それぞれ予測できない方法で上書きされるかもしれません.残念です ...

当然ですが,すべてのこれらのマクロは,異なるtagを用いると,何回で も呼び出すことが可能です!