changeset 10081:ea9dd8bc5005

Update cross-compiling guess now that glibc 2.9 will have fast implementations.
author Bruno Haible <bruno@clisp.org>
date Thu, 15 May 2008 23:29:37 +0200
parents d0e8add2a62d
children 44e8848f6ce8
files ChangeLog m4/memmem.m4 m4/strcasestr.m4 m4/strstr.m4
diffstat 4 files changed, 56 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+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.
--- a/m4/memmem.m4
+++ b/m4/memmem.m4
@@ -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 @@
     /* 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])
--- a/m4/strcasestr.m4
+++ b/m4/strcasestr.m4
@@ -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 @@
 	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])
--- a/m4/strstr.m4
+++ b/m4/strstr.m4
@@ -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 @@
       }
     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])