Remove conftestdir{,2} before trying to create the directory.
[gnulib.git] / m4 / regex.m4
index 2a638d6..35759aa 100644 (file)
@@ -1,28 +1,67 @@
-#serial 3
+#serial 8
 
 
-dnl Derived from code in GNU grep.
+dnl Initially derived from code in GNU grep.
+dnl Mostly written by Jim Meyering.
 
 
-AC_DEFUN(jm_WITH_REGEX,
+dnl Usage: jm_INCLUDED_REGEX([lib/regex.c])
+dnl
+AC_DEFUN(jm_INCLUDED_REGEX,
   [
   [
-    AC_REQUIRE([AM_GLIBC])
-
     dnl Even packages that don't use regex.c can use this macro.
     dnl Of course, for them it doesn't do anything.
 
     dnl Even packages that don't use regex.c can use this macro.
     dnl Of course, for them it doesn't do anything.
 
-    syscmd([test -f lib/regex.c])
-    ifelse(sysval, 0,
-      [
-       # By default, don't use the included regex.c on systems with glibc 2
-       test "$ac_cv_glibc" = yes && default=no || default=yes
+    # Assume we'll default to using the included regex.c.
+    ac_use_included_regex=yes
+
+    # However, if the system regex support is good enough that it passes the
+    # the following run test, then default to *not* using the included regex.c.
+    # If cross compiling, assume the test would fail and use the included
+    # regex.c.  The first failing regular expression is from `Spencer ere
+    # test #75' in grep-2.3.
+    AC_CACHE_CHECK([for working re_compile_pattern],
+                  jm_cv_func_working_re_compile_pattern,
+      AC_TRY_RUN(
+[#include <stdio.h>
+#include <regex.h>
+         int
+         main ()
+         {
+           static struct re_pattern_buffer regex;
+           const char *s;
+           re_set_syntax (RE_SYNTAX_POSIX_EGREP);
+           /* Add this third left square bracket, [, to balance the
+              three right ones below.  Otherwise autoconf-2.14 chokes.  */
+           s = re_compile_pattern ("a[[:]:]]b\n", 9, &regex);
+           /* This should fail with _Invalid character class name_ error.  */
+           if (!s)
+             exit (1);
 
 
+           /* This should succeed, but doesn't for e.g. glibc-2.1.3.  */
+           s = re_compile_pattern ("{1", 2, &regex);
+
+           exit (s ? 1 : 0);
+         }
+       ],
+              jm_cv_func_working_re_compile_pattern=yes,
+              jm_cv_func_working_re_compile_pattern=no,
+              dnl When crosscompiling, assume it's broken.
+              jm_cv_func_working_re_compile_pattern=no))
+    if test $jm_cv_func_working_re_compile_pattern = yes; then
+      ac_use_included_regex=no
+    fi
+
+    test -n "$1" || AC_MSG_ERROR([missing argument])
+    m4_syscmd([test -f $1])
+    ifelse(m4_sysval, 0,
+      [
        AC_ARG_WITH(included-regex,
        [  --without-included-regex don't compile regex; this is the default on
                           systems with version 2 of the GNU C library
                           (use with caution on other system)],
                    jm_with_regex=$withval,
        AC_ARG_WITH(included-regex,
        [  --without-included-regex don't compile regex; this is the default on
                           systems with version 2 of the GNU C library
                           (use with caution on other system)],
                    jm_with_regex=$withval,
-                   jm_with_regex=$default)
+                   jm_with_regex=$ac_use_included_regex)
        if test "$jm_with_regex" = yes; then
        if test "$jm_with_regex" = yes; then
-         LIBOBJS="$LIBOBJS regex.o"
+         AC_LIBOBJ(regex)
        fi
       ],
     )
        fi
       ],
     )