]> git.ipfire.org Git - thirdparty/autoconf.git/commitdiff
Optimize AC_PREREQ and other m4sugar numerics.
authorEric Blake <ebb9@byu.net>
Tue, 2 Oct 2007 13:04:11 +0000 (07:04 -0600)
committerEric Blake <ebb9@byu.net>
Tue, 2 Oct 2007 13:04:11 +0000 (07:04 -0600)
* 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>
ChangeLog
lib/m4sugar/m4sugar.m4

index 1a3b08ddf5e0bfb99a304a4d1f740ed74bc29490..2dcf677bd4aa8db7e9af272a0e8c3ef4649b6be5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
index bd3fb17bea5ad3c1239f1011a2eb422dbaed6a04..2070daab092a8d04956b725e6633a865f585cee7 100644 (file)
@@ -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