On 26/09/2017 08:29, Andreas Schwab wrote: > Current version of make won't build against this (undefined reference to > __alloca from included glob sources). > > Andreas. > I am not very familiar of the process to incorporate gnulib code in external projects, but I see other possible issues that would need to be fixed as well:
* FLEXIBLE_ARRAY_MEMBER definition for !__LIBC. * __glob_pattern_type duplicated prototype. * __set_errno and mempcpy definition. I could build gnumake with forced internal glob implementation (make_cv_sys_gnu_glob=no) with the patch following patch. Looking gnulib I am not sure if the correct way to use mempcpy for !_LIBC. --- diff --git a/posix/glob.c b/posix/glob.c index 98122dac88..31e3aba4dd 100644 --- a/posix/glob.c +++ b/posix/glob.c @@ -65,11 +65,15 @@ # define __stat64(fname, buf) stat (fname, buf) # define __fxstatat64(_, d, f, st, flag) fstatat (d, f, st, flag) # define struct_stat64 struct stat -# ifndef __MVS__ -# define __alloca alloca -# endif +# define __alloca alloca # define __readdir readdir +# define FLEXIBLE_ARRAY_MEMBER 0 # define COMPILE_GLOB64 +static inline void * +mempcpy (void *dest, const void *src, size_t n) +{ + return memcpy (dest, src, n) + n; +} #endif /* _LIBC */ #include <fnmatch.h> @@ -230,8 +234,6 @@ glob_use_alloca (size_t alloca_used, size_t len) static int glob_in_dir (const char *pattern, const char *directory, int flags, int (*errfunc) (const char *, int), glob_t *pglob, size_t alloca_used); -extern int __glob_pattern_type (const char *pattern, int quote) - attribute_hidden; static int prefix_array (const char *prefix, char **array, size_t n) __THROWNL; static int collated_compare (const void *, const void *) __THROWNL;