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

9. Site Configuration

configureスクリプトでは、パッケージがインストールされる場面ごとに 設定の一部を変えるための機能を備えています(訳註: 意訳)。 外部プログラムパッケージの置かれている場所を指定したり、 オプションの機能を含めたり外したり、プログラムを デフォルトの名前以外でインストールしたり、 configureのオプションの既定値を定めたりするための方法が 用意されています。

9.1 Working With External Software  Working with other optional software.
9.2 Choosing Package Options  Selecting optional features.
9.3 Configuring Site Details  Configuring site details.
9.4 Transforming Program Names When Installing  Changing program names when installing.
9.5 Setting Site Defaults  Giving configure local defaults.


9.1 Working With External Software

ソフトウェアパッケージが他のソフトウェアパッケージを必要としたり、 あるいは特定の場合だけ利用したりすることがあります。 ユーザは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'を書くあなたまかせです。

Macro: AC_ARG_WITH (package, help-string [, action-if-given [, action-if-not-given]])
configureスクリプトにユーザが `--with-package'や `--without-package'のような コマンドラインオプションを与えた場合、 shellコマンドaction-if-givenを実行します。 もしどちらも与えられなかった場合、 action-if-not-givenを実行します。 packageは外部ソフトウェアパッケージの名前を示します。 packageは英数字とマイナス記号だけでできている必要があります。

コマンドラインオプションの引数は、 shellコマンドaction-if-givenの中から shell変数withvalとして参照できます。 withvalの値はshell変数with_package (パッケージ名中の`-'は`_'に変換されます)の 値とおなじですので、どちらを使っても構いません。

help-stringはオプションの概説です。 例えば以下のようにします:

 
  --with-readline         support fancy command line editing
help-stringは必要なら2行以上にわたっても構いません。 `configure --help'を実行したとき、桁が揃うようにしてください。 help-string中にはtab文字は使わないでください。 行の先頭にスペースを含めるためには、`['と`]'でくくる 必要があるでしょう。

Macro: AC_WITH (package, action-if-given [, action-if-not-given])
これは、AC_ARG_WITHの古いバージョンです。 help-stringが使えません。


9.2 Choosing Package Options

ソフトウェアパッケージに コンパイル時に使うかどうか選べる機能拡張がある場合、 ユーザは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'の作者の自由です。

Macro: AC_ARG_ENABLE (feature, help-string [, action-if-given [, action-if-not-given]])
ユーザがconfigureの引数に `--enable-feature'または`--disable-feature'の オプションを指定した場合、 shellコマンドaction-if-givenを実行します。 どちらも指定されていなければaction-if-not-givenを実行します。 featureはパッケージの機能名です。 featureは英数字とハイフンの組み合わせでないといけません。

action-if-givenの中では、 オプションに`='に続き引数が指定されていたら、 shell変数enablevalに値が格納されています。 実際には、enablevalenable_featureと同じ値になっています (enable_featurefeature部分は、もとのfeatureの ハイフンを下線(`_')にしたもの)。 必要ならどちらを参照しても構いません。 help-stringAC_ARG_WITH(see section 9.1 Working With External Software)で使われる help-stringと同じです。

Macro: AC_ENABLE (feature, action-if-given [, action-if-not-given])
このマクロはobsoleteです。 AC_ARG_ENABLEからhelp-stringのサポートを外したようなものです。


9.3 Configuring Site Details

一部のソフトウェアパッケージは、インストールするサイト依存の情報を 必要とします。 例えば、ある種のサービスにはホスト名が必要です。 コンタクト先として会社名やemailアドレスを使うこともあります。 Metaconfigで生成された設定スクリプトは対話的にこのような情報を 問い合わせます。 Autoconfで生成された設定スクリプトは対話的ではないので、 Autoconfで生成された設定スクリプトではどうやればいいのだろう、と思うでしょう。

このようなサイト依存の設定情報は、プログラムが編集したものではなく、 ユーザだけによって編集されたファイルに格納されている必要があります。 ファイルを置く位置はprefix変数をもとにしたパス、または ユーザのホームディレクトリなどの標準的な場所にします。 ファイルを置く位置を環境変数で設定してもよいでしょう。 プログラムはコンパイル時でなく実行時に、そのファイルを調べます。 実行時の設定はユーザにとってより便利で、設定時に情報を取得するよりも設定 の過程がより単純です。データファイルを置く場所についてのより多くの情報の ために See section `Variables for Installation Directories' in GNU Coding Standardsを参照してください。


9.4 Transforming Program Names When Installing

Autoconfはプログラムをインストールするときにそれらの名前の変更をサポート します。これらの変換を使うには`configure.in'がマクロ AC_ARG_PROGRAMを呼ばなければなりません。

Macro: AC_ARG_PROGRAM
出力変数program_transform_nameの中にインストールされるプログラム の名前を変更するためのsedコマンドを置きます。

もし後述するオプションのいくつかがconfigureに与えられれば、プログ ラムの名前はそれに応じて変換されます。そうでなければ、もし AC_CANONICAL_SYSTEMが呼ばれるか、`--target'の値がホストタイ プ(`--host'で指定されるかconfig.subによってデフォルト設定さ れます) と違っていれば、ダッシュが後に続いたターゲットタイプ名を前置詞と して使います。そうでなければプログラム名は変換されません。

9.4.1 Transformation Options  configure options to transform names.
9.4.2 Transformation Examples  Sample uses of transforming names.
9.4.3 Transformation Rules  `Makefile' uses of transforming names.


9.4.1 Transformation Options

以下のコマンドラインオプションをconfigureに渡すことによって名前の 変換を指定することができます。

--program-prefix=prefix
(プログラムの)名前の前にprefixを付けます。

--program-suffix=suffix
(プログラムの)名前の後にsuffixを付けます。

--program-transform-name=expression
(プログラムの)名前に対してsedの置換演算expressionを行います。


9.4.2 Transformation Examples

これらの変換はクロスコンパイル開発環境の一部になり得るプログラムで役に立 ちます。例えば、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プ ログラムではないlesslesskeyを除いて、ソースツリーにある プログラム名のほとんどに`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することができます。


9.4.3 Transformation Rules

これは`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マニュアルには行わないことです。


9.5 Setting Site Defaults

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のような他の出力変数のためのデフォルト値を 設定する良い場所でもあります。あなたが普段、繰り返しコマンドラインで行っ ている何らかのノンデフォルト値を与えることを必要とするならば。もしあなた がprefixexec_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_'が付いたシェル変数を探します。

キャッシュファイルはサイトファイルの中で設定する変数を上書きしないように 注意しています。同様に、サイトファイルの中にあるコマンドラインオプション を上書きするべきではありません。あなたのコードは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" = ./config.cache; 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 January, 21 2003 using texi2html