From nobody Sat Jan 10 21:34:06 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4dpX2l2Wrlz6MxX3 for ; Sat, 10 Jan 2026 21:34:07 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4dpX2l07K6z3Qpw for ; Sat, 10 Jan 2026 21:34:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1768080847; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=RerorM9EGHTKjixxEP0Rg5UbChmSnHYTR7b56F9C9Dw=; b=vE9SpJgKMlmzyZXXZ/ET9uzwyxBXo6LOgqwmM9t/jxYLJTGJ7J90ZbaSloKvnwGHV0ORZj XypA9L7l3IuGXHKH8SNChUu7JzVUsKrUyqC7SFcQz1bKC2MSDjUcOKd7zDLrVW1Dd74NP2 V1DRbb1KiwWMX5rITsI+FMTGXdvQPvQ8xcIn2hC3ycI6cJhUhYDOPubgthi4pzDPeXyzgQ FS6fYvGg2dxCNHDQwQc5HH6mvmbYgruPwpVH/Zg3BJ7M+l0krK9d0AjnDgSbYSzp47CoOY a+OpNSizL45mQth8TDpBa+qqtMugk1y20Zrhh1r6UYn1q40kXDgKOeqOpYF+Uw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1768080847; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=RerorM9EGHTKjixxEP0Rg5UbChmSnHYTR7b56F9C9Dw=; b=xwD6HS4Oh7+mbArALEpCHXE4Mgp67C2X8JEm/k4tCt9XwkRhg9RfsoKpWMSzM78qVkTToD W19mjAmaGruEHPt7aS9MfcQKQsd8FpyAYmzY4wlzFKnp7MTCc5jVLLdxmv9MGW2jjYyilI nMmbT5+Cbs2gPgZm/6hnxDpCsMqMVKWaIbEe1l+IeHT810wJJ1kDu/VnK68NvyMNg2HvvS Jy1jTpnzVjPo0U3AwWxUeR2KAnqGD8QeY+M33bsgTMAAhRgrdiIQb/7PIOHaiLv+HFifNM 0zR83slzdQw4IaAvOOkDxLNzdRDiCIed2gcrO2t+CeuiQOJ/4ijOJb5oWVEA1A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1768080847; a=rsa-sha256; cv=none; b=XorDF6XaI8ZMXwHG/ODksY2YV8fmMOVPtVIJUiAYucaIiaR9hovOr0btf6SQv/fK9lggpZ bMusu7cqABcuoFaF5aeoZ0RJUt3xyw1/3a0GNVXbyhg5TnnFD4dAWy3JW4KEqe4G3Gnxc8 MoozuFrzAvvGYzKC05gGiDGgz5Nw/f8hJN9TDb2xA7wra+Vr3ZvDUjAgtcNJLsP9rlyNB3 MqzVMqYOtGtHM8jOkAEYkDnJYs8sEquHImbhTQd8zNBxx76Xn6zFpJPMDBM0kp4pwRgWn/ WbfHcfeqIbuG0BoihxQA0VKhQUnQQQjb7e1bjuiXSXuK9viD8CeubmsnBisj4g== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4dpX2k6HZKz1Bj6 for ; Sat, 10 Jan 2026 21:34:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 25ba1 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 10 Jan 2026 21:34:06 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Simon J. Gerraty Subject: git: a9319c35e816 - stable/14 - Merge bmake-20250308 List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: sjg X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: a9319c35e816e0fab5de5d6b6e814667a14d3e7a Auto-Submitted: auto-generated Date: Sat, 10 Jan 2026 21:34:06 +0000 Message-Id: <6962c5ce.25ba1.72603123@gitrepo.freebsd.org> The branch stable/14 has been updated by sjg: URL: https://cgit.FreeBSD.org/src/commit/?id=a9319c35e816e0fab5de5d6b6e814667a14d3e7a commit a9319c35e816e0fab5de5d6b6e814667a14d3e7a Author: Simon J. Gerraty AuthorDate: 2025-03-19 21:06:16 +0000 Commit: Simon J. Gerraty CommitDate: 2026-01-10 21:33:12 +0000 Merge bmake-20250308 (cherry picked from commit d9a65c5de1c9f30ae71ce0be8fb88be9d20d216d) --- contrib/bmake/ChangeLog | 17 +++ contrib/bmake/Makefile | 8 +- contrib/bmake/VERSION | 2 +- contrib/bmake/bmake.cat1 | 2 +- contrib/bmake/bsd.after-import.mk | 39 ++++-- contrib/bmake/job.c | 251 +++++++++++++------------------------- contrib/bmake/main.c | 22 +--- contrib/bmake/make.h | 3 +- contrib/bmake/mk/ChangeLog | 13 ++ contrib/bmake/mk/install-mk | 6 +- contrib/bmake/mk/jobs.mk | 6 +- contrib/bmake/mk/meta.autodep.mk | 20 ++- contrib/bmake/mk/meta.stage.mk | 29 ++++- contrib/bmake/mk/sys.vars.mk | 7 +- contrib/bmake/os.sh | 10 +- usr.bin/bmake/Makefile | 104 ++++++++-------- usr.bin/bmake/Makefile.config | 4 +- usr.bin/bmake/unit-tests/Makefile | 2 +- 18 files changed, 265 insertions(+), 280 deletions(-) diff --git a/contrib/bmake/ChangeLog b/contrib/bmake/ChangeLog index 212b0fcfaacb..15a58e2a0924 100644 --- a/contrib/bmake/ChangeLog +++ b/contrib/bmake/ChangeLog @@ -1,3 +1,20 @@ +2025-03-08 Simon J Gerraty + + * bsd.after-import.mk: by default generate makefiles + closer to BSD style. + + * VERSION (_MAKE_VERSION): 20250308 + Merge with NetBSD make, pick up + o clean up comments and code for parallel mode + o job.c: avoid SIGPIPE for children, call Job_Wait befor abort. + +2025-02-27 Simon J Gerraty + + * VERSION (_MAKE_VERSION): 20250225 + Merge with NetBSD make, pick up + o job.c: reliably remove targets on interrupt, + by passing signal to children first. + 2025-01-25 Simon J Gerraty * VERSION (_MAKE_VERSION): 20250125 diff --git a/contrib/bmake/Makefile b/contrib/bmake/Makefile index 939b71c5e12c..ba2b2e742d35 100644 --- a/contrib/bmake/Makefile +++ b/contrib/bmake/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.132 2024/09/22 19:56:26 sjg Exp $ +# $Id: Makefile,v 1.133 2025/03/08 20:12:56 sjg Exp $ PROG = bmake @@ -65,7 +65,7 @@ COPTS.main.c += "-D$x=\"${$x}\"" USE_FILEMON ?= no .if ${USE_FILEMON:tl} != "no" .PATH: ${srcdir}/filemon -SRCS+= filemon_${USE_FILEMON}.c +SRCS += filemon_${USE_FILEMON}.c COPTS.meta.c += -DUSE_FILEMON -DUSE_FILEMON_${USE_FILEMON:tu} COPTS.job.c += ${COPTS.meta.c} @@ -134,7 +134,7 @@ SYMLINKS += ${PROG_NAME} ${BINDIR}/${PROG} .endif .endif -EXTRACT_MAN=no +EXTRACT_MAN = no # end-delete1 .if make(obj) || make(clean) @@ -182,7 +182,7 @@ SED_CMDS.${MAN} += -e 's/^\.Nx/NetBSD/' ${MAN}: ${SRCS.${MAN}} _GENFILES_USE all man beforeinstall: ${MAN} -_mfromdir=. +_mfromdir = . .endif .endif # MK_GEN_MAN diff --git a/contrib/bmake/VERSION b/contrib/bmake/VERSION index 9d1a987f65d6..d26469e64381 100644 --- a/contrib/bmake/VERSION +++ b/contrib/bmake/VERSION @@ -1,2 +1,2 @@ # keep this compatible with sh and make -_MAKE_VERSION=20250125 +_MAKE_VERSION=20250308 diff --git a/contrib/bmake/bmake.cat1 b/contrib/bmake/bmake.cat1 index 8a1909e684ed..7e6f25524a05 100644 --- a/contrib/bmake/bmake.cat1 +++ b/contrib/bmake/bmake.cat1 @@ -1793,4 +1793,4 @@ BBUUGGSS attempt to suppress a cascade of unnecessary errors, can result in a seemingly unexplained `*** Error code 6' -FreeBSD 14.1-RELEASE-p5 November 14, 2024 FreeBSD 14.1-RELEASE-p5 +FreeBSD 14.1-RELEASE-p7 November 14, 2024 FreeBSD 14.1-RELEASE-p7 diff --git a/contrib/bmake/bsd.after-import.mk b/contrib/bmake/bsd.after-import.mk index f2948b855753..74811e98f979 100644 --- a/contrib/bmake/bsd.after-import.mk +++ b/contrib/bmake/bsd.after-import.mk @@ -1,4 +1,4 @@ -# $Id: bsd.after-import.mk,v 1.19 2024/09/21 22:44:55 sjg Exp $ +# $Id: bsd.after-import.mk,v 1.22 2025/03/09 02:56:42 sjg Exp $ # This makefile is for use when integrating bmake into a BSD build # system. Use this makefile after importing bmake. @@ -9,6 +9,7 @@ # The goal is to allow the benefits of autoconf without # the overhead of running configure. +.MAIN: all all: _makefile _utmakefile all: after-import @@ -64,6 +65,18 @@ MAKEFILE_SED = sed -e '/^MACHINE/d' \ -e '/^\..*include * ${.CURDIR}/$f .endfor +.if make(all) +_makefile _utmakefile: bootstrap ${MAKEFILE} +.endif + # this needs the most work -_makefile: bootstrap ${MAKEFILE} +_makefile: @echo Generating ${.CURDIR}/Makefile @(echo '# This is a generated file, do NOT edit!'; \ echo '# See ${_this:S,${SRCTOP}/,,}'; \ echo '#'; ${ECHO_TAG} '# $$${HOST_OS}$$'; \ - echo; echo 'SRCTOP?= $${.CURDIR:${.CURDIR:S,${SRCTOP}/,,:C,[^/]+,H,g:S,/,:,g}}'; \ + echo; echo 'SRCTOP${.space}?= $${.CURDIR:${.CURDIR:S,${SRCTOP}/,,:C,[^/]+,H,g:S,/,:,g}}'; \ echo; echo '# look here first for config.h'; \ - echo 'CFLAGS+= -I$${.CURDIR}'; echo; \ + echo 'CFLAGS${.space}+= -I$${.CURDIR}'; echo; \ echo '# for after-import'; \ - echo 'CLEANDIRS+= ${HOST_OS}'; \ - echo 'CLEANFILES+= bootstrap'; echo; \ + echo 'CLEANDIRS${.space}+= ${HOST_OS}'; \ + echo 'CLEANFILES${.space}+= bootstrap'; echo; \ ${MAKEFILE_SED} \ ${1 2:L:@n@-e '/start-delete$n/,/end-delete$n/d'@} \ ${BMAKE_SRC}/Makefile; \ echo; echo '# override some simple things'; \ - echo 'BINDIR= /usr/bin'; \ - echo 'MANDIR= ${MANDIR:U/usr/share/man}'; \ + echo 'BINDIR${.space}= /usr/bin'; \ + echo 'MANDIR${.space}= ${MANDIR:U/usr/share/man}'; \ echo; echo '# make sure we get this'; \ - echo 'CFLAGS+= $${COPTS.$${.IMPSRC:T}}'; \ + echo 'CFLAGS${.space}+= $${COPTS.$${.IMPSRC:T}}'; \ echo; echo 'after-import: ${_this:S,${SRCTOP},\${SRCTOP},}'; \ echo ' cd $${.CURDIR} && $${.MAKE} -f ${_this:S,${SRCTOP},\${SRCTOP},}'; \ echo ) > ${.TARGET} @cmp -s ${.TARGET} ${.CURDIR}/Makefile || \ mv ${.TARGET} ${.CURDIR}/Makefile -_utmakefile: bootstrap ${MAKEFILE} +_utmakefile: @echo Generating ${.CURDIR}/unit-tests/Makefile @mkdir -p ${.CURDIR}/unit-tests @(echo '# This is a generated file, do NOT edit!'; \ diff --git a/contrib/bmake/job.c b/contrib/bmake/job.c index bd85e6d95fb8..d06b1570ba85 100644 --- a/contrib/bmake/job.c +++ b/contrib/bmake/job.c @@ -1,4 +1,4 @@ -/* $NetBSD: job.c,v 1.485 2025/01/19 10:57:10 rillig Exp $ */ +/* $NetBSD: job.c,v 1.489 2025/03/08 20:15:03 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -102,10 +102,7 @@ * define the shell that is used for the creation * commands in jobs mode. * - * Job_Finish Perform any final processing which needs doing. - * This includes the execution of any commands - * which have been/were attached to the .END - * target. It should only be called when the + * Job_Finish Make the .END target. Should only be called when the * job table is empty. * * Job_AbortAll Abort all currently running jobs. Do not handle @@ -154,7 +151,7 @@ #include "trace.h" /* "@(#)job.c 8.2 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: job.c,v 1.485 2025/01/19 10:57:10 rillig Exp $"); +MAKE_RCSID("$NetBSD: job.c,v 1.489 2025/03/08 20:15:03 rillig Exp $"); /* * A shell defines how the commands are run. All commands for a target are @@ -689,7 +686,7 @@ JobPassSig_suspend(int signo) act.sa_flags = 0; (void)sigaction(signo, &act, NULL); - DEBUG1(JOB, "JobPassSig passing signal %d to self.\n", signo); + DEBUG1(JOB, "JobPassSig_suspend passing signal %d to self.\n", signo); (void)kill(getpid(), signo); @@ -1251,8 +1248,16 @@ JobFinish (Job *job, WAIT_T status) if (return_job_token) Job_TokenReturn(); - if (aborting == ABORT_ERROR && jobTokensRunning == 0) - Finish(job_errors); + if (aborting == ABORT_ERROR && jobTokensRunning == 0) { + if (shouldDieQuietly(NULL, -1)) { + /* + * TODO: better clean up properly, to avoid killing + * child processes by SIGPIPE. + */ + exit(2); + } + Fatal("%d error%s", job_errors, job_errors == 1 ? "" : "s"); + } } static void @@ -1962,27 +1967,14 @@ JobRun(GNode *targ) } } -/* - * Handle the exit of a child. Called from Make_Make. - * - * The job descriptor is removed from the list of children. - * - * Notes: - * We do waits, blocking or not, according to the wisdom of our - * caller, until there are no more children to report. For each - * job, call JobFinish to finish things off. - */ void Job_CatchChildren(void) { - int pid; /* pid of dead child */ - WAIT_T status; /* Exit/termination status */ + int pid; + WAIT_T status; - /* Don't even bother if we know there's no one around. */ if (jobTokensRunning == 0) return; - - /* Have we received SIGCHLD since last call? */ if (caught_sigchld == 0) return; caught_sigchld = 0; @@ -2001,21 +1993,19 @@ Job_CatchChildren(void) void JobReapChild(pid_t pid, WAIT_T status, bool isJobs) { - Job *job; /* job descriptor for dead child */ + Job *job; - /* Don't even bother if we know there's no one around. */ if (jobTokensRunning == 0) return; job = JobFindPid(pid, JOB_ST_RUNNING, isJobs); if (job == NULL) { - if (isJobs) { - if (!lurking_children) - Error("Child (%d) status %x not in table?", - pid, status); - } - return; /* not ours */ + if (isJobs && !lurking_children) + Error("Child (%d) status %x not in table?", + pid, status); + return; } + if (WIFSTOPPED(status)) { DEBUG2(JOB, "Process %d (%s) stopped.\n", job->pid, job->node->name); @@ -2047,12 +2037,6 @@ JobReapChild(pid_t pid, WAIT_T status, bool isJobs) JobFinish(job, status); } -/* - * Catch the output from our children, if we're using pipes do so. Otherwise - * just block time until we get a signal(most likely a SIGCHLD) since there's - * no point in just spinning when there's nothing to do and the reaping of a - * child can wait for a while. - */ void Job_CatchOutput(void) { @@ -2062,7 +2046,7 @@ Job_CatchOutput(void) (void)fflush(stdout); - /* The first fd in the list is the job token pipe */ + /* Skip the first fd in the list, as it is the job token pipe. */ do { nready = poll(fds + 1 - wantToken, fdsLen - 1 + wantToken, POLL_MSEC); @@ -2073,13 +2057,12 @@ Job_CatchOutput(void) if (nready > 0 && readyfd(&childExitJob)) { char token = 0; - ssize_t count; - count = read(childExitJob.inPipe, &token, 1); + ssize_t count = read(childExitJob.inPipe, &token, 1); if (count == 1) { if (token == DO_JOB_RESUME[0]) /* * Complete relay requested from our SIGCONT - * handler + * handler. */ JobRestartJobs(); } else if (count == 0) @@ -2160,10 +2143,7 @@ Shell_Init(void) } } -/* - * Return the string literal that is used in the current command shell - * to produce a newline character. - */ +/* Return the shell string literal that results in a newline character. */ const char * Shell_GetNewline(void) { @@ -2192,12 +2172,11 @@ AddSig(int sig, SignalProc handler) } } -/* Initialize the process module. */ void Job_Init(void) { Job_SetPrefix(); - /* Allocate space for all the job info */ + job_table = bmake_malloc((size_t)opts.maxJobs * sizeof *job_table); memset(job_table, 0, (size_t)opts.maxJobs * sizeof *job_table); job_table_end = job_table + opts.maxJobs; @@ -2214,8 +2193,8 @@ Job_Init(void) /* - * There is a non-zero chance that we already have children. - * eg after 'make -f- <status != JOB_ST_RUNNING) - continue; - - gn = job->node; - - JobDeleteTarget(gn); - if (job->pid != 0) { + if (job->status == JOB_ST_RUNNING && job->pid != 0) { DEBUG2(JOB, "JobInterrupt passing signal %d to child %d.\n", signo, job->pid); @@ -2551,6 +2490,14 @@ JobInterrupt(bool runINTERRUPT, int signo) } } + for (job = job_table; job < job_table_end; job++) { + if (job->status == JOB_ST_RUNNING && job->pid != 0) { + int status; + (void)waitpid(job->pid, &status, 0); + JobDeleteTarget(job->node); + } + } + JobSigUnlock(&mask); if (runINTERRUPT && !opts.touch) { @@ -2564,11 +2511,7 @@ JobInterrupt(bool runINTERRUPT, int signo) exit(signo); /* XXX: why signo? */ } -/* - * Do the final processing, i.e. run the commands attached to the .END target. - * - * Return the number of errors reported. - */ +/* Make the .END target, returning the number of job-related errors. */ int Job_Finish(void) { @@ -2584,7 +2527,6 @@ Job_Finish(void) } #ifdef CLEANUP -/* Clean up any memory used by the jobs module. */ void Job_End(void) { @@ -2592,14 +2534,11 @@ Job_End(void) } #endif -/* - * Waits for all running jobs to finish and returns. - * Sets 'aborting' to ABORT_WAIT to prevent other jobs from starting. - */ +/* Waits for all running jobs to finish. */ void Job_Wait(void) { - aborting = ABORT_WAIT; + aborting = ABORT_WAIT; /* Prevent other jobs from starting. */ while (jobTokensRunning != 0) { Job_CatchOutput(); } @@ -2610,14 +2549,12 @@ Job_Wait(void) * Abort all currently running jobs without handling output or anything. * This function is to be called only in the event of a major error. * Most definitely NOT to be called from JobInterrupt. - * - * All children are killed, not just the firstborn. */ void Job_AbortAll(void) { - Job *job; /* the job descriptor in that element */ - WAIT_T foo; + Job *job; + WAIT_T status; aborting = ABORT_ERROR; @@ -2625,25 +2562,18 @@ Job_AbortAll(void) for (job = job_table; job < job_table_end; job++) { if (job->status != JOB_ST_RUNNING) continue; - /* - * kill the child process with increasingly drastic - * signals to make darn sure it's dead. - */ KILLPG(job->pid, SIGINT); KILLPG(job->pid, SIGKILL); } } - /* - * Catch as many children as want to report in at first, then give up - */ - while (waitpid((pid_t)-1, &foo, WNOHANG) > 0) + while (waitpid((pid_t)-1, &status, WNOHANG) > 0) continue; } /* * Tries to restart stopped jobs if there are slots available. - * Called in process context in response to a SIGCONT. + * Called in response to a SIGCONT. */ static void JobRestartJobs(void) @@ -2708,10 +2638,6 @@ clearfd(Job *job) fdsLen--; #if defined(USE_FILEMON) && !defined(USE_FILEMON_DEV) if (useMeta) { - /* - * Sanity check: there should be two fds per job, so the job's - * pollfd number should be even. - */ assert(nfds_per_job() == 2); if (i % 2 != 0) Punt("odd-numbered fd with meta"); @@ -2756,7 +2682,7 @@ JobTokenAdd(void) tok = '+'; /* no error token */ } - /* If we are depositing an error token flush everything else */ + /* If we are depositing an error token, flush everything else. */ while (tok != '+' && read(tokenWaitJob.inPipe, &tok1, 1) == 1) continue; @@ -2766,7 +2692,6 @@ JobTokenAdd(void) continue; } -/* Get a temp file */ int Job_TempFile(const char *pattern, char *tfile, size_t tfile_sz) { @@ -2782,7 +2707,7 @@ Job_TempFile(const char *pattern, char *tfile, size_t tfile_sz) return fd; } -/* Prep the job token pipe in the root make process. */ +/* Prepare the job token pipe in the root make process. */ void Job_ServerStart(int max_tokens, int jp_0, int jp_1) { @@ -2790,7 +2715,6 @@ Job_ServerStart(int max_tokens, int jp_0, int jp_1) char jobarg[64]; if (jp_0 >= 0 && jp_1 >= 0) { - /* Pipe passed in from parent */ tokenWaitJob.inPipe = jp_0; tokenWaitJob.outPipe = jp_1; (void)fcntl(jp_0, F_SETFD, FD_CLOEXEC); @@ -2832,7 +2756,7 @@ Job_TokenReturn(void) /* * Attempt to withdraw a token from the pool. * - * If pool is empty, set wantToken so that we wake up when a token is + * If the pool is empty, set wantToken so that we wake up when a token is * released. * * Returns true if a token was withdrawn, and false if the pool is currently @@ -2871,8 +2795,10 @@ Job_TokenWithdraw(void) while (write(tokenWaitJob.outPipe, &tok, 1) == -1 && errno == EAGAIN) continue; - if (shouldDieQuietly(NULL, 1)) - exit(6); /* we aborted */ + if (shouldDieQuietly(NULL, 1)) { + Job_Wait(); + exit(6); + } Fatal("A failure has been detected " "in another branch of the parallel make"); } @@ -2888,12 +2814,7 @@ Job_TokenWithdraw(void) return true; } -/* - * Run the named target if found. If a filename is specified, then set that - * to the sources. - * - * Exits if the target fails. - */ +/* Make the named target if found, exit if the target fails. */ bool Job_RunTarget(const char *target, const char *fname) { diff --git a/contrib/bmake/main.c b/contrib/bmake/main.c index 0b48b2d59389..9577fb41ee7b 100644 --- a/contrib/bmake/main.c +++ b/contrib/bmake/main.c @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.638 2025/01/19 12:59:39 rillig Exp $ */ +/* $NetBSD: main.c,v 1.639 2025/03/07 06:50:34 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -83,9 +83,6 @@ * Fatal Print an error message and exit. * * Punt Abort all jobs and exit with a message. - * - * Finish Finish things up by printing the number of errors - * that occurred, and exit. */ #include @@ -111,7 +108,7 @@ #include "trace.h" /* "@(#)main.c 8.3 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: main.c,v 1.638 2025/01/19 12:59:39 rillig Exp $"); +MAKE_RCSID("$NetBSD: main.c,v 1.639 2025/03/07 06:50:34 rillig Exp $"); #if defined(MAKE_NATIVE) __COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993 " "The Regents of the University of California. " @@ -1783,7 +1780,7 @@ Cmd_Exec(const char *cmd, char **error) int pipefds[2]; int cpid; /* Child PID */ int pid; /* PID from wait() */ - int status; /* command exit status */ + WAIT_T status; /* command exit status */ Buffer buf; /* buffer to store the result */ ssize_t bytes_read; char *output; @@ -1962,19 +1959,6 @@ DieHorribly(void) exit(2); /* Not 1 so -q can distinguish error */ } -/* - * Called when aborting due to errors in child shell to signal abnormal exit. - * The program exits. - * Errors is the number of errors encountered in Make_Make. - */ -void -Finish(int errs) -{ - if (shouldDieQuietly(NULL, -1)) - exit(2); - Fatal("%d error%s", errs, errs == 1 ? "" : "s"); -} - int unlink_file(const char *file) { diff --git a/contrib/bmake/make.h b/contrib/bmake/make.h index 05714ddfd151..33df57c58198 100644 --- a/contrib/bmake/make.h +++ b/contrib/bmake/make.h @@ -1,4 +1,4 @@ -/* $NetBSD: make.h,v 1.349 2025/01/19 10:57:10 rillig Exp $ */ +/* $NetBSD: make.h,v 1.350 2025/03/07 06:50:34 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -889,7 +889,6 @@ void Error(const char *, ...) MAKE_ATTR_PRINTFLIKE(1, 2); void Fatal(const char *, ...) MAKE_ATTR_PRINTFLIKE(1, 2) MAKE_ATTR_DEAD; void Punt(const char *, ...) MAKE_ATTR_PRINTFLIKE(1, 2) MAKE_ATTR_DEAD; void DieHorribly(void) MAKE_ATTR_DEAD; -void Finish(int) MAKE_ATTR_DEAD; int unlink_file(const char *) MAKE_ATTR_USE; void execDie(const char *, const char *); char *getTmpdir(void) MAKE_ATTR_USE; diff --git a/contrib/bmake/mk/ChangeLog b/contrib/bmake/mk/ChangeLog index 4274d9d3483b..99f4b05be61c 100644 --- a/contrib/bmake/mk/ChangeLog +++ b/contrib/bmake/mk/ChangeLog @@ -1,3 +1,16 @@ +2025-03-14 Simon J Gerraty + + * install-mk (MK_VERSION): 20250314 + + * meta.stage.mk: StageFiles --subdir: preserve the dir part of + each file under $dest + +2025-03-12 Simon J Gerraty + + * meta.autodep.mk: do a better job of handling MAKESYSPATH in + GENDIRDEPS_ENV. If we have MAKE_VERSION >= 20230123 we can just + use .SYSPATH, otherwise it is a bit more complicated. + 2025-01-10 Simon J Gerraty * rust.mk: use RUST_LIBS and RUST_PROGS diff --git a/contrib/bmake/mk/install-mk b/contrib/bmake/mk/install-mk index b455832b7726..d765fbba2251 100644 --- a/contrib/bmake/mk/install-mk +++ b/contrib/bmake/mk/install-mk @@ -59,9 +59,9 @@ # Simon J. Gerraty # RCSid: -# $Id: install-mk,v 1.262 2025/01/05 01:16:19 sjg Exp $ +# $Id: install-mk,v 1.263 2025/03/14 20:29:35 sjg Exp $ # -# @(#) Copyright (c) 1994-2024 Simon J. Gerraty +# @(#) Copyright (c) 1994-2025 Simon J. Gerraty # # This file is provided in the hope that it will # be of use. There is absolutely NO WARRANTY. @@ -74,7 +74,7 @@ # sjg@crufty.net # -MK_VERSION=20250101 +MK_VERSION=20250314 OWNER= GROUP= MODE=444 diff --git a/contrib/bmake/mk/jobs.mk b/contrib/bmake/mk/jobs.mk index f39f1eb178ae..e304e16a9c56 100644 --- a/contrib/bmake/mk/jobs.mk +++ b/contrib/bmake/mk/jobs.mk @@ -1,8 +1,8 @@ # SPDX-License-Identifier: BSD-2-Clause # -# $Id: jobs.mk,v 1.17 2024/02/17 17:26:57 sjg Exp $ +# $Id: jobs.mk,v 1.19 2025/02/03 21:18:44 sjg Exp $ # -# @(#) Copyright (c) 2012-2023, Simon J. Gerraty +# @(#) Copyright (c) 2012-2025, Simon J. Gerraty # # This file is provided in the hope that it will # be of use. There is absolutely NO WARRANTY. @@ -68,7 +68,7 @@ NEWLOG_SH := ${(type newlog.sh) 2> /dev/null:L:sh:M/*} .endif .endif .if !empty(NEWLOG_SH) && exists(${NEWLOG_SH}) -NEWLOG := sh ${NEWLOG_SH} +NEWLOG := ${.SHELL:Ush} ${NEWLOG_SH} JOB_NEWLOG_ARGS ?= -S -n ${JOB_LOG_GENS} .else NEWLOG = : diff --git a/contrib/bmake/mk/meta.autodep.mk b/contrib/bmake/mk/meta.autodep.mk index 55f2d66e56aa..b94891b1b93f 100644 --- a/contrib/bmake/mk/meta.autodep.mk +++ b/contrib/bmake/mk/meta.autodep.mk @@ -1,9 +1,9 @@ # SPDX-License-Identifier: BSD-2-Clause # -# $Id: meta.autodep.mk,v 1.63 2024/04/24 18:56:41 sjg Exp $ +# $Id: meta.autodep.mk,v 1.65 2025/03/14 20:28:42 sjg Exp $ # -# @(#) Copyright (c) 2010, Simon J. Gerraty +# @(#) Copyright (c) 2010-2025, Simon J. Gerraty # # This file is provided in the hope that it will # be of use. There is absolutely NO WARRANTY. @@ -281,14 +281,26 @@ META_FILES := ${META_XTRAS:U:O:u} ${META_FILES:U:T:O:u:${META_FILE_FILTER:ts:}} .export META_FILES .endif +_this_dir := ${_PARSEDIR} +.if ${MAKE_VERSION} < 20230123 # we might have .../ in MAKESYSPATH -_makesyspath:= ${_PARSEDIR} +_makesyspath := ${MAKESYSPATH:U${_this_dir}} +.if ${.MAKEFLAGS:M-m} != "" +_makesyspath := ${.MAKEFLAGS:S,-m ,-m,gW:M-m*:S,-m, ,:ts:}:${_makesyspath} +.endif +_makesyspath := ${_makesyspath:C,\.\.\./[^:]*,${_this_dir},} +GENDIRDEPS_ENV += MAKESYSPATH=${_makesyspath} +.else +# add this if not already there +.SYSPATH: ${_this_dir} +GENDIRDEPS_ENV += MAKESYSPATH=${.SYSPATH:ts:} +.endif + ${_DEPENDFILE}: ${_depend} ${.PARSEDIR}/gendirdeps.mk ${META2DEPS} $${.MAKE.META.CREATED} @echo Checking $@: ${.OODATE:T:[1..8]} @(cd . && ${GENDIRDEPS_ENV} \ SKIP_GENDIRDEPS='${SKIP_GENDIRDEPS:O:u}' \ DPADD='${FORCE_DPADD:O:u}' ${_gendirdeps_mutex} \ - MAKESYSPATH=${_makesyspath} \ ${.MAKE} -f gendirdeps.mk RELDIR=${RELDIR} _DEPENDFILE=${_DEPENDFILE}) @test -s $@ && touch $@; : .endif diff --git a/contrib/bmake/mk/meta.stage.mk b/contrib/bmake/mk/meta.stage.mk index 345df6aae16b..97e4dce83e5d 100644 --- a/contrib/bmake/mk/meta.stage.mk +++ b/contrib/bmake/mk/meta.stage.mk @@ -1,8 +1,8 @@ # SPDX-License-Identifier: BSD-2-Clause # -# $Id: meta.stage.mk,v 1.69 2024/02/17 17:26:57 sjg Exp $ +# $Id: meta.stage.mk,v 1.71 2025/03/14 20:28:42 sjg Exp $ # *** 374 LINES SKIPPED ***