次: , 上: Alternative Programs


5.2.1 特定のプログラムの調査

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

— マクロ: AC_PROG_AWK

gawkmawknawk,そしてawkを,この順番で調 査し,最初に見つかったものに出力変数AWKを設定します.最良の実装と 報告されているので,最初にgawkを調査します.

— マクロ: AC_PROG_EGREP

grep -Eegrepをこの順番で調査し,最初に見つかったもので出 力変数EGREPを設定します.

— マクロ: AC_PROG_FGREP

grep -Ffgrepをこの順番で調査し,最初に見つかったもので出 力変数FGREPを設定します.

— マクロ: AC_PROG_INSTALL

現在のPATHに,BSD互換のinstallプログラムが見つかっ た場合,出力変数INSTALLをそのパスに設定します.それ以外では, INSTALLを`dir/install-sh -c'に設定し, AC_CONFIG_AUX_DIRで指定されたディレクトリ(またはデフォルトディレ クトリ)を,dirを決定するために調査します(see Output).また,変 数INSTALL_PROGRAMINSTALL_SCRIPTを`${INSTALL}' に, `${INSTALL}'とINSTALL_DATAを`${INSTALL}-m 644'に設 定します.

このマクロは,動作しないことが知られているinstallの様々な実例をふ るい落とします.それは速度のため,シェルスクリプトよりCプログラムを見付 けようとします.install-shの代わりに,install.shを使用する ことも可能ですが,makeプログラムには, Makefile が無い 場合,それからinstallを作成するルールを持っているものもあるので, その名前は時代遅れです.

使用可能なinstall-shのコピーは,Autoconfでインストールされます. AC_PROG_INSTALLを使用する場合,配布物にinstall-shinstall.shを含める必要があり,そうしない場合,configure は見つからない旨,エラーメッセージを出力します — たとえシステムに良い installがあってもそうなります.この調査は,そのファイルをたまたま 入れ忘れることを阻止する安全対策で,それはBSD互換の installプログラムが無いシステムでパッケージをインストールすること を妨げます.

標準的なinstallプログラムには見当たらない特徴があるために,独自の インストールプログラムを使用する必要がある場合,AC_PROG_INSTALLを 使用する理由はありません.Makefile.inファイルにプログラムのファイ ル名を書き込んでください.

— マクロ: AC_PROG_LEX

flexが見つかった場合,ライブラリが標準的な場所にあれば,出力変数 LEXを`flex'に,LEXLIBを`-lfl'に設定します.それ 以外の場合,LEXを`lex'に,LEXLIBを`-ll'に設定し ます.

yytextが`char []'ではなく`char *'の場合, YYTEXT_POINTERを定義します.また,出力変数LEX_OUTPUT_ROOT をlexerが生成するファイル名のベースに設定します.通常はlex.yyです が異なることもあります.これらは,結果としてlexflexのど ちらが使用されているかに依存して変化します.

普通の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ではこの症状は 修正されるでしょう.それまで,このメッセージを無視してください.

— マクロ: AC_PROG_LN_S

現在のファイルシステムで,`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)
     
— マクロ: AC_PROG_RANLIB

ranlibが見つかった場合,出力変数RANLIBを`ranlib'に設 定し,それ以外では,`:'(何もしません)に設定します.

— マクロ: AC_PROG_YACC

bisonが見つかった場合,出力変数YACCを`bison -y'に設定 します.それ以外で,byaccが見つかる場合,YACCを `byacc'に設定します.それ以外では,YACCを`yacc'に設定し ます.