diff options
author | Assaf Gordon <assafgordon@gmail.com> | 2019-08-02 20:22:33 -0600 |
---|---|---|
committer | Assaf Gordon <assafgordon@gmail.com> | 2019-08-15 01:15:20 -0600 |
commit | b8609c7cf21f5944200b323736f8d1289d1cf89a (patch) | |
tree | a2774d017d9906a7dbb93ed46235bf40772f78c7 /scripts | |
parent | a3d070fa3269e89dfad49fde8ea30758afa36f4b (diff) | |
download | coreutils-b8609c7cf21f5944200b323736f8d1289d1cf89a.tar.gz |
scripts: document how to build older versions on newer systems
Based on https://lists.gnu.org/r/coreutils/2019-08/msg00011.html .
* scripts/build-older-versions/README.older-versions: Documentation
* scripts/build-older-versions/build-older-versions.sh: Helper script.
* scripts/build-older-versions/.gitignore: Ignore build directory.
* scripts/build-older-versions/coreutils-5.0-on-glibc-2.28.diff,
scripts/build-older-versions/coreutils-5.97-on-glibc-2.28.diff,
scripts/build-older-versions/coreutils-6.10-on-glibc-2.28.diff,
scripts/build-older-versions/coreutils-6.11-on-glibc-2.28.diff,
scripts/build-older-versions/coreutils-6.12-on-glibc-2.28.diff,
scripts/build-older-versions/coreutils-7.2-on-glibc-2.28.diff,
scripts/build-older-versions/coreutils-8.13-on-glibc-2.28.diff,
scripts/build-older-versions/coreutils-8.17-on-glibc-2.28.diff,
scripts/build-older-versions/coreutils-8.18-on-glibc-2.28.diff,
scripts/build-older-versions/coreutils-8.24-on-glibc-2.28.diff,
scripts/build-older-versions/coreutils-8.4-on-glibc-2.28.diff: Patches.
Diffstat (limited to 'scripts')
14 files changed, 1129 insertions, 0 deletions
diff --git a/scripts/build-older-versions/.gitignore b/scripts/build-older-versions/.gitignore new file mode 100644 index 000000000..567609b12 --- /dev/null +++ b/scripts/build-older-versions/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/scripts/build-older-versions/README.older-versions b/scripts/build-older-versions/README.older-versions new file mode 100644 index 000000000..3f420d724 --- /dev/null +++ b/scripts/build-older-versions/README.older-versions @@ -0,0 +1,174 @@ +Building older GNU coreutils versions on newer systems +====================================================== + +Overview +-------- + +Some older GNU coreutils fail to build on newer GNU/Linux systems. + +This happens with Coreutils version 8.29 and earlier, on systems +using GlibC version 2.28 or newer, Such as Debian 10, CentOS 8, Fedora 29. + +A typical error is: + + $ wget https://ftp.gnu.org/gnu/coreutils/coreutils-7.6.tar.xz + $ tar -xf coreutils-7.6.tar.xz + $ cd coreutils-7.6 + $ ./configure + $ make + [...] + freadahead.c: In function 'freadahead': + freadahead.c:83:3: error: #error "Please port gnulib freadahead.c to + your platform! Look at the definition of fflush, + fread, ungetc on your system, then report this + to bug-gnulib." + [...] + make[4]: *** [Makefile:1700: freadahead.o] Error 1 + +Other similar errors mention 'freadptr', 'freadseek','fseterr'. +Older version (pre 7.2) mention 'tee','eaccess','futimens'. + + +Details +------- + +GLibC version 2.28 removed non-standed headre file (libio.h) and some +internal symbols which were used by gnulib (a core component of GNU coreutils). + +These were announced as 'deprecated' in vesion 2.27 [1], and removed in +version 2.28. Gnulib code was adjusted shortly after [2], +but the code changes obviously can't be retroactively made to +previously-released coreutils versions. + +[1] https://sourceware.org/ml/libc-announce/2018/msg00000.html +[2] https://lists.gnu.org/r/bug-gnulib/2018-03/msg00000.html + +Older coreutils versions defined functions that were later picked-up +by glibc ('tee','eaccess','futimens') resulting in conflicts. + +See the patches for the exact code changes. + + +Supplied patches +---------------- + +The patch files in this directory change the source code of older +coreutils versions, enabling successful build on newer systems. + +Some versions require different patches. + +Coreutils Versions Patch file +5.0 coreutils-5.0-on-glibc-2.28.diff +5.97 to 6.9 coreutils-5.97-on-glibc-2.28.diff +6.10 coreutils-6.10-on-glibc-2.28.diff +6.11 coreutils-6.11-on-glibc-2.28.diff +6.12 coreutils-6.12-on-glibc-2.28.diff +7.2 to 8.3 coreutils-7.2-on-glibc-2.28.diff +8.4 to 8.12 coreutils-8.4-on-glibc-2.28.diff +8.13 to 8.16 coreutils-8.13-on-glibc-2.28.diff +8.17 coreutils-8.17-on-glibc-2.28.diff +8.18 to 8.23 coreutils-8.18-on-glibc-2.28.diff +8.24 to 8.29 coreutils-8.24-on-glibc-2.28.diff +8.30 and newer [builds without patching] + + +Manual build +------------ + +1. Download the desired version from https://ftp.gnu.org/gnu/coreutils . +2. Patch using the corresponding patch file (see table above). +3. Configure the build, optionally adding the version number + to the executables, to ensure they will not conflict with existing + (newer) executables +4. Build with 'make' +5. Optionally install with 'sudo make install' + +Example: + + wget https://ftp.gnu.org/gnu/coreutils/coreutils-5.97.tar.gz + tar -xf coreutils-5.97.tar.gz + cd coreutils-5.97 + patch -p1 < ../coreutils-5.97-on-glibc-2.28.diff + ./configure --program-suffix=-5.97 + make + sudo make install + +This will install the programs (e.g. 'sort', 'head) in +/usr/local/bin, with "-5.97" added to each program name (e.g. 'sort-5.97', +'head-5.97'). + +NOTE: +With very old versions (5.X and 6.X), running "./configure" will +hang for a long time at the following step: + "checking for mktime..." +But will eventually continue successfully. + + +Automated build +--------------- + +The script 'build-older-versions.sh' automatically performs the manual steps +listed above. The script installs each package in a separate directory: +Programs in `$HOME/old-coreutils/coreutils-{VERSION}/bin`, +manual pages in `$HOME/old-coreutils/coreutils-{VERSION}/share/man`, +PDF manual in `$HOME/old-coreutils/coreutils-{VERSION}/share/doc`, +INFO pages in `$HOME/old-coreutils/coreutils-{VERSION}/share/info`. +It will also create symlinks to all version in a common directory +`$HOME/old-coreutils/bin`. + +Example, running the following commands: + + ./build-older-versions.sh 5.0 + ./build-older-versions.sh 5.97 + ./build-older-versions.sh 6.12 + ./build-older-versions.sh 7.6 + +Will download, patch, build and install the programs for GNU coreutils +versions 5.0,5.97,6.12,7.6 in `$HOME/old-coreutils/bin` : + + $ ls $HOME/old-coreutils/bin + [-5.97 id-5.0 sha224sum-7.6 + [-6.12 id-5.97 sha256sum-6.12 + [-7.6 id-6.12 sha256sum-7.6 + base64-6.12 id-7.6 sha384sum-6.12 + base64-7.6 install-5.0 sha384sum-7.6 + basename-5.0 install-5.97 sha512sum-6.12 + basename-5.97 install-6.12 sha512sum-7.6 + basename-6.12 install-7.6 shred-5.0 + basename-7.6 join-5.0 shred-5.97 + cat-5.0 join-5.97 shred-6.12 + cat-5.97 join-6.12 shred-7.6 + cat-6.12 join-7.6 shuf-6.12 + cat-7.6 kill-5.0 shuf-7.6 + chcon-6.12 kill-5.97 sleep-5.0 + chcon-7.6 kill-6.12 sleep-5.97 + chgrp-5.0 kill-7.6 sleep-6.12 + chgrp-5.97 link-5.0 sleep-7.6 + chgrp-6.12 link-5.97 sort-5.0 + chgrp-7.6 link-6.12 sort-5.97 + chmod-5.0 link-7.6 sort-6.12 + chmod-5.97 ln-5.0 sort-7.6 + chmod-6.12 ln-5.97 split-5.0 + chmod-7.6 ln-6.12 split-5.97 + chown-5.0 ln-7.6 split-6.12 + [... many more files ...] + +By adding the directory to your $PATH, older versions can be easily used: + + export PATH=$PATH:$HOME/old-coreutils/bin + export MANPATH=$MANPATH:$HOME/old-coreutils/man + + + + + +======================================================================== + +Copyright (C) 2019 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the "GNU Free +Documentation License" file as part of this distribution. diff --git a/scripts/build-older-versions/build-older-versions.sh b/scripts/build-older-versions/build-older-versions.sh new file mode 100755 index 000000000..99ccef2bd --- /dev/null +++ b/scripts/build-older-versions/build-older-versions.sh @@ -0,0 +1,200 @@ +#!/bin/sh +# +# Copyright (C) 2019 Free Software Foundation, Inc. +# +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided the copyright +# notice and this notice are preserved. This file is offered as-is, +# without any warranty. +# +# Written by Assaf Gordon and Bernhard Voelker. + + +# To build all versions since 5.0 (if possible): +# git tag \ +# | grep '^v[5678]' \ +# | sed 's/^v//' \ +# | sort -V \ +# | while read f; do \ +# ./build-older-versions.sh $f 2>&1 \ +# | tee build/build.$f.log ; \ +# done + +PREFIX="${PREFIX:=$HOME/old-coreutils}" + +base=$(basename "$0") + +die() +{ + echo "$base: error: $*" >&2 + exit 1 +} + +warn() +{ + echo "$base: warning: $*" >&2 +} + +get_patch_file() +{ + case "$1" in + 5.0) echo coreutils-5.0-on-glibc-2.28.diff ;; + 5.97|6.[345679]) echo coreutils-5.97-on-glibc-2.28.diff ;; + 6.10) echo coreutils-6.10-on-glibc-2.28.diff ;; + 6.11) echo coreutils-6.11-on-glibc-2.28.diff ;; + 6.12) echo coreutils-6.12-on-glibc-2.28.diff ;; + 7.[23456]|8.[123]) echo coreutils-7.2-on-glibc-2.28.diff ;; + 8.[456789]|8.1[012]) echo coreutils-8.4-on-glibc-2.28.diff ;; + 8.1[3456]) echo coreutils-8.13-on-glibc-2.28.diff ;; + 8.17) echo coreutils-8.17-on-glibc-2.28.diff ;; + 8.1[89]|8.2[0123]) echo coreutils-8.18-on-glibc-2.28.diff ;; + 8.2[456789]) echo coreutils-8.24-on-glibc-2.28.diff ;; + 8.[3456789]*) warn "patch not needed for version '$1'" ;; + 5.[12]*|5.9*) die "version '$1' does not have a patch (yet) " \ + "use versions 5.0 or 5.97" ;; + 7.1) die "version '$1' does not have a patch (yet)" \ + "use versions 6.12 or 7.2" ;; + 5*|6*|7*|8*) die "non-existing version" ;; + *) die "unknown version" ;; + esac +} + +get_url() +{ + _base_url="https://ftp.gnu.org/gnu/coreutils/coreutils-$1.tar" + case "$1" in + 5.*|6.*|7.*) echo "$_base_url.gz" ;; + 8.*) echo "$_base_url.xz" ;; + *) die "unknown version" ;; + esac +} + +## +## Setup +## +test -n "$1" \ + || die "missing coreutils version to build (e.g. '6.12')" + +cd $(dirname "$0") + +patch_file=$(get_patch_file "$1") \ + || die "cannot build version '$1'" + +# Test for the patch file if the above returned one. +if test "$patch_file"; then + test -e "$patch_file" \ + || die "internal error: patch file '$patch_file' does not exist" +fi + +url=$(get_url "$1") +tarball=$(basename "$url") + +mkdir -p "build" \ + && cd "build" \ + || die "creating version build dir 'build' failed" + +## +## Download tarball (if needed) +## +if ! test -e "$tarball" ; then + wget -O "$tarball.t" "$url" \ + && mv "$tarball.t" "$tarball" \ + || die "failed to download '$url'" +fi + +## +## Extract tarball (if needed) +## +srcdir=${tarball%.tar.*} +if ! test -d "$srcdir" ; then + tar -xvf "$tarball" || die "failed to extract '$tarball'" +fi + +## +## Patch (if needed) +## +cd "$srcdir" \ + || die "changing directory to '$srcdir' failed" + +# Patch will fail if it was already applied (using "--forward" turns +# that into a no-op). So don't check for failure. +# Is there a way to differentiate between 'already applied' and +# 'failed to apply' ? +test "$patch_file" \ + && patch --ignore-whitespace --batch --forward -p1 < "../../$patch_file" + +## +## Configure +## +version="${srcdir#coreutils}" # note: this keeps the '-' in '$version' +vprefix="$PREFIX/coreutils$version" +if ! test -e "Makefile" ; then + ./configure \ + --program-suffix="$version" \ + --prefix="$vprefix" \ + || die "failed to run configure in 'build/$srcdir/'" +fi + +## +## Build +## +make -j4 \ + || die "build failed in 'build/$srcdir'" + +## +## Install +## +make install \ + || die "make-install failed in 'build/$srcdir' (to '$vprefix')" + + +# Create convenience links for the executables and manpages in common directory. +( + mkdir -p "$PREFIX/bin" "$PREFIX/man/man1" \ + || die "creating common bin or man directory failed" + cd $vprefix/bin \ + || die "changing directory to just-installed 'bin' directory failed" + for f in *; do + ln -snvf "../coreutils$version/bin/$f" "$PREFIX/bin/$f" \ + || die "creating symlink of executable '$f' failed" + done + + share= # older versions do not have 'share'. + cd "$vprefix/share/man/man1" 2>/dev/null \ + && share='/share' \ + || cd "$vprefix/man/man1" \ + || die "changing directory to just-installed 'man/man1' directory failed" + for f in *; do + ln -snfv "../../coreutils$version$share/man/man1/$f" "$PREFIX/man/man1/$f" \ + || die "creating symlink of man page '$f' failed" + done +) || exit 1 + +# Build and install PDF (if possible). +if make SUBDIRS=. pdf; then + make SUBDIRS=. install-pdf \ + || die "make-install-pdf failed in 'build/$srcdir' (to '$vprefix')" +else + echo "$0: no PDF available" +fi + +# Print summary +cat<<EOF + + +================================================================= + +GNU Coreutils$version successfully installed. + +Source code in $PWD/build/$srcdir +Installed in $vprefix + +symlinks for all programs (all versions) in $PREFIX/bin +manual pages for all programs in $PREFIX/share/man/man1 + +Run the following command to add all programs to your \$PATH: + + export PATH=\$PATH:\$HOME/old-coreutils/bin + export MANPATH=\$MANPATH:\$HOME/old-coreutils/man + +EOF diff --git a/scripts/build-older-versions/coreutils-5.0-on-glibc-2.28.diff b/scripts/build-older-versions/coreutils-5.0-on-glibc-2.28.diff new file mode 100644 index 000000000..0ef574e4e --- /dev/null +++ b/scripts/build-older-versions/coreutils-5.0-on-glibc-2.28.diff @@ -0,0 +1,75 @@ +diff -r -U3 coreutils-5.0/src/Makefile.in coreutils-5.0-patched/src/Makefile.in +--- coreutils-5.0/src/Makefile.in 2003-04-02 07:46:19.000000000 -0700 ++++ coreutils-5.0-patched/src/Makefile.in 2019-08-01 19:38:07.440997426 -0600 +@@ -209,7 +209,7 @@ + printf_LDADD = $(LDADD) @POW_LIB@ @LIBICONV@ + + # If necessary, add -lm to resolve use of floor, rint, modf. +-seq_LDADD = $(LDADD) @SEQ_LIBM@ ++seq_LDADD = $(LDADD) @SEQ_LIBM@ -lm + + # If necessary, add -lm to resolve the `pow' reference in lib/strtod.c + # or for the fesetround reference in programs using nanosec.c. +diff -r -U3 coreutils-5.0/src/tee.c coreutils-5.0-patched/src/tee.c +--- coreutils-5.0/src/tee.c 2002-12-15 07:21:45.000000000 -0700 ++++ coreutils-5.0-patched/src/tee.c 2019-08-01 19:34:32.374301325 -0600 +@@ -32,7 +32,7 @@ + + #define AUTHORS N_ ("Mike Parker, Richard M. Stallman, and David MacKenzie") + +-static int tee (int nfiles, const char **files); ++static int tee_FOO (int nfiles, const char **files); + + /* If nonzero, append to output files rather than truncating them. */ + static int append; +@@ -146,7 +146,7 @@ + /* Do *not* warn if tee is given no file arguments. + POSIX requires that it work when given no arguments. */ + +- errs = tee (argc - optind, (const char **) &argv[optind]); ++ errs = tee_FOO (argc - optind, (const char **) &argv[optind]); + if (close (STDIN_FILENO) != 0) + error (EXIT_FAILURE, errno, _("standard input")); + +@@ -158,7 +158,7 @@ + Return 0 if successful, 1 if any errors occur. */ + + static int +-tee (int nfiles, const char **files) ++tee_FOO (int nfiles, const char **files) + { + FILE **descriptors; + char buffer[BUFSIZ]; +diff -r -U3 coreutils-5.0/src/test.c coreutils-5.0-patched/src/test.c +--- coreutils-5.0/src/test.c 2003-02-10 02:19:09.000000000 -0700 ++++ coreutils-5.0-patched/src/test.c 2019-08-01 19:35:52.871307966 -0600 +@@ -139,7 +139,7 @@ + /* Do the same thing access(2) does, but use the effective uid and gid. */ + + static int +-eaccess (char const *file, int mode) ++eaccess_FOO (char const *file, int mode) + { + static int have_ids; + static uid_t uid, euid; +@@ -635,17 +635,17 @@ + + case 'r': /* file is readable? */ + unary_advance (); +- value = -1 != eaccess (argv[pos - 1], R_OK); ++ value = -1 != eaccess_FOO (argv[pos - 1], R_OK); + return (TRUE == value); + + case 'w': /* File is writable? */ + unary_advance (); +- value = -1 != eaccess (argv[pos - 1], W_OK); ++ value = -1 != eaccess_FOO (argv[pos - 1], W_OK); + return (TRUE == value); + + case 'x': /* File is executable? */ + unary_advance (); +- value = -1 != eaccess (argv[pos - 1], X_OK); ++ value = -1 != eaccess_FOO (argv[pos - 1], X_OK); + return (TRUE == value); + + case 'O': /* File is owned by you? */ diff --git a/scripts/build-older-versions/coreutils-5.97-on-glibc-2.28.diff b/scripts/build-older-versions/coreutils-5.97-on-glibc-2.28.diff new file mode 100644 index 000000000..58b53931f --- /dev/null +++ b/scripts/build-older-versions/coreutils-5.97-on-glibc-2.28.diff @@ -0,0 +1,51 @@ +diff -r -U3 coreutils-6.4/lib/utimens.c coreutils-6.4-patched/lib/utimens.c +--- coreutils-6.4/lib/utimens.c 2006-09-14 03:53:59.000000000 -0600 ++++ coreutils-6.4-patched/lib/utimens.c 2019-08-01 19:09:08.228883163 -0600 +@@ -73,7 +73,7 @@ + Return 0 on success, -1 (setting errno) on failure. */ + + int +-futimens (int fd ATTRIBUTE_UNUSED, ++futimens_FOO (int fd ATTRIBUTE_UNUSED, + char const *file, struct timespec const timespec[2]) + { + /* There's currently no interface to set file timestamps with +@@ -166,5 +166,5 @@ + int + utimens (char const *file, struct timespec const timespec[2]) + { +- return futimens (-1, file, timespec); ++ return futimens_FOO (-1, file, timespec); + } +diff -r -U3 coreutils-6.4/lib/utimens.h coreutils-6.4-patched/lib/utimens.h +--- coreutils-6.4/lib/utimens.h 2004-11-23 14:39:48.000000000 -0700 ++++ coreutils-6.4-patched/lib/utimens.h 2019-08-01 19:08:25.656313704 -0600 +@@ -1,3 +1,3 @@ + #include "timespec.h" +-int futimens (int, char const *, struct timespec const [2]); ++int futimens_FOO (int, char const *, struct timespec const [2]); + int utimens (char const *, struct timespec const [2]); +diff -r -U3 coreutils-6.4/src/copy.c coreutils-6.4-patched/src/copy.c +--- coreutils-6.4/src/copy.c 2006-10-22 10:54:15.000000000 -0600 ++++ coreutils-6.4-patched/src/copy.c 2019-08-01 19:09:42.421340384 -0600 +@@ -487,7 +487,7 @@ + timespec[0] = get_stat_atime (src_sb); + timespec[1] = get_stat_mtime (src_sb); + +- if (futimens (dest_desc, dst_name, timespec) != 0) ++ if (futimens_FOO (dest_desc, dst_name, timespec) != 0) + { + error (0, errno, _("preserving times for %s"), quote (dst_name)); + if (x->require_preserve) +diff -r -U3 coreutils-6.4/src/touch.c coreutils-6.4-patched/src/touch.c +--- coreutils-6.4/src/touch.c 2006-10-22 10:54:15.000000000 -0600 ++++ coreutils-6.4-patched/src/touch.c 2019-08-01 19:09:34.685236947 -0600 +@@ -182,7 +182,7 @@ + t = timespec; + } + +- ok = (futimens (fd, (fd == STDOUT_FILENO ? NULL : file), t) == 0); ++ ok = (futimens_FOO (fd, (fd == STDOUT_FILENO ? NULL : file), t) == 0); + + if (fd == STDIN_FILENO) + { diff --git a/scripts/build-older-versions/coreutils-6.10-on-glibc-2.28.diff b/scripts/build-older-versions/coreutils-6.10-on-glibc-2.28.diff new file mode 100644 index 000000000..4f76ed9a2 --- /dev/null +++ b/scripts/build-older-versions/coreutils-6.10-on-glibc-2.28.diff @@ -0,0 +1,24 @@ +diff -r -U3 coreutils-6.10/lib/freadahead.c coreutils-6.10-patched/lib/freadahead.c +--- coreutils-6.10/lib/freadahead.c 2007-11-08 00:32:20.000000000 -0700 ++++ coreutils-6.10-patched/lib/freadahead.c 2019-08-01 20:09:03.731243826 -0600 +@@ -22,7 +22,7 @@ + size_t + freadahead (FILE *fp) + { +-#if defined _IO_ferror_unlocked /* GNU libc, BeOS */ ++#if defined _IO_EOF_SEEN || defined _IO_ferror_unlocked /* GNU libc, BeOS */ + if (fp->_IO_write_ptr > fp->_IO_write_base) + return 0; + return fp->_IO_read_end - fp->_IO_read_ptr; +diff -r -U3 coreutils-6.10/lib/fseterr.c coreutils-6.10-patched/lib/fseterr.c +--- coreutils-6.10/lib/fseterr.c 2007-11-08 00:32:20.000000000 -0700 ++++ coreutils-6.10-patched/lib/fseterr.c 2019-08-01 20:09:16.407416594 -0600 +@@ -27,7 +27,7 @@ + /* 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_ferror_unlocked /* GNU libc, BeOS */ ++#if defined _IO_EOF_SEEN || defined _IO_ferror_unlocked /* GNU libc, BeOS */ + fp->_flags |= _IO_ERR_SEEN; + #elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X, Cygwin */ + fp->_flags |= __SERR; diff --git a/scripts/build-older-versions/coreutils-6.11-on-glibc-2.28.diff b/scripts/build-older-versions/coreutils-6.11-on-glibc-2.28.diff new file mode 100644 index 000000000..c6a86fa11 --- /dev/null +++ b/scripts/build-older-versions/coreutils-6.11-on-glibc-2.28.diff @@ -0,0 +1,34 @@ +diff -r -U3 coreutils-6.11/lib/freadahead.c coreutils-6.11-patched/lib/freadahead.c +--- coreutils-6.11/lib/freadahead.c 2008-04-17 03:59:17.000000000 -0600 ++++ coreutils-6.11-patched/lib/freadahead.c 2019-08-01 20:20:12.712193242 -0600 +@@ -19,10 +19,17 @@ + /* Specification. */ + #include "freadahead.h" + ++/* 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 ++ + size_t + freadahead (FILE *fp) + { +-#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ + if (fp->_IO_write_ptr > fp->_IO_write_base) + return 0; + return (fp->_IO_read_end - fp->_IO_read_ptr) +diff -r -U3 coreutils-6.11/lib/fseterr.c coreutils-6.11-patched/lib/fseterr.c +--- coreutils-6.11/lib/fseterr.c 2008-04-17 03:59:17.000000000 -0600 ++++ coreutils-6.11-patched/lib/fseterr.c 2019-08-01 20:20:37.868480486 -0600 +@@ -27,7 +27,7 @@ + /* 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_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ + fp->_flags |= _IO_ERR_SEEN; + #elif defined __sferror /* FreeBSD, NetBSD, OpenBSD, MacOS X, Cygwin */ + fp->_flags |= __SERR; diff --git a/scripts/build-older-versions/coreutils-6.12-on-glibc-2.28.diff b/scripts/build-older-versions/coreutils-6.12-on-glibc-2.28.diff new file mode 100644 index 000000000..6bcb650a7 --- /dev/null +++ b/scripts/build-older-versions/coreutils-6.12-on-glibc-2.28.diff @@ -0,0 +1,63 @@ +diff -r -U3 coreutils-6.12/lib/freadahead.c coreutils-6.12-patched/lib/freadahead.c +--- coreutils-6.12/lib/freadahead.c 2008-05-14 06:53:25.000000000 -0600 ++++ coreutils-6.12-patched/lib/freadahead.c 2019-08-01 17:50:52.731658318 -0600 +@@ -24,7 +24,7 @@ + size_t + freadahead (FILE *fp) + { +-#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ + if (fp->_IO_write_ptr > fp->_IO_write_base) + return 0; + return (fp->_IO_read_end - fp->_IO_read_ptr) +diff -r -U3 coreutils-6.12/lib/freadptr.c coreutils-6.12-patched/lib/freadptr.c +--- coreutils-6.12/lib/freadptr.c 2008-05-14 06:53:25.000000000 -0600 ++++ coreutils-6.12-patched/lib/freadptr.c 2019-08-01 17:51:06.867856472 -0600 +@@ -29,7 +29,7 @@ + size_t size; + + /* Keep this code in sync with freadahead! */ +-#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ + if (fp->_IO_write_ptr > fp->_IO_write_base) + return NULL; + size = fp->_IO_read_end - fp->_IO_read_ptr; +diff -r -U3 coreutils-6.12/lib/freadseek.c coreutils-6.12-patched/lib/freadseek.c +--- coreutils-6.12/lib/freadseek.c 2008-05-14 06:53:25.000000000 -0600 ++++ coreutils-6.12-patched/lib/freadseek.c 2019-08-01 17:51:21.264058094 -0600 +@@ -34,7 +34,7 @@ + freadptrinc (FILE *fp, size_t increment) + { + /* Keep this code in sync with freadptr! */ +-#if defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ + fp->_IO_read_ptr += increment; + #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_p += increment; +diff -r -U3 coreutils-6.12/lib/fseterr.c coreutils-6.12-patched/lib/fseterr.c +--- coreutils-6.12/lib/fseterr.c 2008-05-14 06:53:25.000000000 -0600 ++++ coreutils-6.12-patched/lib/fseterr.c 2019-08-01 17:51:36.668273645 -0600 +@@ -29,7 +29,7 @@ + /* 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_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ ++#if defined _IO_EOF_SEEN || defined _IO_ferror_unlocked || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Linux libc5 */ + fp->_flags |= _IO_ERR_SEEN; + #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_flags |= __SERR; +diff -r -U3 coreutils-6.12/lib/stdio-impl.h coreutils-6.12-patched/lib/stdio-impl.h +--- coreutils-6.12/lib/stdio-impl.h 2008-05-14 06:53:25.000000000 -0600 ++++ coreutils-6.12-patched/lib/stdio-impl.h 2019-08-01 17:49:51.518798189 -0600 +@@ -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. */ diff --git a/scripts/build-older-versions/coreutils-7.2-on-glibc-2.28.diff b/scripts/build-older-versions/coreutils-7.2-on-glibc-2.28.diff new file mode 100644 index 000000000..1c3cb6cb2 --- /dev/null +++ b/scripts/build-older-versions/coreutils-7.2-on-glibc-2.28.diff @@ -0,0 +1,75 @@ +diff -r -U3 coreutils-7.6/lib/freadahead.c coreutils-7.6-patched/lib/freadahead.c +--- coreutils-7.6/lib/freadahead.c 2009-05-03 23:46:33.000000000 -0600 ++++ coreutils-7.6-patched/lib/freadahead.c 2019-08-01 17:30:54.589238442 -0600 +@@ -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 || 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) +diff -r -U3 coreutils-7.6/lib/freadptr.c coreutils-7.6-patched/lib/freadptr.c +--- coreutils-7.6/lib/freadptr.c 2009-05-03 23:46:33.000000000 -0600 ++++ coreutils-7.6-patched/lib/freadptr.c 2019-08-01 17:34:10.692659598 -0600 +@@ -29,7 +29,7 @@ + size_t size; + + /* Keep this code in sync with freadahead! */ +-#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 NULL; + size = fp->_IO_read_end - fp->_IO_read_ptr; +diff -r -U3 coreutils-7.6/lib/freadseek.c coreutils-7.6-patched/lib/freadseek.c +--- coreutils-7.6/lib/freadseek.c 2009-05-03 23:46:33.000000000 -0600 ++++ coreutils-7.6-patched/lib/freadseek.c 2019-08-01 17:34:41.013164702 -0600 +@@ -34,7 +34,7 @@ + freadptrinc (FILE *fp, size_t increment) + { + /* Keep this code in sync with freadptr! */ +-#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->_IO_read_ptr += increment; + #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_p += increment; +diff -r -U3 coreutils-7.6/lib/fseeko.c coreutils-7.6-patched/lib/fseeko.c +--- coreutils-7.6/lib/fseeko.c 2009-08-09 10:16:11.000000000 -0600 ++++ coreutils-7.6-patched/lib/fseeko.c 2019-08-01 17:36:11.030633785 -0600 +@@ -44,7 +44,7 @@ + #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) +diff -r -U3 coreutils-7.6/lib/fseterr.c coreutils-7.6-patched/lib/fseterr.c +--- coreutils-7.6/lib/fseterr.c 2009-05-03 23:46:33.000000000 -0600 ++++ coreutils-7.6-patched/lib/fseterr.c 2019-08-01 17:34:57.285433551 -0600 +@@ -29,7 +29,7 @@ + /* 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 || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_flags |= _IO_ERR_SEEN; + #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_flags |= __SERR; +diff -r -U3 coreutils-7.6/lib/stdio-impl.h coreutils-7.6-patched/lib/stdio-impl.h +--- coreutils-7.6/lib/stdio-impl.h 2009-05-03 23:46:34.000000000 -0600 ++++ coreutils-7.6-patched/lib/stdio-impl.h 2019-08-01 17:32:36.431051254 -0600 +@@ -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. */ diff --git a/scripts/build-older-versions/coreutils-8.13-on-glibc-2.28.diff b/scripts/build-older-versions/coreutils-8.13-on-glibc-2.28.diff new file mode 100644 index 000000000..1abd410e7 --- /dev/null +++ b/scripts/build-older-versions/coreutils-8.13-on-glibc-2.28.diff @@ -0,0 +1,86 @@ +diff -r -U3 coreutils-8.13/lib/freadahead.c coreutils-8.13-patched/lib/freadahead.c +--- coreutils-8.13/lib/freadahead.c 2011-08-19 10:09:37.000000000 -0600 ++++ coreutils-8.13-patched/lib/freadahead.c 2019-08-01 19:02:30.847557265 -0600 +@@ -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 || 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) +diff -r -U3 coreutils-8.13/lib/freadptr.c coreutils-8.13-patched/lib/freadptr.c +--- coreutils-8.13/lib/freadptr.c 2011-08-19 10:09:37.000000000 -0600 ++++ coreutils-8.13-patched/lib/freadptr.c 2019-08-01 19:02:30.851557318 -0600 +@@ -29,7 +29,7 @@ + size_t size; + + /* Keep this code in sync with freadahead! */ +-#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 NULL; + size = fp->_IO_read_end - fp->_IO_read_ptr; +diff -r -U3 coreutils-8.13/lib/freadseek.c coreutils-8.13-patched/lib/freadseek.c +--- coreutils-8.13/lib/freadseek.c 2011-08-19 10:09:37.000000000 -0600 ++++ coreutils-8.13-patched/lib/freadseek.c 2019-08-01 19:02:30.851557318 -0600 +@@ -34,7 +34,7 @@ + freadptrinc (FILE *fp, size_t increment) + { + /* Keep this code in sync with freadptr! */ +-#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->_IO_read_ptr += increment; + #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_p += increment; +diff -r -U3 coreutils-8.13/lib/fseeko.c coreutils-8.13-patched/lib/fseeko.c +--- coreutils-8.13/lib/fseeko.c 2011-08-12 02:05:46.000000000 -0600 ++++ coreutils-8.13-patched/lib/fseeko.c 2019-08-01 19:02:30.851557318 -0600 +@@ -42,7 +42,7 @@ + #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) +diff -r -U3 coreutils-8.13/lib/fseterr.c coreutils-8.13-patched/lib/fseterr.c +--- coreutils-8.13/lib/fseterr.c 2011-08-19 10:09:37.000000000 -0600 ++++ coreutils-8.13-patched/lib/fseterr.c 2019-08-01 19:02:30.851557318 -0600 +@@ -29,7 +29,7 @@ + /* 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 || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_flags |= _IO_ERR_SEEN; + #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_flags |= __SERR; +diff -r -U3 coreutils-8.13/lib/stdio-impl.h coreutils-8.13-patched/lib/stdio-impl.h +--- coreutils-8.13/lib/stdio-impl.h 2011-04-24 11:21:45.000000000 -0600 ++++ coreutils-8.13-patched/lib/stdio-impl.h 2019-08-01 19:02:30.851557318 -0600 +@@ -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. */ + +diff -r -U3 coreutils-8.13/lib/stdio.in.h coreutils-8.13-patched/lib/stdio.in.h +--- coreutils-8.13/lib/stdio.in.h 2011-06-17 02:06:20.000000000 -0600 ++++ coreutils-8.13-patched/lib/stdio.in.h 2019-08-01 19:03:47.484586570 -0600 +@@ -697,7 +697,7 @@ + /* It is very rare that the developer ever has full control of stdin, + so any use of gets warrants an unconditional warning. Assume it is + always declared, since it is required by C89. */ +-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); ++/* _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); */ + #endif diff --git a/scripts/build-older-versions/coreutils-8.17-on-glibc-2.28.diff b/scripts/build-older-versions/coreutils-8.17-on-glibc-2.28.diff new file mode 100644 index 000000000..44f0daef5 --- /dev/null +++ b/scripts/build-older-versions/coreutils-8.17-on-glibc-2.28.diff @@ -0,0 +1,86 @@ +diff -r -U3 coreutils-8.17/lib/freadahead.c coreutils-8.17-patched/lib/freadahead.c +--- coreutils-8.17/lib/freadahead.c 2012-02-11 02:43:22.000000000 -0700 ++++ coreutils-8.17-patched/lib/freadahead.c 2019-08-01 19:19:11.975280339 -0600 +@@ -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 || 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) +diff -r -U3 coreutils-8.17/lib/freadptr.c coreutils-8.17-patched/lib/freadptr.c +--- coreutils-8.17/lib/freadptr.c 2012-02-11 02:43:22.000000000 -0700 ++++ coreutils-8.17-patched/lib/freadptr.c 2019-08-01 19:19:11.975280339 -0600 +@@ -29,7 +29,7 @@ + size_t size; + + /* Keep this code in sync with freadahead! */ +-#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 NULL; + size = fp->_IO_read_end - fp->_IO_read_ptr; +diff -r -U3 coreutils-8.17/lib/freadseek.c coreutils-8.17-patched/lib/freadseek.c +--- coreutils-8.17/lib/freadseek.c 2012-02-11 02:43:22.000000000 -0700 ++++ coreutils-8.17-patched/lib/freadseek.c 2019-08-01 19:19:11.975280339 -0600 +@@ -34,7 +34,7 @@ + freadptrinc (FILE *fp, size_t increment) + { + /* Keep this code in sync with freadptr! */ +-#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->_IO_read_ptr += increment; + #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_p += increment; +diff -r -U3 coreutils-8.17/lib/fseeko.c coreutils-8.17-patched/lib/fseeko.c +--- coreutils-8.17/lib/fseeko.c 2012-05-04 03:04:45.000000000 -0600 ++++ coreutils-8.17-patched/lib/fseeko.c 2019-08-01 19:19:11.975280339 -0600 +@@ -47,7 +47,7 @@ + #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) +diff -r -U3 coreutils-8.17/lib/fseterr.c coreutils-8.17-patched/lib/fseterr.c +--- coreutils-8.17/lib/fseterr.c 2012-02-11 02:43:22.000000000 -0700 ++++ coreutils-8.17-patched/lib/fseterr.c 2019-08-01 19:19:11.975280339 -0600 +@@ -29,7 +29,7 @@ + /* 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 || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_flags |= _IO_ERR_SEEN; + #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_flags |= __SERR; +diff -r -U3 coreutils-8.17/lib/stdio-impl.h coreutils-8.17-patched/lib/stdio-impl.h +--- coreutils-8.17/lib/stdio-impl.h 2012-02-11 02:43:22.000000000 -0700 ++++ coreutils-8.17-patched/lib/stdio-impl.h 2019-08-01 19:19:11.975280339 -0600 +@@ -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. */ + +diff -r -U3 coreutils-8.17/lib/stdio.in.h coreutils-8.17-patched/lib/stdio.in.h +--- coreutils-8.17/lib/stdio.in.h 2012-05-04 03:04:48.000000000 -0600 ++++ coreutils-8.17-patched/lib/stdio.in.h 2019-08-01 19:19:37.183560130 -0600 +@@ -704,7 +704,7 @@ + removed it. */ + #undef gets + #if HAVE_RAW_DECL_GETS +-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); ++/*_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");*/ + #endif diff --git a/scripts/build-older-versions/coreutils-8.18-on-glibc-2.28.diff b/scripts/build-older-versions/coreutils-8.18-on-glibc-2.28.diff new file mode 100644 index 000000000..81e72a30d --- /dev/null +++ b/scripts/build-older-versions/coreutils-8.18-on-glibc-2.28.diff @@ -0,0 +1,86 @@ +diff -r -U3 coreutils-8.18/lib/freadahead.c coreutils-8.18-patched/lib/freadahead.c +--- coreutils-8.18/lib/freadahead.c 2012-07-15 06:26:12.000000000 -0600 ++++ coreutils-8.18-patched/lib/freadahead.c 2019-08-01 19:22:13.169332844 -0600 +@@ -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 || 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) +diff -r -U3 coreutils-8.18/lib/freadptr.c coreutils-8.18-patched/lib/freadptr.c +--- coreutils-8.18/lib/freadptr.c 2012-07-15 06:26:12.000000000 -0600 ++++ coreutils-8.18-patched/lib/freadptr.c 2019-08-01 19:22:13.169332844 -0600 +@@ -29,7 +29,7 @@ + size_t size; + + /* Keep this code in sync with freadahead! */ +-#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 NULL; + size = fp->_IO_read_end - fp->_IO_read_ptr; +diff -r -U3 coreutils-8.18/lib/freadseek.c coreutils-8.18-patched/lib/freadseek.c +--- coreutils-8.18/lib/freadseek.c 2012-07-15 06:26:12.000000000 -0600 ++++ coreutils-8.18-patched/lib/freadseek.c 2019-08-01 19:23:20.070111747 -0600 +@@ -36,7 +36,7 @@ + /* Keep this code in sync with freadptr! */ + #if HAVE___FREADPTRINC /* musl libc */ + __freadptrinc (fp, increment); +-#elif defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#elif defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_IO_read_ptr += increment; + #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin */ + fp_->_p += increment; +diff -r -U3 coreutils-8.18/lib/fseeko.c coreutils-8.18-patched/lib/fseeko.c +--- coreutils-8.18/lib/fseeko.c 2012-07-13 08:18:33.000000000 -0600 ++++ coreutils-8.18-patched/lib/fseeko.c 2019-08-01 19:22:13.169332844 -0600 +@@ -47,7 +47,7 @@ + #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) +diff -r -U3 coreutils-8.18/lib/fseterr.c coreutils-8.18-patched/lib/fseterr.c +--- coreutils-8.18/lib/fseterr.c 2012-07-15 06:26:12.000000000 -0600 ++++ coreutils-8.18-patched/lib/fseterr.c 2019-08-01 19:22:13.169332844 -0600 +@@ -29,7 +29,7 @@ + /* 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 || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_flags |= _IO_ERR_SEEN; + #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin */ + fp_->_flags |= __SERR; +diff -r -U3 coreutils-8.18/lib/stdio-impl.h coreutils-8.18-patched/lib/stdio-impl.h +--- coreutils-8.18/lib/stdio-impl.h 2012-07-15 06:26:12.000000000 -0600 ++++ coreutils-8.18-patched/lib/stdio-impl.h 2019-08-01 19:22:13.169332844 -0600 +@@ -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. */ + +diff -r -U3 coreutils-8.18/lib/stdio.in.h coreutils-8.18-patched/lib/stdio.in.h +--- coreutils-8.18/lib/stdio.in.h 2012-06-12 14:43:46.000000000 -0600 ++++ coreutils-8.18-patched/lib/stdio.in.h 2019-08-01 19:22:13.169332844 -0600 +@@ -704,7 +704,7 @@ + removed it. */ + #undef gets + #if HAVE_RAW_DECL_GETS +-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); ++/*_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");*/ + #endif diff --git a/scripts/build-older-versions/coreutils-8.24-on-glibc-2.28.diff b/scripts/build-older-versions/coreutils-8.24-on-glibc-2.28.diff new file mode 100644 index 000000000..b06c31f9c --- /dev/null +++ b/scripts/build-older-versions/coreutils-8.24-on-glibc-2.28.diff @@ -0,0 +1,86 @@ +diff -r -U3 coreutils-8.24/lib/freadahead.c coreutils-8.24-patched/lib/freadahead.c +--- coreutils-8.24/lib/freadahead.c 2015-06-15 23:00:37.000000000 -0600 ++++ coreutils-8.24-patched/lib/freadahead.c 2019-08-01 19:47:31.412646436 -0600 +@@ -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 || 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) +diff -r -U3 coreutils-8.24/lib/freadptr.c coreutils-8.24-patched/lib/freadptr.c +--- coreutils-8.24/lib/freadptr.c 2015-06-15 23:00:37.000000000 -0600 ++++ coreutils-8.24-patched/lib/freadptr.c 2019-08-01 19:47:31.416646500 -0600 +@@ -29,7 +29,7 @@ + size_t size; + + /* Keep this code in sync with freadahead! */ +-#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 NULL; + size = fp->_IO_read_end - fp->_IO_read_ptr; +diff -r -U3 coreutils-8.24/lib/freadseek.c coreutils-8.24-patched/lib/freadseek.c +--- coreutils-8.24/lib/freadseek.c 2015-06-15 23:00:37.000000000 -0600 ++++ coreutils-8.24-patched/lib/freadseek.c 2019-08-01 19:47:31.416646500 -0600 +@@ -36,7 +36,7 @@ + /* Keep this code in sync with freadptr! */ + #if HAVE___FREADPTRINC /* musl libc */ + __freadptrinc (fp, increment); +-#elif defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ ++#elif defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_IO_read_ptr += increment; + #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */ +diff -r -U3 coreutils-8.24/lib/fseeko.c coreutils-8.24-patched/lib/fseeko.c +--- coreutils-8.24/lib/fseeko.c 2015-06-15 23:04:31.000000000 -0600 ++++ coreutils-8.24-patched/lib/fseeko.c 2019-08-01 19:47:31.416646500 -0600 +@@ -47,7 +47,7 @@ + #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) +diff -r -U3 coreutils-8.24/lib/fseterr.c coreutils-8.24-patched/lib/fseterr.c +--- coreutils-8.24/lib/fseterr.c 2015-06-15 23:00:37.000000000 -0600 ++++ coreutils-8.24-patched/lib/fseterr.c 2019-08-01 19:47:31.416646500 -0600 +@@ -29,7 +29,7 @@ + /* 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 || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_flags |= _IO_ERR_SEEN; + #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ + /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Android */ +diff -r -U3 coreutils-8.24/lib/mountlist.c coreutils-8.24-patched/lib/mountlist.c +--- coreutils-8.24/lib/mountlist.c 2015-07-01 09:08:30.000000000 -0600 ++++ coreutils-8.24-patched/lib/mountlist.c 2019-08-01 19:49:22.354401380 -0600 +@@ -24,6 +24,7 @@ + #include <stdlib.h> + #include <string.h> + #include <stdint.h> ++#include <sys/sysmacros.h> + + #include "xalloc.h" + +diff -r -U3 coreutils-8.24/lib/stdio-impl.h coreutils-8.24-patched/lib/stdio-impl.h +--- coreutils-8.24/lib/stdio-impl.h 2015-06-15 23:00:37.000000000 -0600 ++++ coreutils-8.24-patched/lib/stdio-impl.h 2019-08-01 19:47:31.416646500 -0600 +@@ -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. */ diff --git a/scripts/build-older-versions/coreutils-8.4-on-glibc-2.28.diff b/scripts/build-older-versions/coreutils-8.4-on-glibc-2.28.diff new file mode 100644 index 000000000..c9fb0d370 --- /dev/null +++ b/scripts/build-older-versions/coreutils-8.4-on-glibc-2.28.diff @@ -0,0 +1,88 @@ +diff -r -U3 coreutils-8.5/lib/freadahead.c coreutils-8.5-patched/lib/freadahead.c +--- coreutils-8.5/lib/freadahead.c 2010-04-23 07:44:00.000000000 -0600 ++++ coreutils-8.5-patched/lib/freadahead.c 2019-08-01 18:35:31.580843463 -0600 +@@ -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 || 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) +diff -r -U3 coreutils-8.5/lib/freadptr.c coreutils-8.5-patched/lib/freadptr.c +--- coreutils-8.5/lib/freadptr.c 2010-04-23 07:44:00.000000000 -0600 ++++ coreutils-8.5-patched/lib/freadptr.c 2019-08-01 18:35:31.580843463 -0600 +@@ -29,7 +29,7 @@ + size_t size; + + /* Keep this code in sync with freadahead! */ +-#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 NULL; + size = fp->_IO_read_end - fp->_IO_read_ptr; +diff -r -U3 coreutils-8.5/lib/freadseek.c coreutils-8.5-patched/lib/freadseek.c +--- coreutils-8.5/lib/freadseek.c 2010-04-23 07:44:00.000000000 -0600 ++++ coreutils-8.5-patched/lib/freadseek.c 2019-08-01 18:35:31.580843463 -0600 +@@ -34,7 +34,7 @@ + freadptrinc (FILE *fp, size_t increment) + { + /* Keep this code in sync with freadptr! */ +-#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->_IO_read_ptr += increment; + #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_p += increment; +diff -r -U3 coreutils-8.5/lib/fseeko.c coreutils-8.5-patched/lib/fseeko.c +--- coreutils-8.5/lib/fseeko.c 2010-04-21 12:11:48.000000000 -0600 ++++ coreutils-8.5-patched/lib/fseeko.c 2019-08-01 18:35:31.580843463 -0600 +@@ -42,7 +42,7 @@ + #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) +diff -r -U3 coreutils-8.5/lib/fseterr.c coreutils-8.5-patched/lib/fseterr.c +--- coreutils-8.5/lib/fseterr.c 2010-04-23 07:44:00.000000000 -0600 ++++ coreutils-8.5-patched/lib/fseterr.c 2019-08-01 18:35:31.584843515 -0600 +@@ -29,7 +29,7 @@ + /* 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 || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_flags |= _IO_ERR_SEEN; + #elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_flags |= __SERR; +diff -r -U3 coreutils-8.5/lib/stdio-impl.h coreutils-8.5-patched/lib/stdio-impl.h +--- coreutils-8.5/lib/stdio-impl.h 2010-04-23 07:44:01.000000000 -0600 ++++ coreutils-8.5-patched/lib/stdio-impl.h 2019-08-01 18:35:31.584843515 -0600 +@@ -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. */ + +diff -r -U3 coreutils-8.5/lib/stdio.in.h coreutils-8.5-patched/lib/stdio.in.h +--- coreutils-8.5/lib/stdio.in.h 2010-04-21 12:11:57.000000000 -0600 ++++ coreutils-8.5-patched/lib/stdio.in.h 2019-08-01 18:26:34.113941755 -0600 +@@ -139,7 +139,7 @@ + so any use of gets warrants an unconditional warning. Assume it is + always declared, since it is required by C89. */ + #undef gets +-_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); ++/*_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");*/ + + #if @GNULIB_FOPEN@ + # if @REPLACE_FOPEN@ |