@matheusbsbs / matheus-bagliano / commits / 4de066b6f1
Fork 0

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>

Ævar Arnfjörð Bjarmason committed Oct 4, 2010 at 02:48 UTC 4de066b6f12a17b2b4d3206ee66efb251e1cdd29
3 files changed +33
Makefile
+10
@@ -70,6 +70,9 @@ all::
70 #
71 # Define NO_FNMATCH if you don't have fnmatch in the C library.
72 #
73 +# Define NO_FNMATCH_CASEFOLD if your fnmatch function doesn't have the
74 +# FNM_CASEFOLD GNU extension.
75 +#
76 # Define NO_LIBGEN_H if you don't have libgen.h.
77 #
78 # Define NEEDS_LIBGEN if your libgen needs -lgen when linking
@@ -834,6 +837,7 @@ ifeq ($(uname_S),SunOS)
837 NO_MKDTEMP = YesPlease
838 NO_MKSTEMPS = YesPlease
839 NO_REGEX = YesPlease
840 + NO_FNMATCH_CASEFOLD = YesPlease
841 ifeq ($(uname_R),5.6)
842 SOCKLEN_T = int
843 NO_HSTRERROR = YesPlease
@@ -1326,6 +1330,12 @@ ifdef NO_FNMATCH
1330 COMPAT_CFLAGS += -Icompat/fnmatch
1331 COMPAT_CFLAGS += -DNO_FNMATCH
1332 COMPAT_OBJS += compat/fnmatch/fnmatch.o
1333 +else
1334 +ifdef NO_FNMATCH_CASEFOLD
1335 + COMPAT_CFLAGS += -Icompat/fnmatch
1336 + COMPAT_CFLAGS += -DNO_FNMATCH_CASEFOLD
1337 + COMPAT_OBJS += compat/fnmatch/fnmatch.o
1338 +endif
1339 endif
1340 ifdef NO_SETENV
1341 COMPAT_CFLAGS += -DNO_SETENV
config.mak.in
+1
@@ -47,6 +47,7 @@ NO_C99_FORMAT=@NO_C99_FORMAT@
47 NO_HSTRERROR=@NO_HSTRERROR@
48 NO_STRCASESTR=@NO_STRCASESTR@
49 NO_FNMATCH=@NO_FNMATCH@
50 +NO_FNMATCH_CASEFOLD=@NO_FNMATCH_CASEFOLD@
51 NO_MEMMEM=@NO_MEMMEM@
52 NO_STRLCPY=@NO_STRLCPY@
53 NO_UINTMAX_T=@NO_UINTMAX_T@
configure.ac
+22
@@ -789,6 +789,28 @@ GIT_CHECK_FUNC(fnmatch,
789 [NO_FNMATCH=YesPlease])
790 AC_SUBST(NO_FNMATCH)
791 #
792 +# Define NO_FNMATCH_CASEFOLD if your fnmatch function doesn't have the
793 +# FNM_CASEFOLD GNU extension.
794 +AC_CACHE_CHECK([whether the fnmatch function supports the FNMATCH_CASEFOLD GNU extension],
795 + [ac_cv_c_excellent_fnmatch], [
796 +AC_EGREP_CPP(yippeeyeswehaveit,
797 + AC_LANG_PROGRAM([
798 +#include <fnmatch.h>
799 +],
800 +[#ifdef FNM_CASEFOLD
801 +yippeeyeswehaveit
802 +#endif
803 +]),
804 + [ac_cv_c_excellent_fnmatch=yes],
805 + [ac_cv_c_excellent_fnmatch=no])
806 +])
807 +if test $ac_cv_c_excellent_fnmatch = yes; then
808 + NO_FNMATCH_CASEFOLD=
809 +else
810 + NO_FNMATCH_CASEFOLD=YesPlease
811 +fi
812 +AC_SUBST(NO_FNMATCH_CASEFOLD)
813 +#
814 # Define NO_MEMMEM if you don't have memmem.
815 GIT_CHECK_FUNC(memmem,
816 [NO_MEMMEM=],