[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
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. |
ソフトウェアパッケージが他のソフトウェアパッケージを必要としたり、
あるいは特定の場合だけ利用したりすることがあります。
ユーザは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'を書くあなたまかせです。
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 |
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'の作者の自由です。
configure
の引数に
`--enable-feature'または`--disable-feature'の
オプションを指定した場合、
shellコマンドaction-if-givenを実行します。
どちらも指定されていなければaction-if-not-givenを実行します。
featureはパッケージの機能名です。
featureは英数字とハイフンの組み合わせでないといけません。
action-if-givenの中では、
オプションに`='に続き引数が指定されていたら、
shell変数enableval
に値が格納されています。
実際には、enableval
とenable_feature
と同じ値になっています
(enable_feature
のfeature部分は、もとのfeatureの
ハイフンを下線(`_')にしたもの)。
必要ならどちらを参照しても構いません。
help-stringはAC_ARG_WITH
(see section 9.1 Working With External Software)で使われる
help-stringと同じです。
AC_ARG_ENABLE
からhelp-stringのサポートを外したようなものです。
一部のソフトウェアパッケージは、インストールするサイト依存の情報を 必要とします。 例えば、ある種のサービスにはホスト名が必要です。 コンタクト先として会社名やemailアドレスを使うこともあります。 Metaconfigで生成された設定スクリプトは対話的にこのような情報を 問い合わせます。 Autoconfで生成された設定スクリプトは対話的ではないので、 Autoconfで生成された設定スクリプトではどうやればいいのだろう、と思うでしょう。
このようなサイト依存の設定情報は、プログラムが編集したものではなく、
ユーザだけによって編集されたファイルに格納されている必要があります。
ファイルを置く位置はprefix
変数をもとにしたパス、または
ユーザのホームディレクトリなどの標準的な場所にします。
ファイルを置く位置を環境変数で設定してもよいでしょう。
プログラムはコンパイル時でなく実行時に、そのファイルを調べます。
実行時の設定はユーザにとってより便利で、設定時に情報を取得するよりも設定
の過程がより単純です。データファイルを置く場所についてのより多くの情報の
ために See section `Variables for Installation Directories' in GNU Coding Standardsを参照してください。
Autoconfはプログラムをインストールするときにそれらの名前の変更をサポート
します。これらの変換を使うには`configure.in'がマクロ
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. |
以下のコマンドラインオプションを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 |
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |