Update cross-compiling guess now that glibc 2.9 will have fast implementations.
authorBruno Haible <bruno@clisp.org>
Thu, 15 May 2008 21:29:37 +0000 (23:29 +0200)
committerBruno Haible <bruno@clisp.org>
Thu, 15 May 2008 23:53:20 +0000 (01:53 +0200)
ChangeLog
m4/memmem.m4
m4/strcasestr.m4
m4/strstr.m4

index 6bbc811..ddbc8e2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2008-05-15  Bruno Haible  <bruno@clisp.org>
 
+       * m4/memmem.m4 (gl_FUNC_MEMMEM): When cross-compiling, assume a fast
+       implementation in glibc >= 2.9.
+       * m4/strstr.m4 (gl_FUNC_STRSTR): Likewise.
+       * m4/strcasestr.m4 (gl_FUNC_STRCASESTR): Likewise.
+
+2008-05-15  Bruno Haible  <bruno@clisp.org>
+
        * MODULES.html.sh (Internationalization functions): Remove linebreak.
        (Unicode string functions): Add unilbrk/*.
        Reported by Karl Berry.
index 383ed4b..c7bd9d6 100644 (file)
@@ -1,4 +1,4 @@
-# memmem.m4 serial 10
+# memmem.m4 serial 11
 dnl Copyright (C) 2002, 2003, 2004, 2007, 2008 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -49,9 +49,21 @@ AC_DEFUN([gl_FUNC_MEMMEM],
     /* Check for empty needle behavior.  */
     return !result || !memmem ("a", 1, 0, 0);]])],
        [gl_cv_func_memmem_works=yes], [gl_cv_func_memmem_works=no],
-       [dnl pessimistically assume the worst, since even glibc 2.6.1
-        dnl has quadratic complexity in its memmem
-        gl_cv_func_memmem_works="guessing no"])])
+       [dnl Only glibc >= 2.9 is known to have a memmem that works in
+        dnl linear time.
+        AC_EGREP_CPP([Lucky GNU user],
+          [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 9) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+          ],
+          [gl_cv_func_memmem_works=yes],
+          [gl_cv_func_memmem_works="guessing no"])
+       ])
+      ])
     if test "$gl_cv_func_memmem_works" != yes; then
       REPLACE_MEMMEM=1
       AC_LIBOBJ([memmem])
index 4f94375..d8925ad 100644 (file)
@@ -1,4 +1,4 @@
-# strcasestr.m4 serial 9
+# strcasestr.m4 serial 10
 dnl Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -48,10 +48,22 @@ AC_DEFUN([gl_FUNC_STRCASESTR],
        result = strcasestr (haystack, needle);
       }
     return !result;]])],
-      [gl_cv_func_strcasestr_linear=yes], [gl_cv_func_strcasestr_linear=no],
-      [dnl pessimistically assume the worst, since even glibc 2.6.1
-       dnl has quadratic complexity in its strcasestr
-       gl_cv_func_strcasestr_linear="guessing no"])])
+       [gl_cv_func_strcasestr_linear=yes], [gl_cv_func_strcasestr_linear=no],
+       [dnl Only glibc >= 2.9 is known to have an strcasestr that works in
+        dnl linear time.
+        AC_EGREP_CPP([Lucky GNU user],
+          [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 9) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+          ],
+          [gl_cv_func_strcasestr_linear=yes],
+          [gl_cv_func_strcasestr_linear="guessing no"])
+       ])
+      ])
     if test "$gl_cv_func_strcasestr_linear" != yes; then
       REPLACE_STRCASESTR=1
       AC_LIBOBJ([strcasestr])
index 5a49b07..fe01d5f 100644 (file)
@@ -1,4 +1,4 @@
-# strstr.m4 serial 2
+# strstr.m4 serial 3
 dnl Copyright (C) 2008 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -34,9 +34,21 @@ AC_DEFUN([gl_FUNC_STRSTR],
       }
     return !result;]])],
       [gl_cv_func_strstr_linear=yes], [gl_cv_func_strstr_linear=no],
-      [dnl pessimistically assume the worst, since even glibc 2.6.1
-       dnl has quadratic complexity in its strstr
-       gl_cv_func_strstr_linear="guessing no"])])
+      [dnl Only glibc >= 2.9 is known to have an strstr that works in
+       dnl linear time.
+       AC_EGREP_CPP([Lucky GNU user],
+        [
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 9) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+        ],
+        [gl_cv_func_strstr_linear=yes],
+        [gl_cv_func_strstr_linear="guessing no"])
+      ])
+    ])
   if test "$gl_cv_func_strstr_linear" != yes; then
     REPLACE_STRSTR=1
     AC_LIBOBJ([strstr])