[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
configure
スクリプトは,何種類かのローカルコンフィグレーション
の宣言をサポートします.ユーザが外部ソフトウェアパッケージの場所を指定し
たり,追加の特徴を含めたり排除したり,編集された名前でプログラムをインス
トールしたり,configure
オプションに対してデフォルト値を設定し
たりする方法があります.
12.1 外部ソフトウェアとともに動作する | Working with other optional software | |
12.2 パッケージオプションの選択 | Selecting optional features | |
12.3 ヘルプ文字列を小奇麗にする | Formatting help string | |
12.4 サイトのコンフィグレーションの詳細 | Configuring site details | |
12.5 インストール時のプログラム名の変換 | Changing program names when installing | |
12.6 サイトのデフォルトの設定 | Giving 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.ac'でAC_ARG_WITH
を呼び出すべきです.それぞれのパッ
ケージでデフォルトで使用するかどうかと,有効な引数については,好きにして
ください.
ユーザがconfigure
に,オプション`--with-package'
や`--without-package'を与えた場合,シェルコマンド
action-if-givenを実行します.どちらも与えられていない場合は,シェ
ルコマンドaction-if-not-givenを実行します.名前packageは,こ
のプログラムとともに動作する,他のソフトウェアパッケージを示します.それ
は,英数字とダッシュだけから構成されるべきです.
オプションの引数は,`-'文字を`_'に変更したシェル変数
with_package
の実際の値となる,シェル変数withval
内の
シェルコマンドaction-if-givenが利用可能です.望むなら,変わりにそ
の値を使用してもかまいません.
引数help-stringは以下のような,オプションの説明です.
--with-readline support fancy command line editing |
詳細が必要な場合,help-stringは一行以上でもかまいません. `configure --help'で行が整列していることを確認してください.ヘルプ 文字列でのタブの使用は避けてください.前置するスペースを生成するため,ヘ ルプ文字列を`['と`]'で囲む必要があるでしょう.
help-stringは,マクロAS_HELP_STRING
で書式化すべきです
(see section ヘルプ文字列を小奇麗にする).
これはヘルプ文字列の提供をサポートしていない,AC_ARG_WITH
の時代遅
れのバージョンです.
ソフトウェアパッケージに追加のコンパイル時の特徴がある場合,それらをコン
パイルするかどうか指定するため,ユーザはconfigure
コマンドライ
ンオプションを与えることが可能です.オプションは以下の書式の一つになりま
す.
--enable-feature[=arg] --disable-feature |
これらのオプションで,ビルドしインストールする追加の機能を,ユーザが選択 することが可能になります.`--enable-feature'オプションで, ある機能に異なる動作をさせたり,ある機能を他の機能で置換させたりするべき ではありません.それらは,プログラムの部分をビルドする,または削除するた めだけにすべきです.
ユーザは,機能の名前に続く引数を`='とその引数で与えることが可能です. `no'引数を与えるとその機能は利用できません.機能とは, `--enable-debug=stabs'のような引数です.引数が与えられていない場 合は,デフォルトで`yes'です.`--disable-feature'は, `--enable-feature=no'と同じです.
configure
スクリプトは,サポートしていない
`--enable-feature'オプションに文句を言いません.これにより,
複数のパッケージを含むソースツリーにおいて,パッケージが異なるオプション
をサポートするとき,パッケージによってはサポートするものもあるオプション
で深刻なエラーメッセージを出力すること無く,トップレベルの
configure
スクリプトでのコンフィグレーションが可能になります.
残念な副作用として,オプションのスペルエラーは診断されません.この問題の
より良い手法はまだ提案されていません.
使用される可能性のあるそれぞれの追加の機能に対して,configure
のユーザがそれを含めることを依頼したかどうかを検出するため,
`configure.ac'でAC_ARG_ENABLE
を呼び出すべきです.それぞれの
機能をデフォルトで使用するかどうかと,有効な引数については,好きにしてく
ださい.
ユーザが,configure
にオプション`--enable-feature'
や`--disable-feature'を与えた場合,シェルコマンド
action-if-givenを実行します.どちらも与えられない場合は,シェルコ
マンドaction-if-not-givenを実行します.名前featureはオプショ
ンのユーザレベルの機能を示します.それは,英数字とダッシュだけで構成すべ
きです.
オプションの引数は,`-'文字を`_'に変更したシェル変数
enable_package
の実際の値となる,シェル変数enableval
内のシェルコマンドaction-if-givenが利用可能です.望むなら,変わり
にその値を使用してもかまいません.help-string引数は,
AC_ARG_WITH
と同様にしてください(see section 外部ソフトウェアとともに動作する).
help-stringは,マクロAS_HELP_STRING
で書式化すべきです
(see section ヘルプ文字列を小奇麗にする).
これはヘルプ文字列の供給をサポートしないAC_ARG_ENABLE
の時代遅れの
バージョンです.
AC_ARG_WITH
(see section 外部ソフトウェアとともに動作する)とAC_ARG_ENABLE
(see section パッケージオプションの選択)で使用する`help strings'を正しく書式化する
ことに挑戦してみましょう.具体的には,独自の`help strings'を,標準
的なAutoconfの`help strings'のように,`configure --help' で列
に適切に並ぶようにしたいと思うでしょう.AS_HELP_STRING
マクロの目
的はここにあります.
ユーザが`configure --help'を実行したとき,小奇麗なヘルプ文字列に展
開します.通常は,AC_ARG_WITH
(see section 外部ソフトウェアとともに動作する)や
AC_ARG_ENABLE
(see section パッケージオプションの選択)で使用します.以下の例でよ
り分かり易くなるでしょう.
AC_DEFUN([TEST_MACRO], [AC_ARG_WITH([foo], AS_HELP_STRING([--with-foo], [use foo (default is NO)]), [ac_cv_use_foo=$withval], [ac_cv_use_foo=no]) AC_CACHE_CHECK([whether to use foo], [ac_cv_use_foo], [ac_cv_use_foo=no])]) |
AS_HELP_STRING
の呼び出しは引用符で囲まないことに注意して
ください.`configure --help'の最後の数行に,以下のような行が現れま
す.
--enable and --with options recognized: --with-foo use foo (default is NO) |
AS_HELP_STRING
マクロは,以下の例のように,left-hand-side そ
して/またはright-hand-sideがマクロ引数で構成される時,特に役に立ち
ます.
AC_DEFUN(MY_ARG_WITH, [AC_ARG_WITH([$1], AS_HELP_STRING([--with-$1], [use $1 (default is $2)]), ac_cv_use_$1=$withval, ac_cv_use_$1=no), AC_CACHE_CHECK(whether to use $1, ac_cv_use_$1, ac_cv_use_$1=$2)]) |
複雑なサイト指定の情報が必要となるソフトウェアパッケージもあります.例え ば,特定のサービスで使用する,ホスト名,会社名,そして連絡先の電子メール アドレスがあげられます.Metaconfigが生成したコンフィグレーションスクリプ トには,そのような情報を対話的に尋ねるものもあるので,Autoconfが生成した 対話的でないコンフィグレーションスクリプトが,どうやってその情報を得るの かと不思議に思うこともあるでしょう.
そのようなサイトコンフィギュレーション情報は,プログラムではなくユー
ザだけが編集するファイルに書き込むべきです.ファイルの場所は,
prefix
変数に基づくところか,ユーザのホームディレクトリのような,
標準的な場所が可能です.それは環境変数で指定するべきでしょう.プログラム
では,コンパイル時ではなく実行時にファイルを調査するべきです.実行時のコ
ンフィグレーションはユーザにとって便利で,コンフィグレーション時に情報を
得るよりコンフィグレーション処理が簡単になります.データファイルを書き込
む場所の詳細は,See (standards)Directory Variables section `Variables for Installation Directories' in GNU Coding Standards.
Autoconfは,インストール時にプログラム名を変更することをサポートします.
これらの変換を使用するため,`configure.ac'でマクロ
AC_ARG_PROGRAM
を呼び出す必要があります.
出力変数program_transform_name
に,インストールするプログラムの名
前を変更するため,sed
コマンドのシーケンスを配置します.
下記のオプションのいずれかがconfigure
に与えれらている場合,プ
ログラム名は適宜変換されます.それ以外では,AC_CANONICAL_SYSTEM
が呼び出されて,`--target'の値が与えられている場合,ダッシュが続い
ているターゲットタイプがプレフィクスとして使用されます.それ以外ではプロ
グラム名は変換されません.
12.5.1 変換オプション | configure options to transform names
| |
12.5.2 変換例 | Sample uses of transforming names | |
12.5.3 変換規則 | `Makefile' uses of transforming names |
configure
に以下のコマンドラインオプションを与えることで,名前
変換を指定することが可能です.
prefixを名前に前置します.
suffixを名前に後置します.
sed
のexpressionで名前への代入を実行します.
これらの変換は,クロスコンパイル開発環境の一部となるプログラムで役に立ち ます.例えば,`--target=i960-vxworks'オプションでコンフィグレーショ ンされたSun 4でクロスアセンブラの実行では,通常,`as'ではなく `i960-vxworks-as'がインストールされるので,ネイティブのSun 4アセン ブラと混在できます.
GNUプログラムを,他のプログラムを隠してしまうような同じ名前で
システムにインストールしたくない場合,プログラム名を`g'から始めるこ
とができます.例えば,GNU diff
を
`--program-prefix=g'でコンフィグレーションする場合,`make
install'時に`/usr/local/bin/gdiff'としてインストールされます.
より洗練された例として,以下を使用することができます.
--program-transform-name='s/^/g/; s/^gg/g/; s/^gless/less/' |
これは,ソースツリーで,`g'をほとんどのプログラム名に前置し,
gdb
のように既に持っているものと,less
とlesskey
のよ
うにGNUプログラムでないものは例外とすることができます.(この機
能を使用するために,セットアップされたプログラムを含むソースツリーを持っ
ていることが仮定されます.)
同時にいくつかのプログラムの複数のバージョンをインストールする方法の一つ として,一つあるいは両方の名前にバージョンナンバーを追加することです.例 えば,しばらくの間Autoconfバージョン1を保持したい場合,Autoconfバージョ ン2を,`/usr/local/bin/autoconf2'や `/usr/local/bin/autoheader2'等としてプログラムをインストールするた め,`--program-suffix=2'を使用してコンフィグレーションすることが 可能です.それにもかかわらず,バイナリのみ名前が変更されることに注意して ください.そのため,オーバーラップする可能性のあるライブラリファイルは問 題になるでしょう.
`Makefile.in'で変数program_transform_name
を使用する方法は以
下のようになります.
PROGRAMS = cp ls rm transform = @program_transform_name@ install: for p in $(PROGRAMS); do \ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p | \ sed '$(transform)'`; \ done uninstall: for p in $(PROGRAMS); do \ rm -f $(DESTDIR)$(bindir)/`echo $$p | sed '$(transform)'`; \ done |
program_transform_name
が空ではなく,無意味なセパレータがないこと
が保証されます.そのため,`;'使用しているsed
プログラムに
program_transform_name
を安全に埋め込むことができます.
transform = @program_transform_name@ transform_exe = s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/ |
ドキュメントファイル(Texinfoやman
)で変換するどうかは,慎重を要す
る質問です.名前を変える理由がいくつかあるため,完全な答えがあるとは思わ
れません.ドキュメントは通常,特定のアーキテクチャ特有のものではなく,
Texinfoファイルはシステムドキュメントと衝突しません.しかし,それらは同
じファイルの前のバージョンと衝突したり,man
ページはシステムドキュ
メントと衝突することがあるかもしれません.妥協案として,man
ページ
は名前を変換してTexinfoマニュアルは変換しないのがおそらく最善でしょう.
Autoconfが生成したconfigure
スクリプトで,コンフィグレーション
の値に対して,サイトのデフォルト値を供給できるものもあります.これは,サ
イト全体と システム全体の初期化ファイルを作成することで可能となります.
環境変数CONFIG_SITE
が設定されている場合,configure
は,
その値を読み込むシェルスクリプトの名前として使用します.それ以外では,シェ
ルスクリプト`prefix/share/config.site'があればそれを読み込み,
次に`prefix/etc/config.site'があればそれを読み込みます.この
ため,それらが衝突する状況では,マシン特有のファイルでの設定がマシン非依
存の設定に優先します.
サイトファイルは任意のシェルスクリプトが可能ですが,本来なら特定の種類の
コードだけがその中にあるのが適切です.configure
はサイトファイ
ルを読み込んだ後でキャッシュファイルを読み込むので,サイトファイルは,そ
のシステムで実行されるAutoconfが生成した全てのconfigure
スクリ
プト間で,デフォルトのキャッシュファイルを共有することが可能になっていま
す(see section キャッシュファイル).キャッシュファイルは特定のコンパイラに対しての
みで有効ですが,システムの多くは複数の利用可能なコンパイラがあるので,デ
フォルトのキャッシュファイルをサイトファイルに設定した場合,サイトファイ
ルで出力変数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に対してデフォルト値ではないものを使用したい場合(サイ
トファイルの場所がどこであれ),CONFIG_SITE
を用いて指定すると,サ
イトファイルで設定できます.
サイトファイル自身でキャッシュ値を設定することもできます.こうすることで,
テストプログラムの実行が必要な特徴の調査が不可能なクロスコンパイルで役に
立ちます.システムに対して`prefix/etc/config.site' でこれらの
値を正しく設定することで,"キャッシュの用意"が可能です.設定する必要が
あるキャッシュ変数名を見つけるため,影響を受けた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" = /dev/null; then cache_file="$prefix/var/config.cache" # A cache file is only valid for one C compiler. CC=gcc fi |
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.