これらのマクロは,“特定の”テストマクロによってカバーていない関数を見つ
けるために使用されます.関数が,デフォルトのCライブラリ以外のライブラリ
にある場合,最初にそれらのライブラリに対してAC_CHECK_LIB
を呼び出
してください.存在の確認だけでなく動作も調査したい場合,独自のテストを書
く必要があります(see Writing Tests).
Cの関数functionが利用可能な場合,シェルコマンド action-if-foundを,それ以外ではaction-if-not-foundを実行しま す.関数が利用可能な場合にシンボルを定義したいだけならば,代わりに
AC_CHECK_FUNCS
を使用してください.このマクロは, CのほうがC++より 標準化されているので,AC_LANG_CPLUSPLUS
が呼び出された場合でも,C にリンクされる関数を調査します.(言語の選択の調査ついての詳細は, see Language Choice.)
空白で区切られた引数のリストで与えられているそれぞれのfunctionに対 し,利用可能な場合は
HAVE_
functionを(全て大文字で)定義します. action-if-foundが与えられている場合,関数の一つが見つかったとき実 行する,追加のシェルコードになります.最初に一致したループでブレイクする ためには,‘break’を与えることで可能になります. action-if-not-foundが与えられている場合,それは関数が一つでも見つ からないときに実行されます.
Autoconfは,移植性について苦心してきた人々によって,何年もかけて形作られ てきた哲学に従います.特定のファイルの移植性の問題と,POSIX環 境にいるかのような問題とは別物です.関数によっては,無いものがあったり修 正不可能だったりするものもあり,パッケージではそれらを置き換える準備が必 要になります.
無かったり壊れたりしているfunctionの実装を置換するために,実行形式 に含める必要がある‘function.c’を指定します.
技術的には,それは‘function.$ac_objext’を,それがまだ無い場合 は出力変数
LIBOBJS
に追加し,‘function.c’に対しAC_LIBSOURCE
を呼び出します.LIBOBJS
は追跡不可能なので,直 接LIBOBJS
を変更すべきではありません.
プロジェクトをコンパイルするために必要になる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
を引数としてとります.
AC_LIBSOURCE
に似ていますが,カンマで分けられているM4リストに,一 つ以上のfilesを受け入れます.このため,上記の例は以下のように書き 換えられるでしょう.AC_LIBSOURCES([foo.c, bar.c]) AC_LIBOBJ($foo_or_bar)
AC_LIBOBJ
で置換するファイルがdirectoryで見つかるように,ソー スツリーのトップレベルから始まる相対パスを指定します.置換ディレクトリの デフォルトはトップレベルディレクトリの.で,最も一般的な値は libで,‘AC_CONFIG_LIBOBJ_DIR(lib)’で対応します.configureは以下の理由で,置換ディレクトリを知る必要がないかも しれません.(i)置換ファイルを使用する調査もあります.(ii)置換ヘッダのリ ンクを導入することで,壊れたシステムヘッダをバイパスするマクロもあります. 等々.
AC_LIBOBJ
が無い場合,単に関数の存在を調査し,置換するかどうか尋ね
るだけのことは一般的です.以下のマクロは,便利で手短なものです.