Next: Generic Programs, Up: Alternative Programs
以下のマクロは,特定のプログラムを調査します — それは存在するかどうか, そして場合によっては特定の機能をサポートするかどうかです.
gawk
,mawk
,nawk
,そしてawk
を,この順番で調 査し,最初に見つかったものに出力変数AWK
を設定します.最良の実装と 報告されているので,最初にgawk
を調査します.
現在の
PATH
に,BSD互換のinstall
プログラムが見つかっ た場合,出力変数INSTALL
をそのパスに設定します.それ以外では,INSTALL
を‘dir/install-sh -c’に設定し,AC_CONFIG_AUX_DIR
で指定されたディレクトリ(またはデフォルトディレ クトリ)を,dirを決定するために調査します(see Output).また,変 数INSTALL_PROGRAM
とINSTALL_SCRIPT
を‘${INSTALL}’ に, ‘${INSTALL}’とINSTALL_DATA
を‘${INSTALL}-m 644’に設 定します.このマクロは,動作しないことが知られている
install
の様々な実例をふ るい落とします.それは速度のため,シェルスクリプトよりCプログラムを見付 けようとします.install-shの代わりに,install.shを使用する ことも可能ですが,makeプログラムには, Makefile が無い 場合,それからinstallを作成するルールを持っているものもあるので, その名前は時代遅れです.使用可能なinstall-shのコピーは,Autoconfでインストールされます.
AC_PROG_INSTALL
を使用する場合,配布物にinstall-shか install.shを含める必要があり,そうしない場合,configure は見つからない旨,エラーメッセージを出力します — たとえシステムに良いinstall
があってもそうなります.この調査は,そのファイルをたまたま 入れ忘れることを阻止する安全対策で,それはBSD互換のinstall
プログラムが無いシステムでパッケージをインストールすること を妨げます.標準的な
install
プログラムには見当たらない特徴があるために,独自の インストールプログラムを使用する必要がある場合,AC_PROG_INSTALL
を 使用する理由はありません.Makefile.inファイルにプログラムのファイ ル名を書き込んでください.
flex
が見つかった場合,ライブラリが標準的な場所にあれば,出力変数LEX
を‘flex’に,LEXLIB
を‘-lfl’に設定します.それ 以外の場合,LEX
を‘lex’に,LEXLIB
を‘-ll’に設定し ます.
yytext
が‘char []’ではなく‘char *’の場合,YYTEXT_POINTER
を定義します.また,出力変数LEX_OUTPUT_ROOT
をlexerが生成するファイル名のベースに設定します.通常はlex.yyです が異なることもあります.これらは,結果としてlex
とflex
のど ちらが使用されているかに依存して変化します.普通のLexとそれが生成するCソースを使用するより,移植性の面でより好ましい ので,ソースでFlexを使用することを推奨します.しかし,移植性を確実にする ために,関数
yywrap
を提供する,または,それを使用しない場合(例えば, スキャナに‘#include’のような機能が無い場合),単純にスキャナソースで ‘%noyywrap’文を含める必要があります.一旦このようにすることで,スキャ ナは(あなたが移植性の無い構成物を使用しない限り) 移植性があり,ラ イブラリに依存しません.この場合,そしてこの場合のみ,以下のような Autoconfの断片を使用することを提案します.AC_PROG_LEX if test "$LEX" != flex; then LEX="$SHELL $missing_dir/missing flex" AC_SUBST(LEX_OUTPUT_ROOT, lex.yy) AC_SUBST(LEXLIB, '') fiシェルスクリプトmissingは,Automakeの配布物で見つかるはずです.
下位互換を確実にするため,Automakeの
AM_PROG_LEX
は,(間接的に)この マクロを二回呼び出し,不快な“AC_PROG_LEX
invoked multiple times” で始まる警告を生じます.将来のバージョンのAutomakeではこの症状は 修正されるでしょう.それまで,このメッセージを無視してください.
現在のファイルシステムで,‘ln -s’が動作する(オペレーティングシステ ムとファイルシステムがシンボリックリンクをサポートしている)場合,出力変 数
LN_S
を‘ln -s’に設定します.それ以外の場合は,‘ln’が動 作する場合は,LN_S
を‘ln’に設定し,そうでもなければ‘cp -p’に設定します.リンクをカレントディレクトリ以外のディレクトリに作成する場合,その方法は, ‘ln’と‘ln -s’のどちらが使用されるかに依存します. ‘$(LN_S)’を使用して安全にリンクを作成するため,使用する書式と正しい 引数を理解するか,リンクが作成されるディレクトリで
ln
を常に呼び出 すか,どちらかにしてください.言い替えると,以下のものは動作しません.
$(LN_S) foo /x/barその代わりに,以下のようにします.
(cd /x && $(LN_S) foo bar)