Message ID | 20181114135457.11182-1-raphael.kubo.da.costa@intel.com |
---|---|
State | New |
Headers | show |
Series | [sumo] m4: Workaround gnulib's fseeko.c implementation | expand |
On 11/14/18 5:54 AM, Raphael Kubo da Costa wrote: > From: Khem Raj <raj.khem@gmail.com> > > exposed by glibc 2.28 for details see > https://lists.gnu.org/r/bug-gnulib/2018-03/msg00000.html > > (From OE-Core rev: acca7f964bf9c21f3777085563a7928b8246f17f) > > Signed-off-by: Khem Raj <raj.khem@gmail.com> > Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org> > Signed-off-by: Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com> This is siting in my stable/sumo-next http://git.yoctoproject.org/cgit/cgit.cgi/poky-contrib/commit/?h=stable/sumo-next&id=1be0ec882784fcf704f6c58264111c563c7e425e > --- > meta/recipes-devtools/m4/m4-1.4.18.inc | 1 + > .../m4-1.4.18-glibc-change-work-around.patch | 129 ++++++++++++++++++ > 2 files changed, 130 insertions(+) > create mode 100644 meta/recipes-devtools/m4/m4/m4-1.4.18-glibc-change-work-around.patch > > diff --git a/meta/recipes-devtools/m4/m4-1.4.18.inc b/meta/recipes-devtools/m4/m4-1.4.18.inc > index ee8bee446b..a6cef6f328 100644 > --- a/meta/recipes-devtools/m4/m4-1.4.18.inc > +++ b/meta/recipes-devtools/m4/m4-1.4.18.inc > @@ -9,6 +9,7 @@ inherit autotools texinfo > SRC_URI = "${GNU_MIRROR}/m4/m4-${PV}.tar.gz \ > file://ac_config_links.patch \ > file://remove-gets.patch \ > + file://m4-1.4.18-glibc-change-work-around.patch \ > " > > SRC_URI_append_class-target = " file://0001-Unset-need_charset_alias-when-building-for-musl.patch" > diff --git a/meta/recipes-devtools/m4/m4/m4-1.4.18-glibc-change-work-around.patch b/meta/recipes-devtools/m4/m4/m4-1.4.18-glibc-change-work-around.patch > new file mode 100644 > index 0000000000..72e7ae2080 > --- /dev/null > +++ b/meta/recipes-devtools/m4/m4/m4-1.4.18-glibc-change-work-around.patch > @@ -0,0 +1,129 @@ > +update for glibc libio.h removal in 2.28+ > + > +see > +https://src.fedoraproject.org/rpms/m4/c/814d592134fad36df757f9a61422d164ea2c6c9b?branch=master > + > +Upstream-Status: Pending > +Signed-off-by: Khem Raj <raj.khem@gmail.com> > +Index: m4-1.4.18/lib/fflush.c > +=================================================================== > +--- m4-1.4.18.orig/lib/fflush.c > ++++ m4-1.4.18/lib/fflush.c > +@@ -33,7 +33,7 @@ > + #undef fflush > + > + > +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ > ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ > + > + /* Clear the stream's ungetc buffer, preserving the value of ftello (fp). */ > + static void > +@@ -72,7 +72,7 @@ clear_ungetc_buffer (FILE *fp) > + > + #endif > + > +-#if ! (defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */) > ++#if ! (defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */) > + > + # if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT > + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */ > +@@ -148,7 +148,7 @@ rpl_fflush (FILE *stream) > + if (stream == NULL || ! freading (stream)) > + return fflush (stream); > + > +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ > ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ > + > + clear_ungetc_buffer_preserving_position (stream); > + > +Index: m4-1.4.18/lib/fpending.c > +=================================================================== > +--- m4-1.4.18.orig/lib/fpending.c > ++++ m4-1.4.18/lib/fpending.c > +@@ -32,7 +32,7 @@ __fpending (FILE *fp) > + /* Most systems provide FILE as a struct and the necessary bitmask in > + <stdio.h>, because they need it for implementing getc() and putc() as > + fast macros. */ > +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ > ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ > + return fp->_IO_write_ptr - fp->_IO_write_base; > + #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ > + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */ > +Index: m4-1.4.18/lib/fpurge.c > +=================================================================== > +--- m4-1.4.18.orig/lib/fpurge.c > ++++ m4-1.4.18/lib/fpurge.c > +@@ -62,7 +62,7 @@ fpurge (FILE *fp) > + /* Most systems provide FILE as a struct and the necessary bitmask in > + <stdio.h>, because they need it for implementing getc() and putc() as > + fast macros. */ > +-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ > ++# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ > + fp->_IO_read_end = fp->_IO_read_ptr; > + fp->_IO_write_ptr = fp->_IO_write_base; > + /* Avoid memory leak when there is an active ungetc buffer. */ > +Index: m4-1.4.18/lib/freadahead.c > +=================================================================== > +--- m4-1.4.18.orig/lib/freadahead.c > ++++ m4-1.4.18/lib/freadahead.c > +@@ -25,7 +25,7 @@ > + size_t > + freadahead (FILE *fp) > + { > +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ > ++#if defined _IO_EOF_SEEN || __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) > +Index: m4-1.4.18/lib/freading.c > +=================================================================== > +--- m4-1.4.18.orig/lib/freading.c > ++++ m4-1.4.18/lib/freading.c > +@@ -31,7 +31,7 @@ freading (FILE *fp) > + /* Most systems provide FILE as a struct and the necessary bitmask in > + <stdio.h>, because they need it for implementing getc() and putc() as > + fast macros. */ > +-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ > ++# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ > + return ((fp->_flags & _IO_NO_WRITES) != 0 > + || ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0 > + && fp->_IO_read_base != NULL)); > +Index: m4-1.4.18/lib/fseeko.c > +=================================================================== > +--- m4-1.4.18.orig/lib/fseeko.c > ++++ m4-1.4.18/lib/fseeko.c > +@@ -47,7 +47,7 @@ fseeko (FILE *fp, off_t offset, int when > + #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 || __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) > +@@ -123,7 +123,7 @@ fseeko (FILE *fp, off_t offset, int when > + return -1; > + } > + > +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ > ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ > + fp->_flags &= ~_IO_EOF_SEEN; > + fp->_offset = pos; > + #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ > +Index: m4-1.4.18/lib/stdio-impl.h > +=================================================================== > +--- m4-1.4.18.orig/lib/stdio-impl.h > ++++ m4-1.4.18/lib/stdio-impl.h > +@@ -18,6 +18,12 @@ > + 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. */ > + -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core
diff --git a/meta/recipes-devtools/m4/m4-1.4.18.inc b/meta/recipes-devtools/m4/m4-1.4.18.inc index ee8bee446b..a6cef6f328 100644 --- a/meta/recipes-devtools/m4/m4-1.4.18.inc +++ b/meta/recipes-devtools/m4/m4-1.4.18.inc @@ -9,6 +9,7 @@ inherit autotools texinfo SRC_URI = "${GNU_MIRROR}/m4/m4-${PV}.tar.gz \ file://ac_config_links.patch \ file://remove-gets.patch \ + file://m4-1.4.18-glibc-change-work-around.patch \ " SRC_URI_append_class-target = " file://0001-Unset-need_charset_alias-when-building-for-musl.patch" diff --git a/meta/recipes-devtools/m4/m4/m4-1.4.18-glibc-change-work-around.patch b/meta/recipes-devtools/m4/m4/m4-1.4.18-glibc-change-work-around.patch new file mode 100644 index 0000000000..72e7ae2080 --- /dev/null +++ b/meta/recipes-devtools/m4/m4/m4-1.4.18-glibc-change-work-around.patch @@ -0,0 +1,129 @@ +update for glibc libio.h removal in 2.28+ + +see +https://src.fedoraproject.org/rpms/m4/c/814d592134fad36df757f9a61422d164ea2c6c9b?branch=master + +Upstream-Status: Pending +Signed-off-by: Khem Raj <raj.khem@gmail.com> +Index: m4-1.4.18/lib/fflush.c +=================================================================== +--- m4-1.4.18.orig/lib/fflush.c ++++ m4-1.4.18/lib/fflush.c +@@ -33,7 +33,7 @@ + #undef fflush + + +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + + /* Clear the stream's ungetc buffer, preserving the value of ftello (fp). */ + static void +@@ -72,7 +72,7 @@ clear_ungetc_buffer (FILE *fp) + + #endif + +-#if ! (defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */) ++#if ! (defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */) + + # if (defined __sferror || defined __DragonFly__ || defined __ANDROID__) && defined __SNPT + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */ +@@ -148,7 +148,7 @@ rpl_fflush (FILE *stream) + if (stream == NULL || ! freading (stream)) + return fflush (stream); + +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + + clear_ungetc_buffer_preserving_position (stream); + +Index: m4-1.4.18/lib/fpending.c +=================================================================== +--- m4-1.4.18.orig/lib/fpending.c ++++ m4-1.4.18/lib/fpending.c +@@ -32,7 +32,7 @@ __fpending (FILE *fp) + /* Most systems provide FILE as a struct and the necessary bitmask in + <stdio.h>, because they need it for implementing getc() and putc() as + fast macros. */ +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + return fp->_IO_write_ptr - fp->_IO_write_base; + #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */ +Index: m4-1.4.18/lib/fpurge.c +=================================================================== +--- m4-1.4.18.orig/lib/fpurge.c ++++ m4-1.4.18/lib/fpurge.c +@@ -62,7 +62,7 @@ fpurge (FILE *fp) + /* Most systems provide FILE as a struct and the necessary bitmask in + <stdio.h>, because they need it for implementing getc() and putc() as + fast macros. */ +-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_IO_read_end = fp->_IO_read_ptr; + fp->_IO_write_ptr = fp->_IO_write_base; + /* Avoid memory leak when there is an active ungetc buffer. */ +Index: m4-1.4.18/lib/freadahead.c +=================================================================== +--- m4-1.4.18.orig/lib/freadahead.c ++++ m4-1.4.18/lib/freadahead.c +@@ -25,7 +25,7 @@ + size_t + freadahead (FILE *fp) + { +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || __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) +Index: m4-1.4.18/lib/freading.c +=================================================================== +--- m4-1.4.18.orig/lib/freading.c ++++ m4-1.4.18/lib/freading.c +@@ -31,7 +31,7 @@ freading (FILE *fp) + /* Most systems provide FILE as a struct and the necessary bitmask in + <stdio.h>, because they need it for implementing getc() and putc() as + fast macros. */ +-# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++# if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + return ((fp->_flags & _IO_NO_WRITES) != 0 + || ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0 + && fp->_IO_read_base != NULL)); +Index: m4-1.4.18/lib/fseeko.c +=================================================================== +--- m4-1.4.18.orig/lib/fseeko.c ++++ m4-1.4.18/lib/fseeko.c +@@ -47,7 +47,7 @@ fseeko (FILE *fp, off_t offset, int when + #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 || __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) +@@ -123,7 +123,7 @@ fseeko (FILE *fp, off_t offset, int when + return -1; + } + +-#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#if defined _IO_EOF_SEEN || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_flags &= ~_IO_EOF_SEEN; + fp->_offset = pos; + #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ +Index: m4-1.4.18/lib/stdio-impl.h +=================================================================== +--- m4-1.4.18.orig/lib/stdio-impl.h ++++ m4-1.4.18/lib/stdio-impl.h +@@ -18,6 +18,12 @@ + 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. */ +