summaryrefslogtreecommitdiffstats
path: root/gl/m4/fnmatch.m4
diff options
context:
space:
mode:
Diffstat (limited to 'gl/m4/fnmatch.m4')
-rw-r--r--gl/m4/fnmatch.m435
1 files changed, 32 insertions, 3 deletions
diff --git a/gl/m4/fnmatch.m4 b/gl/m4/fnmatch.m4
index eba70de..54d5c7b 100644
--- a/gl/m4/fnmatch.m4
+++ b/gl/m4/fnmatch.m4
@@ -1,6 +1,6 @@
-# Check for fnmatch - serial 17 -*- coding: utf-8 -*-
+# Check for fnmatch - serial 20 -*- coding: utf-8 -*-
-# Copyright (C) 2000-2007, 2009-2023 Free Software Foundation, Inc.
+# Copyright (C) 2000-2007, 2009-2024 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -14,7 +14,7 @@ AC_DEFUN([gl_FUNC_FNMATCH_POSIX],
m4_divert_text([DEFAULTS], [gl_fnmatch_required=POSIX])
AC_REQUIRE([gl_FNMATCH_H])
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+ AC_REQUIRE([AC_CANONICAL_HOST])
gl_fnmatch_required_lowercase=`
echo $gl_fnmatch_required | LC_ALL=C tr '[[A-Z]]' '[[a-z]]'
`
@@ -108,6 +108,17 @@ AC_DEFUN([gl_FUNC_FNMATCH_POSIX],
exists in glibc 2.12, fixed in glibc 2.13. */
if (!y ("[/b", "[/b", 0)) /*"]]"*/
result |= 4;
+ /* glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=17062>
+ is fixed in glibc 2.20.
+ glibc bugs <https://sourceware.org/bugzilla/show_bug.cgi?id=18032>
+ <https://sourceware.org/bugzilla/show_bug.cgi?id=18036>
+ are fixed in glibc 2.22.
+ These bugs are not easy to test for reliably (without mmap),
+ therefore test the glibc version. */
+ #if defined __GLIBC__
+ if (__GLIBC__ == 2 && __GLIBC_MINOR__ < 22)
+ result |= 4;
+ #endif
/* This test fails on FreeBSD 13.2, NetBSD 9.3, Cygwin 3.4.6. */
if (!y ("[[:alnum:]]", "a", 0))
result |= 8;
@@ -158,6 +169,24 @@ AC_DEFUN([gl_FUNC_FNMATCH_POSIX],
*yes) ;;
*) REPLACE_FNMATCH=1 ;;
esac
+ dnl On AIX 7.2 in 32-bit mode, fnmatch()'s only POSIX compliance problem is
+ dnl that is does not support characters outside the Unicode BMP correctly.
+ dnl Test case: fnmatch ("x?y", "x\360\237\230\213y", 0) == 0
+ dnl This is due to wchar_t being only 16 bits wide.
+ AC_REQUIRE([gl_UCHAR_H])
+ if test $SMALL_WCHAR_T = 1; then
+ case "$host_os" in
+ cygwin*)
+ dnl On Cygwin < 3.5.0, the above $gl_fnmatch_result came out as 'no',
+ dnl On Cygwin >= 3.5.0, fnmatch supports all Unicode characters,
+ dnl despite wchar_t being only 16 bits wide (because internally it
+ dnl works on wint_t values).
+ ;;
+ *)
+ REPLACE_FNMATCH=1
+ ;;
+ esac
+ fi
fi
if test $HAVE_FNMATCH = 0 || test $REPLACE_FNMATCH = 1; then
gl_REPLACE_FNMATCH_H