Previous: Obsoleting Macros, Up: Writing Autoconf Macros   [Contents][Index]


9.6 ¥³¡¼¥Ç¥£¥ó¥°¥¹¥¿¥¤¥ë

Autoconf¥Þ¥¯¥í¤Ï¥¹¥¯¥ê¥×¥È¥³¡¼¥Ç¥£¥ó¥°¥¹¥¿¥¤¥ë¤Ë½¾¤¤¤Þ¤¹¡¥°Ê²¼¤Î¥¹¥¿¥¤¥ë ¤Ë½¾¤¦¤è¤¦¤Ë¿ä¾©¤·¡¤ÆÃ¤Ë¡¤Autoconf¼«¿È¤Ë´ó¹Æ¤·¤¿¤ê¡¤¤½¤Î¾¤ÎÌÜŪ¤Ç¡¤¥Þ¥¯ ¥í¤òÇÛÉÛ¤¹¤ëÌÜŪ¤¬¤¢¤ë¾ì¹ç¤Ï¤½¤¦¤·¤Æ¤¯¤À¤µ¤¤¡¥

ºÇ½é¤ËɬÍפʤ³¤È¤Ï¡¤°úÍÑÉä¤ËÂ礭¤¯Ãí°Õ¤òʧ¤¦¤³¤È¤Ç¤¹¡¥¾ÜºÙ¤Ï¡¤ Autoconf Language¤ÈM4 Quotation¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡¥

¿·¤¿¤Ê¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÎȯÌÀ¤Ï»î¤ß¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡¥ÄêµÁ¤·¤Æ¤¤¤ë¥Þ¥¯¥í¤Ë»÷ ¤Æ¤¤¤ëAutoconf¥Þ¥¯¥í¤¬Â¸ºß¤¹¤ë¤³¤È¤Ï¤è¤¯¤¢¤ê¤Þ¤¹¡¥¤³¤Î´û¸¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼ ¥¹¤Ë½¾¤Ã¤Æ¤ß¤Æ¤¯¤À¤µ¤¤(°ú¿ô¤Î½ç½ø¡¤¥Ç¥Õ¥©¥ë¥ÈÃÍ¡¤Åù¡¹)¡¥²æ¡¹¤Ï¡¤¤³¤ì¤é¤Î ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ë´°Á´¤Ç¤Ê¤¤¤â¤Î¤¬¤¢¤ë¤³¤È¤Ï¡¤°Õ¼±¤·¤Æ¤¤¤Þ¤¹¡¥¤½ ¤ì¤Ë¤â¤«¤«¤ï¤é¤º¡¤Ìµ³²¤Ê¤È¤­¤Ï¡¤ÁϤÀ­¤è¤ê¶Ñ¼ÁÀ­¤¬¹¥¤Þ¤ì¤ë¤Ç¤·¤ç¤¦¡¥

M4¥·¥ó¥Ü¥ë´Ö¤È¥·¥§¥ëÊÑ¿ô´Ö¤ÎξÊý¤Î¾×ÆÍ¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡¥

¿ä¾©¤µ¤ì¤ëM4̿̾µ¬Â§(see Macro Names)¤Ë½¾¤¦¾ì¹ç¡¤¾×ÆÍ¤¬À¸¤¸¤ë¤³¤È¤Ï ¤¢¤Þ¤ê¤Ê¤¤¤Ç¤·¤ç¤¦¡¥¤½¤ì¤Ë¤â¤«¤«¤ï¤é¤º¡¤ÆÃ¼ì¤ÊÃͤòÀßÄꤹ¤ëɬÍפ¬¤¢¤ë¤È¤­¡¤ Ä̾ï¤Î¥Þ¥¯¥í̾¤ò»ÈÍѤ¹¤ë¤³¤È¤òÈò¤±¤Æ¤¯¤À¤µ¤¤¡¥“¿®¤¸¤é¤ì¤Ê¤¤”̾ Á°¤ò»ÈÍѤ¹¤ëÂå¤ï¤ê¤Ç¤¹¡¥Î㤨¤Ð¡¤¥Ð¡¼¥¸¥ç¥ó2.13¤Þ¤Ç¤Ï¡¤Ä̾ï¤Î¥Þ¥¯¥í̾ AC_SUBST_symbol¤òÀßÄꤹ¤ë¤³¤È¤Ç´û¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë symbol¤òµ­²±¤¹¤ë¤¿¤á¡¤¥Þ¥¯¥íAC_SUBST¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤·¤¿¡¥¤· ¤«¤·¡¤AC_SUBST_FILE¤È̿̾¤µ¤ì¤Æ¤¤¤ë¥Þ¥¯¥í¤¬Â¸ºß¤¹¤ë¤Î¤Ç¡¤ ‘AC_SUBST(FILE)’¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¤Ç¤·¤¿¡ª¤³¤Î¾ì¹ç¡¤ AC_SUBST(symbol)¤ä_AC_SUBST(symbol)¤¬»ÈÍѤµ¤ì ¤ë¤Ù¤­¤Ç¤·¤¿(¤½¤¦¤Ç¤¹¡¤¥«¥Ã¥³¤Ï»ÈÍѤ·¤Þ¤¹)…¤Þ¤¿¤Ï¡¤¤è¤êÎɤ¤ÊýË¡¤È ¤·¤Æ¡¤AC_EXPAND_ONCE¤Î¤è¤¦¤Ê¥Ï¥¤¥ì¥Ù¥ë¤Î¥Þ¥¯¥í¤ò»ÈÍѤ¹¤Ù¤­¤Ç¤·¤¿¡¥

Autoconf¥Þ¥¯¥í¤Ï¡¤¥æ¡¼¥¶ÊÑ¿ô¤Î̾Á°¶õ´Ö¤ËÆþ¤ë¤Ù¤­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥¤¹¤Ê¤ï¤Á¡¤ ¼ÂºÝ¤Î¥Þ¥¯¥í¤Î¼Â¹Ô·ë²Ì¤È¤Ê¤ëÊÑ¿ô°Ê³°¤Î¡¤Á´¤Æ¥·¥§¥ëÊÑ¿ô¤Ïac_ ¤Ç»Ï ¤á¤ë¤Ù¤­¤Ç¤¹¡¥¤µ¤é¤Ë¡¤¾®¤µ¤Ê¥Þ¥¯¥í¤ä¾¤Î¥Þ¥¯¥í¤ËËä¤á¹þ¤Þ¤ì¤ë¤è¤¦¤Ê¥Þ¥¯¥í ¤Ï¡¤ÌÀ¼¨Åª¤Ê̾Á°¤ò»ÈÍѤ·¤Ê¤¤¤è¤¦¤ËÃí°Õ¤¹¤Ù¤­¤Ç¤¹¡¥

¥³¥á¥ó¥È¤òƳÆþ¤¹¤ë¤¿¤á¤Ë¡¤dnl¤ò»ÈÍѤ·¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡¥½ñ¤³¤¦¤È¤·¤Æ ¤¤¤ë¥³¥á¥ó¥È¤Î¤Û¤È¤ó¤É¤Ï¡¤½ÐÎϤµ¤ì¤Ê¤¤¥Ø¥Ã¥À¥³¥á¥ó¥È¡¤¤Þ¤¿¤Ï¡¤ configure¤Ë½ñ¤«¤ì¤ë¤Ù¤­¥³¥á¥ó¥È¤Ç¤¹¡¥ÆÃ¼ì¤ÊM4¤Î¹½À®¤Î¥³¥á¥ó¥È¤¬Íß ¤·¤¤¾ì¹ç¤ÏÎã³°¤¬¤¢¤ê¡¤¤½¤Î¾ì¹ç¤Ïdnl¤¬Àµ¤·¤¤¤Î¤Ç¤¹¤¬¡¤¤¢¤Þ¤ê¤Ê¤¤¤³ ¤È¤À¤È¤¤¤¦¤³¤È¤ò³Ð¤¨¤Æ¤ª¤¤¤Æ¤¯¤À¤µ¤¤¡¥

M4¤Ï¡¤°ú¿ô¤ËÁ°ÃÖ¤µ¤ì¤ë¥¹¥Ú¡¼¥¹¤ò̵»ë¤·¤Þ¤¹¡¥¸Æ¤Ó½Ð¤µ¤ì¤Æ¤¤¤ë¥Þ¥¯¥í¤Î³«¥«¥Ã ¥³¤Ë¡¤°ú¿ô¤¬À°Î󤹤ë¤è¤¦¤Ë»ú²¼¤²¤¹¤ë¤¿¤á¤Ë¡¤¤³¤ÎÆÃħ¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡¥ Î㤨¤Ð¡¤°Ê²¼¤ÎÂå¤ï¤ê¤ò¹Í¤¨¤Þ¤¹¡¥

AC_CACHE_CHECK(for EMX OS/2 environment,
ac_cv_emxos2,
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __EMX__;])],
[ac_cv_emxos2=yes], [ac_cv_emxos2=no])])

°Ê²¼¤Î¤è¤¦¤Ë½ñ¤¤¤Æ¤¯¤À¤µ¤¤¡¥

AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
                   [ac_cv_emxos2=yes],
                   [ac_cv_emxos2=no])])

¤Þ¤¿¤Ï¡¤°Ê²¼¤Î¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡¥

AC_CACHE_CHECK([for EMX OS/2 environment],
               [ac_cv_emxos2],
               [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
                                                   [return __EMX__;])],
                                  [ac_cv_emxos2=yes],
                                  [ac_cv_emxos2=no])])

AC_RUN_IFELSE¤ä¡¤¥¯¥í¥¹¥³¥ó¥Ñ¥¤¥ë¤ÇưºîÉÔ²Äǽ¤Ê¥Þ¥¯¥í¤ò»ÈÍѤ·¤Æ¤¤ ¤ë¤È¤­¡¤Èá´ÑŪ¤ÊÃÍ(Ä̾ï¤Ï‘no’)¤òÄ󶡤·¤Æ¤¯¤À¤µ¤¤¡¥

¹½Ê¸¤ò¥Ï¥¤¥é¥¤¥Èɽ¼¨¤¹¤ë¥¨¥Ç¥£¥¿¤Î¤è¤¦¤Ê¡¤Êä½õ¥Ä¡¼¥ë¤¬ÉÔŬÀÚ¤ËÆ°ºî¤¹¤ë¤³ ¤È¤òÈò¤±¤ë¤¿¤á¡¤ÍÍ¡¹¤Ê¼êÃʤò¼«Í³¤Ë»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡¥Î㤨¤Ð°Ê²¼¤ò¹Í¤¨¤Þ¤¹¡¥

m4_bpatsubst([$1], [$"])

°Ê²¼¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡¥

m4_bpatsubst([$1], [$""])

¤½¤ì¤Ï¡¤Emacsen¤¬ºÇ½é¤Î°úÍÑÉä¤Ç½ª¤ê¤Î¤Ê¤¤“ʸ»úÎó”¤ò³«¤¤¤¿¤Þ¤Þ¤Ë¤·¤Ê¤¤ ¤è¤¦¤Ë¤¹¤ë¤¿¤á¤Ç¤¹¡¥Æ±¤¸Íýͳ¤«¤é°Ê²¼¤Î¤è¤¦¤Ê¤³¤È¤ÏÈò¤±¤Æ¤¯¤À¤µ¤¤¡¥

test $[#] != 0

°Ê²¼¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡¥

test $[@%:@] != 0

¤½¤¦¤·¤Ê¤¤¾ì¹ç¡¤ÊÄ¥«¥Ã¥³¤Ï‘#’¥³¥á¥ó¥ÈÆâ¤Ë±£¤µ¤ì¡¤Emacsen¤Î¥«¥Ã¥³°ì ÃפΥϥ¤¥é¥¤¥Èɽ¼¨¤òÇ˲õ¤·¤Þ¤¹¡¥¹¥¤Þ¤·¤¤¥¹¥¿¥¤¥ë¤Ï¡¤M4¤«¤é¥¨¥¹¥±¡¼¥×¤µ¤ì ¤ë¤è¤¦¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡¥‘$[1]’¡¤‘$[@]’¡¤Åù¤Ç¤¹¡¥ÉÔɬÍ×¤Ê¤È ¤­¤Ë¥¨¥¹¥±¡¼¥×¤·¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡¥°ÕÌ£¤Î¤Ê¤¤°úÍÑÉä¤Î°ìÈÌŪ¤ÊÎã¤Ï¡¤ ‘[$]$1’(‘$$1’¤È½ñ¤¤¤Æ¤¯¤À¤µ¤¤)¡¤‘[$]var’(‘$var’¤ò»È ÍѤ·¤Æ¤¯¤À¤µ¤¤)¡¤Åù¤Ç¤¹¡¥°Ü¿¢À­¤ÎÌäÂê¤ò¤³¤Î¾õÂ֤˲䨤ë¾ì¹ç¡¤ ‘"[$]@"’¤è¤ê‘${1+"$[@]"}’¤Ë¤·¤¿Êý¤¬Îɤ¯¡¤Autoconf¤ò¥Ï¥Ã¥­ ¥ó¥°¤¹¤ë¤è¤ê²¿¤«Â¾¤Î¤³¤È¤ò¤·¤¿Êý¤¬Îɤ¤¤Ç¤·¤ç¤¦:-)¡¥

sed¤ò»ÈÍѤ·¤Æ¤¤¤ë¤È¤­¡¤»ú²¼¤²¤ÎÌÜŪ°Ê³°¤Ç-e¤ò»ÈÍѤ·¤Ê ¤¤¤Ç¤¯¤À¤µ¤¤¡¥s¥³¥Þ¥ó¥É¤òÍѤ¤¤¿¾ì¹ç¡¤‘/’¼«¿È¤¬¥³¥Þ¥ó¥É¤Ç»ÈÍÑ ¤µ¤ì¤Ê¤¤¸Â¤ê¡¤Í¥À褵¤ì¤ë¥»¥Ñ¥ì¡¼¥¿¤Ï‘/’¤Ë¤·¡¤¥³¥Þ¥ó¥É¤Ç»ÈÍѤµ¤ì¤ë¾ì ¹ç¤Ï‘,’¤ò»ÈÍѤ¹¤Ù¤­¤Ç¤¹¡¥

¥Þ¥¯¥íÄêµÁ¤ÎÊýË¡¤Î¾ÜºÙ¤Ï¡¤See Macro Definitions. ¥Þ¥¯¥í¤Ç AC_REQUIRE¤ò»ÈÍѤ·¤Æ¤ª¤é¤º¡¤AC_REQUIRE¥Ç¥£¥ì¥¯¥Æ¥£¥Ö¤Î¥ª¥Ö ¥¸¥§¥¯¥È¤¬¤Ê¤¤¤³¤È¤ò´üÂÔ¤¹¤ë¾ì¹ç¡¤m4_define¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡¥µ¿ ¤ï¤·¤¤¾ì¹ç¤Ï¡¤AC_DEFUN¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡¥Á´¤Æ¤ÎAC_REQUIRE ʸ¤Ï¡¤dnl¤µ¤ì¤Æ¤¤¤ë¥Þ¥¯¥í¤ÎºÇ½é¤Ë½ñ¤¯¤Ù¤­¤Ç¤¹¡¥

°ú¿ô¤Î¿ô¤Ë°Í¸¤¹¤Ù¤­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥°ú¿ô¤¬Â­¤ê¤Ê¤¤¤³¤È¤òÄ´ºº¤¹¤ëÂå¤ï¤ê¤Ë¡¤ ¶õ¤Ç¤Ê¤¤¤³¤È¤ò¥Æ¥¹¥È¤·¤Æ¤¯¤À¤µ¤¤¡¥¤è¤ê´Êñ¤Ç¤è¤êͽ¬²Äǽ¤Ê¥¤¥ó¥¿¡¼¥Õ¥§¡¼ ¥¹¤ò¥æ¡¼¥¶¤ËÄ󶡤·¡¤Í¾Ê¬¤Ê°ú¿ô¤ËÂФ¹¤ë;ÃϤòÀáÌ󤷤Ƥ¯¤À¤µ¤¤¡¥

¥Þ¥¯¥í¤¬Ã»¤¯¤Ê¤¤¾ì¹ç¤Ï¡¤¹Ô¤ÎºÇ½é¤Ë‘])’¤ò»Ä¤·¡¤ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥Þ¥¯¥í ¤Î̾Á°¤ò·«¤êÊÖ¤¹¥³¥á¥ó¥È¤ò³¤±¤Æ¤¯¤À¤µ¤¤¡¥¤³¤ì¤Ï¡¤configure¤Ë ;ʬ¤Ê²þ¹Ô¤òƳÆþ¤·¤Þ¤¹¡¥Ä̾ï¤ÏÌäÂꤢ¤ê¤Þ¤»¤ó¤¬¡¤ºï½ü¤·¤¿¤¤¾ì¹ç¤Ï¡¤¹Ô¤ÎºÇ ¸å¤Ë‘[]dnl’¤ò»ÈÍѤ¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡¥Æ±Íͤˡ¤¥Þ¥¯¥í¸Æ¤Ó½Ð¤·¤Î¸å¤Ë¡¤ ²þ¹Ô¤òºï½ü¤¹¤ë¤¿¤á¡¤‘[]dnl’¤ò»ÈÍѤ¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡¥M4¤¬‘dnl’ ¤ò¥Æ¥­¥¹¥È¤ä¥Þ¥¯¥í½ÐÎϤÎÁ°¤ËÉÕ¤±¤é¤ì¤Æ¤¤¤ë¤â¤Î¤È¤·¤Æ²ò¼á¤·¤Ê¤¤¤³¤È¤ò³Î¼Â ¤Ë¤¹¤ë¤¿¤á¡¤‘[]dnl’¤Ï‘dnl’¤ÎÂå¤ï¤ê¤È¤·¤Æ¿ä¾©¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥Î㤨 ¤Ð°Ê²¼¤ÎÂå¤ï¤ê¤ò¹Í¤¨¤Þ¤¹¡¥

AC_DEFUN([AC_PATH_X],
[AC_MSG_CHECKING([for X])
AC_REQUIRE_CPP()
# …omitted…
  AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
fi])

°Ê²¼¤Î¤è¤¦¤Ë½ñ¤¯¤Ù¤­¤Ç¤¹¡¥

AC_DEFUN([AC_PATH_X],
[AC_REQUIRE_CPP()[]dnl
AC_MSG_CHECKING([for X])
# …omitted…
  AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
fi[]dnl
])# AC_PATH_X

¥Þ¥¯¥í¤¬Ä¹¤¤¾ì¹ç¡¤ÏÀÍýŪ¤Ê²ô¤Ëʬ¤±¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡¥Ä̾ï¥Þ¥¯¥í¤Ï¡¤´Ø¿ô¤Î¥Ð ¥°¤òÄ´ºº¤·¡¤¤³¤Î¥»¥Ã¥È¥¢¥Ã¥×¤ò¼Â¹Ô¤¹¤ë¤¿¤á¤ÎÊä½õ¥Þ¥¯¥í¤¬¤¢¤ë AC_LIBOBJ¤ÎÃÖ´¹¤ò½àÈ÷¤·¤Þ¤¹¡¥¥³¡¼¥É¤ÎÍ×ÁǤËÊä½õ¥Þ¥¯¥í¤òƳÆþ¤¹¤ë¤³ ¤È¤ò¤¿¤á¤é¤ï¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡¥

¿ä¾©¤µ¤ì¤ë¥³¡¼¥Ç¥£¥ó¥°¥¹¥¿¥¤¥ë¤ò¶¯Ä´¤¹¤ë¤¿¤á¤Ë¡¤¸Å¤¤¼êË¡¤Ç½ñ¤«¤ì¤Æ¤¤¤ë¥Þ ¥¯¥í¤ò¾Ò²ð¤·¤Þ¤¹¡¥

dnl Check for EMX on OS/2.
dnl _AC_EMXOS2
AC_DEFUN(_AC_EMXOS2,
[AC_CACHE_CHECK(for EMX OS/2 environment, ac_cv_emxos2,
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, return __EMX__;)],
ac_cv_emxos2=yes, ac_cv_emxos2=no)])
test "$ac_cv_emxos2" = yes && EMXOS2=yes])

¿·¤·¤¤ÊýË¡¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡¥

# _AC_EMXOS2
# ----------
# Check for EMX on OS/2.
m4_define([_AC_EMXOS2],
[AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
                   [ac_cv_emxos2=yes],
                   [ac_cv_emxos2=no])])
test "$ac_cv_emxos2" = yes && EMXOS2=yes[]dnl
])# _AC_EMXOS2

Previous: Obsoleting Macros, Up: Writing Autoconf Macros   [Contents][Index]