path: root/main/make/fix-glob-dtype.patch
diff options
Diffstat (limited to 'main/make/fix-glob-dtype.patch')
1 files changed, 31 insertions, 0 deletions
diff --git a/main/make/fix-glob-dtype.patch b/main/make/fix-glob-dtype.patch
new file mode 100644
index 0000000000..56c4e6c050
--- /dev/null
+++ b/main/make/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:
+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.
+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