From 423d111b6b4525fc553860302b66d90f8081d149 Mon Sep 17 00:00:00 2001 From: q66 Date: Tue, 24 Mar 2020 17:24:16 +0100 Subject: [PATCH] make: re-add necessary patches --- srcpkgs/make/patches/fix-glibc-2.28.patch | 96 +++++++++++++++++++++++ srcpkgs/make/patches/fix-glob-dtype.patch | 31 ++++++++ srcpkgs/make/template | 2 +- 3 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/make/patches/fix-glibc-2.28.patch create mode 100644 srcpkgs/make/patches/fix-glob-dtype.patch diff --git a/srcpkgs/make/patches/fix-glibc-2.28.patch b/srcpkgs/make/patches/fix-glibc-2.28.patch new file mode 100644 index 00000000000..62ecf66d7b5 --- /dev/null +++ b/srcpkgs/make/patches/fix-glibc-2.28.patch @@ -0,0 +1,96 @@ +From 193f1e81edd6b1b56b0eb0ff8aa4b41c7b4257b4 Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Sun, 24 Sep 2017 09:12:58 -0400 +Subject: glob: Do not assume glibc glob internals. + +It has been proposed that glibc glob start using gl_lstat, +which the API allows it to do. GNU 'make' should not get in +the way of this. See: +https://sourceware.org/ml/libc-alpha/2017-09/msg00409.html + +* dir.c (local_lstat): New function, like local_stat. +(dir_setup_glob): Use it to initialize gl_lstat too, as the API +requires. +--- + dir.c | 29 +++++++++++++++++++++++++++-- + 1 file changed, 27 insertions(+), 2 deletions(-) + +diff --git a/dir.c b/dir.c +index adbb8a9..c343e4c 100644 +--- a/dir.c ++++ b/dir.c +@@ -1299,15 +1299,40 @@ local_stat (const char *path, struct stat *buf) + } + #endif + ++/* Similarly for lstat. */ ++#if !defined(lstat) && !defined(WINDOWS32) || defined(VMS) ++# ifndef VMS ++# ifndef HAVE_SYS_STAT_H ++int lstat (const char *path, struct stat *sbuf); ++# endif ++# else ++ /* We are done with the fake lstat. Go back to the real lstat */ ++# ifdef lstat ++# undef lstat ++# endif ++# endif ++# define local_lstat lstat ++#elif defined(WINDOWS32) ++/* Windows doesn't support lstat(). */ ++# define local_lstat local_stat ++#else ++static int ++local_lstat (const char *path, struct stat *buf) ++{ ++ int e; ++ EINTRLOOP (e, lstat (path, buf)); ++ return e; ++} ++#endif ++ + void + dir_setup_glob (glob_t *gl) + { + gl->gl_opendir = open_dirstream; + gl->gl_readdir = read_dirstream; + gl->gl_closedir = free; ++ gl->gl_lstat = local_lstat; + gl->gl_stat = local_stat; +- /* We don't bother setting gl_lstat, since glob never calls it. +- The slot is only there for compatibility with 4.4 BSD. */ + } + + void +-- +cgit v1.0-41-gc330 + +From 48c8a116a914a325a0497721f5d8b58d5bba34d4 Mon Sep 17 00:00:00 2001 +From: Paul Smith +Date: Sun, 19 Nov 2017 15:09:16 -0500 +Subject: * configure.ac: Support GLIBC glob interface version 2 + +--- + configure.ac | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 8c72568..4710832 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -404,10 +404,9 @@ AC_CACHE_CHECK([if system libc has GNU glob], [make_cv_sys_gnu_glob], + #include + #include + +-#define GLOB_INTERFACE_VERSION 1 + #if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1 + # include +-# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION ++# if _GNU_GLOB_INTERFACE_VERSION == 1 || _GNU_GLOB_INTERFACE_VERSION == 2 + gnu glob + # endif + #endif], +-- +cgit v1.0-41-gc330 + + diff --git a/srcpkgs/make/patches/fix-glob-dtype.patch b/srcpkgs/make/patches/fix-glob-dtype.patch new file mode 100644 index 00000000000..56c4e6c0505 --- /dev/null +++ b/srcpkgs/make/patches/fix-glob-dtype.patch @@ -0,0 +1,31 @@ +musl 1.1.19 introduced the _DIRENT_HAVE_D_* macros in commit +1bc10ffeaa7c7ce44b3e214e02e302642511c7c7, triggering a bug in GNU make +that's present up to the current version: + +http://git.savannah.gnu.org/cgit/make.git/tree/glob/glob.c?id=5d653b535a0e0e607c8be2016bcaadd6f326a698#n1333 + +The glob replacement they ship includes and uses internally a +GLOB_ONLYDIR flag, which is opportunistic and implemented via d_type +if _DIRENT_HAVE_D_TYPE is defined, and it fails to consider that +DT_LNK could be a symlink to a directory. This is an ancient version +of glob.c; the modern GNU glob in glibc rightly considers DT_LNK. Thus +the bug is not seen on glibc systems (where the glob replacement is +not used), but will be seen on any system where _DIRENT_HAVE_D_TYPE is +defined and where configure decides to replace the libc glob with +their GNU one. + +http://www.openwall.com/lists/musl/2018/03/13/1 + +diff --git a/glob/glob.c b/glob/glob.c +index f3911bc..d6bb8ba 100644 +--- a/glob/glob.c ++++ b/glob/glob.c +@@ -1330,7 +1330,7 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob) + /* If we shall match only directories use the information + provided by the dirent call if possible. */ + if ((flags & GLOB_ONLYDIR) +- && d->d_type != DT_UNKNOWN && d->d_type != DT_DIR) ++ && d->d_type != DT_UNKNOWN && d->d_type != DT_DIR && d->d_type != DT_LNK) + continue; + #endif + diff --git a/srcpkgs/make/template b/srcpkgs/make/template index f9a8dfc5b72..bffb9caa083 100644 --- a/srcpkgs/make/template +++ b/srcpkgs/make/template @@ -4,7 +4,7 @@ pkgname=make reverts="4.3_1" version=4.2.1 -revision=6 +revision=7 bootstrap=yes build_style=gnu-configure configure_args="$(vopt_with guile)"