commit beded861053627f47a4494801378e8b299b4a36a Author: CentOS Sources Date: Tue Nov 3 07:07:11 2020 -0500 import gcc-toolset-10-make-4.2.1-1.el8 diff --git a/.gcc-toolset-10-make.metadata b/.gcc-toolset-10-make.metadata new file mode 100644 index 0000000..6619007 --- /dev/null +++ b/.gcc-toolset-10-make.metadata @@ -0,0 +1 @@ +7d9d11eb36cfb752da1fb11bb3e521d2a3cc8830 SOURCES/make-4.2.1.tar.bz2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9cc2bff --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/make-4.2.1.tar.bz2 diff --git a/SOURCES/0001-configure.ac-SV-50648-Detect-Guile-2.2-packages.patch b/SOURCES/0001-configure.ac-SV-50648-Detect-Guile-2.2-packages.patch new file mode 100644 index 0000000..ee59553 --- /dev/null +++ b/SOURCES/0001-configure.ac-SV-50648-Detect-Guile-2.2-packages.patch @@ -0,0 +1,55 @@ +From fbf71ec25a5986d9003ac16ee9e23675feac9053 Mon Sep 17 00:00:00 2001 +From: Paul Smith +Date: Sun, 16 Apr 2017 15:03:48 -0400 +Subject: [PATCH] * configure.ac: [SV 50648] Detect Guile 2.2 packages. + +--- + configure.ac | 26 ++++++++++++++++---------- + 1 file changed, 16 insertions(+), 10 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 1187ad4..a78fb93 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -160,22 +160,28 @@ AC_FUNC_ALLOCA + AC_FUNC_CLOSEDIR_VOID + + # See if the user wants to add (or not) GNU Guile support +-PKG_PROG_PKG_CONFIG + AC_ARG_WITH([guile], [AS_HELP_STRING([--with-guile], + [Support GNU Guile for embedded scripting])]) + +-# For some strange reason, at least on Ubuntu, each version of Guile +-# comes with it's own PC file so we have to specify them as individual +-# packages. Ugh. ++# Annoyingly, each version of Guile comes with it's own PC file so we have to ++# specify them as individual packages. Ugh. ++PKG_PROG_PKG_CONFIG ++ + AS_IF([test "x$with_guile" != xno], +-[ PKG_CHECK_MODULES([GUILE], [guile-2.0], [have_guile=yes], +- [PKG_CHECK_MODULES([GUILE], [guile-1.8], [have_guile=yes], +- [have_guile=no])]) ++[ guile_versions="2.2 2.0 1.8" ++ guile_version=no ++ have_guile=no ++ AC_MSG_CHECKING([for GNU Guile]) ++ for v in $guile_versions; do ++ PKG_CHECK_EXISTS([guile-$v], [guile_version=$v; have_guile=yes; break], []) ++ done ++ AC_MSG_RESULT([$guile_version]) ++ if test "$have_guile" = yes; then ++ PKG_CHECK_MODULES(GUILE, [guile-$guile_version]) ++ AC_DEFINE([HAVE_GUILE], [1], [Embed GNU Guile support]) ++ fi + ]) + +-AS_IF([test "$have_guile" = yes], +- [AC_DEFINE([HAVE_GUILE], [1], [Embed GNU Guile support])]) +- + AM_CONDITIONAL([HAVE_GUILE], [test "$have_guile" = yes]) + + AC_FUNC_GETLOADAVG +-- +2.21.0.rc1 + diff --git a/SOURCES/make-4.0-newlines.patch b/SOURCES/make-4.0-newlines.patch new file mode 100644 index 0000000..add32c5 --- /dev/null +++ b/SOURCES/make-4.0-newlines.patch @@ -0,0 +1,19 @@ +diff -Nrup a/job.c b/job.c +--- a/job.c 2014-02-03 18:23:45.936436714 -0500 ++++ b/job.c 2014-02-04 00:17:53.232074893 -0500 +@@ -3269,13 +3269,14 @@ construct_command_argv_internal (char *l + #endif + if (PRESERVE_BSNL) + { +- *(ap++) = '\\'; ++ *(ap++) = '\''; + /* Only non-batch execution needs another backslash, + because it will be passed through a recursive + invocation of this function. */ + if (!batch_mode_shell) + *(ap++) = '\\'; + *(ap++) = '\n'; ++ *(ap++) = '\''; + } + ++p; + continue; diff --git a/SOURCES/make-4.0-noclock_gettime.patch b/SOURCES/make-4.0-noclock_gettime.patch new file mode 100644 index 0000000..f63e1fc --- /dev/null +++ b/SOURCES/make-4.0-noclock_gettime.patch @@ -0,0 +1,14 @@ +diff -up make-3.82/configure\~ make-3.82/configure +--- make-3.82/configure~ 2010-07-28 07:41:51.000000000 +0200 ++++ make-3.82/configure 2010-08-11 15:07:50.000000000 +0200 +@@ -7215,7 +7215,7 @@ return clock_gettime (); + return 0; + } + _ACEOF +-for ac_lib in '' rt posix4; do ++for ac_lib in '' posix4; do + if test -z "$ac_lib"; then + ac_res="none required" + else + +Diff finished. Wed Aug 11 15:07:59 2010 diff --git a/SOURCES/make-4.0-weird-shell.patch b/SOURCES/make-4.0-weird-shell.patch new file mode 100644 index 0000000..dfdaf89 --- /dev/null +++ b/SOURCES/make-4.0-weird-shell.patch @@ -0,0 +1,16 @@ +diff -up make-3.82/job.c\~ make-3.82/job.c +--- make-3.82/job.c~ 2010-08-11 16:13:33.000000000 +0200 ++++ make-3.82/job.c 2010-08-12 14:20:08.000000000 +0200 +@@ -2442,7 +2442,11 @@ construct_command_argv_internal (char *l + + /* See if it is safe to parse commands internally. */ + if (shell == 0) +- shell = default_shell; ++ { ++ shell = default_shell; ++ if (shellflags == 0) ++ shellflags = "-c"; ++ } + #ifdef WINDOWS32 + else if (strcmp (shell, default_shell)) + { diff --git a/SOURCES/make-4.2-getcwd.patch b/SOURCES/make-4.2-getcwd.patch new file mode 100644 index 0000000..6c47238 --- /dev/null +++ b/SOURCES/make-4.2-getcwd.patch @@ -0,0 +1,12 @@ +diff -Nrup a/makeint.h b/makeint.h +--- a/makeint.h 2016-05-21 16:22:32.000000000 -0400 ++++ b/makeint.h 2016-09-22 16:12:38.606702160 -0400 +@@ -596,7 +596,7 @@ long int lseek (); + # endif + + # ifdef HAVE_GETCWD +-# if !defined(VMS) && !defined(__DECC) ++# if !defined(VMS) && !defined(__DECC) && !defined(getcwd) + char *getcwd (); + # endif + # else diff --git a/SOURCES/make-4.2-j8k.patch b/SOURCES/make-4.2-j8k.patch new file mode 100644 index 0000000..2b9d7fc --- /dev/null +++ b/SOURCES/make-4.2-j8k.patch @@ -0,0 +1,25 @@ +diff -Nrup a/main.c b/main.c +--- a/main.c 2016-05-31 03:17:26.000000000 -0400 ++++ b/main.c 2016-09-22 16:18:52.283889265 -0400 +@@ -2051,6 +2051,21 @@ main (int argc, char **argv, char **envp + } + #endif + ++#ifdef PIPE_BUF ++ if (job_slots > PIPE_BUF) ++#elif defined _POSIX_PIPE_BUF ++ if (job_slots > _POSIX_PIPE_BUF) ++#else ++ if (job_slots > 512) ++#endif ++ { ++ O (error, NILF, ++ _("More parallel jobs (-jN) than this platform can handle requested.")); ++ O (error, NILF, _("Resetting to single job (-j1) mode.")); ++ job_slots = 1; ++ } ++ ++ + /* If we have >1 slot at this point, then we're a top-level make. + Set up the jobserver. + diff --git a/SOURCES/make-4.2.1-glob-fix-2.patch b/SOURCES/make-4.2.1-glob-fix-2.patch new file mode 100644 index 0000000..911e315 --- /dev/null +++ b/SOURCES/make-4.2.1-glob-fix-2.patch @@ -0,0 +1,67 @@ +From 193f1e81edd6b1b56b0eb0ff8aa4b41c7b4257b4 Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Sun, 24 Sep 2017 09:12:58 -0400 +Subject: glob: Do not assume glibc glob internals. + +It has been proposed that glibc glob start using gl_lstat, +which the API allows it to do. GNU 'make' should not get in +the way of this. See: +https://sourceware.org/ml/libc-alpha/2017-09/msg00409.html + +* dir.c (local_lstat): New function, like local_stat. +(dir_setup_glob): Use it to initialize gl_lstat too, as the API +requires. +--- + dir.c | 29 +++++++++++++++++++++++++++-- + 1 file changed, 27 insertions(+), 2 deletions(-) + +diff --git a/dir.c b/dir.c +index adbb8a9..c343e4c 100644 +--- a/dir.c ++++ b/dir.c +@@ -1299,15 +1299,40 @@ local_stat (const char *path, struct stat *buf) + } + #endif + ++/* Similarly for lstat. */ ++#if !defined(lstat) && !defined(WINDOWS32) || defined(VMS) ++# ifndef VMS ++# ifndef HAVE_SYS_STAT_H ++int lstat (const char *path, struct stat *sbuf); ++# endif ++# else ++ /* We are done with the fake lstat. Go back to the real lstat */ ++# ifdef lstat ++# undef lstat ++# endif ++# endif ++# define local_lstat lstat ++#elif defined(WINDOWS32) ++/* Windows doesn't support lstat(). */ ++# define local_lstat local_stat ++#else ++static int ++local_lstat (const char *path, struct stat *buf) ++{ ++ int e; ++ EINTRLOOP (e, lstat (path, buf)); ++ return e; ++} ++#endif ++ + void + dir_setup_glob (glob_t *gl) + { + gl->gl_opendir = open_dirstream; + gl->gl_readdir = read_dirstream; + gl->gl_closedir = free; ++ gl->gl_lstat = local_lstat; + gl->gl_stat = local_stat; +- /* We don't bother setting gl_lstat, since glob never calls it. +- The slot is only there for compatibility with 4.4 BSD. */ + } + + void +-- +cgit v1.0-41-gc330 + diff --git a/SOURCES/make-4.2.1-glob-fix-3.patch b/SOURCES/make-4.2.1-glob-fix-3.patch new file mode 100644 index 0000000..879fe50 --- /dev/null +++ b/SOURCES/make-4.2.1-glob-fix-3.patch @@ -0,0 +1,15 @@ +diff -Nrup a/configure b/configure +--- a/configure 2018-03-18 23:53:43.991741060 -0400 ++++ b/configure 2018-03-18 23:52:52.456028175 -0400 +@@ -11481,10 +11481,9 @@ else + #include + #include + +-#define GLOB_INTERFACE_VERSION 1 + #if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1 + # include +-# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION ++# if _GNU_GLOB_INTERFACE_VERSION == 1 || _GNU_GLOB_INTERFACE_VERSION == 2 + gnu glob + # endif + #endif diff --git a/SOURCES/make-4.2.1-glob-fix.patch b/SOURCES/make-4.2.1-glob-fix.patch new file mode 100644 index 0000000..be3abae --- /dev/null +++ b/SOURCES/make-4.2.1-glob-fix.patch @@ -0,0 +1,28 @@ +From 48c8a116a914a325a0497721f5d8b58d5bba34d4 Mon Sep 17 00:00:00 2001 +From: Paul Smith +Date: Sun, 19 Nov 2017 15:09:16 -0500 +Subject: * configure.ac: Support GLIBC glob interface version 2 + +--- + configure.ac | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 8c72568..4710832 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -404,10 +404,9 @@ AC_CACHE_CHECK([if system libc has GNU glob], [make_cv_sys_gnu_glob], + #include + #include + +-#define GLOB_INTERFACE_VERSION 1 + #if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1 + # include +-# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION ++# if _GNU_GLOB_INTERFACE_VERSION == 1 || _GNU_GLOB_INTERFACE_VERSION == 2 + gnu glob + # endif + #endif], +-- +cgit v1.0-41-gc330 + diff --git a/SOURCES/make-4.2.1-nonblocking-reads.patch b/SOURCES/make-4.2.1-nonblocking-reads.patch new file mode 100644 index 0000000..76b9545 --- /dev/null +++ b/SOURCES/make-4.2.1-nonblocking-reads.patch @@ -0,0 +1,164 @@ +From b552b05251980f693c729e251f93f5225b400714 Mon Sep 17 00:00:00 2001 +From: Paul Smith +Date: Sat, 3 Jun 2017 16:20:51 -0400 +Subject: [SV 51159] Use a non-blocking read with pselect to avoid hangs. + +* posixos.c (set_blocking): Set blocking on a file descriptor. +(jobserver_setup): Set non-blocking on the jobserver read side. +(jobserver_parse_auth): Ditto. +(jobserver_acquire_all): Set blocking to avoid a busy-wait loop. +(jobserver_acquire): If the non-blocking read() returns without +taking a token then try again. + +diff --git a/posixos.c b/posixos.c +index e642d7f..dbafa51 100644 +--- a/posixos.c ++++ b/posixos.c +@@ -62,6 +62,24 @@ make_job_rfd (void) + #endif + } + ++static void ++set_blocking (int fd, int blocking) ++{ ++ // If we're not using pselect() don't change the blocking ++#ifdef HAVE_PSELECT ++ int flags; ++ EINTRLOOP (flags, fcntl (fd, F_GETFL)); ++ if (flags >= 0) ++ { ++ int r; ++ flags = blocking ? (flags & ~O_NONBLOCK) : (flags | O_NONBLOCK); ++ EINTRLOOP (r, fcntl (fd, F_SETFL, flags)); ++ if (r < 0) ++ pfatal_with_name ("fcntl(O_NONBLOCK)"); ++ } ++#endif ++} ++ + unsigned int + jobserver_setup (int slots) + { +@@ -86,6 +104,9 @@ jobserver_setup (int slots) + pfatal_with_name (_("init jobserver pipe")); + } + ++ /* When using pselect() we want the read to be non-blocking. */ ++ set_blocking (job_fds[0], 0); ++ + return 1; + } + +@@ -121,6 +142,9 @@ jobserver_parse_auth (const char *auth) + return 0; + } + ++ /* When using pselect() we want the read to be non-blocking. */ ++ set_blocking (job_fds[0], 0); ++ + return 1; + } + +@@ -169,7 +193,10 @@ jobserver_acquire_all (void) + { + unsigned int tokens = 0; + +- /* Close the write side, so the read() won't hang. */ ++ /* Use blocking reads to wait for all outstanding jobs. */ ++ set_blocking (job_fds[0], 1); ++ ++ /* Close the write side, so the read() won't hang forever. */ + close (job_fds[1]); + job_fds[1] = -1; + +@@ -236,18 +263,12 @@ jobserver_pre_acquire (void) + unsigned int + jobserver_acquire (int timeout) + { +- sigset_t empty; +- fd_set readfds; + struct timespec spec; + struct timespec *specp = NULL; +- int r; +- char intake; ++ sigset_t empty; + + sigemptyset (&empty); + +- FD_ZERO (&readfds); +- FD_SET (job_fds[0], &readfds); +- + if (timeout) + { + /* Alarm after one second (is this too granular?) */ +@@ -256,28 +277,52 @@ jobserver_acquire (int timeout) + specp = &spec; + } + +- r = pselect (job_fds[0]+1, &readfds, NULL, NULL, specp, &empty); +- +- if (r == -1) ++ while (1) + { +- /* Better be SIGCHLD. */ +- if (errno != EINTR) +- pfatal_with_name (_("pselect jobs pipe")); +- return 0; +- } ++ fd_set readfds; ++ int r; ++ char intake; + +- if (r == 0) +- /* Timeout. */ +- return 0; ++ FD_ZERO (&readfds); ++ FD_SET (job_fds[0], &readfds); + +- /* The read FD is ready: read it! */ +- EINTRLOOP (r, read (job_fds[0], &intake, 1)); +- if (r < 0) +- pfatal_with_name (_("read jobs pipe")); ++ r = pselect (job_fds[0]+1, &readfds, NULL, NULL, specp, &empty); ++ if (r < 0) ++ switch (errno) ++ { ++ case EINTR: ++ /* SIGCHLD will show up as an EINTR. */ ++ return 0; ++ ++ case EBADF: ++ /* Someone closed the jobs pipe. ++ That shouldn't happen but if it does we're done. */ ++ O (fatal, NILF, _("job server shut down")); + +- /* What does it mean if read() returns 0? It shouldn't happen because only +- the master make can reap all the tokens and close the write side...?? */ +- return r > 0; ++ default: ++ pfatal_with_name (_("pselect jobs pipe")); ++ } ++ ++ if (r == 0) ++ /* Timeout. */ ++ return 0; ++ ++ /* The read FD is ready: read it! This is non-blocking. */ ++ EINTRLOOP (r, read (job_fds[0], &intake, 1)); ++ ++ if (r < 0) ++ { ++ /* Someone sniped our token! Try again. */ ++ if (errno == EAGAIN) ++ continue; ++ ++ pfatal_with_name (_("read jobs pipe")); ++ } ++ ++ /* read() should never return 0: only the master make can reap all the ++ tokens and close the write side...?? */ ++ return r > 0; ++ } + } + + #else diff --git a/SOURCES/make-4.2.1-test-driver.patch b/SOURCES/make-4.2.1-test-driver.patch new file mode 100644 index 0000000..e43e8ea --- /dev/null +++ b/SOURCES/make-4.2.1-test-driver.patch @@ -0,0 +1,19 @@ +commit d9d4e06084a4c7da480bd49a3487aadf6ba77b54 +Author: Enrique Olaizola +Date: Sat May 27 14:24:33 2017 -0400 + + * tests/run_make_tests.pl: [SV 50902] Find Perl modules + +diff -Nrup a/tests/run_make_tests.pl b/tests/run_make_tests.pl +--- a/tests/run_make_tests.pl 2016-04-04 01:38:37.000000000 -0400 ++++ b/tests/run_make_tests.pl 2018-04-25 14:19:19.692178798 -0400 +@@ -58,6 +58,9 @@ if ($^O eq 'VMS') + *CORE::GLOBAL::rmdir = \&vms_rmdir; + } + ++use FindBin; ++use lib "$FindBin::Bin"; ++ + require "test_driver.pl"; + require "config-flags.pm"; + diff --git a/SPECS/make.spec b/SPECS/make.spec new file mode 100644 index 0000000..40afe04 --- /dev/null +++ b/SPECS/make.spec @@ -0,0 +1,106 @@ +# -*- coding: utf-8 -*- +%global __python /usr/bin/python3 +%{?scl:%{?scl_package:%scl_package ltrace}} + +Summary: A GNU tool which simplifies the build process for users +Name: %{?scl_prefix}make +Epoch: 1 +Version: 4.2.1 +Release: 1%{?dist} +License: GPLv3+ +URL: http://www.gnu.org/software/make/ +Source: ftp://ftp.gnu.org/gnu/make/make-%{version}.tar.bz2 + +Patch0: make-4.2-getcwd.patch +Patch1: make-4.0-newlines.patch + +# Assume we don't have clock_gettime in configure, so that +# make is not linked against -lpthread (and thus does not +# limit stack to 2MB). +Patch2: make-4.0-noclock_gettime.patch + +# BZs #142691, #17374 +Patch3: make-4.2-j8k.patch + +# Upstream: https://savannah.gnu.org/bugs/?30748 +# The default value of .SHELL_FLAGS is -c. +Patch4: make-4.0-weird-shell.patch + +# Upstream patch: https://git.savannah.gnu.org/cgit/make.git/patch/?id=193f1e81edd6b1b56b0eb0ff8aa4b41c7b4257b4 +# Fixes wrong assumptions of glibc's glob internals. +Patch5: make-4.2.1-glob-fix-2.patch +# Upstream patch: https://git.savannah.gnu.org/cgit/make.git/patch/?id=48c8a116a914a325a0497721f5d8b58d5bba34d4 +# Fixes incorrect use of glibc 2.27 glob internals. +Patch6: make-4.2.1-glob-fix.patch +Patch7: make-4.2.1-glob-fix-3.patch + +# Perl 5.26 removed the implicit CWD in @INC. +Patch8: make-4.2.1-test-driver.patch + +# Upstream patch: https://git.savannah.gnu.org/cgit/make.git/commit/?id=fbf71ec25a5986d9003ac16ee9e23675feac9053 +# Adds support of guile 2.2 +Patch9: 0001-configure.ac-SV-50648-Detect-Guile-2.2-packages.patch + +# Upstream patch: https://git.savannah.gnu.org/cgit/make.git/commit/?id=b552b05251980f693c729e251f93f5225b400714 +# Avoids hangs in parallel builds +Patch10: make-4.2.1-nonblocking-reads.patch + +# autoreconf +BuildRequires: autoconf, automake, gettext-devel +BuildRequires: procps +BuildRequires: perl-interpreter +BuildRequires: gcc + +%description +A GNU tool for controlling the generation of executables and other +non-source files of a program from the program's source files. Make +allows users to build and install packages without any significant +knowledge about the details of the build process. The details about +how the program should be built are provided for make in the program's +makefile. + +%package devel +Summary: Header file for externally visible definitions + +%description devel +The make-devel package contains gnumake.h. + +%prep +%autosetup -p1 -n make-%{version} + +rm -f tests/scripts/features/parallelism.orig + +%build +autoreconf -vfi + +%configure +%make_build + +%install +%make_install +ln -sf make ${RPM_BUILD_ROOT}/%{_bindir}/gmake +ln -sf make.1 ${RPM_BUILD_ROOT}/%{_mandir}/man1/gmake.1 +rm -f ${RPM_BUILD_ROOT}/%{_infodir}/dir + +%find_lang make + +%check +echo ============TESTING=============== +/usr/bin/env LANG=C make -k check && true +echo ============END TESTING=========== + +%files -f make.lang +%license COPYING +%doc NEWS README AUTHORS +%{_bindir}/* +%{_mandir}/man*/* +%{_infodir}/*.info* +%{_includedir}/gnumake.h + +%files devel +%{_includedir}/gnumake.h + +%changelog +* Wed May 27 2020 DJ Delorie - 1:4.2.1-1 +- Initial sources (#1818987) +