From: Eric Blake Date: Tue, 2 Oct 2007 13:04:11 +0000 (-0600) Subject: Optimize AC_PREREQ and other m4sugar numerics. X-Git-Tag: v2.62~241 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7113f1b07c8201683ea4e1a6e83ba18304de0596;p=thirdparty%2Fautoconf.git Optimize AC_PREREQ and other m4sugar numerics. * lib/m4sugar/m4sugar.m4 (m4_sign): Write with m4_eval. (m4_cmp): Compare arbitrary expressions, without overflow. (m4_version_unletter): Also recognize capital letters. (m4_version_compare): Avoid regex when splitting version number string. Signed-off-by: Eric Blake --- diff --git a/ChangeLog b/ChangeLog index 1a3b08dd..2dcf677b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-10-02 Eric Blake + + Optimize AC_PREREQ and other m4sugar numerics. + * lib/m4sugar/m4sugar.m4 (m4_sign): Write with m4_eval. + (m4_cmp): Compare arbitrary expressions, without overflow. + (m4_version_unletter): Also recognize capital letters. + (m4_version_compare): Avoid regex when splitting version number + string. + 2007-10-01 Eric Blake Once again, reject IRIX m4. diff --git a/lib/m4sugar/m4sugar.m4 b/lib/m4sugar/m4sugar.m4 index bd3fb17b..2070daab 100644 --- a/lib/m4sugar/m4sugar.m4 +++ b/lib/m4sugar/m4sugar.m4 @@ -1660,27 +1660,18 @@ m4_define([m4_qdelta], # m4_sign(A) # ---------- -# -# The sign of the integer A. -# -# Rather than resort to eval or regex, we merely delete [0\t ], collapse -# all other digits to 1, then use the first two characters to decide. +# The sign of the integer expression A. m4_define([m4_sign], -[m4_case(m4_substr(m4_translit([[$1]], [2-90 ], [11111111]), 0, 2), - [-1], [-1], - [-], [0], - [], [0], - [1])]) +[m4_eval((([$1]) > 0) - (([$1]) < 0))]) # m4_cmp(A, B) # ------------ -# -# Compare two integers. +# Compare two integer expressions. # A < B -> -1 # A = B -> 0 # A > B -> 1 m4_define([m4_cmp], -[m4_sign(m4_eval([$1 - $2]))]) +[m4_eval((([$1]) > ([$2])) - (([$1]) < ([$2])))]) # m4_list_cmp(A, B) @@ -1720,7 +1711,7 @@ m4_define([m4_list_cmp], # This macro is absolutely not robust to active macro, it expects # reasonable version numbers and is valid up to `z', no double letters. m4_define([m4_version_unletter], -[m4_translit(m4_bpatsubsts([$1], +[m4_translit(m4_bpatsubsts(m4_tolower([[$1]]), [\([0-9]+\)\([abcdefghi]\)], [m4_eval(\1 + 1).-1.\2], [\([0-9]+\)\([jklmnopqrs]\)], @@ -1738,8 +1729,8 @@ m4_define([m4_version_unletter], # 0 if = # 1 if > m4_define([m4_version_compare], -[m4_list_cmp((m4_split(m4_version_unletter([$1]), [\.])), - (m4_split(m4_version_unletter([$2]), [\.])))]) +[m4_list_cmp((m4_translit(m4_version_unletter([$1]), [.], [,])), + (m4_translit(m4_version_unletter([$2]), [.], [,])))]) # m4_PACKAGE_NAME