]> git.ipfire.org Git - thirdparty/autoconf.git/commitdiff
(_AC_FUNC_FNMATCH): New macro.
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 17 May 2002 07:08:41 +0000 (07:08 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 17 May 2002 07:08:41 +0000 (07:08 +0000)
(AC_FUNC_FNMATCH): Use it.  Test only for POSIX conformance,
not for GNU extensions; this undoes part of the 2000-11-03 change,
reverting to 2.13-compatible behavior.
Add new optional argument DIR.
(AC_FUNC_FNMATCH_GNU): New macro.

lib/autoconf/functions.m4

index 3abda5945576ba80a6eedaf1f068b36a06b9983f..0ea4a90e15aeea46247a823c226a08af708548e2 100644 (file)
@@ -342,31 +342,71 @@ fi
 AU_ALIAS([AM_FUNC_ERROR_AT_LINE], [AC_FUNC_ERROR_AT_LINE])
 
 
-# AC_FUNC_FNMATCH
-# ---------------
-# We look for fnmatch.h to avoid that the test fails in C++.
+# _AC_FUNC_FNMATCH([DIR], STANDARD, SHELL_VAR, VARIABLE)
+# ---------------------------------------------
+AC_DEFUN([_AC_FUNC_FNMATCH],
+[m4_ifval([$1],
+   [AC_REQUIRE([AC_C_CONST])
+    AC_REQUIRE([AC_FUNC_ALLOCA])
+    AC_REQUIRE([AC_MBSTATE_T])])
+ AC_CACHE_CHECK(
+   [for working $2 fnmatch],
+   [$3],
+   # Some versions of Solaris, SCO, and the GNU C Library
+   # have a broken or incompatible fnmatch.
+   # So we run a test program.  If we are cross-compiling, take no chance.
+   # Thanks to John Oleynick, Franc,ois Pinard, and Paul Eggert for this test.
+   [AC_RUN_IFELSE(
+      [AC_LANG_PROGRAM(
+        [#include <fnmatch.h>
+#         define y(a, b, c) (fnmatch (a, b, c) == 0)
+#         define n(a, b, c) (fnmatch (a, b, c) == FNM_NOMATCH)],
+        [exit
+          (!(y ("a*", "abc", 0)
+             && n ("d*/*1", "d/s/1", FNM_PATHNAME)
+             && y ("a\\\\bc", "abc", 0)
+             && n ("a\\\\bc", "abc", FNM_NOESCAPE)
+             && y ("*x", ".x", 0)
+             && n ("*x", ".x", FNM_PERIOD)
+             && m4_if([$2], [GNU],
+                  [y ("xxXX", "xXxX", FNM_CASEFOLD)
+                   && y ("a++(x|yy)b", "a+xyyyyxb", FNM_EXTMATCH)
+                   && n ("d*/*1", "d/s/1", FNM_FILE_NAME)
+                   && y ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR)
+                   && y ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR)
+                   && y ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR)],
+                  1)));])],
+      [$3=yes],
+      [$3=no],
+      [$3=cross])])
+ if test $$3 = yes; then
+   m4_ifval([$1], [rm -f $1/fnmatch.h])
+   AC_DEFINE([$4], 1,
+     [Define to 1 if your system has a working $2 `fnmatch' function.])
+ else
+   m4_ifval([$1],
+     [AC_CHECK_DECLS([getenv])
+      AC_CHECK_FUNCS(mbsrtowcs mempcpy wmempcpy)
+      AC_CHECK_HEADERS(wchar.h wctype.h)
+      AC_LIBOBJ(fnmatch)
+      AC_CONFIG_LINKS([$1/fnmatch.h:$1/fnmatch_.h])
+      AC_DEFINE(fnmatch, rpl_fnmatch,
+       [Define to rpl_fnmatch if the replacement function should be used.])
+     ],
+     [:])
+ fi
+])# _AC_FUNC_FNMATCH
+
+# AC_FUNC_FNMATCH([DIR])
+# ----------------------
 AC_DEFUN([AC_FUNC_FNMATCH],
-[AC_CACHE_CHECK([for working GNU-style fnmatch],
-                [ac_cv_func_fnmatch_works],
-# Some versions of Solaris, SCO, and the GNU C Library
-# have a broken or incompatible fnmatch.
-# So we run a test program.  If we are cross-compiling, take no chance.
-# Thanks to John Oleynick, Franc,ois Pinard, and Paul Eggert for this test.
-[AC_RUN_IFELSE([AC_LANG_PROGRAM([@%:@include <fnmatch.h>],
- [exit (fnmatch ("a*", "abc", 0) != 0
-       || fnmatch ("d*/*1", "d/s/1", FNM_FILE_NAME) != FNM_NOMATCH
-       || fnmatch ("*", "x", FNM_FILE_NAME | FNM_LEADING_DIR) != 0
-       || fnmatch ("x*", "x/y/z", FNM_FILE_NAME | FNM_LEADING_DIR) != 0
-       || fnmatch ("*c*", "c/x", FNM_FILE_NAME | FNM_LEADING_DIR) != 0);])],
-               [ac_cv_func_fnmatch_works=yes],
-               [ac_cv_func_fnmatch_works=no],
-               [ac_cv_func_fnmatch_works=no])])
-if test $ac_cv_func_fnmatch_works = yes; then
-  AC_DEFINE(HAVE_FNMATCH, 1,
-            [Define to 1 if your system has a working `fnmatch' function.])
-fi
-])# AC_FUNC_FNMATCH
+[_AC_FUNC_FNMATCH([$1], [POSIX], [ac_cv_func_fnmatch_works], [HAVE_FNMATCH])])
 
+# AC_FUNC_FNMATCH_GNU([DIR])
+# --------------------------
+AC_DEFUN([AC_FUNC_FNMATCH_GNU],
+[AC_REQUIRE([AC_GNU_SOURCE])
+ _AC_FUNC_FNMATCH([$1], [GNU], [ac_cv_func_fnmatch_gnu], [HAVE_FNMATCH_GNU])])
 
 # AU::AM_FUNC_FNMATCH
 # AU::fp_FUNC_FNMATCH