Previous: Particular Headers, Up: Header Files


5.6.3 一般的なヘッダの調査

これらのマクロは,“特定の”テストマクロでカバーされていない,システムヘッ ダファイルを見つけるために使用されます.その存在を見つけるだけでなく,ヘッ ダの内容を調査する必要がある場合,そのために独自のテストを書く必要があり ます(see Writing Tests).

— Macro: AC_CHECK_HEADER (header-file, [action-if-found], [action-if-not-found], [includes = ‘default-includes])

システムヘッダファイルheader-fileがコンパイル可能な場合,シェルコ マンドaction-if-foundを,それ以外ではaction-if-not-found を 実行します.ヘッダファイルが利用可能な場合で,シンボルを定義したいだけの 場合は,代わりに,AC_CHECK_HEADERSを使用を考えてみてください.

古いバージョンのAutoconfとの互換性の問題は,以下を読んでください.

— Macro: AC_CHECK_HEADERS (header-file..., [action-if-found], [action-if-not-found], [includes = ‘default-includes])

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

古いバージョンのAutoconfとの互換性の問題は,以下を読んでください.

以前のバージョンのAutoconfは,ヘッダがプリプロセッサに適合しているかどう かを,単純に調査していました.古いテストは,代表的な使用に対して不適切で あるため変更されました.ヘッダは通常コンパイルで使用され,プリプロセスで は滅多に使用されませんし,古い動作では,コンパイル時にだめになるヘッダを 受け入れることもありました.ヘッダがプリプロセス可能かどうかを調査する必 要がある場合,AC_PREPROC_IFELSEを使用することが可能です (see Running the Preprocessor).

このテストの耐性を高める手法は,header-fileの前にインクルードする 必要があるヘッダが,includesにあることも要求します(see Default Includes).foo.hが存在する場合,その前でインクルードされる必要が あるbar.hを探す場合,以下の手法を提案します.

AC_CHECK_HEADERS([foo.h])
AC_CHECK_HEADERS([bar.h], [], [],
[#if HAVE_FOO_H
# include <foo.h>
# endif
])