From a31c6c21fb030d75256ff042e0352f90330545b2 Mon Sep 17 00:00:00 2001 From: Sergei Trofimovich Date: Sat, 13 Oct 2018 18:21:38 +0100 Subject: sys-devel/m4: fix build against glibc-2.28, bug #663924 Patch by milan hodoscek. While at it added 'epatch_user'. Closes: https://bugs.gentoo.org/663924 Signed-off-by: Sergei Trofimovich Package-Manager: Portage-2.3.51, Repoman-2.3.11 --- sys-devel/m4/files/m4-1.4.18-glibc228.patch | 310 ++++++++++++++++++++++++++++ sys-devel/m4/m4-1.4.18.ebuild | 4 +- 2 files changed, 313 insertions(+), 1 deletion(-) create mode 100644 sys-devel/m4/files/m4-1.4.18-glibc228.patch (limited to 'sys-devel/m4') diff --git a/sys-devel/m4/files/m4-1.4.18-glibc228.patch b/sys-devel/m4/files/m4-1.4.18-glibc228.patch new file mode 100644 index 000000000000..6b5593bfa639 --- /dev/null +++ b/sys-devel/m4/files/m4-1.4.18-glibc228.patch @@ -0,0 +1,310 @@ +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/663924 +--- a/old/stdio-impl.h ++++ b/lib/stdio-impl.h +@@ -1,5 +1,5 @@ + /* Implementation details of FILE streams. +- Copyright (C) 2007-2008, 2010-2016 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 . */ ++ along with this program. If not, see . */ + + /* 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 /* 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 . */ ++ /* See . */ + # 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 . */ ++ /* See . */ + # 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 ++ ++ the innards of FILE were public, and fp_ub could be defined like for OpenBSD, ++ see ++ and . ++ 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 +- and */ ++ and ++ and */ + 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 ++ */ ++# 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 +- . */ ++ . */ + # 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,7 +172,7 @@ + # define _flag __flag + # endif + +-#elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* newer Windows with MSVC */ ++#elif defined _WIN32 && ! defined __CYGWIN__ /* newer Windows with MSVC */ + + /* does not define the innards of FILE any more. */ + # define WINDOWS_OPAQUE_FILE +@@ -130,7 +192,7 @@ struct _gl_real_FILE + # define fp_ ((struct _gl_real_FILE *) fp) + + /* These values were determined by a program similar to the one at +- . */ ++ . */ + # define _IOREAD 0x1 + # define _IOWRT 0x2 + # define _IORW 0x4 +--- a/old/fseeko.c ++++ b/lib/fseeko.c +@@ -1,5 +1,5 @@ + /* An fseeko() function that, together with fflush(), is POSIX compliant. +- Copyright (C) 2007-2016 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 . */ ++ with this program; if not, see . */ + + #include + +@@ -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, MSVC, 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,7 +152,7 @@ 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, MSVC, NonStop Kernel */ ++#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; +--- a/old/freadahead.c ++++ b/lib/freadahead.c +@@ -1,5 +1,5 @@ + /* Retrieve information about a FILE stream. +- Copyright (C) 2007-2016 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 . */ ++ along with this program. If not, see . */ + + #include + +@@ -22,17 +22,26 @@ + #include + #include "stdio-impl.h" + ++#if defined __DragonFly__ ++/* Defined in libc, but not declared in . */ ++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__ diff --git a/sys-devel/m4/m4-1.4.18.ebuild b/sys-devel/m4/m4-1.4.18.ebuild index 9c6670123534..378946733cae 100644 --- a/sys-devel/m4/m4-1.4.18.ebuild +++ b/sys-devel/m4/m4-1.4.18.ebuild @@ -1,4 +1,4 @@ -# Copyright 1999-2018 Gentoo Foundation +# Copyright 1999-2018 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI="5" @@ -20,6 +20,8 @@ RDEPEND="" src_prepare() { epatch "${FILESDIR}"/${P}-darwin17-printf-n.patch + epatch "${FILESDIR}"/${P}-glibc228.patch #663924 + epatch_user default } -- cgit v1.2.3-65-gdbad