summaryrefslogtreecommitdiff
path: root/gl/modules/make-glob
blob: 1193ed9763e4d1f96fd123fd0d1fa2c93760fc16 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
Description:
GNU Make version of fnmatch()/glob() functions.  This is a holdover from
a very old version of the globbing library.

Files:
lib/fnmatch.c
lib/fnmatch.in.h
lib/glob.c
lib/glob.in.h

configure.ac:
# Check the system to see if it provides GNU glob.  If not, use our
# local version.  Also avoid versions of glibc which have symlink bug
# https://sourceware.org/bugzilla/show_bug.cgi?id=866 (test from gnulib)
AC_CACHE_CHECK([if system libc has working GNU glob], [make_cv_sys_gnu_glob],[
  if ln -s conf-doesntexist conf$$-globtest 2>/dev/null; then
    make_check_symlink=yes
  else
    make_check_symlink=no
  fi
  if test $cross_compiling = yes || test $make_check_symlink = no; then
    # When cross-compiling or without symlink support, check the version
    AC_COMPILE_IFELSE(
      [AC_LANG_PROGRAM(
        [[#include <features.h>
          #include <gnu-versions.h>
          #include <glob.h>
          #include <fnmatch.h>
        ]],
        [[
          #if _GNU_GLOB_INTERFACE_VERSION == 0
            GNU glob not available in libc
          #elif __GLIBC__ < 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 27)
            GNU glob in libc has dangling symlink bug
          #endif
        ]])],
      [make_cv_sys_gnu_glob=yes],
      [make_cv_sys_gnu_glob=no])
  else
    # Check for GNU glob, and that it handles dangling symlinks properly
    AC_RUN_IFELSE(
      [AC_LANG_PROGRAM(
        [[#include <features.h>
          #include <gnu-versions.h>
          #include <glob.h>
          #include <fnmatch.h>
        ]],
        [[
          #if _GNU_GLOB_INTERFACE_VERSION == 0
          return 1;
          #else
          glob_t found;
          if (glob ("conf*-globtest", 0, 0, &found) == GLOB_NOMATCH)
            return 1;
          globfree (&found);
          #endif
        ]])],
      [make_cv_sys_gnu_glob=yes],
      [make_cv_sys_gnu_glob=no],
      [dnl We don't get here.
       :
      ])
  fi
  test $make_check_symlink = no || rm -f conf$$-globtest
])

# Tell automake about this, so it can build the right .c files.
AM_CONDITIONAL([USE_SYSTEM_GLOB], [test "$make_cv_sys_gnu_glob" = yes])

# Tell build.sh which to use
USE_SYSTEM_GLOB="$make_cv_sys_gnu_glob"
AC_SUBST([USE_SYSTEM_GLOB])

Makefile.am:
if !USE_SYSTEM_GLOB
libgnu_a_SOURCES += fnmatch.c

BUILT_SOURCES += fnmatch.h

fnmatch.h: fnmatch.in.h $(top_builddir)/config.status
	$(AM_V_GEN)rm -f $@-t $@ && \
	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
	  cat $(srcdir)/fnmatch.in.h; \
	} > $@-t && \
	mv -f $@-t $@

MOSTLYCLEANFILES += fnmatch.h fnmatch.h-t

libgnu_a_SOURCES += glob.c

BUILT_SOURCES += glob.h

glob.h: glob.in.h $(top_builddir)/config.status
	$(AM_V_GEN)rm -f $@-t $@ && \
	{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
	  cat $(srcdir)/glob.in.h; \
	} > $@-t && \
	mv -f $@-t $@

MOSTLYCLEANFILES += glob.h glob.h-t
endif

EXTRA_DIST += fnmatch.in.h glob.in.h

Include:
<glob.h>

License:
LGPLv2+

Maintainer:
all, glibc