зеркало из https://github.com/microsoft/git.git
Makefile & configure: add a NO_FNMATCH_CASEFOLD flag
On some platforms (like Solaris) there is a fnmatch, but it doesn't support the GNU FNM_CASEFOLD extension that's used by the jj/icase-directory series' fnmatch_icase wrapper. Change the Makefile so that it's now possible to set NO_FNMATCH_CASEFOLD=YesPlease on those systems, and add a configure probe for it. Unlike the NO_REGEX check we don't add AC_INCLUDES_DEFAULT to our headers. This is because on a GNU system the definition of FNM_CASEFOLD in fnmatch.h is guarded by: #if !defined _POSIX_C_SOURCE || _POSIX_C_SOURCE < 2 || defined _GNU_SOURCE One of the headers AC_INCLUDES_DEFAULT includes ends up defining one of those, so if we'd use it we'd always get NO_FNMATCH_CASEFOLD=YesPlease on GNU systems, even though they have FNM_CASEFOLD. When checking the flags we use: ifdef NO_FNMATCH ... else ifdef NO_FNMATCH_CASEFOLD ... endif endif The "else" so that we don't link against compat/fnmatch/fnmatch.o twice if both NO_FNMATCH and NO_FNMATCH_CASEFOLD are defined. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
f3f3d9366e
Коммит
4de066b6f1
10
Makefile
10
Makefile
|
@ -70,6 +70,9 @@ all::
|
|||
#
|
||||
# Define NO_FNMATCH if you don't have fnmatch in the C library.
|
||||
#
|
||||
# Define NO_FNMATCH_CASEFOLD if your fnmatch function doesn't have the
|
||||
# FNM_CASEFOLD GNU extension.
|
||||
#
|
||||
# Define NO_LIBGEN_H if you don't have libgen.h.
|
||||
#
|
||||
# Define NEEDS_LIBGEN if your libgen needs -lgen when linking
|
||||
|
@ -834,6 +837,7 @@ ifeq ($(uname_S),SunOS)
|
|||
NO_MKDTEMP = YesPlease
|
||||
NO_MKSTEMPS = YesPlease
|
||||
NO_REGEX = YesPlease
|
||||
NO_FNMATCH_CASEFOLD = YesPlease
|
||||
ifeq ($(uname_R),5.6)
|
||||
SOCKLEN_T = int
|
||||
NO_HSTRERROR = YesPlease
|
||||
|
@ -1326,6 +1330,12 @@ ifdef NO_FNMATCH
|
|||
COMPAT_CFLAGS += -Icompat/fnmatch
|
||||
COMPAT_CFLAGS += -DNO_FNMATCH
|
||||
COMPAT_OBJS += compat/fnmatch/fnmatch.o
|
||||
else
|
||||
ifdef NO_FNMATCH_CASEFOLD
|
||||
COMPAT_CFLAGS += -Icompat/fnmatch
|
||||
COMPAT_CFLAGS += -DNO_FNMATCH_CASEFOLD
|
||||
COMPAT_OBJS += compat/fnmatch/fnmatch.o
|
||||
endif
|
||||
endif
|
||||
ifdef NO_SETENV
|
||||
COMPAT_CFLAGS += -DNO_SETENV
|
||||
|
|
|
@ -47,6 +47,7 @@ NO_C99_FORMAT=@NO_C99_FORMAT@
|
|||
NO_HSTRERROR=@NO_HSTRERROR@
|
||||
NO_STRCASESTR=@NO_STRCASESTR@
|
||||
NO_FNMATCH=@NO_FNMATCH@
|
||||
NO_FNMATCH_CASEFOLD=@NO_FNMATCH_CASEFOLD@
|
||||
NO_MEMMEM=@NO_MEMMEM@
|
||||
NO_STRLCPY=@NO_STRLCPY@
|
||||
NO_UINTMAX_T=@NO_UINTMAX_T@
|
||||
|
|
22
configure.ac
22
configure.ac
|
@ -789,6 +789,28 @@ GIT_CHECK_FUNC(fnmatch,
|
|||
[NO_FNMATCH=YesPlease])
|
||||
AC_SUBST(NO_FNMATCH)
|
||||
#
|
||||
# Define NO_FNMATCH_CASEFOLD if your fnmatch function doesn't have the
|
||||
# FNM_CASEFOLD GNU extension.
|
||||
AC_CACHE_CHECK([whether the fnmatch function supports the FNMATCH_CASEFOLD GNU extension],
|
||||
[ac_cv_c_excellent_fnmatch], [
|
||||
AC_EGREP_CPP(yippeeyeswehaveit,
|
||||
AC_LANG_PROGRAM([
|
||||
#include <fnmatch.h>
|
||||
],
|
||||
[#ifdef FNM_CASEFOLD
|
||||
yippeeyeswehaveit
|
||||
#endif
|
||||
]),
|
||||
[ac_cv_c_excellent_fnmatch=yes],
|
||||
[ac_cv_c_excellent_fnmatch=no])
|
||||
])
|
||||
if test $ac_cv_c_excellent_fnmatch = yes; then
|
||||
NO_FNMATCH_CASEFOLD=
|
||||
else
|
||||
NO_FNMATCH_CASEFOLD=YesPlease
|
||||
fi
|
||||
AC_SUBST(NO_FNMATCH_CASEFOLD)
|
||||
#
|
||||
# Define NO_MEMMEM if you don't have memmem.
|
||||
GIT_CHECK_FUNC(memmem,
|
||||
[NO_MEMMEM=],
|
||||
|
|
Загрузка…
Ссылка в новой задаче