mirror of
git://git.sv.gnu.org/autoconf
synced 2025-02-11 13:51:04 +08:00
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 <ebb9@byu.net>
This commit is contained in:
parent
83294abba1
commit
7113f1b07c
@ -1,3 +1,12 @@
|
||||
2007-10-02 Eric Blake <ebb9@byu.net>
|
||||
|
||||
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 <ebb9@byu.net>
|
||||
|
||||
Once again, reject IRIX 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
|
||||
|
Loading…
Reference in New Issue
Block a user