mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-09 18:45:54 +02:00
findutils: Fix building against glibc >= 2.28
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
@@ -80,6 +80,13 @@ $(subst %,%_MD5,$(objects)) :
|
||||
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
|
||||
@$(PREBUILD)
|
||||
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
|
||||
|
||||
# Newer C libraries omit this include from sys/types.h.
|
||||
# https://lists.gnu.org/archive/html/bug-gnulib/2016-03/msg00018.html
|
||||
cd $(DIR_APP) && sed -i gl/lib/mountlist.c \
|
||||
-e "/include.*config.h/a#ifdef MAJOR_IN_SYSMACROS\n#include <sys/sysmacros.h>\n#endif\n"
|
||||
|
||||
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/findutils-4.6.0-glibc2.28.patch
|
||||
cd $(DIR_APP) && ./configure $(EXTRA_CONFIG)
|
||||
cd $(DIR_APP) && make $(MAKETUNING)
|
||||
cd $(DIR_APP) && make install
|
||||
|
||||
335
src/patches/findutils-4.6.0-glibc2.28.patch
Normal file
335
src/patches/findutils-4.6.0-glibc2.28.patch
Normal file
@@ -0,0 +1,335 @@
|
||||
Fix build failure on glibc-2.28:
|
||||
fseeko.c: In function 'rpl_fseeko':
|
||||
fseeko.c:110:4: error: #error "Please port gnulib fseeko.c to your platform! Look at the code in fseeko.c, then report this to bug-gnulib."
|
||||
#error "Please port gnulib fseeko.c to your platform! Look at the code in fseeko.c, then report this to bug-gnulib."
|
||||
|
||||
Patch by milan hodoscek.
|
||||
|
||||
https://bugs.gentoo.org/663242
|
||||
--- a/old/stdio-impl.h
|
||||
+++ b/gl/lib/stdio-impl.h
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Implementation details of FILE streams.
|
||||
- Copyright (C) 2007-2008, 2010-2015 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 2007-2008, 2010-2018 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -12,12 +12,18 @@
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Many stdio implementations have the same logic and therefore can share
|
||||
the same implementation of stdio extension API, except that some fields
|
||||
have different naming conventions, or their access requires some casts. */
|
||||
|
||||
+/* Glibc 2.28 made _IO_IN_BACKUP private. For now, work around this
|
||||
+ problem by defining it ourselves. FIXME: Do not rely on glibc
|
||||
+ internals. */
|
||||
+#if !defined _IO_IN_BACKUP && defined _IO_EOF_SEEN
|
||||
+# define _IO_IN_BACKUP 0x100
|
||||
+#endif
|
||||
|
||||
/* BSD stdio derived implementations. */
|
||||
|
||||
@@ -29,10 +35,10 @@
|
||||
#include <errno.h> /* For detecting Plan9. */
|
||||
|
||||
#if defined __sferror || defined __DragonFly__ || defined __ANDROID__
|
||||
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
|
||||
+ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
|
||||
|
||||
# if defined __DragonFly__ /* DragonFly */
|
||||
- /* See <http://www.dragonflybsd.org/cvsweb/src/lib/libc/stdio/priv_stdio.h?rev=HEAD&content-type=text/x-cvsweb-markup>. */
|
||||
+ /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/lib/libc/stdio/priv_stdio.h>. */
|
||||
# define fp_ ((struct { struct __FILE_public pub; \
|
||||
struct { unsigned char *_base; int _size; } _bf; \
|
||||
void *cookie; \
|
||||
@@ -49,30 +55,84 @@
|
||||
fpos_t _offset; \
|
||||
/* More fields, not relevant here. */ \
|
||||
} *) fp)
|
||||
- /* See <http://www.dragonflybsd.org/cvsweb/src/include/stdio.h?rev=HEAD&content-type=text/x-cvsweb-markup>. */
|
||||
+ /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/include/stdio.h>. */
|
||||
# define _p pub._p
|
||||
# define _flags pub._flags
|
||||
# define _r pub._r
|
||||
# define _w pub._w
|
||||
+# elif defined __ANDROID__ /* Android */
|
||||
+ /* Up to this commit from 2015-10-12
|
||||
+ <https://android.googlesource.com/platform/bionic.git/+/f0141dfab10a4b332769d52fa76631a64741297a>
|
||||
+ the innards of FILE were public, and fp_ub could be defined like for OpenBSD,
|
||||
+ see <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/fileext.h>
|
||||
+ and <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/local.h>.
|
||||
+ After this commit, the innards of FILE are hidden. */
|
||||
+# define fp_ ((struct { unsigned char *_p; \
|
||||
+ int _r; \
|
||||
+ int _w; \
|
||||
+ int _flags; \
|
||||
+ int _file; \
|
||||
+ struct { unsigned char *_base; size_t _size; } _bf; \
|
||||
+ int _lbfsize; \
|
||||
+ void *_cookie; \
|
||||
+ void *_close; \
|
||||
+ void *_read; \
|
||||
+ void *_seek; \
|
||||
+ void *_write; \
|
||||
+ struct { unsigned char *_base; size_t _size; } _ext; \
|
||||
+ unsigned char *_up; \
|
||||
+ int _ur; \
|
||||
+ unsigned char _ubuf[3]; \
|
||||
+ unsigned char _nbuf[1]; \
|
||||
+ struct { unsigned char *_base; size_t _size; } _lb; \
|
||||
+ int _blksize; \
|
||||
+ fpos_t _offset; \
|
||||
+ /* More fields, not relevant here. */ \
|
||||
+ } *) fp)
|
||||
# else
|
||||
# define fp_ fp
|
||||
# endif
|
||||
|
||||
-# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __ANDROID__ /* NetBSD >= 1.5ZA, OpenBSD, Android */
|
||||
+# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __minix /* NetBSD >= 1.5ZA, OpenBSD, Minix 3 */
|
||||
/* See <http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
|
||||
- and <http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> */
|
||||
+ and <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
|
||||
+ and <https://github.com/Stichting-MINIX-Research-Foundation/minix/blob/master/lib/libc/stdio/fileext.h> */
|
||||
struct __sfileext
|
||||
{
|
||||
struct __sbuf _ub; /* ungetc buffer */
|
||||
/* More fields, not relevant here. */
|
||||
};
|
||||
# define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub
|
||||
-# else /* FreeBSD, NetBSD <= 1.5Z, DragonFly, Mac OS X, Cygwin, Android */
|
||||
+# elif defined __ANDROID__ /* Android */
|
||||
+ struct __sfileext
|
||||
+ {
|
||||
+ struct { unsigned char *_base; size_t _size; } _ub; /* ungetc buffer */
|
||||
+ /* More fields, not relevant here. */
|
||||
+ };
|
||||
+# define fp_ub ((struct __sfileext *) fp_->_ext._base)->_ub
|
||||
+# else /* FreeBSD, NetBSD <= 1.5Z, DragonFly, Mac OS X, Cygwin */
|
||||
# define fp_ub fp_->_ub
|
||||
# endif
|
||||
|
||||
# define HASUB(fp) (fp_ub._base != NULL)
|
||||
|
||||
+# if defined __ANDROID__ /* Android */
|
||||
+ /* Needed after this commit from 2016-01-25
|
||||
+ <https://android.googlesource.com/platform/bionic.git/+/e70e0e9267d069bf56a5078c99307e08a7280de7> */
|
||||
+# ifndef __SEOF
|
||||
+# define __SLBF 1
|
||||
+# define __SNBF 2
|
||||
+# define __SRD 4
|
||||
+# define __SWR 8
|
||||
+# define __SRW 0x10
|
||||
+# define __SEOF 0x20
|
||||
+# define __SERR 0x40
|
||||
+# endif
|
||||
+# ifndef __SOFF
|
||||
+# define __SOFF 0x1000
|
||||
+# endif
|
||||
+# endif
|
||||
+
|
||||
#endif
|
||||
|
||||
|
||||
@@ -81,7 +141,7 @@
|
||||
#ifdef __TANDEM /* NonStop Kernel */
|
||||
# ifndef _IOERR
|
||||
/* These values were determined by the program 'stdioext-flags' at
|
||||
- <http://lists.gnu.org/archive/html/bug-gnulib/2010-12/msg00165.html>. */
|
||||
+ <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>. */
|
||||
# define _IOERR 0x40
|
||||
# define _IOREAD 0x80
|
||||
# define _IOWRT 0x4
|
||||
@@ -99,6 +159,8 @@
|
||||
int _file; \
|
||||
unsigned int _flag; \
|
||||
} *) fp)
|
||||
+# elif defined __VMS /* OpenVMS */
|
||||
+# define fp_ ((struct _iobuf *) fp)
|
||||
# else
|
||||
# define fp_ fp
|
||||
# endif
|
||||
@@ -110,4 +172,31 @@
|
||||
# define _flag __flag
|
||||
# endif
|
||||
|
||||
+#elif defined _WIN32 && ! defined __CYGWIN__ /* newer Windows with MSVC */
|
||||
+
|
||||
+/* <stdio.h> does not define the innards of FILE any more. */
|
||||
+# define WINDOWS_OPAQUE_FILE
|
||||
+
|
||||
+struct _gl_real_FILE
|
||||
+{
|
||||
+ /* Note: Compared to older Windows and to mingw, it has the fields
|
||||
+ _base and _cnt swapped. */
|
||||
+ unsigned char *_ptr;
|
||||
+ unsigned char *_base;
|
||||
+ int _cnt;
|
||||
+ int _flag;
|
||||
+ int _file;
|
||||
+ int _charbuf;
|
||||
+ int _bufsiz;
|
||||
+};
|
||||
+# define fp_ ((struct _gl_real_FILE *) fp)
|
||||
+
|
||||
+/* These values were determined by a program similar to the one at
|
||||
+ <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>. */
|
||||
+# define _IOREAD 0x1
|
||||
+# define _IOWRT 0x2
|
||||
+# define _IORW 0x4
|
||||
+# define _IOEOF 0x8
|
||||
+# define _IOERR 0x10
|
||||
+
|
||||
#endif
|
||||
--- a/old/fseeko.c
|
||||
+++ b/gl/lib/fseeko.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* An fseeko() function that, together with fflush(), is POSIX compliant.
|
||||
- Copyright (C) 2007-2015 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 2007-2018 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -12,7 +12,7 @@
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
- with this program; if not, see <http://www.gnu.org/licenses/>. */
|
||||
+ with this program; if not, see <https://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -33,9 +33,9 @@ fseeko (FILE *fp, off_t offset, int whence)
|
||||
#endif
|
||||
#if _GL_WINDOWS_64_BIT_OFF_T
|
||||
# undef fseeko
|
||||
-# if HAVE__FSEEKI64 /* msvc, mingw64 */
|
||||
+# if HAVE__FSEEKI64 && HAVE_DECL__FSEEKI64 /* msvc, mingw since msvcrt8.0, mingw64 */
|
||||
# define fseeko _fseeki64
|
||||
-# else /* mingw */
|
||||
+# else /* mingw before msvcrt8.0 */
|
||||
# define fseeko fseeko64
|
||||
# endif
|
||||
#endif
|
||||
@@ -47,12 +47,13 @@ fseeko (FILE *fp, off_t offset, int whence)
|
||||
#endif
|
||||
|
||||
/* These tests are based on fpurge.c. */
|
||||
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
|
||||
+ /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
if (fp->_IO_read_end == fp->_IO_read_ptr
|
||||
&& fp->_IO_write_ptr == fp->_IO_write_base
|
||||
&& fp->_IO_save_base == NULL)
|
||||
#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
|
||||
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
|
||||
+ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
|
||||
# if defined __SL64 && defined __SCLE /* Cygwin */
|
||||
if ((fp->_flags & __SL64) == 0)
|
||||
{
|
||||
@@ -80,7 +81,7 @@ fseeko (FILE *fp, off_t offset, int whence)
|
||||
#elif defined __minix /* Minix */
|
||||
if (fp_->_ptr == fp_->_buf
|
||||
&& (fp_->_ptr == NULL || fp_->_count == 0))
|
||||
-#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */
|
||||
+#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel, OpenVMS */
|
||||
if (fp_->_ptr == fp_->_base
|
||||
&& (fp_->_ptr == NULL || fp_->_cnt == 0))
|
||||
#elif defined __UCLIBC__ /* uClibc */
|
||||
@@ -117,18 +118,19 @@ fseeko (FILE *fp, off_t offset, int whence)
|
||||
if (pos == -1)
|
||||
{
|
||||
#if defined __sferror || defined __DragonFly__ || defined __ANDROID__
|
||||
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
|
||||
+ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
|
||||
fp_->_flags &= ~__SOFF;
|
||||
#endif
|
||||
return -1;
|
||||
}
|
||||
|
||||
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
|
||||
+ /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
fp->_flags &= ~_IO_EOF_SEEN;
|
||||
fp->_offset = pos;
|
||||
#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
|
||||
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
|
||||
-# if defined __CYGWIN__ || (defined __NetBSD__ && __NetBSD_Version__ >= 600000000)
|
||||
+ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
|
||||
+# if defined __CYGWIN__ || (defined __NetBSD__ && __NetBSD_Version__ >= 600000000) || defined __minix
|
||||
/* fp_->_offset is typed as an integer. */
|
||||
fp_->_offset = pos;
|
||||
# else
|
||||
@@ -150,8 +152,8 @@ fseeko (FILE *fp, off_t offset, int whence)
|
||||
fp_->_flags &= ~__SEOF;
|
||||
#elif defined __EMX__ /* emx+gcc */
|
||||
fp->_flags &= ~_IOEOF;
|
||||
-#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */
|
||||
- fp->_flag &= ~_IOEOF;
|
||||
+#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel, OpenVMS */
|
||||
+ fp_->_flag &= ~_IOEOF;
|
||||
#elif defined __MINT__ /* Atari FreeMiNT */
|
||||
fp->__offset = pos;
|
||||
fp->__eof = 0;
|
||||
--- a/old/freadahead.c
|
||||
+++ b/gl/lib/freadahead.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Retrieve information about a FILE stream.
|
||||
- Copyright (C) 2007-2015 Free Software Foundation, Inc.
|
||||
+ Copyright (C) 2007-2018 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -12,7 +12,7 @@
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
+ along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
@@ -22,17 +22,26 @@
|
||||
#include <stdlib.h>
|
||||
#include "stdio-impl.h"
|
||||
|
||||
+#if defined __DragonFly__
|
||||
+/* Defined in libc, but not declared in <stdio.h>. */
|
||||
+extern size_t __sreadahead (FILE *);
|
||||
+#endif
|
||||
+
|
||||
+/* This file is not used on systems that have the __freadahead function,
|
||||
+ namely musl libc. */
|
||||
+
|
||||
size_t
|
||||
freadahead (FILE *fp)
|
||||
{
|
||||
-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
+#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
|
||||
+ /* GNU libc, BeOS, Haiku, Linux libc5 */
|
||||
if (fp->_IO_write_ptr > fp->_IO_write_base)
|
||||
return 0;
|
||||
return (fp->_IO_read_end - fp->_IO_read_ptr)
|
||||
+ (fp->_flags & _IO_IN_BACKUP ? fp->_IO_save_end - fp->_IO_save_base :
|
||||
0);
|
||||
#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
|
||||
- /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */
|
||||
+ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
|
||||
if ((fp_->_flags & __SWR) != 0 || fp_->_r < 0)
|
||||
return 0;
|
||||
# if defined __DragonFly__
|
||||
@@ -53,7 +62,7 @@ freadahead (FILE *fp)
|
||||
if ((fp_->_flags & _IOWRITING) != 0)
|
||||
return 0;
|
||||
return fp_->_count;
|
||||
-#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, NonStop Kernel */
|
||||
+#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel, OpenVMS */
|
||||
if ((fp_->_flag & _IOWRT) != 0)
|
||||
return 0;
|
||||
return fp_->_cnt;
|
||||
Reference in New Issue
Block a user