Previous: Particular Functions, Up: Library Functions


5.5.3 一般の関数の調査

これらのマクロは,“特定の”テストマクロによってカバーていない関数を見つ けるために使用されます.関数が,デフォルトのCライブラリ以外のライブラリ にある場合,最初にそれらのライブラリに対してAC_CHECK_LIBを呼び出 してください.存在の確認だけでなく動作も調査したい場合,独自のテストを書 く必要があります(see Writing Tests).

— Macro: AC_CHECK_FUNC (function, [action-if-found], [action-if-not-found])

Cの関数functionが利用可能な場合,シェルコマンド action-if-foundを,それ以外ではaction-if-not-foundを実行しま す.関数が利用可能な場合にシンボルを定義したいだけならば,代わりに AC_CHECK_FUNCSを使用してください.このマクロは, CのほうがC++より 標準化されているので,AC_LANG_CPLUSPLUSが呼び出された場合でも,C にリンクされる関数を調査します.(言語の選択の調査ついての詳細は, see Language Choice.)

— Macro: AC_CHECK_FUNCS (function..., [action-if-found], [action-if-not-found])

空白で区切られた引数のリストで与えられているそれぞれのfunctionに対 し,利用可能な場合はHAVE_functionを(全て大文字で)定義します. action-if-foundが与えられている場合,関数の一つが見つかったとき実 行する,追加のシェルコードになります.最初に一致したループでブレイクする ためには,‘break’を与えることで可能になります. action-if-not-foundが与えられている場合,それは関数が一つでも見つ からないときに実行されます.


Autoconfは,移植性について苦心してきた人々によって,何年もかけて形作られ てきた哲学に従います.特定のファイルの移植性の問題と,POSIX環 境にいるかのような問題とは別物です.関数によっては,無いものがあったり修 正不可能だったりするものもあり,パッケージではそれらを置き換える準備が必 要になります.
— Macro: AC_LIBOBJ (function)

無かったり壊れたりしているfunctionの実装を置換するために,実行形式 に含める必要がある‘function.c’を指定します.

技術的には,それは‘function.$ac_objext’を,それがまだ無い場合 は出力変数LIBOBJSに追加し,‘function.c’に対し AC_LIBSOURCEを呼び出します.LIBOBJSは追跡不可能なので,直 接LIBOBJSを変更すべきではありません.

— Macro: AC_LIBSOURCE (file)

プロジェクトをコンパイルするために必要になるfileを指定します. configure.acで必要になるファイルを知る必要がある場合, AC_LIBSOURCEを追跡調査してください.fileはリテラルにする必 要があります.

このマクロは,自動的にAC_LIBOBJから呼び出されますが,シェル変数に AC_LIBOBJを渡す場合,明示的に指定する必要があります.この場合,シェ ル変数は静的な追跡調査ができないので,AC_LIBOBJを生成するために必 要になりそうなあらゆるシェル変数を,AC_LIBSOURCEに渡す必要があり ます.例えば,"foo"または"bar"を保持している AC_LIBOBJに変数$foo_or_barを渡したい場合は,以下のようにす べきでしょう.

          AC_LIBSOURCE(foo.c)
          AC_LIBSOURCE(bar.c)
          AC_LIBOBJ($foo_or_bar)

しかし,これを避ける一般的な方法もあり,それには単純にリテラルの引数で AC_LIBOBJを呼び出すことを推奨します.

このマクロは,時代遅れのAC_LIBOBJ_DECLを若干異なる意味で置換する ことに注意してください.古いマクロは,ファイル名ではなく関数名,例えば fooを引数としてとります.

— Macro: AC_LIBSOURCES (files)

AC_LIBSOURCEに似ていますが,カンマで分けられているM4リストに,一 つ以上のfilesを受け入れます.このため,上記の例は以下のように書き 換えられるでしょう.

          AC_LIBSOURCES([foo.c, bar.c])
          AC_LIBOBJ($foo_or_bar)
— Macro: AC_CONFIG_LIBOBJ_DIR (directory)

AC_LIBOBJで置換するファイルがdirectoryで見つかるように,ソー スツリーのトップレベルから始まる相対パスを指定します.置換ディレクトリの デフォルトはトップレベルディレクトリの.で,最も一般的な値は libで,‘AC_CONFIG_LIBOBJ_DIR(lib)’で対応します.

configureは以下の理由で,置換ディレクトリを知る必要がないかも しれません.(i)置換ファイルを使用する調査もあります.(ii)置換ヘッダのリ ンクを導入することで,壊れたシステムヘッダをバイパスするマクロもあります. 等々.


AC_LIBOBJが無い場合,単に関数の存在を調査し,置換するかどうか尋ね るだけのことは一般的です.以下のマクロは,便利で手短なものです.
— Macro: AC_REPLACE_FUNCS (function...)

AC_CHECK_FUNCSに似ていますが,action-if-not-found として ‘AC_LIBOBJ(function)’を使用します.‘#if !HAVE_function’にプロトタイプを含めることで,置換する関数を宣言す ることが可能です.システムに関数が存在する場合,おそらくインクルードして いるヘッダファイルで宣言されているので,宣言が衝突しないように,それを再 定義すべきではありません.