1*820c1a8dSHiroo HAYASHI# serial 73 2*820c1a8dSHiroo HAYASHI 3*820c1a8dSHiroo HAYASHI# Copyright (C) 1996-2001, 2003-2021 Free Software Foundation, Inc. 4*820c1a8dSHiroo HAYASHI# 5*820c1a8dSHiroo HAYASHI# This file is free software; the Free Software Foundation 6*820c1a8dSHiroo HAYASHI# gives unlimited permission to copy and/or distribute it, 7*820c1a8dSHiroo HAYASHI# with or without modifications, as long as this notice is preserved. 8*820c1a8dSHiroo HAYASHI 9*820c1a8dSHiroo HAYASHIdnl Initially derived from code in GNU grep. 10*820c1a8dSHiroo HAYASHIdnl Mostly written by Jim Meyering. 11*820c1a8dSHiroo HAYASHI 12*820c1a8dSHiroo HAYASHIAC_PREREQ([2.50]) 13*820c1a8dSHiroo HAYASHI 14*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_REGEX], 15*820c1a8dSHiroo HAYASHI[ 16*820c1a8dSHiroo HAYASHI AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles 17*820c1a8dSHiroo HAYASHI AC_ARG_WITH([included-regex], 18*820c1a8dSHiroo HAYASHI [AS_HELP_STRING([--without-included-regex], 19*820c1a8dSHiroo HAYASHI [don't compile regex; this is the default on systems 20*820c1a8dSHiroo HAYASHI with recent-enough versions of the GNU C Library 21*820c1a8dSHiroo HAYASHI (use with caution on other systems).])]) 22*820c1a8dSHiroo HAYASHI 23*820c1a8dSHiroo HAYASHI case $with_included_regex in #( 24*820c1a8dSHiroo HAYASHI yes|no) ac_use_included_regex=$with_included_regex 25*820c1a8dSHiroo HAYASHI ;; 26*820c1a8dSHiroo HAYASHI '') 27*820c1a8dSHiroo HAYASHI # If the system regex support is good enough that it passes the 28*820c1a8dSHiroo HAYASHI # following run test, then default to *not* using the included regex.c. 29*820c1a8dSHiroo HAYASHI # If cross compiling, assume the test would fail and use the included 30*820c1a8dSHiroo HAYASHI # regex.c. 31*820c1a8dSHiroo HAYASHI AC_CHECK_DECLS_ONCE([alarm]) 32*820c1a8dSHiroo HAYASHI AC_CHECK_HEADERS_ONCE([malloc.h]) 33*820c1a8dSHiroo HAYASHI AC_CACHE_CHECK([for working re_compile_pattern], 34*820c1a8dSHiroo HAYASHI [gl_cv_func_re_compile_pattern_working], 35*820c1a8dSHiroo HAYASHI [AC_RUN_IFELSE( 36*820c1a8dSHiroo HAYASHI [AC_LANG_PROGRAM( 37*820c1a8dSHiroo HAYASHI [[#include <regex.h> 38*820c1a8dSHiroo HAYASHI 39*820c1a8dSHiroo HAYASHI #include <locale.h> 40*820c1a8dSHiroo HAYASHI #include <limits.h> 41*820c1a8dSHiroo HAYASHI #include <string.h> 42*820c1a8dSHiroo HAYASHI 43*820c1a8dSHiroo HAYASHI #if defined M_CHECK_ACTION || HAVE_DECL_ALARM 44*820c1a8dSHiroo HAYASHI # include <signal.h> 45*820c1a8dSHiroo HAYASHI # include <unistd.h> 46*820c1a8dSHiroo HAYASHI #endif 47*820c1a8dSHiroo HAYASHI 48*820c1a8dSHiroo HAYASHI #if HAVE_MALLOC_H 49*820c1a8dSHiroo HAYASHI # include <malloc.h> 50*820c1a8dSHiroo HAYASHI #endif 51*820c1a8dSHiroo HAYASHI 52*820c1a8dSHiroo HAYASHI #ifdef M_CHECK_ACTION 53*820c1a8dSHiroo HAYASHI /* Exit with distinguishable exit code. */ 54*820c1a8dSHiroo HAYASHI static void sigabrt_no_core (int sig) { raise (SIGTERM); } 55*820c1a8dSHiroo HAYASHI #endif 56*820c1a8dSHiroo HAYASHI ]], 57*820c1a8dSHiroo HAYASHI [[int result = 0; 58*820c1a8dSHiroo HAYASHI static struct re_pattern_buffer regex; 59*820c1a8dSHiroo HAYASHI unsigned char folded_chars[UCHAR_MAX + 1]; 60*820c1a8dSHiroo HAYASHI int i; 61*820c1a8dSHiroo HAYASHI const char *s; 62*820c1a8dSHiroo HAYASHI struct re_registers regs; 63*820c1a8dSHiroo HAYASHI 64*820c1a8dSHiroo HAYASHI /* Some builds of glibc go into an infinite loop on this 65*820c1a8dSHiroo HAYASHI test. Use alarm to force death, and mallopt to avoid 66*820c1a8dSHiroo HAYASHI malloc recursion in diagnosing the corrupted heap. */ 67*820c1a8dSHiroo HAYASHI#if HAVE_DECL_ALARM 68*820c1a8dSHiroo HAYASHI signal (SIGALRM, SIG_DFL); 69*820c1a8dSHiroo HAYASHI alarm (2); 70*820c1a8dSHiroo HAYASHI#endif 71*820c1a8dSHiroo HAYASHI#ifdef M_CHECK_ACTION 72*820c1a8dSHiroo HAYASHI signal (SIGABRT, sigabrt_no_core); 73*820c1a8dSHiroo HAYASHI mallopt (M_CHECK_ACTION, 2); 74*820c1a8dSHiroo HAYASHI#endif 75*820c1a8dSHiroo HAYASHI 76*820c1a8dSHiroo HAYASHI if (setlocale (LC_ALL, "en_US.UTF-8")) 77*820c1a8dSHiroo HAYASHI { 78*820c1a8dSHiroo HAYASHI { 79*820c1a8dSHiroo HAYASHI /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html 80*820c1a8dSHiroo HAYASHI This test needs valgrind to catch the bug on Debian 81*820c1a8dSHiroo HAYASHI GNU/Linux 3.1 x86, but it might catch the bug better 82*820c1a8dSHiroo HAYASHI on other platforms and it shouldn't hurt to try the 83*820c1a8dSHiroo HAYASHI test here. */ 84*820c1a8dSHiroo HAYASHI static char const pat[] = "insert into"; 85*820c1a8dSHiroo HAYASHI static char const data[] = 86*820c1a8dSHiroo HAYASHI "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; 87*820c1a8dSHiroo HAYASHI re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE 88*820c1a8dSHiroo HAYASHI | RE_ICASE); 89*820c1a8dSHiroo HAYASHI memset (®ex, 0, sizeof regex); 90*820c1a8dSHiroo HAYASHI s = re_compile_pattern (pat, sizeof pat - 1, ®ex); 91*820c1a8dSHiroo HAYASHI if (s) 92*820c1a8dSHiroo HAYASHI result |= 1; 93*820c1a8dSHiroo HAYASHI else 94*820c1a8dSHiroo HAYASHI { 95*820c1a8dSHiroo HAYASHI if (re_search (®ex, data, sizeof data - 1, 96*820c1a8dSHiroo HAYASHI 0, sizeof data - 1, ®s) 97*820c1a8dSHiroo HAYASHI != -1) 98*820c1a8dSHiroo HAYASHI result |= 1; 99*820c1a8dSHiroo HAYASHI regfree (®ex); 100*820c1a8dSHiroo HAYASHI } 101*820c1a8dSHiroo HAYASHI } 102*820c1a8dSHiroo HAYASHI 103*820c1a8dSHiroo HAYASHI { 104*820c1a8dSHiroo HAYASHI /* This test is from glibc bug 15078. 105*820c1a8dSHiroo HAYASHI The test case is from Andreas Schwab in 106*820c1a8dSHiroo HAYASHI <https://sourceware.org/ml/libc-alpha/2013-01/msg00967.html>. 107*820c1a8dSHiroo HAYASHI */ 108*820c1a8dSHiroo HAYASHI static char const pat[] = "[^x]x"; 109*820c1a8dSHiroo HAYASHI static char const data[] = 110*820c1a8dSHiroo HAYASHI /* <U1000><U103B><U103D><U1014><U103A><U102F><U1015><U103A> */ 111*820c1a8dSHiroo HAYASHI "\xe1\x80\x80" 112*820c1a8dSHiroo HAYASHI "\xe1\x80\xbb" 113*820c1a8dSHiroo HAYASHI "\xe1\x80\xbd" 114*820c1a8dSHiroo HAYASHI "\xe1\x80\x94" 115*820c1a8dSHiroo HAYASHI "\xe1\x80\xba" 116*820c1a8dSHiroo HAYASHI "\xe1\x80\xaf" 117*820c1a8dSHiroo HAYASHI "\xe1\x80\x95" 118*820c1a8dSHiroo HAYASHI "\xe1\x80\xba" 119*820c1a8dSHiroo HAYASHI "x"; 120*820c1a8dSHiroo HAYASHI re_set_syntax (0); 121*820c1a8dSHiroo HAYASHI memset (®ex, 0, sizeof regex); 122*820c1a8dSHiroo HAYASHI s = re_compile_pattern (pat, sizeof pat - 1, ®ex); 123*820c1a8dSHiroo HAYASHI if (s) 124*820c1a8dSHiroo HAYASHI result |= 1; 125*820c1a8dSHiroo HAYASHI else 126*820c1a8dSHiroo HAYASHI { 127*820c1a8dSHiroo HAYASHI i = re_search (®ex, data, sizeof data - 1, 128*820c1a8dSHiroo HAYASHI 0, sizeof data - 1, 0); 129*820c1a8dSHiroo HAYASHI if (i != 0 && i != 21) 130*820c1a8dSHiroo HAYASHI result |= 1; 131*820c1a8dSHiroo HAYASHI regfree (®ex); 132*820c1a8dSHiroo HAYASHI } 133*820c1a8dSHiroo HAYASHI } 134*820c1a8dSHiroo HAYASHI 135*820c1a8dSHiroo HAYASHI if (! setlocale (LC_ALL, "C")) 136*820c1a8dSHiroo HAYASHI return 1; 137*820c1a8dSHiroo HAYASHI } 138*820c1a8dSHiroo HAYASHI 139*820c1a8dSHiroo HAYASHI /* This test is from glibc bug 3957, reported by Andrew Mackey. */ 140*820c1a8dSHiroo HAYASHI re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); 141*820c1a8dSHiroo HAYASHI memset (®ex, 0, sizeof regex); 142*820c1a8dSHiroo HAYASHI s = re_compile_pattern ("a[^x]b", 6, ®ex); 143*820c1a8dSHiroo HAYASHI if (s) 144*820c1a8dSHiroo HAYASHI result |= 2; 145*820c1a8dSHiroo HAYASHI else 146*820c1a8dSHiroo HAYASHI { 147*820c1a8dSHiroo HAYASHI /* This should fail, but succeeds for glibc-2.5. */ 148*820c1a8dSHiroo HAYASHI if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) 149*820c1a8dSHiroo HAYASHI result |= 2; 150*820c1a8dSHiroo HAYASHI regfree (®ex); 151*820c1a8dSHiroo HAYASHI } 152*820c1a8dSHiroo HAYASHI 153*820c1a8dSHiroo HAYASHI /* This regular expression is from Spencer ere test number 75 154*820c1a8dSHiroo HAYASHI in grep-2.3. */ 155*820c1a8dSHiroo HAYASHI re_set_syntax (RE_SYNTAX_POSIX_EGREP); 156*820c1a8dSHiroo HAYASHI memset (®ex, 0, sizeof regex); 157*820c1a8dSHiroo HAYASHI for (i = 0; i <= UCHAR_MAX; i++) 158*820c1a8dSHiroo HAYASHI folded_chars[i] = i; 159*820c1a8dSHiroo HAYASHI regex.translate = folded_chars; 160*820c1a8dSHiroo HAYASHI s = re_compile_pattern ("a[[:@:>@:]]b\n", 11, ®ex); 161*820c1a8dSHiroo HAYASHI /* This should fail with _Invalid character class name_ error. */ 162*820c1a8dSHiroo HAYASHI if (!s) 163*820c1a8dSHiroo HAYASHI { 164*820c1a8dSHiroo HAYASHI result |= 4; 165*820c1a8dSHiroo HAYASHI regfree (®ex); 166*820c1a8dSHiroo HAYASHI } 167*820c1a8dSHiroo HAYASHI 168*820c1a8dSHiroo HAYASHI /* Ensure that [b-a] is diagnosed as invalid, when 169*820c1a8dSHiroo HAYASHI using RE_NO_EMPTY_RANGES. */ 170*820c1a8dSHiroo HAYASHI re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); 171*820c1a8dSHiroo HAYASHI memset (®ex, 0, sizeof regex); 172*820c1a8dSHiroo HAYASHI s = re_compile_pattern ("a[b-a]", 6, ®ex); 173*820c1a8dSHiroo HAYASHI if (s == 0) 174*820c1a8dSHiroo HAYASHI { 175*820c1a8dSHiroo HAYASHI result |= 8; 176*820c1a8dSHiroo HAYASHI regfree (®ex); 177*820c1a8dSHiroo HAYASHI } 178*820c1a8dSHiroo HAYASHI 179*820c1a8dSHiroo HAYASHI /* This should succeed, but does not for glibc-2.1.3. */ 180*820c1a8dSHiroo HAYASHI memset (®ex, 0, sizeof regex); 181*820c1a8dSHiroo HAYASHI s = re_compile_pattern ("{1", 2, ®ex); 182*820c1a8dSHiroo HAYASHI if (s) 183*820c1a8dSHiroo HAYASHI result |= 8; 184*820c1a8dSHiroo HAYASHI else 185*820c1a8dSHiroo HAYASHI regfree (®ex); 186*820c1a8dSHiroo HAYASHI 187*820c1a8dSHiroo HAYASHI /* The following example is derived from a problem report 188*820c1a8dSHiroo HAYASHI against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ 189*820c1a8dSHiroo HAYASHI memset (®ex, 0, sizeof regex); 190*820c1a8dSHiroo HAYASHI s = re_compile_pattern ("[an\371]*n", 7, ®ex); 191*820c1a8dSHiroo HAYASHI if (s) 192*820c1a8dSHiroo HAYASHI result |= 8; 193*820c1a8dSHiroo HAYASHI else 194*820c1a8dSHiroo HAYASHI { 195*820c1a8dSHiroo HAYASHI /* This should match, but does not for glibc-2.2.1. */ 196*820c1a8dSHiroo HAYASHI if (re_match (®ex, "an", 2, 0, ®s) != 2) 197*820c1a8dSHiroo HAYASHI result |= 8; 198*820c1a8dSHiroo HAYASHI else 199*820c1a8dSHiroo HAYASHI { 200*820c1a8dSHiroo HAYASHI free (regs.start); 201*820c1a8dSHiroo HAYASHI free (regs.end); 202*820c1a8dSHiroo HAYASHI } 203*820c1a8dSHiroo HAYASHI regfree (®ex); 204*820c1a8dSHiroo HAYASHI } 205*820c1a8dSHiroo HAYASHI 206*820c1a8dSHiroo HAYASHI memset (®ex, 0, sizeof regex); 207*820c1a8dSHiroo HAYASHI s = re_compile_pattern ("x", 1, ®ex); 208*820c1a8dSHiroo HAYASHI if (s) 209*820c1a8dSHiroo HAYASHI result |= 8; 210*820c1a8dSHiroo HAYASHI else 211*820c1a8dSHiroo HAYASHI { 212*820c1a8dSHiroo HAYASHI /* glibc-2.2.93 does not work with a negative RANGE argument. */ 213*820c1a8dSHiroo HAYASHI if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) 214*820c1a8dSHiroo HAYASHI result |= 8; 215*820c1a8dSHiroo HAYASHI else 216*820c1a8dSHiroo HAYASHI { 217*820c1a8dSHiroo HAYASHI free (regs.start); 218*820c1a8dSHiroo HAYASHI free (regs.end); 219*820c1a8dSHiroo HAYASHI } 220*820c1a8dSHiroo HAYASHI regfree (®ex); 221*820c1a8dSHiroo HAYASHI } 222*820c1a8dSHiroo HAYASHI 223*820c1a8dSHiroo HAYASHI /* The version of regex.c in older versions of gnulib 224*820c1a8dSHiroo HAYASHI ignored RE_ICASE. Detect that problem too. */ 225*820c1a8dSHiroo HAYASHI re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); 226*820c1a8dSHiroo HAYASHI memset (®ex, 0, sizeof regex); 227*820c1a8dSHiroo HAYASHI s = re_compile_pattern ("x", 1, ®ex); 228*820c1a8dSHiroo HAYASHI if (s) 229*820c1a8dSHiroo HAYASHI result |= 16; 230*820c1a8dSHiroo HAYASHI else 231*820c1a8dSHiroo HAYASHI { 232*820c1a8dSHiroo HAYASHI if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) 233*820c1a8dSHiroo HAYASHI result |= 16; 234*820c1a8dSHiroo HAYASHI else 235*820c1a8dSHiroo HAYASHI { 236*820c1a8dSHiroo HAYASHI free (regs.start); 237*820c1a8dSHiroo HAYASHI free (regs.end); 238*820c1a8dSHiroo HAYASHI } 239*820c1a8dSHiroo HAYASHI regfree (®ex); 240*820c1a8dSHiroo HAYASHI } 241*820c1a8dSHiroo HAYASHI 242*820c1a8dSHiroo HAYASHI /* Catch a bug reported by Vin Shelton in 243*820c1a8dSHiroo HAYASHI https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html 244*820c1a8dSHiroo HAYASHI */ 245*820c1a8dSHiroo HAYASHI re_set_syntax (RE_SYNTAX_POSIX_BASIC 246*820c1a8dSHiroo HAYASHI & ~RE_CONTEXT_INVALID_DUP 247*820c1a8dSHiroo HAYASHI & ~RE_NO_EMPTY_RANGES); 248*820c1a8dSHiroo HAYASHI memset (®ex, 0, sizeof regex); 249*820c1a8dSHiroo HAYASHI s = re_compile_pattern ("[[:alnum:]_-]\\\\+\$", 16, ®ex); 250*820c1a8dSHiroo HAYASHI if (s) 251*820c1a8dSHiroo HAYASHI result |= 32; 252*820c1a8dSHiroo HAYASHI else 253*820c1a8dSHiroo HAYASHI regfree (®ex); 254*820c1a8dSHiroo HAYASHI 255*820c1a8dSHiroo HAYASHI /* REG_STARTEND was added to glibc on 2004-01-15. 256*820c1a8dSHiroo HAYASHI Reject older versions. */ 257*820c1a8dSHiroo HAYASHI if (! REG_STARTEND) 258*820c1a8dSHiroo HAYASHI result |= 64; 259*820c1a8dSHiroo HAYASHI 260*820c1a8dSHiroo HAYASHI /* Matching with the compiled form of this regexp would provoke 261*820c1a8dSHiroo HAYASHI an assertion failure prior to glibc-2.28: 262*820c1a8dSHiroo HAYASHI regexec.c:1375: pop_fail_stack: Assertion 'num >= 0' failed 263*820c1a8dSHiroo HAYASHI With glibc-2.28, compilation fails and reports the invalid 264*820c1a8dSHiroo HAYASHI back reference. */ 265*820c1a8dSHiroo HAYASHI re_set_syntax (RE_SYNTAX_POSIX_EGREP); 266*820c1a8dSHiroo HAYASHI memset (®ex, 0, sizeof regex); 267*820c1a8dSHiroo HAYASHI s = re_compile_pattern ("0|()0|\\\\1|0", 10, ®ex); 268*820c1a8dSHiroo HAYASHI if (!s) 269*820c1a8dSHiroo HAYASHI { 270*820c1a8dSHiroo HAYASHI memset (®s, 0, sizeof regs); 271*820c1a8dSHiroo HAYASHI i = re_search (®ex, "x", 1, 0, 1, ®s); 272*820c1a8dSHiroo HAYASHI if (i != -1) 273*820c1a8dSHiroo HAYASHI result |= 64; 274*820c1a8dSHiroo HAYASHI if (0 <= i) 275*820c1a8dSHiroo HAYASHI { 276*820c1a8dSHiroo HAYASHI free (regs.start); 277*820c1a8dSHiroo HAYASHI free (regs.end); 278*820c1a8dSHiroo HAYASHI } 279*820c1a8dSHiroo HAYASHI regfree (®ex); 280*820c1a8dSHiroo HAYASHI } 281*820c1a8dSHiroo HAYASHI else 282*820c1a8dSHiroo HAYASHI { 283*820c1a8dSHiroo HAYASHI if (strcmp (s, "Invalid back reference")) 284*820c1a8dSHiroo HAYASHI result |= 64; 285*820c1a8dSHiroo HAYASHI } 286*820c1a8dSHiroo HAYASHI 287*820c1a8dSHiroo HAYASHI /* glibc bug 11053. */ 288*820c1a8dSHiroo HAYASHI re_set_syntax (RE_SYNTAX_POSIX_BASIC); 289*820c1a8dSHiroo HAYASHI memset (®ex, 0, sizeof regex); 290*820c1a8dSHiroo HAYASHI static char const pat_sub2[] = "\\\\(a*\\\\)*a*\\\\1"; 291*820c1a8dSHiroo HAYASHI s = re_compile_pattern (pat_sub2, sizeof pat_sub2 - 1, ®ex); 292*820c1a8dSHiroo HAYASHI if (s) 293*820c1a8dSHiroo HAYASHI result |= 64; 294*820c1a8dSHiroo HAYASHI else 295*820c1a8dSHiroo HAYASHI { 296*820c1a8dSHiroo HAYASHI memset (®s, 0, sizeof regs); 297*820c1a8dSHiroo HAYASHI static char const data[] = "a"; 298*820c1a8dSHiroo HAYASHI int datalen = sizeof data - 1; 299*820c1a8dSHiroo HAYASHI i = re_search (®ex, data, datalen, 0, datalen, ®s); 300*820c1a8dSHiroo HAYASHI if (i != 0) 301*820c1a8dSHiroo HAYASHI result |= 64; 302*820c1a8dSHiroo HAYASHI else if (regs.num_regs < 2) 303*820c1a8dSHiroo HAYASHI result |= 64; 304*820c1a8dSHiroo HAYASHI else if (! (regs.start[0] == 0 && regs.end[0] == 1)) 305*820c1a8dSHiroo HAYASHI result |= 64; 306*820c1a8dSHiroo HAYASHI else if (! (regs.start[1] == 0 && regs.end[1] == 0)) 307*820c1a8dSHiroo HAYASHI result |= 64; 308*820c1a8dSHiroo HAYASHI regfree (®ex); 309*820c1a8dSHiroo HAYASHI free (regs.start); 310*820c1a8dSHiroo HAYASHI free (regs.end); 311*820c1a8dSHiroo HAYASHI } 312*820c1a8dSHiroo HAYASHI 313*820c1a8dSHiroo HAYASHI#if 0 314*820c1a8dSHiroo HAYASHI /* It would be nice to reject hosts whose regoff_t values are too 315*820c1a8dSHiroo HAYASHI narrow (including glibc on hosts with 64-bit ptrdiff_t and 316*820c1a8dSHiroo HAYASHI 32-bit int), but we should wait until glibc implements this 317*820c1a8dSHiroo HAYASHI feature. Otherwise, support for equivalence classes and 318*820c1a8dSHiroo HAYASHI multibyte collation symbols would always be broken except 319*820c1a8dSHiroo HAYASHI when compiling --without-included-regex. */ 320*820c1a8dSHiroo HAYASHI if (sizeof (regoff_t) < sizeof (ptrdiff_t) 321*820c1a8dSHiroo HAYASHI || sizeof (regoff_t) < sizeof (ssize_t)) 322*820c1a8dSHiroo HAYASHI result |= 64; 323*820c1a8dSHiroo HAYASHI#endif 324*820c1a8dSHiroo HAYASHI 325*820c1a8dSHiroo HAYASHI return result; 326*820c1a8dSHiroo HAYASHI ]])], 327*820c1a8dSHiroo HAYASHI [gl_cv_func_re_compile_pattern_working=yes], 328*820c1a8dSHiroo HAYASHI [gl_cv_func_re_compile_pattern_working=no], 329*820c1a8dSHiroo HAYASHI [case "$host_os" in 330*820c1a8dSHiroo HAYASHI # Guess no on native Windows. 331*820c1a8dSHiroo HAYASHI mingw*) gl_cv_func_re_compile_pattern_working="guessing no" ;; 332*820c1a8dSHiroo HAYASHI # Otherwise obey --enable-cross-guesses. 333*820c1a8dSHiroo HAYASHI *) gl_cv_func_re_compile_pattern_working="$gl_cross_guess_normal" ;; 334*820c1a8dSHiroo HAYASHI esac 335*820c1a8dSHiroo HAYASHI ]) 336*820c1a8dSHiroo HAYASHI ]) 337*820c1a8dSHiroo HAYASHI case "$gl_cv_func_re_compile_pattern_working" in #( 338*820c1a8dSHiroo HAYASHI *yes) ac_use_included_regex=no;; #( 339*820c1a8dSHiroo HAYASHI *no) ac_use_included_regex=yes;; 340*820c1a8dSHiroo HAYASHI esac 341*820c1a8dSHiroo HAYASHI ;; 342*820c1a8dSHiroo HAYASHI *) AC_MSG_ERROR([Invalid value for --with-included-regex: $with_included_regex]) 343*820c1a8dSHiroo HAYASHI ;; 344*820c1a8dSHiroo HAYASHI esac 345*820c1a8dSHiroo HAYASHI 346*820c1a8dSHiroo HAYASHI if test $ac_use_included_regex = yes; then 347*820c1a8dSHiroo HAYASHI AC_DEFINE([_REGEX_INCLUDE_LIMITS_H], [1], 348*820c1a8dSHiroo HAYASHI [Define if you want <regex.h> to include <limits.h>, so that it 349*820c1a8dSHiroo HAYASHI consistently overrides <limits.h>'s RE_DUP_MAX.]) 350*820c1a8dSHiroo HAYASHI AC_DEFINE([_REGEX_LARGE_OFFSETS], [1], 351*820c1a8dSHiroo HAYASHI [Define if you want regoff_t to be at least as wide POSIX requires.]) 352*820c1a8dSHiroo HAYASHI AC_DEFINE([re_syntax_options], [rpl_re_syntax_options], 353*820c1a8dSHiroo HAYASHI [Define to rpl_re_syntax_options if the replacement should be used.]) 354*820c1a8dSHiroo HAYASHI AC_DEFINE([re_set_syntax], [rpl_re_set_syntax], 355*820c1a8dSHiroo HAYASHI [Define to rpl_re_set_syntax if the replacement should be used.]) 356*820c1a8dSHiroo HAYASHI AC_DEFINE([re_compile_pattern], [rpl_re_compile_pattern], 357*820c1a8dSHiroo HAYASHI [Define to rpl_re_compile_pattern if the replacement should be used.]) 358*820c1a8dSHiroo HAYASHI AC_DEFINE([re_compile_fastmap], [rpl_re_compile_fastmap], 359*820c1a8dSHiroo HAYASHI [Define to rpl_re_compile_fastmap if the replacement should be used.]) 360*820c1a8dSHiroo HAYASHI AC_DEFINE([re_search], [rpl_re_search], 361*820c1a8dSHiroo HAYASHI [Define to rpl_re_search if the replacement should be used.]) 362*820c1a8dSHiroo HAYASHI AC_DEFINE([re_search_2], [rpl_re_search_2], 363*820c1a8dSHiroo HAYASHI [Define to rpl_re_search_2 if the replacement should be used.]) 364*820c1a8dSHiroo HAYASHI AC_DEFINE([re_match], [rpl_re_match], 365*820c1a8dSHiroo HAYASHI [Define to rpl_re_match if the replacement should be used.]) 366*820c1a8dSHiroo HAYASHI AC_DEFINE([re_match_2], [rpl_re_match_2], 367*820c1a8dSHiroo HAYASHI [Define to rpl_re_match_2 if the replacement should be used.]) 368*820c1a8dSHiroo HAYASHI AC_DEFINE([re_set_registers], [rpl_re_set_registers], 369*820c1a8dSHiroo HAYASHI [Define to rpl_re_set_registers if the replacement should be used.]) 370*820c1a8dSHiroo HAYASHI AC_DEFINE([re_comp], [rpl_re_comp], 371*820c1a8dSHiroo HAYASHI [Define to rpl_re_comp if the replacement should be used.]) 372*820c1a8dSHiroo HAYASHI AC_DEFINE([re_exec], [rpl_re_exec], 373*820c1a8dSHiroo HAYASHI [Define to rpl_re_exec if the replacement should be used.]) 374*820c1a8dSHiroo HAYASHI AC_DEFINE([regcomp], [rpl_regcomp], 375*820c1a8dSHiroo HAYASHI [Define to rpl_regcomp if the replacement should be used.]) 376*820c1a8dSHiroo HAYASHI AC_DEFINE([regexec], [rpl_regexec], 377*820c1a8dSHiroo HAYASHI [Define to rpl_regexec if the replacement should be used.]) 378*820c1a8dSHiroo HAYASHI AC_DEFINE([regerror], [rpl_regerror], 379*820c1a8dSHiroo HAYASHI [Define to rpl_regerror if the replacement should be used.]) 380*820c1a8dSHiroo HAYASHI AC_DEFINE([regfree], [rpl_regfree], 381*820c1a8dSHiroo HAYASHI [Define to rpl_regfree if the replacement should be used.]) 382*820c1a8dSHiroo HAYASHI fi 383*820c1a8dSHiroo HAYASHI]) 384*820c1a8dSHiroo HAYASHI 385*820c1a8dSHiroo HAYASHI# Prerequisites of lib/regex.c and lib/regex_internal.c. 386*820c1a8dSHiroo HAYASHIAC_DEFUN([gl_PREREQ_REGEX], 387*820c1a8dSHiroo HAYASHI[ 388*820c1a8dSHiroo HAYASHI AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) 389*820c1a8dSHiroo HAYASHI AC_REQUIRE([AC_C_INLINE]) 390*820c1a8dSHiroo HAYASHI AC_REQUIRE([AC_C_RESTRICT]) 391*820c1a8dSHiroo HAYASHI AC_REQUIRE([AC_TYPE_MBSTATE_T]) 392*820c1a8dSHiroo HAYASHI AC_REQUIRE([gl_EEMALLOC]) 393*820c1a8dSHiroo HAYASHI AC_CHECK_HEADERS([libintl.h]) 394*820c1a8dSHiroo HAYASHI AC_CHECK_FUNCS_ONCE([isblank iswctype]) 395*820c1a8dSHiroo HAYASHI AC_CHECK_DECLS([isblank], [], [], [[#include <ctype.h>]]) 396*820c1a8dSHiroo HAYASHI]) 397