[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

12. サイトのコンフィグレーション

configureスクリプトは,何種類かのローカルコンフィグレーション の宣言をサポートします.ユーザが外部ソフトウェアパッケージの場所を指定し たり,追加の特徴を含めたり排除したり,編集された名前でプログラムをインス トールしたり,configureオプションに対してデフォルト値を設定し たりする方法があります.


12.1 外部ソフトウェアとともに動作する

既にインストールしてある他のソフトウェアパッケージを要求したり,追加で使 用していたりしているパッケージもあります.ユーザは,使用するそのような外 部ソフトの指定するために,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を呼び出すべきです.それぞれのパッ ケージでデフォルトで使用するかどうかと,有効な引数については,好きにして ください.

Macro: AC_ARG_WITH (package, help-string, [action-if-given], [action-if-not-given])

ユーザが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 ヘルプ文字列を小奇麗にする).

Macro: AC_WITH (package, action-if-given, [action-if-not-given])

これはヘルプ文字列の提供をサポートしていない,AC_ARG_WITHの時代遅 れのバージョンです.


12.2 パッケージオプションの選択

ソフトウェアパッケージに追加のコンパイル時の特徴がある場合,それらをコン パイルするかどうか指定するため,ユーザは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を呼び出すべきです.それぞれの 機能をデフォルトで使用するかどうかと,有効な引数については,好きにしてく ださい.

Macro: AC_ARG_ENABLE (feature, help-string, [action-if-given], [action-if-not-given])

ユーザが,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 ヘルプ文字列を小奇麗にする).

Macro: AC_ENABLE (feature, action-if-given, [action-if-not-given])

これはヘルプ文字列の供給をサポートしないAC_ARG_ENABLEの時代遅れの バージョンです.


12.3 ヘルプ文字列を小奇麗にする

AC_ARG_WITH (see section 外部ソフトウェアとともに動作する)とAC_ARG_ENABLE (see section パッケージオプションの選択)で使用する`help strings'を正しく書式化する ことに挑戦してみましょう.具体的には,独自の`help strings'を,標準 的なAutoconfの`help strings'のように,`configure --help' で列 に適切に並ぶようにしたいと思うでしょう.AS_HELP_STRINGマクロの目 的はここにあります.

Macro: AS_HELP_STRING (left-hand-side, right-hand-side)

ユーザが`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)])

12.4 サイトのコンフィグレーションの詳細

複雑なサイト指定の情報が必要となるソフトウェアパッケージもあります.例え ば,特定のサービスで使用する,ホスト名,会社名,そして連絡先の電子メール アドレスがあげられます.Metaconfigが生成したコンフィグレーションスクリプ トには,そのような情報を対話的に尋ねるものもあるので,Autoconfが生成した 対話的でないコンフィグレーションスクリプトが,どうやってその情報を得るの かと不思議に思うこともあるでしょう.

そのようなサイトコンフィギュレーション情報は,プログラムではなくユー ザだけが編集するファイルに書き込むべきです.ファイルの場所は, prefix変数に基づくところか,ユーザのホームディレクトリのような, 標準的な場所が可能です.それは環境変数で指定するべきでしょう.プログラム では,コンパイル時ではなく実行時にファイルを調査するべきです.実行時のコ ンフィグレーションはユーザにとって便利で,コンフィグレーション時に情報を 得るよりコンフィグレーション処理が簡単になります.データファイルを書き込 む場所の詳細は,See (standards)Directory Variables section `Variables for Installation Directories' in GNU Coding Standards.


12.5 インストール時のプログラム名の変換

Autoconfは,インストール時にプログラム名を変更することをサポートします. これらの変換を使用するため,`configure.ac'でマクロ AC_ARG_PROGRAMを呼び出す必要があります.

Macro: AC_ARG_PROGRAM

出力変数program_transform_nameに,インストールするプログラムの名 前を変更するため,sedコマンドのシーケンスを配置します.

下記のオプションのいずれかがconfigureに与えれらている場合,プ ログラム名は適宜変換されます.それ以外では,AC_CANONICAL_SYSTEM が呼び出されて,`--target'の値が与えられている場合,ダッシュが続い ているターゲットタイプがプレフィクスとして使用されます.それ以外ではプロ グラム名は変換されません.


12.5.1 変換オプション

configureに以下のコマンドラインオプションを与えることで,名前 変換を指定することが可能です.

` --program-prefix=prefix'

prefixを名前に前置します.

` --program-suffix=suffix'

suffixを名前に後置します.

` --program-transform-name=expression'

sedexpressionで名前への代入を実行します.


12.5.2 変換例

これらの変換は,クロスコンパイル開発環境の一部となるプログラムで役に立ち ます.例えば,`--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のように既に持っているものと,lesslesskeyのよ うにGNUプログラムでないものは例外とすることができます.(この機 能を使用するために,セットアップされたプログラムを含むソースツリーを持っ ていることが仮定されます.)

同時にいくつかのプログラムの複数のバージョンをインストールする方法の一つ として,一つあるいは両方の名前にバージョンナンバーを追加することです.例 えば,しばらくの間Autoconfバージョン1を保持したい場合,Autoconfバージョ ン2を,`/usr/local/bin/autoconf2'や `/usr/local/bin/autoheader2'等としてプログラムをインストールするた め,`--program-suffix=2'を使用してコンフィグレーションすることが 可能です.それにもかかわらず,バイナリのみ名前が変更されることに注意して ください.そのため,オーバーラップする可能性のあるライブラリファイルは問 題になるでしょう.


12.5.3 変換規則

`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マニュアルは変換しないのがおそらく最善でしょう.


12.6 サイトのデフォルトの設定

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 のような他の出力変数に対しデフォルト値を設定するための良い場所です.通常 コマンドラインで繰り返し行っていることならなんでもできます.prefixexec_prefixに対してデフォルト値ではないものを使用したい場合(サイ トファイルの場所がどこであれ),CONFIG_SITE を用いて指定すると,サ イトファイルで設定できます.

サイトファイル自身でキャッシュ値を設定することもできます.こうすることで, テストプログラムの実行が必要な特徴の調査が不可能なクロスコンパイルで役に 立ちます.システムに対して`prefix/etc/config.site' でこれらの 値を正しく設定することで,"キャッシュの用意"が可能です.設定する必要が あるキャッシュ変数名を見つけるため,影響を受けたconfigureスク リプトやこれらのマクロに対するAutoconf M4ソースコードで,名前に `_cv_'を伴うシェル変数を探してください.

キャッシュファイルは,サイトファイルで設定した変数を無効にしないよう注意 深く実行します.また,サイトファイルでコマンドラインオプションを無効にす るべきではありません.コードでは,prefixcache_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.