Update to 4.3.

This includes two documented backward-incompatibilities affecting
the handling of \# and +=.  See the release announcement for details.
https://lists.gnu.org/archive/html/bug-make/2020-01/msg00057.html
A tree sweep for fallout from the changes has been completed.

Bits from bcallah@ who independently worked on the same update.
This commit is contained in:
naddy 2020-02-01 15:29:24 +00:00
parent 11b1187f19
commit ecf3f7acb5
15 changed files with 63 additions and 453 deletions

View File

@ -1,13 +1,12 @@
# $OpenBSD: Makefile,v 1.63 2019/09/13 16:59:34 kurt Exp $
# $OpenBSD: Makefile,v 1.64 2020/02/01 15:29:24 naddy Exp $
COMMENT= GNU make
DISTNAME= make-4.2.1
DISTNAME= make-4.3
PKGNAME= g${DISTNAME}
REVISION= 4
CATEGORIES= devel
MASTER_SITES= ${MASTER_SITE_GNU:=make/}
EXTRACT_SUFX= .tar.bz2
EXTRACT_SUFX= .tar.lz
HOMEPAGE= https://www.gnu.org/software/make/
@ -18,14 +17,19 @@ PERMIT_PACKAGE= Yes
WANTLIB= c iconv intl
DEBUG_PACKAGES= ${BUILD_PACKAGES}
SEPARATE_BUILD= Yes
CONFIGURE_STYLE= gnu
CONFIGURE_ARGS= --program-prefix="g" --without-guile
CONFIGURE_ENV= CPPFLAGS="-I${LOCALBASE}/include" \
LDFLAGS="-L${LOCALBASE}/lib"
MODGNU_CONFIG_GUESS_DIRS= ${WRKSRC}/config
MODGNU_CONFIG_GUESS_DIRS= ${WRKSRC}/build-aux
pre-test:
find ${WRKSRC}/tests/scripts -name \*.orig -delete
TEST_ENV= SHELL=$$SHELL
# Known test failures:
# output-sync can fail due to a race condition in the test itself
# https://lists.gnu.org/archive/html/bug-make/2020-01/msg00075.html
.include <bsd.port.mk>

View File

@ -1,2 +1,2 @@
SHA256 (make-4.2.1.tar.bz2) = 1uJivzYBtC0rHk74MQAp4dzyAIPFRGtLeqZwgf3/xYk=
SIZE (make-4.2.1.tar.bz2) = 1407126
SHA256 (make-4.3.tar.lz) = 3hpEHE7flSUh2zC/yoC6roag/xrNCgBAKZk0TwTEXoI=
SIZE (make-4.3.tar.lz) = 1266180

View File

@ -1,12 +1,14 @@
$OpenBSD: patch-Makefile_in,v 1.4 2016/06/25 19:47:11 naddy Exp $
--- Makefile.in.orig Sat Jun 11 01:03:22 2016
+++ Makefile.in Fri Jun 24 18:19:09 2016
@@ -481,7 +481,7 @@ EXTRA_make_SOURCES = vmsjobs.c remote-stub.c remote-cs
noinst_HEADERS = commands.h dep.h filedef.h job.h makeint.h rule.h variable.h \
debug.h getopt.h gettext.h hash.h output.h os.h
$OpenBSD: patch-Makefile_in,v 1.5 2020/02/01 15:29:25 naddy Exp $
Index: Makefile.in
--- Makefile.in.orig
+++ Makefile.in
@@ -1039,7 +1039,7 @@ make_SOURCES = $(make_SRCS) $(am__append_1) $(am__appe
$(am__append_4) $(am__append_5)
EXTRA_make_SOURCES = $(amiga_SRCS) $(vms_SRCS)
make_LDADD = $(LIBOBJS) $(GUILE_LIBS) lib/libgnu.a $(GETLOADAVG_LIBS) \
- @LIBINTL@
+ @LTLIBINTL@
-make_LDADD = @LIBOBJS@ @ALLOCA@ $(GLOBLIB) @GETLOADAVG_LIBS@ @LIBINTL@ \
+make_LDADD = @LIBOBJS@ @ALLOCA@ $(GLOBLIB) @GETLOADAVG_LIBS@ @LTLIBINTL@ \
$(GUILE_LIBS) $(am__append_1)
man_MANS = make.1
AM_CPPFLAGS = $(GLOBINC) $(am__append_2)
AM_CPPFLAGS = -Isrc -I$(top_srcdir)/src -Ilib -I$(top_srcdir)/lib \
-DLIBDIR=\"$(libdir)\" -DINCLUDEDIR=\"$(includedir)\" \

View File

@ -1,13 +1,14 @@
$OpenBSD: patch-make_1,v 1.3 2016/06/25 19:47:11 naddy Exp $
$OpenBSD: patch-doc_make_1,v 1.1 2020/02/01 15:29:25 naddy Exp $
Since we install GNU make as gmake replace make with gmake in the
manpage where it makes sense.
--- make.1.orig Sun Feb 28 18:51:00 2016
+++ make.1 Fri Jun 24 18:19:09 2016
Index: doc/make.1
--- doc/make.1.orig
+++ doc/make.1
@@ -1,13 +1,13 @@
-.TH MAKE 1 "28 February 2016" "GNU" "User Commands"
+.TH GMAKE 1 "03 March 2012" "GNU" "User Commands"
+.TH GMAKE 1 "28 February 2016" "GNU" "User Commands"
.SH NAME
-make \- GNU make utility to maintain groups of programs
+gmake \- GNU make utility to maintain groups of programs
@ -99,7 +100,7 @@ manpage where it makes sense.
decides what to do.
.TP 0.5i
.BI \-\-debug "[=FLAGS]"
@@ -168,7 +168,7 @@ If several
@@ -172,7 +172,7 @@ If several
options are used to specify several directories, the directories are
searched in the order specified.
Unlike the arguments to other flags of
@ -108,7 +109,7 @@ manpage where it makes sense.
directories given with
.B \-I
flags may come directly after the flag:
@@ -191,7 +191,7 @@ option, the last one is effective.
@@ -195,7 +195,7 @@ option, the last one is effective.
If the
.B \-j
option is given without an argument,
@ -117,7 +118,7 @@ manpage where it makes sense.
will not limit the number of jobs that can run simultaneously.
.TP 0.5i
\fB\-k\fR, \fB\-\-keep\-going\fR
@@ -252,7 +252,7 @@ This also prints the version information given by the
@@ -256,7 +256,7 @@ This also prints the version information given by the
.B \-v
switch (see below).
To print the data base without trying to remake any files, use
@ -126,21 +127,7 @@ manpage where it makes sense.
.TP 0.5i
\fB\-q\fR, \fB\-\-question\fR
``Question mode''.
@@ -275,11 +275,11 @@ Cancel the effect of the
.B \-k
option.
This is never necessary except in a recursive
-.B make
+.B gmake
where
.B \-k
might be inherited from the top-level
-.B make
+.B gmake
via MAKEFLAGS or if you set
.B \-k
in MAKEFLAGS in your environment.
@@ -289,7 +289,7 @@ Touch files (mark them up to date without really chang
@@ -287,7 +287,7 @@ Touch files (mark them up to date without really chang
instead of running their commands.
This is used to pretend that the commands were done, in order to fool
future invocations of
@ -149,7 +136,7 @@ manpage where it makes sense.
.TP 0.5i
.B \-\-trace
Information about the disposition of each target is printed (why the target is
@@ -297,7 +297,7 @@ being rebuilt and what commands are run to rebuild it)
@@ -295,7 +295,7 @@ being rebuilt and what commands are run to rebuild it)
.TP 0.5i
\fB\-v\fR, \fB\-\-version\fR
Print the version of the
@ -158,7 +145,7 @@ manpage where it makes sense.
program plus a copyright, a list of authors and a notice that there
is no warranty.
.TP 0.5i
@@ -306,7 +306,7 @@ Print a message containing the working directory
@@ -304,7 +304,7 @@ Print a message containing the working directory
before and after other processing.
This may be useful for tracking down errors from complicated nests of
recursive
@ -167,16 +154,24 @@ manpage where it makes sense.
commands.
.TP 0.5i
.B \-\-no\-print\-directory
@@ -326,7 +326,7 @@ Without
@@ -324,33 +324,33 @@ Without
it is almost the same as running a
.I touch
command on the given file before running
-.BR make ,
+.BR gmake ,
except that the modification time is changed only in the imagination of
.BR make .
-.BR make .
+.BR gmake .
.TP 0.5i
@@ -340,19 +340,19 @@ and no targets that were built failed. A status of on
.B \-\-warn\-undefined\-variables
Warn when an undefined variable is referenced.
.SH "EXIT STATUS"
GNU
-.B make
+.B gmake
exits with a status of zero if all makefiles were successfully parsed
and no targets that were built failed. A status of one will be returned
if the
.B \-q
flag was used and

View File

@ -1,114 +0,0 @@
$OpenBSD: patch-job_c,v 1.3 2019/11/02 00:33:29 jca Exp $
Only unblock fatal signals after child invocation
http://git.savannah.gnu.org/cgit/make.git/commit/?id=78b5fec6898c26956d00548427cda1101cb80f8a
Index: job.c
--- job.c.orig
+++ job.c
@@ -461,6 +461,62 @@ is_bourne_compatible_shell (const char *path)
return 0;
}
+#ifdef POSIX
+extern sigset_t fatal_signal_set;
+
+static void
+block_sigs ()
+{
+ sigprocmask (SIG_BLOCK, &fatal_signal_set, (sigset_t *) 0);
+}
+
+static void
+unblock_sigs ()
+{
+ sigprocmask (SIG_UNBLOCK, &fatal_signal_set, (sigset_t *) 0);
+}
+
+void
+unblock_all_sigs ()
+{
+ sigset_t empty;
+ sigemptyset (&empty);
+ sigprocmask (SIG_SETMASK, &empty, (sigset_t *) 0);
+}
+
+#elif defined(HAVE_SIGSETMASK)
+
+extern int fatal_signal_mask;
+
+static void
+block_sigs ()
+{
+ sigblock (fatal_signal_mask);
+}
+
+static void
+unblock_sigs ()
+{
+ sigsetmask (siggetmask (0) & ~fatal_signal_mask);
+}
+
+void
+unblock_all_sigs ()
+{
+ sigsetmask (0);
+}
+
+#else
+
+#define block_sigs()
+#define unblock_sigs()
+
+void
+unblock_all_sigs ()
+{
+}
+
+#endif
/* Write an error message describing the exit status given in
EXIT_CODE, EXIT_SIG, and COREDUMP, for the target TARGET_NAME.
@@ -1031,33 +1087,7 @@ free_child (struct child *child)
free (child);
}
-#ifdef POSIX
-extern sigset_t fatal_signal_set;
-#endif
-void
-block_sigs (void)
-{
-#ifdef POSIX
- (void) sigprocmask (SIG_BLOCK, &fatal_signal_set, (sigset_t *) 0);
-#else
-# ifdef HAVE_SIGSETMASK
- (void) sigblock (fatal_signal_mask);
-# endif
-#endif
-}
-
-#ifdef POSIX
-void
-unblock_sigs (void)
-{
- sigset_t empty;
- sigemptyset (&empty);
- sigprocmask (SIG_SETMASK, &empty, (sigset_t *) 0);
-}
-#endif
-
-
/* Start a job to run the commands specified in CHILD.
CHILD is updated to reflect the commands and ID of the child process.
@@ -2138,7 +2168,7 @@ child_execute_job (struct output *out, int good_stdin,
return pid;
/* We are the child. */
- unblock_sigs ();
+ unblock_all_sigs ();
#ifdef SET_STACK_SIZE
/* Reset limits, if necessary. */

View File

@ -1,29 +0,0 @@
$OpenBSD: patch-job_h,v 1.2 2019/09/13 16:59:34 kurt Exp $
Only unblock fatal signals after child invocation
http://git.savannah.gnu.org/cgit/make.git/commit/?id=78b5fec6898c26956d00548427cda1101cb80f8a
Index: job.h
--- job.h.orig
+++ job.h
@@ -142,18 +142,7 @@ int exec_command (char **argv, char **envp);
void exec_command (char **argv, char **envp) __attribute__ ((noreturn));
#endif
-extern unsigned int job_slots_used;
+void unblock_all_sigs (void);
-void block_sigs (void);
-#ifdef POSIX
-void unblock_sigs (void);
-#else
-#ifdef HAVE_SIGSETMASK
-extern int fatal_signal_mask;
-#define unblock_sigs() sigsetmask (0)
-#else
-#define unblock_sigs()
-#endif
-#endif
-
+extern unsigned int job_slots_used;
extern unsigned int jobserver_tokens;

View File

@ -1,23 +0,0 @@
$OpenBSD: patch-main_c,v 1.5 2019/09/13 16:59:34 kurt Exp $
Only unblock fatal signals after child invocation
http://git.savannah.gnu.org/cgit/make.git/commit/?id=78b5fec6898c26956d00548427cda1101cb80f8a
Index: main.c
--- main.c.orig
+++ main.c
@@ -590,12 +590,10 @@ struct output make_sync;
/* Mask of signals that are being caught with fatal_error_signal. */
-#ifdef POSIX
+#if defined(POSIX)
sigset_t fatal_signal_set;
-#else
-# ifdef HAVE_SIGSETMASK
+#elif defined(HAVE_SIGSETMASK)
int fatal_signal_mask;
-# endif
#endif
#if !HAVE_DECL_BSD_SIGNAL && !defined bsd_signal

View File

@ -1,156 +0,0 @@
$OpenBSD: patch-posixos_c,v 1.1 2019/08/06 12:19:26 naddy Exp $
Use a non-blocking read with pselect to avoid hangs.
https://git.savannah.gnu.org/cgit/make.git/commit/?id=b552b05251980f693c729e251f93f5225b400714
Index: posixos.c
--- posixos.c.orig
+++ posixos.c
@@ -59,6 +59,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)
{
@@ -78,6 +96,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;
}
@@ -113,6 +134,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;
}
@@ -161,7 +185,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;
@@ -239,18 +266,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?) */
@@ -259,28 +280,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;
- /* 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;
+ 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"));
+
+ 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

@ -1,17 +0,0 @@
$OpenBSD: patch-read_c,v 1.3 2019/01/05 22:19:17 naddy Exp $
Use after free().
https://git.savannah.gnu.org/cgit/make.git/commit/?id=816a867ff51110cbca1956ad0e625d8251a7531b
Index: read.c
--- read.c.orig
+++ read.c
@@ -204,7 +204,7 @@ read_all_makefiles (const char **makefiles)
{
if (*p != '\0')
*p++ = '\0';
- eval_makefile (name, RM_NO_DEFAULT_GOAL|RM_INCLUDED|RM_DONTCARE);
+ eval_makefile (strcache_add (name), RM_NO_DEFAULT_GOAL|RM_INCLUDED|RM_DONTCARE);
}
free (value);

View File

@ -1,17 +0,0 @@
$OpenBSD: patch-remote-cstms_c,v 1.1 2019/09/13 16:59:34 kurt Exp $
Only unblock fatal signals after child invocation
http://git.savannah.gnu.org/cgit/make.git/commit/?id=78b5fec6898c26956d00548427cda1101cb80f8a
Index: remote-cstms.c
--- remote-cstms.c.orig
+++ remote-cstms.c
@@ -246,7 +246,7 @@ start_remote_job (char **argv, char **envp, int stdin_
(void) dup2 (stdin_fd, 0);
/* Unblock signals in the child. */
- unblock_sigs ();
+ unblock_all_sigs ();
/* Run the command. */
exec_command (new_argv, envp);

View File

@ -1,11 +1,9 @@
$OpenBSD: patch-makeint_h,v 1.3 2019/11/02 00:33:29 jca Exp $
$OpenBSD: patch-src_makeint_h,v 1.1 2020/02/01 15:29:25 naddy Exp $
Remove too broad #ifdef so that we also use modern code on arm.
Index: makeint.h
--- makeint.h.orig
+++ makeint.h
@@ -114,7 +114,7 @@ extern int errno;
Index: src/makeint.h
--- src/makeint.h.orig
+++ src/makeint.h
@@ -115,7 +115,7 @@ extern int errno;
#endif
/* Some systems define _POSIX_VERSION but are not really POSIX.1. */

View File

@ -1,18 +0,0 @@
$OpenBSD: patch-tests_run_make_tests_pl,v 1.1 2019/08/05 12:14:52 naddy Exp $
Find Perl modules
https://git.savannah.gnu.org/cgit/make.git/commit/?id=d9d4e06084a4c7da480bd49a3487aadf6ba77b54
Index: tests/run_make_tests.pl
--- tests/run_make_tests.pl.orig
+++ tests/run_make_tests.pl
@@ -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,7 +1,8 @@
$OpenBSD: patch-tests_scripts_features_archives,v 1.2 2016/06/25 19:47:11 naddy Exp $
--- tests/scripts/features/archives.orig Mon Feb 29 07:31:16 2016
+++ tests/scripts/features/archives Fri Jun 24 18:19:09 2016
@@ -183,7 +183,7 @@ $mk_string = q!
$OpenBSD: patch-tests_scripts_features_archives,v 1.3 2020/02/01 15:29:25 naddy Exp $
Index: tests/scripts/features/archives
--- tests/scripts/features/archives.orig
+++ tests/scripts/features/archives
@@ -184,7 +184,7 @@ $mk_string = q!
DIR = artest
vpath % $(DIR)
default: lib(foo)

View File

@ -1,20 +0,0 @@
$OpenBSD: patch-tests_scripts_misc_close_stdout,v 1.1 2019/08/05 15:05:09 naddy Exp $
Don't error out on empty test: "Add test suite support to Windows"
https://git.savannah.gnu.org/cgit/make.git/commit/?id=fda00f88d3180be1a898c19bfa23b7adba6c2a9e
Index: tests/scripts/misc/close_stdout
--- tests/scripts/misc/close_stdout.orig
+++ tests/scripts/misc/close_stdout
@@ -2,8 +2,8 @@
$description = "Make sure make exits with an error if stdout is full.";
-if (-e '/dev/full') {
- run_make_test('', '-v > /dev/full', '/^#MAKE#: write error/', 256);
-}
+-e '/dev/full' or return -1;
+
+run_make_test('', '-v > /dev/full', '/^#MAKE#: write error/', 256);
1;

View File

@ -1,9 +1,10 @@
@comment $OpenBSD: PLIST,v 1.16 2013/10/30 23:08:56 brad Exp $
@comment $OpenBSD: PLIST,v 1.17 2020/02/01 15:29:25 naddy Exp $
@bin bin/gmake
include/gnumake.h
@info info/make.info
@man man/man1/gmake.1
share/locale/be/LC_MESSAGES/make.mo
share/locale/bg/LC_MESSAGES/make.mo
share/locale/cs/LC_MESSAGES/make.mo
share/locale/da/LC_MESSAGES/make.mo
share/locale/de/LC_MESSAGES/make.mo
@ -23,10 +24,13 @@ share/locale/lt/LC_MESSAGES/
share/locale/lt/LC_MESSAGES/make.mo
share/locale/nl/LC_MESSAGES/make.mo
share/locale/pl/LC_MESSAGES/make.mo
share/locale/pt/LC_MESSAGES/make.mo
share/locale/pt_BR/LC_MESSAGES/make.mo
share/locale/ru/LC_MESSAGES/make.mo
share/locale/sr/LC_MESSAGES/make.mo
share/locale/sv/LC_MESSAGES/make.mo
share/locale/tr/LC_MESSAGES/make.mo
share/locale/uk/LC_MESSAGES/make.mo
share/locale/vi/LC_MESSAGES/make.mo
share/locale/zh_CN/LC_MESSAGES/make.mo
share/locale/zh_TW/LC_MESSAGES/make.mo