以下のマクロは,特定のプログラムを調査します — それは存在するかどうか, そして場合によっては特定の機能をサポートするかどうかです.
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_LEXinvoked 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)