Next: , Previous: autoupdate Invocation, Up: Obsolete Constructs


15.4 時代遅れのマクロ

様々な理由で(通常適切に引用婦で囲むことに失敗していて以前の配布物が拡張 できないなどの理由です),いくつかのマクロがAutoconfで時代遅れになってい ます.それらはサポートされていますが,使用を止めるようお願いします.それ らの使用は避けた方が良いでしょう.

Autoconfのバージョン1からバージョン2へ移行している間,より一般的でより記 述的な命名法を使用するために,ほとんどのマクロの名前が変更されましたが, そのシグニチャは変更されていません.以下で,これらのマクロの古い名前と新 しい名前の対応付けがあるものは,署名と記述に対する新しいマクロの定義へ参 照するよう読者を招待します.

— Macro: AC_ALLOCA

AC_FUNC_ALLOCA

— Macro: AC_ARG_ARRAY

有用性の制限のため削除.

— Macro: AC_C_CROSS

このマクロは時代遅れです.何もしません.

— Macro: AC_CANONICAL_SYSTEM

システムタイプを決定し,出力変数を標準的なシステムタイプ名に設定します. このマクロが設定する変数の詳細はSee Canonicalizing.

ユーザは必要なものに依存して,AC_CANONICAL_BUILDまたは AC_CANONICAL_HOSTのいずれか,またはAC_CANONICAL_TARGETを使 用することを推奨します.AC_CANONICAL_TARGETを実行することで,必ず それ以外の二つのマクロが実行されます.

— Macro: AC_CHAR_UNSIGNED

AC_C_CHAR_UNSIGNED

— Macro: AC_CHECK_TYPE (type, default)

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が実装されていて, 単純な発見的手法で選択されます.

  1. 引数が三つまたは四つある場合,現在のバージョンが使用されます.
  2. 二番目の引数にCやC++の型がある場合,時代遅れのバージョンが使用されます. 引数がCやC++に組み込まれている型,または‘_t’で終るC識別子で, さらに一つの‘[(* ’が続き,その後にゼロ以上の‘[]()* _a-zA-Z0-9’ 以外の文字列が続く場合はこうなります.
  3. 二番目の引数が有効なCとC++のアルファベットで綴られている型の場合,ユーザ は警告され,現在のバージョンが使用されます.
  4. それ以外では,現在のバージョンが使用されます.

有効な組み込みの型を使用する,または,同じ現在のコード(上記参照)を使用す る,もしくはそれより良いものとして,AC_CHECK_TYPESとともに使用す ることをお勧めします.

          #if !HAVE_LOFF_T
          typedef loff_t off_t;
          #endif
— Macro: AC_CHECKING (feature-description)

AC_MSG_NOTICE([checking feature-description...]’と同じで す.

— Macro: AC_COMPILE_CHECK (echo-text, includes, function-body, action-if-found, [action-if-not-found])

これは,AC_TRY_COMPILEの時代遅れのバージョンで,それ自身も AC_COMPILE_IFELSEで置換され(see Running the Compiler),それは echo-textが空ではない場合,‘checking for echo-text’ を 標準出力の最初に追加出力します.メッセージを出力するためには,代わりに AC_MSG_CHECKINGAC_MSG_RESULTを使用してください (see Printing Messages).

— Macro: AC_CONST

AC_C_CONST

— Macro: AC_CROSS_CHECK

AC_C_CROSSと同じで,さらにそれも時代遅れになっていて,何もしませ ん:-)

— Macro: AC_CYGWIN

Cygwin環境を調査し,その状況ではシェル変数CYGWINを‘yes’に設 定します.このマクロを使用せず,権威のあるホストの調査手法 AC_CANONICAL_HOSTが使用されています.実際問題として,このマクロは 以下のように定義されています.

          AC_REQUIRE([AC_CANONICAL_HOST])[]dnl
          case $host_os in
            *cygwin* ) CYGWIN=yes;;
                   * ) CYGWIN=no;;
          esac

変数CYGWINには,CygWin32を実行しているときは非常に特殊な意味があ ることに注意し,変更すべきではありません.それはこのマクロを使用しないも う一つの理由です.

— Macro: AC_DECL_SYS_SIGLIST

以下と同じです.

          AC_CHECK_DECLS([sys_siglist],,,
          [#include <signal.h>
          /* NetBSD declares sys_siglist in unistd.h.  */
          #if HAVE_UNISTD_H
          # include <unistd.h>
          #endif
          ])
— Macro: AC_DECL_YYTEXT

何もせず,現在はAC_PROG_LEXに統合されています.

— Macro: AC_DIR_HEADER

AC_FUNC_CLOSEDIR_VOIDAC_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

— Macro: AC_DYNIX_SEQ

DYNIX/ptxの場合,出力変数LIBS-lseq を追加します.この マクロは以下のように定義されるように使用されていました.

          AC_CHECK_LIB(seq, getmntent, LIBS="-lseq $LIBS")

現在では,AC_FUNC_GETMNTENTで行ないます.

— Macro: AC_EXEEXT

コンパイラの出力を元に出力変数EXEEXTを定義し,それは現在では自動 的に行なわれます.通常,Unixでは空の文字列で,Win32やOS/2では‘.exe’ に設定します.

— Macro: AC_EMXOS2

AC_CYGWINに似ていますが,OS/2のEMX環境変数を調査しEMXOS2 を設定します.

— Macro: AC_ERROR

AC_MSG_ERROR

— Macro: AC_FIND_X

AC_PATH_X

— Macro: AC_FIND_XTRA

AC_PATH_XTRA

— Macro: AC_FUNC_CHECK

AC_CHECK_FUNC

— Macro: AC_FUNC_WAIT3

wait3が見つかり,第三引数(‘struct rusage *’)の内容が満たされ ている場合,HP-UXは違いますが,HAVE_WAIT3を定義します.

現在では,wait3はOpen Groupの標準から削除されていて,次のリビジョ ンのPOSIXでは無くなるので,移植性の高いプログラムでは wait3ではなくwaitpidを使用すべきです.

— Macro: AC_GCC_TRADITIONAL

AC_PROG_GCC_TRADITIONAL

— Macro: AC_GETGROUPS_T

AC_TYPE_GETGROUPS

— Macro: AC_GETLOADAVG

AC_FUNC_GETLOADAVG

— Macro: AC_HAVE_FUNCS

AC_CHECK_FUNCS

— Macro: AC_HAVE_HEADERS

AC_CHECK_HEADERS

— Macro: AC_HAVE_LIBRARY (library, [action-if-found], [action-if-not-found], [other-libraries])

このマクロは,function引数をmainにしたAC_CHECK_LIB の呼び出しと同じです.さらに,libraryは,‘foo’, -lfoo,または‘libfoo.a’のいずれで書くことも可能です.これ ら全ての状況で,コンパイラに-lfooが渡されます.しかし, libraryをシェル変数することは不可能です.リテラル名にする必要があ ります.

— Macro: AC_HAVE_POUNDBANG

AC_SYS_INTERPRETER (呼び出し規則が異なります)

— Macro: AC_HEADER_CHECK

AC_CHECK_HEADER

— Macro: AC_HEADER_EGREP

AC_EGREP_HEADER

— Macro: AC_HELP_STRING

AS_HELP_STRING

— Macro: AC_INIT (unique-file-in-source-dir)

以前のAC_INITは単一の引数のみで使用され,それは以下と同じです.

          AC_INIT
          AC_CONFIG_SRCDIR(unique-file-in-source-dir)
— Macro: AC_INLINE

AC_C_INLINE

— Macro: AC_INT_16_BITS

Cの型intが16ビット幅の場合,INT_16_BITSを定義します.代わ りに‘AC_CHECK_SIZEOF(int)’を使用してください.

— Macro: AC_IRIX_SUN

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)
— Macro: AC_LANG_C

AC_LANG(C)’と同じです.

— Macro: AC_LANG_CPLUSPLUS

AC_LANG(C++)’と同じです.

— Macro: AC_LANG_FORTRAN77

AC_LANG(Fortran 77)’と同じです.

— Macro: AC_LANG_RESTORE

AC_LANG_SAVEで設定されるように,スタックのトップに保存される languageを選択し,スタックから削除し, AC_LANG(language)を呼び出します.

— Macro: AC_LANG_SAVE

現在の言語を(AC_LANGで設定されるように)スタックに記憶します.現在 の言語は変更されません.AC_LANG_PUSHが好まれます.

— Macro: AC_LINK_FILES (source..., dest...)

これは,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)
— Macro: AC_LN_S

AC_PROG_LN_S

— Macro: AC_LONG_64_BITS

Cの型long intが64ビット幅の場合,LONG_64_BITSを定義します. その代わりに,一般的なマクロ‘AC_CHECK_SIZEOF([long int])’を使用して ください.

— Macro: AC_LONG_DOUBLE

AC_C_LONG_DOUBLE

— Macro: AC_LONG_FILE_NAMES

AC_SYS_LONG_FILE_NAMES

— Macro: AC_MAJOR_HEADER

AC_HEADER_MAJOR

— Macro: AC_MEMORY_H

mem関数がmemory.hで定義されている場合に NEED_MEMORY_Hを定義するために使用されます.現在は, ‘AC_CHECK_HEADERS(memory.h)’と同じです.コードを NEED_MEMORY_HではなくHAVE_MEMORY_Hに依存するように調整して ください.See Standard Symbols.

— Macro: AC_MINGW32

AC_CYGWINに似ていますが,それはMingW32コンパイラの環境を調査し MINGW32を設定します.

— Macro: AC_MINUS_C_MINUS_O

AC_PROG_CC_C_O

— Macro: AC_MMAP

AC_FUNC_MMAP

— Macro: AC_MODE_T

AC_TYPE_MODE_T

— Macro: AC_OBJEXT

.cファイルが除外された後,コンパイラの出力に基づいて,出力変数 OBJEXTを定義します.通常,Unixでは‘o’で,Win32では ‘obj’に設定します.現在はコンパイラの調査マクロがこれを自動的に処理 します.

— Macro: AC_OBSOLETE (this-macro-name, [suggestion])

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を使用 することを推奨します.

— Macro: AC_OFF_T

AC_TYPE_OFF_T

— Macro: AC_OUTPUT ([file]..., [extra-cmds], [init-cmds])

引数を用いたAC_OUTPUTの使用は反対されます.これは以下と同じものの 時代遅れのインターフェースです.

          AC_CONFIG_FILES(file...)
          AC_CONFIG_COMMANDS([default],
                             extra-cmds, init-cmds)
          AC_OUTPUT
— Macro: AC_OUTPUT_COMMANDS (extra-cmds, [init-cmds])

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: []"]])
— Macro: AC_PID_T

AC_TYPE_PID_T

— Macro: AC_PREFIX

AC_PREFIX_PROGRAM

— Macro: AC_PROG_CC_STDC

このマクロは,AC_PROG_CCに統合されました.

— Macro: AC_PROGRAMS_CHECK

AC_CHECK_PROGS

— Macro: AC_PROGRAMS_PATH

AC_PATH_PROGS

— Macro: AC_PROGRAM_CHECK

AC_CHECK_PROG

— Macro: AC_PROGRAM_EGREP

AC_EGREP_CPP

— Macro: AC_PROGRAM_PATH

AC_PATH_PROG

— Macro: AC_REMOTE_TAPE

有用性の制限のため削除されました.

— Macro: AC_RESTARTABLE_SYSCALLS

AC_SYS_RESTARTABLE_SYSCALLS

— Macro: AC_RETSIGTYPE

AC_TYPE_SIGNAL

— Macro: AC_RSH

有用性の制限のため削除されました.

— Macro: AC_SCO_INTL

SCO UNIXの場合,出力変数LIBS-lintlを加えます.このマク ロは以下を使用していました.

          AC_CHECK_LIB(intl, strftime, LIBS="-lintl $LIBS")

現在は,代わりにAC_FUNC_STRFTIMEを呼び出します.

— Macro: AC_SETVBUF_REVERSED

AC_FUNC_SETVBUF_REVERSED

— Macro: AC_SET_MAKE

AC_PROG_MAKE_SET

— Macro: AC_SIZEOF_TYPE

AC_CHECK_SIZEOF

— Macro: AC_SIZE_T

AC_TYPE_SIZE_T

— Macro: AC_STAT_MACROS_BROKEN

AC_HEADER_STAT

— Macro: AC_STDC_HEADERS

AC_HEADER_STDC

— Macro: AC_STRCOLL

AC_FUNC_STRCOLL

— Macro: AC_ST_BLKSIZE

AC_CHECK_MEMBERS

— Macro: AC_ST_BLOCKS

AC_STRUCT_ST_BLOCKS

— Macro: AC_ST_RDEV

AC_CHECK_MEMBERS

— Macro: AC_SYS_RESTARTABLE_SYSCALLS

システムが自動的にシグナルで中断されたシステムコールを再スタートする場合, HAVE_RESTARTABLE_SYSCALLSを定義します.このマクロは,システムが一 般的に再スタートするかどうかを調査しません – それは,(sigaction ではなく)signalでインストールされているシグナルハンドラが再スター トするためのシステムコールを呼び出すかどうかをテストします.ハンドラの無 いシグナルで中断されたときにシステムコールが再スタートされる場合,テスト しません.

今日の移植性の高いプログラムでは,システムコールを再スタートしたい場合, SA_RESTARTを用いてsigactionを使用すべきです.現在では,シ ステムコールが再スタート可能かどうかは,コンフィグレーション時の問題では なく動的な問題なので,HAVE_RESTARTABLE_SYSCALLSに依存すべきではあ りません.

— Macro: AC_SYS_SIGLIST_DECLARED

AC_DECL_SYS_SIGLIST

— Macro: AC_TEST_CPP

AC_TRY_CPPになり,それもAC_PREPROC_IFELSEで置き換えられま した.

— Macro: AC_TEST_PROGRAM

AC_TRY_RUNになり,それもAC_RUN_IFELSEで置き換えられました.

— Macro: AC_TIMEZONE

AC_STRUCT_TIMEZONE

— Macro: AC_TIME_WITH_SYS_TIME

AC_HEADER_TIME

— Macro: AC_TRY_COMPILE (includes, function-body, [action-if-found], [action-if-not-found])

AC_COMPILE_IFELSE([AC_LANG_SOURCE([[includes]], [[function-body]])], [action-if-true], [action-if-false])’と同じです(see Running the Compiler).

このマクロは,includesfunction-bodyの両方を二重に引用符で 囲みます.

CとC++に対して,includesfunction-bodyにあるコードが必要と するすべての#include文です(現在選択されている言語がFortranや Fortran 77 の場合,includesは無視されます).コンパイラやコンパイル フラグは,現在の言語(see Language Choice)によって決定されます.

— Macro: AC_TRY_CPP (input, [action-if-true], [action-if-false])

AC_PREPROC_IFELSE([AC_LANG_SOURCE([[input]])], [action-if-true], [action-if-false])’と同じです (see Running the Preprocessor).

このマクロはinputを二重に引用符で囲みます.

— Macro: AC_TRY_LINK (includes, function-body, [action-if-found], [action-if-not-found])

AC_LINK_IFELSE([AC_LANG_SOURCE([[includes]], [[function-body]])], [action-if-true], [action-if-false])’と同じです(see Running the Compiler).

このマクロは,includesfunction-bodyの両方を二重に引用符で 囲みます.

現在の言語に依存して(see Language Choice),function-bodyの中身 にある関数をコンパイルしリンクすることが可能かどうかを調べるテストプログ ラムを作成します.ファイルのコンパイルとリンクが成功する場合,シェルコマ ンドaction-if-foundを実行し,それ以外ではaction-if-not-found を実行します.

このマクロは,includesfunction-bodyの両方を二重に引用符で 囲みます.

CとC++に対して,includesfunction-bodyにあるコードが必要と するすべての#include文です(現在選択されている言語がFortran 77 の 場合,includesは無視されます).コンパイラとコンパイルフラグは現在 の言語(see Language Choice)で決定され,リンクではLDFLAGSLIBSが追加で使用されます.

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

このマクロは,‘AC_LINK_IFELSE([AC_LANG_CALL([[includes]], [[function-body]])], [action-if-true], [action-if-false])’と同じです.

— Macro: AC_TRY_RUN (program, [action-if-true], [action-if-false], [action-if-cross-compiling])

AC_RUN_IFELSE([AC_LANG_SOURCE([[program]], [action-if-true], [action-if-false], [action-if-cross-compiling])’と同じです(see Run Time).

— Macro: AC_UID_T

AC_TYPE_UID_T

— Macro: AC_UNISTD_H

AC_CHECK_HEADERS(unistd.h)’と同じです.

— Macro: AC_USG

BSD文字列関数がstrings.hで定義されている場合, USGを定義します.これからはUSGではなくHAVE_STRING_H に依存するようにすべきです.See Standard Symbols.

— Macro: AC_UTIME_NULL

AC_FUNC_UTIME_NULL

— Macro: AC_VALIDATE_CACHED_SYSTEM_TUPLE ([cmd])

キャッシュファイルが現在のホスト,ターゲット,そしてビルドシステムのタイ プで矛盾がある場合,cmdを実行したりデフォルトのエラーメッセージを 出力したりするために使用されていました.これは現在デフォルトで処理されま す.

— Macro: AC_VERBOSE (result-description)

AC_MSG_RESULT.

— Macro: AC_VFORK

AC_FUNC_VFORK

— Macro: AC_VPRINTF

AC_FUNC_VPRINTF

— Macro: AC_WAIT3

AC_FUNC_WAIT3

— Macro: AC_WARN

AC_MSG_WARN

— Macro: AC_WORDS_BIGENDIAN

AC_C_BIGENDIAN

— Macro: AC_XENIX_DIR

このマクロは,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=])
— Macro: AC_YYTEXT_POINTER

AC_DECL_YYTEXT