summaryrefslogtreecommitdiff
path: root/m4/regex.m4
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2005-07-08 00:23:15 +0000
committerPaul Eggert <eggert@cs.ucla.edu>2005-07-08 00:23:15 +0000
commitce3bb28d9562875cfbd6f6054df68fc742576099 (patch)
tree071ea7bbc303af34cc23ffce59e24e80e3b5c80b /m4/regex.m4
parent36a263effc805cf7e44e10b0d552cff807d5d4d5 (diff)
downloadcoreutils-ce3bb28d9562875cfbd6f6054df68fc742576099.tar.xz
Switch to Isamu Hasegawa's implementation of regex, which is
now in gnulib.
Diffstat (limited to 'm4/regex.m4')
-rw-r--r--m4/regex.m488
1 files changed, 50 insertions, 38 deletions
diff --git a/m4/regex.m4 b/m4/regex.m4
index 34435de66..7908f7e49 100644
--- a/m4/regex.m4
+++ b/m4/regex.m4
@@ -1,6 +1,6 @@
-#serial 22
+#serial 23
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 Free
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 Free
# Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
@@ -19,6 +19,10 @@ dnl Usage: gl_INCLUDED_REGEX([lib/regex.c])
dnl
AC_DEFUN([gl_INCLUDED_REGEX],
[
+ AC_LIBSOURCES(
+ [regcomp.c, regex.c, regex.h,
+ regex_internal.c, regex_internal.h, regexec.c])
+
dnl Even packages that don't use regex.c can use this macro.
dnl Of course, for them it doesn't do anything.
@@ -31,9 +35,10 @@ AC_DEFUN([gl_INCLUDED_REGEX],
# 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>
+ [gl_cv_func_working_re_compile_pattern],
+ [AC_TRY_RUN(
+ [[
+#include <stdio.h>
#include <string.h>
#include <regex.h>
int
@@ -44,12 +49,12 @@ AC_DEFUN([gl_INCLUDED_REGEX],
struct re_registers regs;
re_set_syntax (RE_SYNTAX_POSIX_EGREP);
memset (&regex, 0, sizeof (regex));
- [s = re_compile_pattern ("a[[:@:>@:]]b\n", 9, &regex);]
+ 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. */
+ /* This should succeed, but does not for e.g. glibc-2.1.3. */
memset (&regex, 0, sizeof (regex));
s = re_compile_pattern ("{1", 2, &regex);
@@ -59,11 +64,11 @@ AC_DEFUN([gl_INCLUDED_REGEX],
/* The following example is derived from a problem report
against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */
memset (&regex, 0, sizeof (regex));
- s = re_compile_pattern ("[[an\371]]*n", 7, &regex);
+ s = re_compile_pattern ("[an\371]*n", 7, &regex);
if (s)
exit (1);
- /* This should match, but doesn't for e.g. glibc-2.2.1. */
+ /* This should match, but does not for e.g. glibc-2.2.1. */
if (re_match (&regex, "an", 2, 0, &regs) != 2)
exit (1);
@@ -72,34 +77,50 @@ AC_DEFUN([gl_INCLUDED_REGEX],
if (s)
exit (1);
- /* The version of regex.c in e.g. GNU libc-2.2.93 didn't
+ /* The version of regex.c in e.g. GNU libc-2.2.93 did not
work with a negative RANGE argument. */
if (re_search (&regex, "wxy", 3, 2, -2, &regs) != 1)
exit (1);
+ /* The version of regex.c in older versions of gnulib
+ * ignored RE_ICASE. Detect that problem too. */
+ memset (&regex, 0, sizeof (regex));
+ re_set_syntax(RE_SYNTAX_EMACS|RE_ICASE);
+ s = re_compile_pattern ("x", 1, &regex);
+ if (s)
+ exit (1);
+
+ if (re_search (&regex, "WXY", 3, 0, 3, &regs) < 0)
+ exit (1);
+
+ /* REG_STARTEND was added to glibc on 2004-01-15.
+ Reject older versions. */
+ if (! REG_STARTEND)
+ exit (1);
+
exit (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
+ ]],
+ [gl_cv_func_working_re_compile_pattern=yes],
+ [gl_cv_func_working_re_compile_pattern=no],
+ dnl When crosscompiling, assume it is broken.
+ [gl_cv_func_working_re_compile_pattern=no])])
+ if test $gl_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])
+ 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,
- jm_with_regex=$ac_use_included_regex)
- if test "$jm_with_regex" = yes; then
- AC_LIBOBJ(regex)
+ AC_ARG_WITH([included-regex],
+ [ --without-included-regex don't compile regex; this is the default on
+ systems with recent-enough versions of the GNU C
+ Library (use with caution on other systems)],
+ [gl_with_regex=$withval],
+ [gl_with_regex=$ac_use_included_regex])
+ if test "X$gl_with_regex" = Xyes; then
+ AC_LIBOBJ([regex])
gl_PREREQ_REGEX
fi
],
@@ -107,20 +128,11 @@ AC_DEFUN([gl_INCLUDED_REGEX],
]
)
-# Prerequisites of lib/regex.c.
+# Prerequisites of lib/regex.c and lib/regex_internal.c.
AC_DEFUN([gl_PREREQ_REGEX],
[
- dnl FIXME: Maybe provide a btowc replacement someday: Solaris 2.5.1 lacks it.
- dnl FIXME: Check for wctype and iswctype, and and add -lw if necessary
- dnl to get them.
-
- dnl Persuade glibc <string.h> to declare mempcpy().
- AC_REQUIRE([AC_GNU_SOURCE])
-
AC_REQUIRE([gl_C_RESTRICT])
- AC_REQUIRE([AC_FUNC_ALLOCA])
- AC_REQUIRE([AC_HEADER_STDC])
- AC_CHECK_HEADERS_ONCE(wchar.h wctype.h)
- AC_CHECK_FUNCS_ONCE(isascii mempcpy)
- AC_CHECK_FUNCS(btowc)
+ AC_REQUIRE([AM_LANGINFO_CODESET])
+ AC_CHECK_HEADERS_ONCE([locale.h wchar.h wctype.h])
+ AC_CHECK_FUNCS_ONCE([isblank mbrtowc mempcpy wcrtomb wcscoll])
])