Compare commits

..

1 Commits
rawhide ... f30

Author SHA1 Message Date
DJ Delorie 15894f04e6 Use a non-blocking read with pselect to avoid hangs. BZ #1556839
Merges upstream git b552b05251980f693c729e251f93f5225b400714
https://savannah.gnu.org/bugs/?51159
2019-12-10 17:20:34 -05:00
35 changed files with 764 additions and 541 deletions

View File

@ -1 +0,0 @@
1

1
.gitignore vendored
View File

@ -5,4 +5,3 @@ make-3.82.tar.bz2
/make-4.0.tar.bz2 /make-4.0.tar.bz2
/make-4.1.tar.bz2 /make-4.1.tar.bz2
/make-4.2.1.tar.bz2 /make-4.2.1.tar.bz2
/make-4.3.tar.gz

View File

@ -0,0 +1,55 @@
From fbf71ec25a5986d9003ac16ee9e23675feac9053 Mon Sep 17 00:00:00 2001
From: Paul Smith <psmith@gnu.org>
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

View File

@ -1,19 +0,0 @@
--- !Policy
product_versions:
- fedora-*
decision_context: bodhi_update_push_stable
subject_type: koji_build
rules:
- !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional}
--- !Policy
product_versions:
- rhel-8
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1.functional}
--- !Policy
product_versions:
- rhel-9
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1.functional}

View File

@ -0,0 +1,151 @@
diff -Nrup a/job.c b/job.c
--- a/job.c 2015-10-29 17:19:17.209430335 -0400
+++ b/job.c 2015-10-29 18:24:04.452169281 -0400
@@ -1033,7 +1033,7 @@ free_child (struct child *child)
EINTRLOOP (r, write (job_fds[1], &token, 1));
if (r != 1)
- pfatal_with_name (_("write jobserver"));
+ pfatal_with_name_err (_("write jobserver"), errno);
DB (DB_JOBS, (_("Released token for child %p (%s).\n"),
child, child->file->name));
@@ -2008,6 +2008,7 @@ new_job (struct file *file)
#else
/* Set interruptible system calls, and read() for a job token. */
set_child_handler_action_flags (1, waiting_jobs != NULL);
+ errno = 0;
got_token = read (job_rfd, &token, 1);
saved_errno = errno;
set_child_handler_action_flags (0, waiting_jobs != NULL);
@@ -2024,10 +2025,14 @@ new_job (struct file *file)
#ifndef WINDOWS32
/* If the error _wasn't_ expected (EINTR or EBADF), punt. Otherwise,
go back and reap_children(), and try again. */
- errno = saved_errno;
- if (errno != EINTR && errno != EBADF)
- pfatal_with_name (_("read jobs pipe"));
- if (errno == EBADF)
+ if (saved_errno != EINTR && saved_errno != EBADF)
+ {
+ if (got_token == 0)
+ O (fatal, NILF, _("read jobs pipe EOF"));
+ else
+ pfatal_with_name_err (_("read jobs pipe"), saved_errno);
+ }
+ if (saved_errno == EBADF)
DB (DB_JOBS, ("Read returned EBADF.\n"));
#endif
}
@@ -2170,7 +2175,9 @@ load_too_high (void)
O (error, NILF,
_("cannot enforce load limits on this operating system"));
else
- perror_with_name (_("cannot enforce load limit: "), "getloadavg");
+ perror_with_name_err (_("cannot enforce load limit: "),
+ "getloadavg", errno);
+
}
lossage = errno;
load = 0;
diff -Nrup a/main.c b/main.c
--- a/main.c 2015-10-29 17:19:17.198430225 -0400
+++ b/main.c 2015-10-29 19:12:15.599567039 -0400
@@ -1564,7 +1564,7 @@ main (int argc, char **argv, char **envp
|| (job_rfd = dup (job_fds[0])) < 0)
{
if (errno != EBADF)
- pfatal_with_name (_("dup jobserver"));
+ pfatal_with_name_err (_("dup jobserver"), errno);
O (error, NILF,
_("warning: jobserver unavailable: using -j1. Add '+' to parent make rule."));
@@ -1777,13 +1777,13 @@ main (int argc, char **argv, char **envp
strcat (template, DEFAULT_TMPFILE);
outfile = output_tmpfile (&stdin_nm, template);
if (outfile == 0)
- pfatal_with_name (_("fopen (temporary file)"));
+ pfatal_with_name_err (_("fopen (temporary file)"), errno);
while (!feof (stdin) && ! ferror (stdin))
{
char buf[2048];
unsigned int n = fread (buf, 1, sizeof (buf), stdin);
if (n > 0 && fwrite (buf, 1, n, outfile) != n)
- pfatal_with_name (_("fwrite (temporary file)"));
+ pfatal_with_name_err (_("fwrite (temporary file)"), errno);
}
fclose (outfile);
@@ -2019,7 +2019,8 @@ main (int argc, char **argv, char **envp
char c = '+';
if (pipe (job_fds) < 0 || (job_rfd = dup (job_fds[0])) < 0)
- pfatal_with_name (_("creating jobs pipe"));
+ pfatal_with_name_err (_("creating jobs pipe"), errno);
+
#endif
/* Every make assumes that it always has one job it can run. For the
@@ -2039,7 +2040,7 @@ main (int argc, char **argv, char **envp
EINTRLOOP (r, write (job_fds[1], &c, 1));
if (r != 1)
- pfatal_with_name (_("init jobserver pipe"));
+ pfatal_with_name_err (_("init jobserver pipe"), errno);
}
#endif
@@ -2464,7 +2465,7 @@ main (int argc, char **argv, char **envp
/* If there is a temp file from reading a makefile from stdin, get rid of
it now. */
if (stdin_nm && unlink (stdin_nm) < 0 && errno != ENOENT)
- perror_with_name (_("unlink (temporary file): "), stdin_nm);
+ perror_with_name_err (_("unlink (temporary file): "), stdin_nm, errno);
/* If there were no command-line goals, use the default. */
if (goals == 0)
diff -Nrup a/makeint.h b/makeint.h
--- a/makeint.h 2015-10-29 17:19:17.168429926 -0400
+++ b/makeint.h 2015-10-29 18:30:44.364147393 -0400
@@ -458,6 +458,8 @@ void fatal (const gmk_floc *flocp, size_
void die (int) __attribute__ ((noreturn));
void pfatal_with_name (const char *) __attribute__ ((noreturn));
void perror_with_name (const char *, const char *);
+void pfatal_with_name_err (const char *, int errnum) __attribute__ ((noreturn));
+void perror_with_name_err (const char *, const char *, int errnum);
#define xstrlen(_s) ((_s)==NULL ? 0 : strlen (_s))
void *xmalloc (unsigned int);
void *xcalloc (unsigned int);
diff -Nrup a/output.c b/output.c
--- a/output.c 2014-10-05 12:24:51.000000000 -0400
+++ b/output.c 2015-10-29 19:04:05.332692965 -0400
@@ -705,6 +705,13 @@ fatal (const gmk_floc *flocp, size_t len
/* Print an error message from errno. */
void
+perror_with_name_err (const char *str, const char *name, int errnum)
+{
+ const char *err = strerror (errnum);
+ OSSS (error, NILF, _("%s%s: %s"), str, name, err);
+}
+
+void
perror_with_name (const char *str, const char *name)
{
const char *err = strerror (errno);
@@ -714,6 +721,15 @@ perror_with_name (const char *str, const
/* Print an error message from errno and exit. */
void
+pfatal_with_name_err (const char *name, int errnum)
+{
+ const char *err = strerror (errnum);
+ OSS (fatal, NILF, _("%s: %s"), name, err);
+
+ /* NOTREACHED */
+}
+
+void
pfatal_with_name (const char *name)
{
const char *err = strerror (errno);

12
make-4.0-getcwd.patch Normal file
View File

@ -0,0 +1,12 @@
diff -Nrup a/makeint.h b/makeint.h
--- a/makeint.h 2013-10-09 00:22:40.000000000 -0400
+++ b/makeint.h 2014-02-03 17:46:24.969618708 -0500
@@ -528,7 +528,7 @@ long int lseek ();
#endif /* Not GNU C library or POSIX. */
#ifdef HAVE_GETCWD
-# if !defined(VMS) && !defined(__DECC)
+# if !defined(VMS) && !defined(__DECC) && !defined(getcwd)
char *getcwd ();
# endif
#else

24
make-4.0-j8k.patch Normal file
View File

@ -0,0 +1,24 @@
diff -Nrup a/main.c b/main.c
--- a/main.c 2013-10-09 00:22:40.000000000 -0400
+++ b/main.c 2014-02-03 17:18:04.238609236 -0500
@@ -1987,6 +1987,20 @@ 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;
+ }
+
#ifdef MAKE_JOBSERVER
/* If we have >1 slot but no jobserver-fds, then we're a top-level make.
Set up the pipe and install the fds option for our children. */

19
make-4.0-newlines.patch Normal file
View File

@ -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;

View File

@ -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))
{

51
make-4.1-rh1277968.patch Normal file
View File

@ -0,0 +1,51 @@
commit 292da6f6867b75a5af7ddbb639a1feae022f438f
Author: Paul Smith <psmith@gnu.org>
Date: Mon Oct 20 01:54:56 2014 -0400
* main.c (main): [SV 43434] Handle NULL returns from ttyname().
diff --git a/main.c b/main.c
index b2d169c..0cdb8a8 100644
--- a/main.c
+++ b/main.c
@@ -1429,13 +1429,18 @@ main (int argc, char **argv, char **envp)
#ifdef HAVE_ISATTY
if (isatty (fileno (stdout)))
if (! lookup_variable (STRING_SIZE_TUPLE ("MAKE_TERMOUT")))
- define_variable_cname ("MAKE_TERMOUT", TTYNAME (fileno (stdout)),
- o_default, 0)->export = v_export;
-
+ {
+ const char *tty = TTYNAME (fileno (stdout));
+ define_variable_cname ("MAKE_TERMOUT", tty ? tty : DEFAULT_TTYNAME,
+ o_default, 0)->export = v_export;
+ }
if (isatty (fileno (stderr)))
if (! lookup_variable (STRING_SIZE_TUPLE ("MAKE_TERMERR")))
- define_variable_cname ("MAKE_TERMERR", TTYNAME (fileno (stderr)),
- o_default, 0)->export = v_export;
+ {
+ const char *tty = TTYNAME (fileno (stderr));
+ define_variable_cname ("MAKE_TERMERR", tty ? tty : DEFAULT_TTYNAME,
+ o_default, 0)->export = v_export;
+ }
#endif
/* Reset in case the switches changed our minds. */
diff --git a/makeint.h b/makeint.h
index 6223936..2009f41 100644
--- a/makeint.h
+++ b/makeint.h
@@ -436,10 +436,11 @@ extern struct rlimit stack_limit;
/* The number of bytes needed to represent the largest integer as a string. */
#define INTSTR_LENGTH CSTRLEN ("18446744073709551616")
+#define DEFAULT_TTYNAME "true"
#ifdef HAVE_TTYNAME
# define TTYNAME(_f) ttyname (_f)
#else
-# define TTYNAME(_f) "true"
+# define TTYNAME(_f) DEFAULT_TTYNAME
#endif

View File

@ -1,6 +1,6 @@
diff -Nrup a/src/makeint.h b/src/makeint.h diff -Nrup a/makeint.h b/makeint.h
--- a/src/makeint.h 2016-05-21 16:22:32.000000000 -0400 --- a/makeint.h 2016-05-21 16:22:32.000000000 -0400
+++ b/src/makeint.h 2016-09-22 16:12:38.606702160 -0400 +++ b/makeint.h 2016-09-22 16:12:38.606702160 -0400
@@ -596,7 +596,7 @@ long int lseek (); @@ -596,7 +596,7 @@ long int lseek ();
# endif # endif

View File

@ -1,6 +1,6 @@
diff -Nrup a/src/main.c b/src/main.c diff -Nrup a/main.c b/main.c
--- a/src/main.c 2016-05-31 03:17:26.000000000 -0400 --- a/main.c 2016-05-31 03:17:26.000000000 -0400
+++ b/src/main.c 2016-09-22 16:18:52.283889265 -0400 +++ b/main.c 2016-09-22 16:18:52.283889265 -0400
@@ -2051,6 +2051,21 @@ main (int argc, char **argv, char **envp @@ -2051,6 +2051,21 @@ main (int argc, char **argv, char **envp
} }
#endif #endif

View File

@ -0,0 +1,67 @@
From 193f1e81edd6b1b56b0eb0ff8aa4b41c7b4257b4 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
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

View File

@ -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 <glob.h>
#include <fnmatch.h>
-#define GLOB_INTERFACE_VERSION 1
#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1
# include <gnu-versions.h>
-# if _GNU_GLOB_INTERFACE_VERSION == GLOB_INTERFACE_VERSION
+# if _GNU_GLOB_INTERFACE_VERSION == 1 || _GNU_GLOB_INTERFACE_VERSION == 2
gnu glob
# endif
#endif

28
make-4.2.1-glob-fix.patch Normal file
View File

@ -0,0 +1,28 @@
From 48c8a116a914a325a0497721f5d8b58d5bba34d4 Mon Sep 17 00:00:00 2001
From: Paul Smith <psmith@gnu.org>
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 <glob.h>
#include <fnmatch.h>
-#define GLOB_INTERFACE_VERSION 1
#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1
# include <gnu-versions.h>
-# 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

View File

@ -0,0 +1,164 @@
From b552b05251980f693c729e251f93f5225b400714 Mon Sep 17 00:00:00 2001
From: Paul Smith <psmith@gnu.org>
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

View File

@ -0,0 +1,19 @@
commit d9d4e06084a4c7da480bd49a3487aadf6ba77b54
Author: Enrique Olaizola <enrique_olaizola16@hotmail.com>
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";

View File

@ -1,36 +0,0 @@
From d79fe162c009788888faaf0317253b6f0cac7092 Mon Sep 17 00:00:00 2001
From: Kevin Buettner <kevinb@redhat.com>
Date: Thu, 23 Apr 2020 17:05:34 -0400
Subject: [SV 58232] Disable inheritance of jobserver FDs for recursive make
A parent make will invoke a sub-make with close-on-exec disabled for
the jobserver pipe FDs. Force close-on-exec to be to be enabled in
the sub-make so the pipe is not always passed to child jobs.
I have a test case which, when invoked with a suitable -j switch,
will hang if the recipe inherits the jobserver pipe. This test case
was inspired by a real world case in which testing GDB on Fedora
would hang due to some poorly written test GDB cases having been
passed the jobserver file descriptors.
* src/posixos.c (jobserver_parse_auth): Call fd_noinherit() for
jobserver pipe descriptors.
Copyright-paperwork-exempt: yes
diff --git a/src/posixos.c b/src/posixos.c
index 525f292c..eab175a4 100644
--- a/src/posixos.c
+++ b/src/posixos.c
@@ -145,6 +145,11 @@ jobserver_parse_auth (const char *auth)
/* When using pselect() we want the read to be non-blocking. */
set_blocking (job_fds[0], 0);
+ /* By default we don't send the job pipe FDs to our children.
+ See jobserver_pre_child() and jobserver_post_child(). */
+ fd_noinherit (job_fds[0]);
+ fd_noinherit (job_fds[1]);
+
return 1;
}

View File

@ -1,268 +0,0 @@
From e49e11e069fe7f214263be1782242b9b50f71eaa Mon Sep 17 00:00:00 2001
From: Paul Smith <psmith@gnu.org>
Date: Thu, 12 Nov 2020 17:00:39 -0500
Subject: [SV 59093] Rewrite filter/filter-out to avoid large stack usage
* src/function.c (func_filter_filterout): Allocate arrays to hold
pattern and word information rather than creating linked lists on
the stack.
* tests/scripts/functions/filter-out: Test large filters.
diff --git a/src/function.c b/src/function.c
index 0917e0cd..5edfe8b3 100644
--- a/src/function.c
+++ b/src/function.c
@@ -910,7 +910,6 @@ func_foreach (char *o, char **argv, const char *funcname UNUSED)
struct a_word
{
- struct a_word *next;
struct a_word *chain;
char *str;
size_t length;
@@ -941,7 +940,6 @@ a_word_hash_cmp (const void *x, const void *y)
struct a_pattern
{
- struct a_pattern *next;
char *str;
char *percent;
size_t length;
@@ -950,78 +948,84 @@ struct a_pattern
static char *
func_filter_filterout (char *o, char **argv, const char *funcname)
{
- struct a_word *wordhead;
- struct a_word **wordtail;
+ struct a_word *words;
+ struct a_word *word_end;
struct a_word *wp;
- struct a_pattern *pathead;
- struct a_pattern **pattail;
+ struct a_pattern *patterns;
+ struct a_pattern *pat_end;
struct a_pattern *pp;
+ size_t pat_count = 0, word_count = 0;
struct hash_table a_word_table;
int is_filter = funcname[CSTRLEN ("filter")] == '\0';
- const char *pat_iterator = argv[0];
- const char *word_iterator = argv[1];
+ const char *cp;
int literals = 0;
- int words = 0;
int hashing = 0;
char *p;
size_t len;
+ int doneany = 0;
- /* Chop ARGV[0] up into patterns to match against the words.
- We don't need to preserve it because our caller frees all the
- argument memory anyway. */
+ /* Find the number of words and get memory for them. */
+ cp = argv[1];
+ while ((p = find_next_token (&cp, NULL)) != 0)
+ ++word_count;
- pattail = &pathead;
- while ((p = find_next_token (&pat_iterator, &len)) != 0)
- {
- struct a_pattern *pat = alloca (sizeof (struct a_pattern));
+ if (!word_count)
+ return o;
+
+ words = xcalloc (word_count * sizeof (struct a_word));
+ word_end = words + word_count;
- *pattail = pat;
- pattail = &pat->next;
+ /* Find the number of patterns and get memory for them. */
+ cp = argv[0];
+ while ((p = find_next_token (&cp, NULL)) != 0)
+ ++pat_count;
- if (*pat_iterator != '\0')
- ++pat_iterator;
+ patterns = xcalloc (pat_count * sizeof (struct a_pattern));
+ pat_end = patterns + pat_count;
+
+ /* Chop argv[0] up into patterns to match against the words. */
+
+ cp = argv[0];
+ pp = patterns;
+ while ((p = find_next_token (&cp, &len)) != 0)
+ {
+ if (*cp != '\0')
+ ++cp;
- pat->str = p;
p[len] = '\0';
- pat->percent = find_percent (p);
- if (pat->percent == 0)
+ pp->str = p;
+ pp->percent = find_percent (p);
+ if (pp->percent == 0)
literals++;
-
/* find_percent() might shorten the string so LEN is wrong. */
- pat->length = strlen (pat->str);
+ pp->length = strlen (pp->str);
+
+ ++pp;
}
- *pattail = 0;
/* Chop ARGV[1] up into words to match against the patterns. */
- wordtail = &wordhead;
- while ((p = find_next_token (&word_iterator, &len)) != 0)
+ cp = argv[1];
+ wp = words;
+ while ((p = find_next_token (&cp, &len)) != 0)
{
- struct a_word *word = alloca (sizeof (struct a_word));
-
- *wordtail = word;
- wordtail = &word->next;
-
- if (*word_iterator != '\0')
- ++word_iterator;
+ if (*cp != '\0')
+ ++cp;
p[len] = '\0';
- word->str = p;
- word->length = len;
- word->matched = 0;
- word->chain = 0;
- words++;
+ wp->str = p;
+ wp->length = len;
+ ++wp;
}
- *wordtail = 0;
/* Only use a hash table if arg list lengths justifies the cost. */
- hashing = (literals >= 2 && (literals * words) >= 10);
+ hashing = (literals > 1 && (literals * word_count) >= 10);
if (hashing)
{
- hash_init (&a_word_table, words, a_word_hash_1, a_word_hash_2,
+ hash_init (&a_word_table, word_count, a_word_hash_1, a_word_hash_2,
a_word_hash_cmp);
- for (wp = wordhead; wp != 0; wp = wp->next)
+ for (wp = words; wp < word_end; ++wp)
{
struct a_word *owp = hash_insert (&a_word_table, wp);
if (owp)
@@ -1029,51 +1033,49 @@ func_filter_filterout (char *o, char **argv, const char *funcname)
}
}
- if (words)
+ /* Run each pattern through the words, killing words. */
+ for (pp = patterns; pp < pat_end; ++pp)
{
- int doneany = 0;
-
- /* Run each pattern through the words, killing words. */
- for (pp = pathead; pp != 0; pp = pp->next)
+ if (pp->percent)
+ for (wp = words; wp < word_end; ++wp)
+ wp->matched |= pattern_matches (pp->str, pp->percent, wp->str);
+ else if (hashing)
{
- if (pp->percent)
- for (wp = wordhead; wp != 0; wp = wp->next)
- wp->matched |= pattern_matches (pp->str, pp->percent, wp->str);
- else if (hashing)
+ struct a_word a_word_key;
+ a_word_key.str = pp->str;
+ a_word_key.length = pp->length;
+ wp = hash_find_item (&a_word_table, &a_word_key);
+ while (wp)
{
- struct a_word a_word_key;
- a_word_key.str = pp->str;
- a_word_key.length = pp->length;
- wp = hash_find_item (&a_word_table, &a_word_key);
- while (wp)
- {
- wp->matched |= 1;
- wp = wp->chain;
- }
+ wp->matched |= 1;
+ wp = wp->chain;
}
- else
- for (wp = wordhead; wp != 0; wp = wp->next)
- wp->matched |= (wp->length == pp->length
- && strneq (pp->str, wp->str, wp->length));
}
+ else
+ for (wp = words; wp < word_end; ++wp)
+ wp->matched |= (wp->length == pp->length
+ && strneq (pp->str, wp->str, wp->length));
+ }
- /* Output the words that matched (or didn't, for filter-out). */
- for (wp = wordhead; wp != 0; wp = wp->next)
- if (is_filter ? wp->matched : !wp->matched)
- {
- o = variable_buffer_output (o, wp->str, strlen (wp->str));
- o = variable_buffer_output (o, " ", 1);
- doneany = 1;
- }
+ /* Output the words that matched (or didn't, for filter-out). */
+ for (wp = words; wp < word_end; ++wp)
+ if (is_filter ? wp->matched : !wp->matched)
+ {
+ o = variable_buffer_output (o, wp->str, strlen (wp->str));
+ o = variable_buffer_output (o, " ", 1);
+ doneany = 1;
+ }
- if (doneany)
- /* Kill the last space. */
- --o;
- }
+ if (doneany)
+ /* Kill the last space. */
+ --o;
if (hashing)
hash_free (&a_word_table, 0);
+ free (patterns);
+ free (words);
+
return o;
}
diff --git a/tests/scripts/functions/filter-out b/tests/scripts/functions/filter-out
index 1fe4819d..dec5343e 100644
--- a/tests/scripts/functions/filter-out
+++ b/tests/scripts/functions/filter-out
@@ -27,6 +27,22 @@ all: ; @echo '$(files1) $(files2)'
!,
'', "foo.elc foo.elc\n");
+# Force use of hash (see function.c:func_filter_filterout for params)
+
+my $base = 'foo.1 foo.2 foo.3 foo.4 foo.5 foo.6 foo.7 foo.8 foo.9 foo.10';
+
+my $base10 = join(' ', ($base) x 10);
+my $out3 = join(' ', ('foo.3') x 10);
+my $out456 = join(' ', ('foo.4 foo.5 foo.6') x 10);
+
+run_make_test("words := $base10" . q!
+files1 := $(filter %.3, $(words))
+files2 := $(filter %.4 foo.5 foo.6, $(words))
+all: ; @echo '$(files1) $(files2)'
+!,
+ '', "$out3 $out456\n");
+
+
# Escaped patterns
run_make_test(q!all:;@echo '$(filter foo\%bar,foo%bar fooXbar)'!,
'', "foo%bar\n");

25
make-getcwd.patch Normal file
View File

@ -0,0 +1,25 @@
From 3271ba0553cd8805ea0669edd67b16f4ecee332e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Sat, 24 Oct 2015 18:18:04 -0400
Subject: [PATCH] getcwd
---
makeint.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git makeint.h makeint.h
index fdcae75bd2..98c022deac 100644
--- makeint.h
+++ makeint.h
@@ -548,7 +548,7 @@ long int lseek ();
#endif /* Not GNU C library or POSIX. */
#ifdef HAVE_GETCWD
-# if !defined(VMS) && !defined(__DECC)
+# if !defined(VMS) && !defined(__DECC) && !defined(getcwd)
char *getcwd ();
# endif
#else
--
2.5.0

32
make-newlines.patch Normal file
View File

@ -0,0 +1,32 @@
From 5467b24cddaa4c5d108f98b8266fe787d778c9d0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Sat, 24 Oct 2015 18:19:30 -0400
Subject: [PATCH] newlines
---
job.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git job.c job.c
index 2989249063..7e5bae2a56 100644
--- job.c
+++ job.c
@@ -3320,13 +3320,14 @@ construct_command_argv_internal (char *line, char **restp, const char *shell,
#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;
--
2.5.0

166
make.spec
View File

@ -1,81 +1,55 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# This decides the SRPM name. Set to "make" for a rolling release Summary: A GNU tool which simplifies the build process for users
# (like Fedora) or "make-latest" for a long term release that needs
# optional versioned updates.
Name: make Name: make
Epoch: 1 Epoch: 1
Version: 4.3 Version: 4.2.1
Release: 11%{?dist} Release: 14%{?dist}
License: GPLv3+ License: GPLv3+
URL: http://www.gnu.org/software/make/ URL: http://www.gnu.org/software/make/
Source: ftp://ftp.gnu.org/gnu/make/make-%{version}.tar.gz Source: ftp://ftp.gnu.org/gnu/make/make-%{version}.tar.bz2
%if "%{name}" != "make" Patch0: make-4.2-getcwd.patch
# Set this to the sub-package base name, for "make-latest" Patch1: make-4.0-newlines.patch
%global make make43
%if 0%{?rhel} > 0
%global _prefix /opt/rh/%{make}
%else
# We intentionally do not define a case for Fedora, as it should not
# need this functionality, and letting it error avoids accidents.
%{error:"Each downstream must specify its own /opt namespace"}
%endif
Summary: Meta package to include latest version of make
%else
%global make %{name}
Summary: A GNU tool which simplifies the build process for users
%endif
%if 0%{?rhel} > 0
# This gives the user the option of saying --with guile, but defaults to WITHOUT
%bcond_with guile
%else
# This gives the user the option of saying --without guile, but defaults to WITH
%bcond_without guile
%endif
Patch0: make-4.3-getcwd.patch
# Assume we don't have clock_gettime in configure, so that # Assume we don't have clock_gettime in configure, so that
# make is not linked against -lpthread (and thus does not # make is not linked against -lpthread (and thus does not
# limit stack to 2MB). # limit stack to 2MB).
Patch1: make-4.0-noclock_gettime.patch Patch2: make-4.0-noclock_gettime.patch
# BZs #142691, #17374 # BZs #142691, #17374
Patch2: make-4.3-j8k.patch Patch3: make-4.2-j8k.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=1827850 # Upstream: https://savannah.gnu.org/bugs/?30748
# https://savannah.gnu.org/bugs/?58232 # The default value of .SHELL_FLAGS is -c.
# Remove on next make rebase Patch4: make-4.0-weird-shell.patch
Patch3: make-4.3-cloexec.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=2010506 # Upstream patch: https://git.savannah.gnu.org/cgit/make.git/patch/?id=193f1e81edd6b1b56b0eb0ff8aa4b41c7b4257b4
# https://savannah.gnu.org/bugs/?59093 # Fixes wrong assumptions of glibc's glob internals.
# Remove on next make rebase Patch5: make-4.2.1-glob-fix-2.patch
Patch4: make-4.3-filter-out.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 # autoreconf
BuildRequires: make
BuildRequires: autoconf, automake, gettext-devel BuildRequires: autoconf, automake, gettext-devel
BuildRequires: procps BuildRequires: procps
BuildRequires: perl BuildRequires: perl-interpreter
%if %{with guile}
BuildRequires: pkgconfig(guile-2.2) BuildRequires: pkgconfig(guile-2.2)
%endif
BuildRequires: gcc BuildRequires: gcc
%if "%{name}" != "make" %description
# We're still on the make-latest package
Requires: %{make}
%description -n make-latest
The latest GNU Make, with a version-specific install
%files -n make-latest
%package -n %{make}
Summary: A GNU tool which simplifies the build process for users
%endif
%description -n %{make}
A GNU tool for controlling the generation of executables and other A GNU tool for controlling the generation of executables and other
non-source files of a program from the program's source files. Make non-source files of a program from the program's source files. Make
allows users to build and install packages without any significant allows users to build and install packages without any significant
@ -83,27 +57,21 @@ 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 how the program should be built are provided for make in the program's
makefile. makefile.
%package -n %{make}-devel %package devel
Summary: Header file for externally visible definitions Summary: Header file for externally visible definitions
%description -n %{make}-devel %description devel
The %{make}-devel package contains gnumake.h. The make-devel package contains gnumake.h.
%prep %prep
%autosetup -n make-%{version} -p1 %autosetup -p1
rm -f tests/scripts/features/parallelism.orig rm -f tests/scripts/features/parallelism.orig
%build %build
autoreconf -vfi autoreconf -vfi
%configure \ %configure --with-guile
%if %{with guile}
--with-guile
%else
--without-guile
%endif
%make_build %make_build
%install %install
@ -112,82 +80,28 @@ ln -sf make ${RPM_BUILD_ROOT}/%{_bindir}/gmake
ln -sf make.1 ${RPM_BUILD_ROOT}/%{_mandir}/man1/gmake.1 ln -sf make.1 ${RPM_BUILD_ROOT}/%{_mandir}/man1/gmake.1
rm -f ${RPM_BUILD_ROOT}/%{_infodir}/dir rm -f ${RPM_BUILD_ROOT}/%{_infodir}/dir
%if "%{name}" != "make" %find_lang %name
install -d -m 755 ${RPM_BUILD_ROOT}/etc/scl/prefixes
dirname %{_prefix} > %{make}.prefix
install -p -m 644 %{make}.prefix ${RPM_BUILD_ROOT}/etc/scl/prefixes/%{make}
echo "export PATH=%{_prefix}/bin:\$PATH" > enable.scl
install -p -m 755 enable.scl ${RPM_BUILD_ROOT}/%{_prefix}/enable
%endif
%find_lang make
%check %check
echo ============TESTING=============== echo ============TESTING===============
/usr/bin/env LANG=C make check && true /usr/bin/env LANG=C make check && true
echo ============END TESTING=========== echo ============END TESTING===========
%files -n %{make} -f make.lang %files -f %{name}.lang
%license COPYING %license COPYING
%doc NEWS README AUTHORS %doc NEWS README AUTHORS
%{_bindir}/* %{_bindir}/*
%{_mandir}/man*/* %{_mandir}/man*/*
%{_infodir}/*.info* %{_infodir}/*.info*
%{_includedir}/gnumake.h %{_includedir}/gnumake.h
%if "%{name}" != "make"
/etc/scl/prefixes/%{make}
%{_prefix}/enable
%endif
%files -n %{make}-devel %files devel
%{_includedir}/gnumake.h %{_includedir}/gnumake.h
%changelog %changelog
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1:4.3-11 * Mon Dec 09 2019 DJ Delorie <dj@redhat.com> - 1:4.2.1-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Thu Jul 14 2022 DJ Delorie <dj@redhat.com> - 1:4.3-10
- Add SCL compatibility to LTS builds.
* Wed Jun 29 2022 DJ Delorie <dj@redhat.com> - 1:4.3-9
- Enable long-term supported builds.
* Fri Apr 8 2022 DJ Delorie <dj@redhat.com> - 1:4.3-8
- Rewrite filter/filter-out to avoid large stack usage. BZ #2010506
- Require perl core modules for testsuite
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1:4.3-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1:4.3-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Fri Feb 19 2021 DJ Delorie <dj@redhat.com> - 1:4.3-5
- Allow users to build with or without guile support as desired.
- Allow derivative downstreams to default to disabling guile support.
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1:4.3-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Wed Jul 29 2020 DJ Delorie <dj@redhat.com> - 1:4.3-3
- Disable inheritance of jobserver FDs for recursive make. BZ #1827850
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1:4.3-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Wed Mar 11 2020 DJ Delorie <dj@redhat.com> - 1:4.3-1
- Rebase to make-4.3. Remove obsolete patches.
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1:4.2.1-16
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Fri Dec 06 2019 DJ Delorie <dj@redhat.com> - 1:4.2.1-15
- Use a non-blocking read with pselect to avoid hangs. BZ #1556839 - Use a non-blocking read with pselect to avoid hangs. BZ #1556839
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1:4.2.1-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Sun Feb 17 2019 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1:4.2.1-13 * Sun Feb 17 2019 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1:4.2.1-13
- Run autoreconf - Run autoreconf

View File

@ -1,6 +0,0 @@
summary: CI Gating Plan
discover:
how: fmf
directory: tests
execute:
how: beakerlib

View File

@ -1 +1 @@
SHA512 (make-4.3.tar.gz) = 9a1185cc468368f4ec06478b1cfa343bf90b5cd7c92c0536567db0315b0ee909af53ecce3d44cfd93dd137dbca1ed13af5713e8663590c4fdd21ea635d78496b 15b012617e7c44c0ed482721629577ac make-4.2.1.tar.bz2

View File

@ -1,17 +0,0 @@
summary: GNU make utility v.3.82 shipped with el7 breaks
description: |
Summary: GNU make utility v.3.82 shipped with el7 breaks environment vars
contact:
- Michal Kolar <mkolar@redhat.com>
component:
- make
test: ./runtest.sh
framework: beakerlib
recommend:
- make
- coreutils
- sed
- diffutils
duration: 2m
extra-summary: /tools/make/Regression/GNU-make-utility-v-3-82-shipped-with-el7-breaks
extra-task: /tools/make/Regression/GNU-make-utility-v-3-82-shipped-with-el7-breaks

View File

@ -26,6 +26,7 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Include Beaker environment # Include Beaker environment
. /usr/bin/rhts-environment.sh || exit 1
. /usr/share/beakerlib/beakerlib.sh || exit 1 . /usr/share/beakerlib/beakerlib.sh || exit 1
CMD="make" CMD="make"

View File

@ -1,15 +0,0 @@
summary: Test for Use-after-free() when eval in variable)
description: |
Summary: Use-after-free() when eval in variable assignments reassigns the same variable
contact:
- Marek Polacek <polacek@redhat.com>
component:
- make
test: ./runtest.sh
framework: beakerlib
recommend:
- make
- coreutils
duration: 2m
extra-summary: /tools/make/Regression/Use-after-free-when-eval-in-variable
extra-task: /tools/make/Regression/Use-after-free-when-eval-in-variable

View File

@ -27,7 +27,8 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Include Beaker environment # Include Beaker environment
. /usr/share/beakerlib/beakerlib.sh || exit 1 . /usr/bin/rhts-environment.sh || exit 1
. /usr/lib/beakerlib/beakerlib.sh || exit 1
CMD="make" CMD="make"
BIN="$(which $CMD)" BIN="$(which $CMD)"

View File

@ -1,14 +0,0 @@
summary: make 3.79 has a parsing bug
description: ''
contact:
- Michal Kolar <mkolar@redhat.com>
component:
- make
test: ./runtest.sh
framework: beakerlib
recommend:
- make
- coreutils
duration: 1m
extra-summary: /tools/make/Regression/make-3-79-has-a-parsing-bug
extra-task: /tools/make/Regression/make-3-79-has-a-parsing-bug

View File

@ -26,6 +26,7 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Include Beaker environment # Include Beaker environment
. /usr/bin/rhts-environment.sh || exit 1
. /usr/share/beakerlib/beakerlib.sh || exit 1 . /usr/share/beakerlib/beakerlib.sh || exit 1
CMD="make" CMD="make"

View File

@ -1,16 +0,0 @@
summary: Test for make bug
description: |
Summary: Test that make doesn't insert bogus values into order-only dependencies
contact:
- Petr Muller <pmuller@redhat.com>
component:
- make
test: ./runtest.sh
framework: beakerlib
recommend:
- make
- coreutils
- diffutils
duration: 1m
extra-summary: /tools/make/Regression/order-only
extra-task: /tools/make/Regression/order-only

View File

@ -26,6 +26,7 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Include Beaker environment # Include Beaker environment
. /usr/bin/rhts-environment.sh || exit 1
. /usr/share/beakerlib/beakerlib.sh || exit 1 . /usr/share/beakerlib/beakerlib.sh || exit 1
CMD="make" CMD="make"

View File

@ -1,14 +0,0 @@
summary: Show your version. Build a one-file project.
description: ''
contact:
- Vaclav Kadlcik <vkadlcik@redhat.com>
component:
- make
test: ./runtest.sh
framework: beakerlib
recommend:
- make
- gcc
duration: 5m
extra-summary: /tools/make/Sanity/smoke-check-make-runs
extra-task: /tools/make/Sanity/smoke-check-make-runs

View File

@ -26,6 +26,7 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Include Beaker environment # Include Beaker environment
. /usr/bin/rhts-environment.sh || exit 1
. /usr/share/beakerlib/beakerlib.sh || exit 1 . /usr/share/beakerlib/beakerlib.sh || exit 1
MAKE="$(which --skip-alias make)" MAKE="$(which --skip-alias make)"

33
tests/tests.yml Normal file
View File

@ -0,0 +1,33 @@
---
# Tests to run against Docker and Classic mode
- hosts: localhost
roles:
- role: standard-test-beakerlib
tags:
- classic
- container
tests:
- GNU-make-utility-v-3-82-shipped-with-el7-breaks
- order-only
- Use-after-free-when-eval-in-variable
- make-3-79-has-a-parsing-bug
- smoke-check-make-runs
required_packages:
- make
- coreutils
- diffutils
- sed
- gcc
- which
# Tests to run against Atomic Host
- hosts: localhost
roles:
- role: standard-test-beakerlib
tags:
- atomic
tests:
- GNU-make-utility-v-3-82-shipped-with-el7-breaks
- order-only
- Use-after-free-when-eval-in-variable
- make-3-79-has-a-parsing-bug