様々な理由で(通常適切に引用婦で囲むことに失敗していて以前の配布物が拡張 できないなどの理由です),いくつかのマクロがAutoconfで時代遅れになってい ます.それらはサポートされていますが,使用を止めるようお願いします.それ らの使用は避けた方が良いでしょう.
Autoconfのバージョン1からバージョン2へ移行している間,より一般的でより記 述的な命名法を使用するために,ほとんどのマクロの名前が変更されましたが, そのシグニチャは変更されていません.以下で,これらのマクロの古い名前と新 しい名前の対応付けがあるものは,署名と記述に対する新しいマクロの定義へ参 照するよう読者を招待します.
システムタイプを決定し,出力変数を標準的なシステムタイプ名に設定します. このマクロが設定する変数の詳細はSee Canonicalizing.
ユーザは必要なものに依存して,
AC_CANONICAL_BUILD
またはAC_CANONICAL_HOST
のいずれか,またはAC_CANONICAL_TARGET
を使 用することを推奨します.AC_CANONICAL_TARGET
を実行することで,必ず それ以外の二つのマクロが実行されます.
2.13までのAutoconfでは,このバージョンの
AC_CHECK_TYPE
を提供するた めに使用されていましたが,問題があり反対されていました.第一に,それはCHECK
一族のメンバーですが,単一のファミリーに過ぎず,調査以上のこ とを行なっていました.次に,足りない型はtypedef
されず,それらは#define
されるので,ポインタ型の場合は互換性がなくなってしまうはず です.この
AC_CHECK_TYPE
の使用は時代遅れで推奨できません.現在のマクロの 記述は,Generic Typesを参照してください.型typeが定義されていない場合,それはC(またはC++)の組み込みの型 defaultに定義されます.例えば,‘short’や‘unsigned’です.
このマクロは以下と等価です.
AC_CHECK_TYPE([type],, [AC_DEFINE_UNQUOTED([type], [default], [Define to `default' if <sys/types.h> does not define.])])下位互換性のため,二つのバージョンの
AC_CHECK_TYPE
が実装されていて, 単純な発見的手法で選択されます.
- 引数が三つまたは四つある場合,現在のバージョンが使用されます.
- 二番目の引数にCやC++の型がある場合,時代遅れのバージョンが使用されます. 引数がCやC++に組み込まれている型,または‘_t’で終るC識別子で, さらに一つの‘[(* ’が続き,その後にゼロ以上の‘[]()* _a-zA-Z0-9’ 以外の文字列が続く場合はこうなります.
- 二番目の引数が有効なCとC++のアルファベットで綴られている型の場合,ユーザ は警告され,現在のバージョンが使用されます.
- それ以外では,現在のバージョンが使用されます.
有効な組み込みの型を使用する,または,同じ現在のコード(上記参照)を使用す る,もしくはそれより良いものとして,
AC_CHECK_TYPES
とともに使用す ることをお勧めします.#if !HAVE_LOFF_T typedef loff_t off_t; #endif
これは,
AC_TRY_COMPILE
の時代遅れのバージョンで,それ自身もAC_COMPILE_IFELSE
で置換され(see Running the Compiler),それは echo-textが空ではない場合,‘checking for echo-text’ を 標準出力の最初に追加出力します.メッセージを出力するためには,代わりにAC_MSG_CHECKING
とAC_MSG_RESULT
を使用してください (see Printing Messages).
Cygwin環境を調査し,その状況ではシェル変数
CYGWIN
を‘yes’に設 定します.このマクロを使用せず,権威のあるホストの調査手法AC_CANONICAL_HOST
が使用されています.実際問題として,このマクロは 以下のように定義されています.AC_REQUIRE([AC_CANONICAL_HOST])[]dnl case $host_os in *cygwin* ) CYGWIN=yes;; * ) CYGWIN=no;; esac変数
CYGWIN
には,CygWin32を実行しているときは非常に特殊な意味があ ることに注意し,変更すべきではありません.それはこのマクロを使用しないも う一つの理由です.
AC_CHECK_DECLS([sys_siglist],,, [#include <signal.h> /* NetBSD declares sys_siglist in unistd.h. */ #if HAVE_UNISTD_H # include <unistd.h> #endif ])
AC_FUNC_CLOSEDIR_VOID
とAC_HEADER_DIRENT
の呼び出しに似てい ますが,ヘッダファイルが見つかったことを示すため,異なるCプリプロセッサ マクロの組を定義します.
ヘッダ 古いシンボル 新しいシンボル dirent.h DIRENT
HAVE_DIRENT_H
sys/ndir.h SYSNDIR
HAVE_SYS_NDIR_H
sys/dir.h SYSDIR
HAVE_SYS_DIR_H
ndir.h NDIR
HAVE_NDIR_H
DYNIX/ptxの場合,出力変数
LIBS
に-lseq を追加します.この マクロは以下のように定義されるように使用されていました.AC_CHECK_LIB(seq, getmntent, LIBS="-lseq $LIBS")現在では,
AC_FUNC_GETMNTENT
で行ないます.
コンパイラの出力を元に出力変数
EXEEXT
を定義し,それは現在では自動 的に行なわれます.通常,Unixでは空の文字列で,Win32やOS/2では‘.exe’ に設定します.
wait3
が見つかり,第三引数(‘struct rusage *’)の内容が満たされ ている場合,HP-UXは違いますが,HAVE_WAIT3
を定義します.現在では,
wait3
はOpen Groupの標準から削除されていて,次のリビジョ ンのPOSIXでは無くなるので,移植性の高いプログラムではwait3
ではなくwaitpid
を使用すべきです.
このマクロは,function引数を
main
にしたAC_CHECK_LIB
の呼び出しと同じです.さらに,libraryは,‘foo’, -lfoo,または‘libfoo.a’のいずれで書くことも可能です.これ ら全ての状況で,コンパイラに-lfooが渡されます.しかし, libraryをシェル変数することは不可能です.リテラル名にする必要があ ります.
以前の
AC_INIT
は単一の引数のみで使用され,それは以下と同じです.AC_INIT AC_CONFIG_SRCDIR(unique-file-in-source-dir)
AIX (Silicon Graphics unix)の場合,出力変数
LIBS
に -lsunを追加します.getmntent
を取得するためにそれを使用し ている場合,その代わりにAC_FUNC_GETMNTENT
を使用してください.NIS バージョンのパスワードとグループ関数のためにそれを使用している場合. ‘AC_CHECK_LIB(sun, getpwnam)’を使用してください.Autoconf 2.13まで は,以下のように使用されていました.AC_CHECK_LIB(sun, getmntent, LIBS="-lsun $LIBS")現在ではそれは以下のように定義されます.
AC_FUNC_GETMNTENT AC_CHECK_LIB(sun, getpwnam)
AC_LANG_SAVE
で設定されるように,スタックのトップに保存される languageを選択し,スタックから削除し,AC_LANG(
language)
を呼び出します.
これは,
AC_CONFIG_LINKS
の時代遅れのバージョンです.以下を更新した バージョンにします.AC_LINK_FILES(config/$machine.h config/$obj_format.h, host.h object.h)それは,以下のようになります.
AC_CONFIG_LINKS(host.h:config/$machine.h object.h:config/$obj_format.h)
Cの型
long int
が64ビット幅の場合,LONG_64_BITS
を定義します. その代わりに,一般的なマクロ‘AC_CHECK_SIZEOF([long int])’を使用して ください.
mem
関数がmemory.hで定義されている場合にNEED_MEMORY_H
を定義するために使用されます.現在は, ‘AC_CHECK_HEADERS(memory.h)’と同じです.コードをNEED_MEMORY_H
ではなくHAVE_MEMORY_H
に依存するように調整して ください.See Standard Symbols.
.cファイルが除外された後,コンパイラの出力に基づいて,出力変数
OBJEXT
を定義します.通常,Unixでは‘o’で,Win32では ‘obj’に設定します.現在はコンパイラの調査マクロがこれを自動的に処理 します.
M4が標準エラー出力に,this-macro-nameが時代遅れだというメッセージ をそれが呼び出されているファイルと行とともに出力します. this-macro-nameは,
AC_OBSOLETE
が呼び出しているマクロ名にす べきです.suggestionが与えられている場合,それは警告メッセージの終 りに出力されます.例えば,this-macro-nameの代わりに使用するものを 提案することが可能になります.例えば以下のようにします.
AC_OBSOLETE([$0], [; use AC_CHECK_HEADERS(unistd.h) instead])dnlユーザに対するより良いサービスとなるので,代わりに
AU_DEFUN
を使用 することを推奨します.
引数を用いた
AC_OUTPUT
の使用は反対されます.これは以下と同じものの 時代遅れのインターフェースです.AC_CONFIG_FILES(file...) AC_CONFIG_COMMANDS([default], extra-cmds, init-cmds) AC_OUTPUT
config.statusの終りに実行する追加のシェルコマンドと, configureで変数を初期化するためのシェルコマンドをを指定します. このマクロは複数回呼び出し可能です.それは時代遅れで,
AC_CONFIG_COMMANDS
で置換されました.以下は現実的ではない例です.
fubar=27 AC_OUTPUT_COMMANDS([echo this is extra $fubar, and so on.], [fubar=$fubar]) AC_OUTPUT_COMMANDS([echo this is another, extra, bit], [echo init bit])
AC_CONFIG_COMMANDS
が追加のキーを要求する事実以外,重要な差はAC_OUTPUT_COMMANDS
が引数を二回引用符で囲んでいますがAC_CONFIG_COMMANDS
はそうではないということです.これは,AC_CONFIG_COMMANDS
では引数を用いてマクロを安全に呼び出すことが可 能だということを意味します.AC_CONFIG_COMMANDS(foo, [my_FOO()])反対に,1レベルの引用符が
AC_OUTPUT_COMMANDS
でのリテラル文字列に対 して十分なところでは,AC_CONFIG_COMMANDS
が二回必要になります.以 下の行は等価です.AC_OUTPUT_COMMANDS([echo "Square brackets: []"]) AC_CONFIG_COMMANDS([default], [[echo "Square brackets: []"]])
SCO UNIXの場合,出力変数
LIBS
に-lintlを加えます.このマク ロは以下を使用していました.AC_CHECK_LIB(intl, strftime, LIBS="-lintl $LIBS")現在は,代わりに
AC_FUNC_STRFTIME
を呼び出します.
システムが自動的にシグナルで中断されたシステムコールを再スタートする場合,
HAVE_RESTARTABLE_SYSCALLS
を定義します.このマクロは,システムが一 般的に再スタートするかどうかを調査しません – それは,(sigaction
ではなく)signal
でインストールされているシグナルハンドラが再スター トするためのシステムコールを呼び出すかどうかをテストします.ハンドラの無 いシグナルで中断されたときにシステムコールが再スタートされる場合,テスト しません.今日の移植性の高いプログラムでは,システムコールを再スタートしたい場合,
SA_RESTART
を用いてsigaction
を使用すべきです.現在では,シ ステムコールが再スタート可能かどうかは,コンフィグレーション時の問題では なく動的な問題なので,HAVE_RESTARTABLE_SYSCALLS
に依存すべきではあ りません.
‘AC_COMPILE_IFELSE([AC_LANG_SOURCE([[includes]], [[function-body]])], [action-if-true], [action-if-false])’と同じです(see Running the Compiler).
このマクロは,includesとfunction-bodyの両方を二重に引用符で 囲みます.
CとC++に対して,includesはfunction-bodyにあるコードが必要と するすべての
#include
文です(現在選択されている言語がFortranや Fortran 77 の場合,includesは無視されます).コンパイラやコンパイル フラグは,現在の言語(see Language Choice)によって決定されます.
‘AC_PREPROC_IFELSE([AC_LANG_SOURCE([[input]])], [action-if-true], [action-if-false])’と同じです (see Running the Preprocessor).
このマクロはinputを二重に引用符で囲みます.
‘AC_LINK_IFELSE([AC_LANG_SOURCE([[includes]], [[function-body]])], [action-if-true], [action-if-false])’と同じです(see Running the Compiler).
このマクロは,includesとfunction-bodyの両方を二重に引用符で 囲みます.
現在の言語に依存して(see Language Choice),function-bodyの中身 にある関数をコンパイルしリンクすることが可能かどうかを調べるテストプログ ラムを作成します.ファイルのコンパイルとリンクが成功する場合,シェルコマ ンドaction-if-foundを実行し,それ以外ではaction-if-not-found を実行します.
このマクロは,includesとfunction-bodyの両方を二重に引用符で 囲みます.
CとC++に対して,includesはfunction-bodyにあるコードが必要と するすべての
#include
文です(現在選択されている言語がFortran 77 の 場合,includesは無視されます).コンパイラとコンパイルフラグは現在 の言語(see Language Choice)で決定され,リンクではLDFLAGS
とLIBS
が追加で使用されます.
このマクロは,‘AC_LINK_IFELSE([AC_LANG_CALL([[includes]], [[function-body]])], [action-if-true], [action-if-false])’と同じです.
‘AC_RUN_IFELSE([AC_LANG_SOURCE([[program]], [action-if-true], [action-if-false], [action-if-cross-compiling])’と同じです(see Run Time).
BSD文字列関数がstrings.hで定義されている場合,
USG
を定義します.これからはUSG
ではなくHAVE_STRING_H
に依存するようにすべきです.See Standard Symbols.
キャッシュファイルが現在のホスト,ターゲット,そしてビルドシステムのタイ プで矛盾がある場合,cmdを実行したりデフォルトのエラーメッセージを 出力したりするために使用されていました.これは現在デフォルトで処理されま す.
このマクロは,Xenixの場合に出力変数
LIBS
に-lxを追加するた めに使用されていました.また,dirent.hが調査され,LIBS
を -ldirに追加していました.現在では,AC_HEADER_DIRENT
の代 わりの別名となっていることも滅多に無く,依存すべきではありませんが, xenixで実行されているかどうかを検出するコートが追加されています.AC_MSG_CHECKING([for Xenix]) AC_EGREP_CPP(yes, [#if defined M_XENIX && !defined M_UNIX yes #endif], [AC_MSG_RESULT([yes]); XENIX=yes], [AC_MSG_RESULT([no]); XENIX=])