Skip linear-time test if it is redundant.
[gnulib.git] / m4 / strcasestr.m4
index d641958..62991b1 100644 (file)
@@ -7,17 +7,21 @@ dnl with or without modifications, as long as this notice is preserved.
 dnl Check that strcasestr is present and works.
 AC_DEFUN([gl_FUNC_STRCASESTR_SIMPLE],
 [
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+
   dnl Persuade glibc <string.h> to declare strcasestr().
   AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
 
-  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
   AC_REQUIRE([gl_FUNC_MEMCHR])
-  AC_REPLACE_FUNCS([strcasestr])
+  AC_CHECK_FUNCS([strcasestr])
   if test $ac_cv_func_strcasestr = no; then
     HAVE_STRCASESTR=0
-    gl_PREREQ_STRCASESTR
-  elif test "$gl_cv_func_memchr_works" != yes; then
-    REPLACE_STRCASESTR=1
+  else
+    if test "$gl_cv_func_memchr_works" != yes; then
+      REPLACE_STRCASESTR=1
+    fi
+  fi
+  if test $HAVE_STRCASESTR = 0 || test $REPLACE_STRCASESTR = 1; then
     AC_LIBOBJ([strcasestr])
     gl_PREREQ_STRCASESTR
   fi
@@ -27,7 +31,7 @@ dnl Additionally, check that strcasestr is efficient.
 AC_DEFUN([gl_FUNC_STRCASESTR],
 [
   AC_REQUIRE([gl_FUNC_STRCASESTR_SIMPLE])
-  if test $ac_cv_func_strcasestr = yes; then
+  if test $HAVE_STRCASESTR = 1 && test $REPLACE_STRCASESTR = 0; then
     AC_CACHE_CHECK([whether strcasestr works in linear time],
       [gl_cv_func_strcasestr_linear],
       [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
@@ -80,6 +84,7 @@ AC_DEFUN([gl_FUNC_STRCASESTR],
     if test "$gl_cv_func_strcasestr_linear" != yes; then
       REPLACE_STRCASESTR=1
       AC_LIBOBJ([strcasestr])
+      gl_PREREQ_STRCASESTR
     fi
   fi
 ]) # gl_FUNC_STRCASESTR