From: Eric Blake Date: Tue, 11 Nov 2008 04:00:44 +0000 (-0700) Subject: Work around <=m4-1.4.9 bug in m4_format. X-Git-Tag: v2.63b~113 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=74bb1a450dd690f08cd39a6597f2acbb76c69024;p=thirdparty%2Fautoconf.git Work around <=m4-1.4.9 bug in m4_format. * lib/m4sugar/m4sugar.m4 (_m4_index): New internal macro. (m4_init): Only use it in older m4. * lib/autoconf/general.m4 (_AC_DEFINE_Q): Use it to avoid m4_format bug in older m4. * lib/autoconf/status.m4 (_AC_CONFIG_COMPUTE_DEST): Likewise. Reported by Bob Proulx. Signed-off-by: Eric Blake --- diff --git a/ChangeLog b/ChangeLog index 2367c7c7e..b28abcdf0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-11-10 Eric Blake + + Work around <=m4-1.4.9 bug in m4_format. + * lib/m4sugar/m4sugar.m4 (_m4_index): New internal macro. + (m4_init): Only use it in older m4. + * lib/autoconf/general.m4 (_AC_DEFINE_Q): Use it to avoid + m4_format bug in older m4. + * lib/autoconf/status.m4 (_AC_CONFIG_COMPUTE_DEST): Likewise. + Reported by Bob Proulx. + 2008-11-10 Eric Blake Match upstream standards.texi. diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4 index 2c184fc4d..15377cbea 100644 --- a/lib/autoconf/general.m4 +++ b/lib/autoconf/general.m4 @@ -2077,8 +2077,10 @@ m4_define([AC_DEFINE_UNQUOTED], [_AC_DEFINE_Q([], $@)]) # m4_format rather than regex to grab prefix up to first (). AC_name # is defined with over-quotation, so that we can avoid m4_defn; this # is only safe because the name should not contain $. +# +# Use _m4_index to avoid a bug in m4_format in older m4. m4_define([_AC_DEFINE_Q], -[m4_pushdef([AC_name], m4_format([[[%.*s]]], m4_index([$2], [(]), [$2]))]dnl +[m4_pushdef([AC_name], m4_format([[[%.*s]]], _m4_index([$2], [(]), [$2]))]dnl [AC_DEFINE_TRACE(AC_name)]dnl [m4_cond([m4_index([$3], [ ])], [-1], [], diff --git a/lib/autoconf/status.m4 b/lib/autoconf/status.m4 index 388b90f26..c134bb7b5 100644 --- a/lib/autoconf/status.m4 +++ b/lib/autoconf/status.m4 @@ -247,9 +247,9 @@ m4_define([_AC_CONFIG_FOOS], # _AC_CONFIG_COMPUTE_DEST(STRING) # ------------------------------- # Compute the DEST from STRING by stripping any : and following -# characters. +# characters. Use _m4_index to avoid a bug in m4_format in older m4. m4_define([_AC_CONFIG_COMPUTE_DEST], -[m4_format([[%.*s]], m4_index([$1], [:]), [$1])]) +[m4_format([[%.*s]], _m4_index([$1], [:]), [$1])]) # _AC_CONFIG_REGISTER(MODE, TAG, [COMMANDS]) # ------------------------------------------ diff --git a/lib/m4sugar/m4sugar.m4 b/lib/m4sugar/m4sugar.m4 index 2a0d7ceed..88847147b 100644 --- a/lib/m4sugar/m4sugar.m4 +++ b/lib/m4sugar/m4sugar.m4 @@ -625,6 +625,22 @@ m4_define([m4_dumpdefs], [m4_map_args([$0], $@)])]) +# _m4_index(HAYSTACK, NEEDLE) +# --------------------------- +# Like the original, except return -2 instead of -1 if NEEDLE is not +# present in HAYSTACK. That way, it can be used to work around a bug +# in m4 1.4.9 and earlier where m4_format did not accept a precision +# of -1; this macro can be safely used in the idiom: +# m4_format([[%.*s]], _m4_index([$1],[$2]), [$1]) +# to grab the prefix of $1 up to but excluding $2, if it was present, +# otherwise the entire $1. +m4_define([_m4_index], +[$0_(m4_index($@))]) + +m4_define([_m4_index_], +[m4_if([$1], [-1], [-2], [$1])]) + + # m4_popdef(NAME) # --------------- # Like the original, except guarantee a warning when using something which is @@ -2975,7 +2991,8 @@ m4_pattern_forbid([^dnl$]) # If __m4_version__ is defined, we assume that we are being run by M4 # 1.6 or newer, and thus that $@ recursion is linear and debugmode(d) -# is available for faster checks of dereferencing undefined macros. +# is available for faster checks of dereferencing undefined macros, +# and we don't need to worry about _m4_format bugs with _m4_index. # But if it is missing, we assume we are being run by M4 1.4.x, that # $@ recursion is quadratic, and that we need foreach-based # replacement macros. Use the raw builtin to avoid tripping up @@ -2983,9 +3000,10 @@ m4_pattern_forbid([^dnl$]) # undefines m4_defn. m4_ifdef([__m4_version__], [m4_debugmode([+d]) -m4_define([m4_defn], _m4_defn([m4_defn])) -m4_define([m4_popdef], _m4_defn([m4_popdef])) -m4_define([m4_undefine], _m4_defn([m4_undefine]))], +m4_define([m4_defn], _m4_defn([_m4_defn])) +m4_define([_m4_index], _m4_defn([m4_index])) +m4_define([m4_popdef], _m4_defn([_m4_popdef])) +m4_define([m4_undefine], _m4_defn([_m4_undefine]))], [m4_builtin([include], [m4sugar/foreach.m4])]) # Rewrite the first entry of the diversion stack.