update make to 4.3

This commit is contained in:
wangchen2020 2020-07-28 18:32:58 +08:00
parent 658cb6c321
commit b1d5278004
15 changed files with 13 additions and 1046 deletions

View File

@ -1,443 +0,0 @@
From 3112c8799358cb5d051e0b63d0e916357169942c Mon Sep 17 00:00:00 2001
From: Paul Smith <psmith@gnu.org>
Date: Sat, 4 Aug 2018 12:18:39 -0400
Subject: [PATCH 085/104] Queue failed fork() (etc.) to be handled like any
other failed job.
If we failed to fork() we were essentially exiting make immediately
without respect to ignore flags, etc. On one hand that makes sense
because if you can't fork you're in real trouble, but it doesn't
work so well on systems where we don't fork at all. Instead, treat
a fork error like any other error by delaying the handling until
the next call to reap_children(). Any child with a PID of -1 is
considered to have died before starting so check these first without
waiting for them.
* src/commands.c (fatal_error_signal): Don't kill children that
never started.
* src/function.c (func_shell_base): Handle cleanup properly if the
child doesn't start.
* src/job.c (reap_children): Check for children that died before
starting and handle them without waiting for the PID.
(start_job_command): Free memory when the child doesn't start.
(start_waiting_job): Don't manage children who never started.
(child_execute_job): If the fork fails return PID -1.
* src/vmsjobs.c: Check for children that never started.
* tests/run_make_tests.pl: Parse config.status to get all options.
---
commands.c | 6 +-
function.c | 28 +++++----
job.c | 123 ++++++++++++++++++----------------------
job.h | 8 ++-
vmsjobs.c | 3 +-
tests/run_make_tests.pl | 13 ++++-
6 files changed, 93 insertions(+), 88 deletions(-)
--- a/commands.c 2019-04-10 22:50:51.317814695 -0400
+++ b/commands.c 2019-04-10 23:13:38.411814695 -0400
@@ -538,7 +538,7 @@ fatal_error_signal (int sig)
{
struct child *c;
for (c = children; c != 0; c = c->next)
- if (!c->remote)
+ if (!c->remote && c->pid > 0)
(void) kill (c->pid, SIGTERM);
}
@@ -559,7 +559,7 @@ fatal_error_signal (int sig)
/* Remote children won't automatically get signals sent
to the process group, so we must send them. */
for (c = children; c != 0; c = c->next)
- if (c->remote)
+ if (c->remote && c->pid > 0)
(void) remote_kill (c->pid, sig);
for (c = children; c != 0; c = c->next)
@@ -660,7 +660,7 @@ delete_child_targets (struct child *chil
{
struct dep *d;
- if (child->deleted)
+ if (child->deleted || child->pid < 0)
return;
/* Delete the target file if it changed. */
--- a/function.c 2019-04-10 22:50:51.293814695 -0400
+++ b/function.c 2019-04-10 23:19:59.282814695 -0400
@@ -1690,7 +1690,7 @@ func_shell_base (char *o, char **argv, i
#ifdef __MSDOS__
FILE *fpipe;
#endif
- char **command_argv;
+ char **command_argv = NULL;
const char *error_prefix;
char **envp;
int pipedes[2];
@@ -1753,7 +1753,8 @@ func_shell_base (char *o, char **argv, i
if (pipedes[0] < 0)
{
perror_with_name (error_prefix, "pipe");
- return o;
+ pid = -1;
+ goto done;
}
#elif defined(WINDOWS32)
@@ -1766,14 +1767,16 @@ func_shell_base (char *o, char **argv, i
/* Open of the pipe failed, mark as failed execution. */
shell_completed (127, 0);
perror_with_name (error_prefix, "pipe");
- return o;
+ pid = -1;
+ goto done;
}
#else
if (pipe (pipedes) < 0)
{
perror_with_name (error_prefix, "pipe");
- return o;
+ pid = -1;
+ goto done;
}
/* Close handles that are unnecessary for the child process. */
@@ -1790,10 +1793,7 @@ func_shell_base (char *o, char **argv, i
}
if (pid < 0)
- {
- perror_with_name (error_prefix, "fork");
- return o;
- }
+ goto done;
#endif
{
@@ -1806,10 +1806,6 @@ func_shell_base (char *o, char **argv, i
#ifndef __MSDOS__
shell_function_completed = 0;
- /* Free the storage only the child needed. */
- free (command_argv[0]);
- free (command_argv);
-
/* Close the write side of the pipe. We test for -1, since
pipedes[1] is -1 on MS-Windows, and some versions of MS
libraries barf when 'close' is called with -1. */
@@ -1884,6 +1880,14 @@ func_shell_base (char *o, char **argv, i
free (buffer);
}
+ done:
+ if (command_argv)
+ {
+ /* Free the storage only the child needed. */
+ free (command_argv[0]);
+ free (command_argv);
+ }
+
return o;
}
--- a/job.c 2019-04-10 22:50:51.306814695 -0400
+++ b/job.c 2019-04-10 23:44:37.378814695 -0400
@@ -622,10 +622,22 @@ reap_children (int block, int err)
any_remote = 0;
any_local = shell_function_pid != 0;
- for (c = children; c != 0; c = c->next)
+ lastc = 0;
+ for (c = children; c != 0; lastc = c, c = c->next)
{
any_remote |= c->remote;
any_local |= ! c->remote;
+
+ /* If pid < 0, this child never even started. Handle it. */
+ if (c->pid < 0)
+ {
+ exit_sig = 0;
+ coredump = 0;
+ /* According to POSIX, 127 is used for command not found. */
+ exit_code = 127;
+ goto process_child;
+ }
+
DB (DB_JOBS, (_("Live child %p (%s) PID %s %s\n"),
c, c->file->name, pid2str (c->pid),
c->remote ? _(" (remote)") : ""));
@@ -691,9 +703,6 @@ reap_children (int block, int err)
exit_sig = WIFSIGNALED (status) ? WTERMSIG (status) : 0;
coredump = WCOREDUMP (status);
- /* If we have started jobs in this second, remove one. */
- if (job_counter)
- --job_counter;
}
else
{
@@ -818,6 +827,16 @@ reap_children (int block, int err)
Ignore it; it was inherited from our invoker. */
continue;
+ DB (DB_JOBS, (exit_sig == 0 && exit_code == 0
+ ? _("Reaping losing child %p PID %s %s\n")
+ : _("Reaping winning child %p PID %s %s\n"),
+ c, pid2str (c->pid), c->remote ? _(" (remote)") : ""));
+
+ /* If we have started jobs in this second, remove one. */
+ if (job_counter)
+ --job_counter;
+
+ process_child:
/* Determine the failure status: 0 for success, 1 for updating target in
question mode, 2 for anything else. */
if (exit_sig == 0 && exit_code == 0)
@@ -827,11 +846,6 @@ reap_children (int block, int err)
else
child_failed = MAKE_FAILURE;
- DB (DB_JOBS, (child_failed
- ? _("Reaping losing child %p PID %s %s\n")
- : _("Reaping winning child %p PID %s %s\n"),
- c, pid2str (c->pid), c->remote ? _(" (remote)") : ""));
-
if (c->sh_batch_file)
{
int rm_status;
@@ -939,7 +953,7 @@ reap_children (int block, int err)
/* At this point c->file->update_status is success or failed. But
c->file->command_state is still cs_running if all the commands
- ran; notice_finish_file looks for cs_running to tell it that
+ ran; notice_finished_file looks for cs_running to tell it that
it's interesting to check the file's modtime again now. */
if (! handling_fatal_signal)
@@ -948,9 +962,6 @@ reap_children (int block, int err)
update_status to its also_make files. */
notice_finished_file (c->file);
- DB (DB_JOBS, (_("Removing child %p PID %s%s from chain.\n"),
- c, pid2str (c->pid), c->remote ? _(" (remote)") : ""));
-
/* Block fatal signals while frobnicating the list, so that
children and job_slots_used are always consistent. Otherwise
a fatal signal arriving after the child is off the chain and
@@ -958,9 +969,15 @@ reap_children (int block, int err)
live and call reap_children again. */
block_sigs ();
- /* There is now another slot open. */
- if (job_slots_used > 0)
- --job_slots_used;
+ if (c->pid > 0)
+ {
+ DB (DB_JOBS, (_("Removing child %p PID %s%s from chain.\n"),
+ c, pid2str (c->pid), c->remote ? _(" (remote)") : ""));
+
+ /* There is now another slot open. */
+ if (job_slots_used > 0)
+ --job_slots_used;
+ }
/* Remove the child from the chain and free it. */
if (lastc == 0)
@@ -1071,8 +1088,10 @@ start_job_command (struct child *child)
int flags;
char *p;
#ifdef VMS
+# define FREE_ARGV(_a)
char *argv;
#else
+# define FREE_ARGV(_a) do{ if (_a) { free ((_a)[0]); free (_a); } }while(0)
char **argv;
#endif
@@ -1190,10 +1209,7 @@ start_job_command (struct child *child)
error is 2. */
if (argv != 0 && question_flag && !(flags & COMMANDS_RECURSE))
{
-#ifndef VMS
- free (argv[0]);
- free (argv);
-#endif
+ FREE_ARGV (argv);
#ifdef VMS
/* On VMS, argv[0] can be a null string here */
if (argv[0] != 0)
@@ -1211,13 +1227,7 @@ start_job_command (struct child *child)
{
/* Go on to the next command. It might be the recursive one.
We construct ARGV only to find the end of the command line. */
-#ifndef VMS
- if (argv)
- {
- free (argv[0]);
- free (argv);
- }
-#endif
+ FREE_ARGV (argv);
argv = 0;
}
@@ -1293,8 +1303,7 @@ start_job_command (struct child *child)
&& (argv[2] && argv[2][0] == ':' && argv[2][1] == '\0')
&& argv[3] == NULL)
{
- free (argv[0]);
- free (argv);
+ FREE_ARGV (argv);
goto next_command;
}
#endif /* !VMS && !_AMIGA */
@@ -1303,10 +1312,7 @@ start_job_command (struct child *child)
if (just_print_flag && !(flags & COMMANDS_RECURSE))
{
-#ifndef VMS
- free (argv[0]);
- free (argv);
-#endif
+ FREE_ARGV (argv);
goto next_command;
}
@@ -1373,11 +1379,7 @@ start_job_command (struct child *child)
#ifdef VMS
if (!child_execute_job (child, argv))
- {
- /* Fork failed! */
- perror_with_name ("fork", "");
- goto error;
- }
+ child->pid = -1;
#else
@@ -1385,18 +1387,11 @@ start_job_command (struct child *child)
jobserver_pre_child (flags & COMMANDS_RECURSE);
- child->pid = child_execute_job (&child->output, child->good_stdin, argv, child->environment);
+ child->pid = child_execute_job (&child->output, child->good_stdin,
+ argv, child->environment);
environ = parent_environ; /* Restore value child may have clobbered. */
jobserver_post_child (flags & COMMANDS_RECURSE);
-
- if (child->pid < 0)
- {
- /* Fork failed! */
- unblock_sigs ();
- perror_with_name ("fork", "");
- goto error;
- }
#endif /* !VMS */
}
@@ -1511,33 +1506,25 @@ start_job_command (struct child *child)
for (i = 0; argv[i]; i++)
fprintf (stderr, "%s ", argv[i]);
fprintf (stderr, _("\nCounted %d args in failed launch\n"), i);
- goto error;
+ child->pid = -1;
}
}
#endif /* WINDOWS32 */
#endif /* __MSDOS__ or Amiga or WINDOWS32 */
/* Bump the number of jobs started in this second. */
- ++job_counter;
-
- /* We are the parent side. Set the state to
- say the commands are running and return. */
+ if (child->pid >= 0)
+ ++job_counter;
+ /* Set the state to running. */
set_command_state (child->file, cs_running);
/* Free the storage used by the child's argument list. */
-#ifndef VMS
- free (argv[0]);
- free (argv);
-#endif
+ FREE_ARGV (argv);
OUTPUT_UNSET();
- return;
- error:
- child->file->update_status = us_failed;
- notice_finished_file (child->file);
- OUTPUT_UNSET();
+#undef FREE_ARGV
}
/* Try to start a child running.
@@ -1579,12 +1566,15 @@ start_waiting_job (struct child *c)
{
case cs_running:
c->next = children;
- DB (DB_JOBS, (_("Putting child %p (%s) PID %s%s on the chain.\n"),
- c, c->file->name, pid2str (c->pid),
- c->remote ? _(" (remote)") : ""));
+ if (c->pid > 0)
+ {
+ DB (DB_JOBS, (_("Putting child %p (%s) PID %s%s on the chain.\n"),
+ c, c->file->name, pid2str (c->pid),
+ c->remote ? _(" (remote)") : ""));
+ /* One more job slot is in use. */
+ ++job_slots_used;
+ }
children = c;
- /* One more job slot is in use. */
- ++job_slots_used;
unblock_sigs ();
break;
--- a/job.h 2019-04-10 22:50:51.319814695 -0400
+++ b/job.h 2019-04-10 23:46:53.284814695 -0400
@@ -95,6 +95,8 @@ struct child
char **command_lines; /* Array of variable-expanded cmd lines. */
char *command_ptr; /* Ptr into command_lines[command_line]. */
+ struct output output; /* Output for this child. */
+
#ifdef VMS
char *comname; /* Temporary command file name */
int efn; /* Completion event flag number */
@@ -103,7 +105,7 @@ struct child
#endif
unsigned int command_line; /* Index into command_lines. */
- struct output output; /* Output for this child. */
+
pid_t pid; /* Child process's ID number. */
unsigned int remote:1; /* Nonzero if executing remotely. */
unsigned int noerror:1; /* Nonzero if commands contained a '-'. */
@@ -131,7 +133,8 @@ int child_execute_job (struct child *chi
# define FD_STDIN (fileno (stdin))
# define FD_STDOUT (fileno (stdout))
# define FD_STDERR (fileno (stderr))
-pid_t child_execute_job (struct output *out, int good_stdin, char **argv, char **envp);
+pid_t child_execute_job (struct output *out, int good_stdin,
+ char **argv, char **envp);
#endif
#ifdef _AMIGA
--- a/vmsjobs.c 2019-04-10 22:50:51.318814695 -0400
+++ b/vmsjobs.c 2019-04-10 23:47:44.179814695 -0400
@@ -191,7 +191,8 @@ astYHandler (void)
{
struct child *c;
for (c = children; c != 0; c = c->next)
- sys$delprc (&c->pid, 0, 0);
+ if (c->pid > 0)
+ sys$delprc (&c->pid, 0, 0);
ctrlYPressed= 1;
kill (getpid(),SIGQUIT);
return SS$_NORMAL;

View File

@ -1,91 +0,0 @@
From 05769ca009e630c1989f29ca8cb9d0ec4cf2a8d8 Mon Sep 17 00:00:00 2001
From: Paul Smith <psmith@gnu.org>
Date: Sat, 4 Aug 2018 19:07:59 -0400
Subject: [PATCH 096/104] [SV 54233] Preserve higher command_state values on
also_make targets.
If multiple pattern rules have the same pattern as also-make targets
and we attempt to run them at the same time, we might downgrade the
command state from 'running' to 'deps_running'; this will prevent
that also_make from being considered complete causing make to wait
forever for it to finish.
Ensure that set_command_state never downgrades the state of a target.
* src/file.c (set_command_state): Don't downgrade command_state.
* src/filedef.h (struct file): Document the order prerequisite.
* test/scripts/features/patternrules: Test the behavior.
---
file.c | 7 +++++--
filedef.h | 2 +-
tests/scripts/features/patternrules | 16 ++++++++++++++++
3 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/file.c b/file.c
index 4835e4f..925ce8d 100644
--- a/file.c
+++ b/file.c
@@ -788,7 +788,9 @@ snap_deps (void)
#endif
}
-/* Set the 'command_state' member of FILE and all its 'also_make's. */
+/* Set the 'command_state' member of FILE and all its 'also_make's.
+ Don't decrease the state of also_make's (e.g., don't downgrade a 'running'
+ also_make to a 'deps_running' also_make). */
void
set_command_state (struct file *file, enum cmd_state state)
@@ -798,7 +800,8 @@ set_command_state (struct file *file, enum cmd_state state)
file->command_state = state;
for (d = file->also_make; d != 0; d = d->next)
- d->file->command_state = state;
+ if (state > d->file->command_state)
+ d->file->command_state = state;
}
/* Convert an external file timestamp to internal form. */
diff --git a/filedef.h b/filedef.h
index 8af562a..9d4b816 100644
--- a/filedef.h
+++ b/filedef.h
@@ -68,7 +68,7 @@ struct file
us_question, /* Needs to be updated (-q is is set). */
us_failed /* Update failed. */
} update_status ENUM_BITFIELD (2);
- enum cmd_state /* State of the commands. */
+ enum cmd_state /* State of commands. ORDER IS IMPORTANT! */
{
cs_not_started = 0, /* Not yet started. Must be 0! */
cs_deps_running, /* Dep commands running. */
diff --git a/tests/scripts/features/patternrules b/tests/scripts/features/patternrules
index f76724e..177bb32 100644
--- a/tests/scripts/features/patternrules
+++ b/tests/scripts/features/patternrules
@@ -220,6 +220,22 @@ all: foo.x foo-mt.x
1;
+# Test pattern rules building the same targets
+# See SV 54233. Rely on our standard test timeout to break the loop
+
+touch('a.c');
+
+run_make_test(q!
+all: a.elf a.dbg
+
+%.elf %.lnk: %.c ; : $*.elf $*.lnk
+
+%.elf %.dbg: %.lnk ; : $*.elf $*.dbg
+!,
+ '-j2', ": a.elf a.lnk\n: a.elf a.dbg\n");
+
+unlink('a.c');
+
# This tells the test driver that the perl test script executed properly.
1;
--
2.19.1

View File

@ -1,28 +0,0 @@
From 9fbc7566a76d72f9cfd697eb163f7c310d0bb7c5 Mon Sep 17 00:00:00 2001
From: openeuler-basic <shenyangyang4@huawei.com>
Date: Sat, 11 Jan 2020 17:07:07 +0800
Subject: [PATCH] configure Support GLIBC glob interface version 2
---
configure | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/configure b/configure
index bc62691..354d932 100755
--- a/configure
+++ b/configure
@@ -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
--
1.8.3.1

View File

@ -1,28 +0,0 @@
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: [PATCH] * 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],
--
1.8.3.1

View File

@ -1,67 +0,0 @@
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: [PATCH] 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
--
1.8.3.1

View File

@ -1,83 +0,0 @@
From 0c5a9f9b92af1634dc60fa21e9ac86ed50e5d595 Mon Sep 17 00:00:00 2001
From: Paul Smith <psmith@gnu.org>
Date: Mon, 30 Oct 2017 12:53:49 -0400
Subject: [PATCH 056/104] * main.c (main): [SV 48274] Allow -j in makefile
MAKEFLAGS variable.
* tests/jhelp.pl: New file to allow testing parallelism without sleep.
---
tests/jhelp.pl | 63 +++++++++++++++++++++
create mode 100755 tests/jhelp.pl
diff --git a/tests/jhelp.pl b/tests/jhelp.pl
new file mode 100755
index 0000000..b368099
--- /dev/null
+++ b/tests/jhelp.pl
@@ -0,0 +1,63 @@
+#!/usr/bin/env perl
+# -*-perl-*-
+#
+# This script helps us test jobserver/parallelism without a lot of unreliable
+# (and slow) sleep calls. Written in Perl to get portable sub-second sleep.
+#
+# It can run the following steps based on arguments:
+# -t <secs> : maximum # of seconds the script can run; else we fail.
+# Default is 4 seconds.
+# -e <word> : echo <word> to stdout
+# -f <word> : echo <word> to stdout AND create an (empty) file named <word>
+# -w <word> : wait for a file named <word> to exist
+
+# Force flush
+$| = 1;
+
+my $timeout = 4;
+
+sub op {
+ my ($op, $nm) = @_;
+
+ defined $nm or die "Missing value for $op\n";
+
+ if ($op eq '-e') {
+ print "$nm\n";
+ return 1;
+ }
+
+ if ($op eq '-f') {
+ print "$nm\n";
+ open(my $fh, '>', $nm) or die "$nm: open: $!\n";
+ close(my $fh);
+ return 1;
+ }
+
+ if ($op eq '-w') {
+ if (-f $nm) {
+ return 1;
+ }
+ select(undef, undef, undef, 0.1);
+ return 0;
+ }
+
+ if ($op eq '-t') {
+ $timeout = $nm;
+ return 1;
+ }
+
+ die("Invalid command: $op $nm\n");
+}
+
+my $start = time();
+while (@ARGV) {
+ if (op($ARGV[0], $ARGV[1])) {
+ shift;
+ shift;
+ }
+ if ($start + $timeout < time()) {
+ die("Timeout after ".(time()-$start-1)." seconds\n");
+ }
+}
+
+exit(0);
--
2.19.1

View File

@ -1,19 +0,0 @@
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";

Binary file not shown.

View File

@ -1,6 +1,6 @@
diff -Nrup a/main.c b/main.c diff -Nrup a/src/main.c b/src/main.c
--- a/main.c 2016-05-31 03:17:26.000000000 -0400 --- a/src/main.c 2016-05-31 03:17:26.000000000 -0400
+++ b/main.c 2016-09-22 16:18:52.283889265 -0400 +++ b/src/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

@ -1,6 +1,6 @@
diff -up make-3.82/job.c\~ make-3.82/job.c diff -up make-4.3/src/job.c\~ make-4.3/src/job.c
--- make-3.82/job.c~ 2010-08-11 16:13:33.000000000 +0200 --- make-3.82/src/job.c~ 2010-08-11 16:13:33.000000000 +0200
+++ make-3.82/job.c 2010-08-12 14:20:08.000000000 +0200 +++ make-3.82/src/job.c 2010-08-12 14:20:08.000000000 +0200
@@ -2442,7 +2442,11 @@ construct_command_argv_internal (char *l @@ -2442,7 +2442,11 @@ construct_command_argv_internal (char *l
/* See if it is safe to parse commands internally. */ /* See if it is safe to parse commands internally. */

BIN
make-4.3.tar.bz2 Normal file

Binary file not shown.

View File

@ -1,27 +1,14 @@
Name: make Name: make
Epoch: 1 Epoch: 1
Version: 4.2.1 Version: 4.3
Release: 15 Release: 1
Summary: A tool which controls the generation of executables and non-source files of a program Summary: A tool which controls the generation of executables and non-source files of a program
License: GPLv3+ License: GPLv3+
URL: http://www.gnu.org/software/make/ URL: http://www.gnu.org/software/make/
Source0: http://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.bz2 Source0: http://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.bz2
Patch1: make-4.0-weird-shell.patch Patch0: make-4.3-weird-shell.patch
Patch2: make-4.2-j8k.patch Patch1: make-4.3-j8k.patch
Patch3: make-4.2.1-test-driver.patch
Patch6000: src-makeint.h-Use-pid_t-to-store-PIDs-of-int.patch
Patch6001: Queue-failed-fork-etc.-to-be-handled-like-any-other-.patch
Patch6002: src-job.c-reap_children-Fix-inverted-win-lose-messag.patch
Patch6003: SV-54233-Preserve-higher-command_state-values-on-als.patch
Patch6004: src-main.c-main-Set-jobserver-permissions-before-re-.patch
Patch6005: main.c-main-SV-48274-Allow-j-in-makefile-MAKEFLAGS-v.patch
Patch6006: configure.ac-Support-GLIBC-glob-interface-version-2.patch
Patch6007: glob-Do-not-assume-glibc-glob-internals.patch
Patch6008: configure-Support-GLIBC-glob-interface-version-2.patch
BuildRequires: gcc git autoconf automake procps BuildRequires: gcc git autoconf automake procps
BuildRequires: guile-devel perl-interpreter make BuildRequires: guile-devel perl-interpreter make
@ -100,6 +87,9 @@ fi
%{_infodir}/* %{_infodir}/*
%changelog %changelog
* Tue Jul 28 2020 wangchen <wangchen137@huawei.com> - 1:4.3-1
- Update to 4.3
* Mon Feb 24 2020 openEuler Buildteam <buildteam@openeuler.org> - 1:4.2.1-15 * Mon Feb 24 2020 openEuler Buildteam <buildteam@openeuler.org> - 1:4.2.1-15
- Revise requires of make-devel - Revise requires of make-devel

View File

@ -1,23 +0,0 @@
From e2234bc1abe13bf3e3c4eb003b19e4d3cce188f3 Mon Sep 17 00:00:00 2001
From: Paul Smith <psmith@gnu.org>
Date: Sat, 4 Aug 2018 19:05:29 -0400
Subject: [PATCH 095/104] * src/job.c (reap_children): Fix inverted win/lose
message.
---
job.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/job.c 2019-04-10 23:53:41.293814695 -0400
+++ b/job.c 2019-04-10 23:57:34.736814695 -0400
@@ -828,8 +828,8 @@ reap_children (int block, int err)
continue;
DB (DB_JOBS, (exit_sig == 0 && exit_code == 0
- ? _("Reaping losing child %p PID %s %s\n")
- : _("Reaping winning child %p PID %s %s\n"),
+ ? _("Reaping winning child %p PID %s %s\n")
+ : _("Reaping losing child %p PID %s %s\n"),
c, pid2str (c->pid), c->remote ? _(" (remote)") : ""));
/* If we have started jobs in this second, remove one. */

View File

@ -1,88 +0,0 @@
From d603b2e6ac0f4c2ae69a428e5c63349c289fe1a6 Mon Sep 17 00:00:00 2001
From: Paul Smith <psmith@gnu.org>
Date: Sat, 15 Sep 2018 14:48:57 -0400
Subject: [PATCH 101/104] * src/main.c (main): Set jobserver permissions before
re-execing
Fixes an issue seen in the Linux kernel build system, reported by
Masahiro Yamada <yamada.masahiro@socionext.com>. Fix suggested
on the bug-make mailing list by Mike Shal <marfey@gmail.com>.
* tests/scripts/features/parallelism: Add a test to verify this.
---
main.c | 6 +++++
tests/scripts/features/parallelism | 35 ++++++++++++++++++++++++++++++
2 files changed, 41 insertions(+)
diff --git a/main.c b/main.c
index eed4e81..bcaeab7 100644
--- a/main.c
+++ b/main.c
@@ -2461,6 +2461,9 @@ main (int argc, char **argv, char **envp)
fflush (stdout);
fflush (stderr);
+ /* The exec'd "child" will be another make, of course. */
+ jobserver_pre_child(1);
+
#ifdef _AMIGA
exec_command (nargv);
exit (0);
@@ -2491,6 +2494,9 @@ main (int argc, char **argv, char **envp)
#endif
exec_command ((char **)nargv, environ);
#endif
+
+ /* We shouldn't get here but just in case. */
+ jobserver_post_child(1);
free (aargv);
break;
}
diff --git a/tests/scripts/features/parallelism b/tests/scripts/features/parallelism
index 4257947..07fb758 100644
--- a/tests/scripts/features/parallelism
+++ b/tests/scripts/features/parallelism
@@ -188,6 +188,41 @@ file2: file1 ; @touch $@
rmfiles('file1', 'file2', 'file3', 'file4');
+# Ensure that the jobserver is preserved across make re-exec.
+
+run_make_test(q!
+all: one two
+one: ;@ #PERL# jhelp.pl -w TWO -f ONE
+two: ;@ #PERL# jhelp.pl -f TWO
+include fff1.mk
+fff1.mk: ; touch $@
+!,
+ '-j2', "touch fff1.mk\nTWO\nONE\n");
+
+unlink('fff1.mk', 'ONE', 'TWO');
+
+# Test if a sub-make needs to re-exec and the makefile is built via
+# sub-make. Reported by Masahiro Yamada <yamada.masahiro@socionext.com>
+
+run_make_test(q!
+all: ; @$(MAKE) -f #MAKEFILE# recurse
+
+recurse: one two ; @echo $@
+one: ;@ #PERL# jhelp.pl -w TWO -f ONE
+two: ;@ #PERL# jhelp.pl -f TWO
+
+mkinclude: ; touch fff1.mk
+
+ifeq ($(MAKECMDGOALS),recurse)
+include fff1.mk
+fff1.mk: ; @$(MAKE) -f #MAKEFILE# mkinclude
+endif
+!,
+ '--no-print-directory -j2', "touch fff1.mk\nTWO\nONE\nrecurse\n");
+
+unlink('fff1.mk', 'ONE', 'TWO');
+
+
# Make sure that all jobserver FDs are closed if we need to re-exec the
# master copy.
#
--
2.19.1

View File

@ -1,153 +0,0 @@
From 3f194b69e37c93a3b5c3e1a5475a5514e71b43cb Mon Sep 17 00:00:00 2001
From: Aron Barath <baratharon@caesar.elte.hu>
Date: Mon, 9 Jul 2018 07:31:25 +0200
Subject: [PATCH 082/104] * src/makeint.h: Use pid_t to store PIDs, of int.
* src/commands.c (getpid): Ditto.
* src/job.h (*): Ditto.
* src/job.c (*): Ditto.
* src/main.c (main): Ditto.
* src/remote-cstms.c (start_remote_job): Ditto.
* src/remote-stub.c (start_remote_job): Ditto.
---
commands.c | 2 +-
job.c | 15 ++++++++-------
job.h | 2 +-
main.c | 2 +-
makeint.h | 2 +-
remote-cstms.c | 4 ++--
remote-stub.c | 2 +-
7 files changed, 15 insertions(+), 14 deletions(-)
--- a/commands.c 2019-04-10 22:47:44.401814695 -0400
+++ b/commands.c 2019-04-10 22:50:51.317814695 -0400
@@ -32,7 +32,7 @@ this program. If not, see <http://www.g
#endif
#ifndef HAVE_UNISTD_H
-int getpid ();
+pid_t getpid ();
#endif
--- a/job.c 2019-04-10 22:47:44.413814695 -0400
+++ b/job.c 2019-04-10 22:50:51.306814695 -0400
@@ -1340,7 +1340,8 @@ start_job_command (struct child *child)
/* start_waiting_job has set CHILD->remote if we can start a remote job. */
if (child->remote)
{
- int is_remote, id, used_stdin;
+ int is_remote, used_stdin;
+ pid_t id;
if (start_remote_job (argv, child->environment,
child->good_stdin ? 0 : get_bad_stdin (),
&is_remote, &id, &used_stdin))
@@ -2017,10 +2018,10 @@ start_waiting_jobs (void)
/* EMX: Start a child process. This function returns the new pid. */
# if defined __EMX__
-int
+pid_t
child_execute_job (struct output *out, int good_stdin, char **argv, char **envp)
{
- int pid;
+ pid_t pid;
int fdin = good_stdin ? FD_STDIN : get_bad_stdin ();
int fdout = FD_STDOUT;
int fderr = FD_STDERR;
@@ -2115,11 +2116,11 @@ child_execute_job (struct output *out, i
/* POSIX:
Create a child process executing the command in ARGV.
ENVP is the environment of the new program. Returns the PID or -1. */
-int
+pid_t
child_execute_job (struct output *out, int good_stdin, char **argv, char **envp)
{
int r;
- int pid;
+ pid_t pid;
int fdin = good_stdin ? FD_STDIN : get_bad_stdin ();
int fdout = FD_STDOUT;
int fderr = FD_STDERR;
@@ -2167,7 +2168,7 @@ child_execute_job (struct output *out, i
/* EMX: This function returns the pid of the child process. */
# ifdef __EMX__
-int
+pid_t
# else
void
# endif
@@ -2243,7 +2244,7 @@ exec_command (char **argv, char **envp)
#else /* !WINDOWS32 */
# ifdef __EMX__
- int pid;
+ pid_t pid;
# endif
/* Be the user, permanently. */
--- a/job.h 2019-04-10 22:47:44.386814695 -0400
+++ b/job.h 2019-04-10 22:50:51.319814695 -0400
@@ -131,7 +131,7 @@ int child_execute_job (struct child *chi
# define FD_STDIN (fileno (stdin))
# define FD_STDOUT (fileno (stdout))
# define FD_STDERR (fileno (stderr))
-int child_execute_job (struct output *out, int good_stdin, char **argv, char **envp);
+pid_t child_execute_job (struct output *out, int good_stdin, char **argv, char **envp);
#endif
#ifdef _AMIGA
--- a/main.c 2019-04-10 22:47:44.393814695 -0400
+++ b/main.c 2019-04-10 22:50:51.290814695 -0400
@@ -2457,7 +2457,7 @@ main (int argc, char **argv, char **envp
Therefore it may be the best solution simply to spawn the
child process including all file handles and to wait for its
termination. */
- int pid;
+ pid_t pid;
int r;
pid = child_execute_job (NULL, 1, nargv, environ);
--- a/makeint.h 2019-04-10 22:47:44.413814695 -0400
+++ b/makeint.h 2019-04-10 22:50:51.297814695 -0400
@@ -705,7 +705,7 @@ vms_restore_symbol (const char *string);
void remote_setup (void);
void remote_cleanup (void);
int start_remote_job_p (int);
-int start_remote_job (char **, char **, int, int *, int *, int *);
+int start_remote_job (char **, char **, int, int *, pid_t *, int *);
int remote_status (int *, int *, int *, int);
void block_remote_children (void);
void unblock_remote_children (void);
--- b/remote-cstms.c 2019-04-10 22:47:44.413814695 -0400
+++ a/remote-cstms.c 2019-04-10 22:50:51.319814695 -0400
@@ -136,7 +136,7 @@ start_remote_job_p (int first_p)
int
start_remote_job (char **argv, char **envp, int stdin_fd,
- int *is_remote, int *id_ptr, int *used_stdin)
+ int *is_remote, pid_t *id_ptr, int *used_stdin)
{
char waybill[MAX_DATA_SIZE], msg[128];
struct hostent *host;
@@ -145,7 +145,7 @@ start_remote_job (char **argv, char **en
int len;
int retsock, retport, sock;
Rpc_Stat status;
- int pid;
+ pid_t pid;
/* Create the return socket. */
retsock = Rpc_UdpCreate (True, 0);
--- a/remote-stub.c 2019-04-10 22:47:44.401814695 -0400
+++ b/remote-stub.c 2019-04-10 22:50:51.319814695 -0400
@@ -53,7 +53,7 @@ start_remote_job_p (int first_p UNUSED)
int
start_remote_job (char **argv UNUSED, char **envp UNUSED, int stdin_fd UNUSED,
- int *is_remote UNUSED, int *id_ptr UNUSED,
+ int *is_remote UNUSED, pid_t *id_ptr UNUSED,
int *used_stdin UNUSED)
{
return -1;