git: d9a65c5de1c9 - main - Merge bmake-20250308

From: Simon J. Gerraty <sjg_at_FreeBSD.org>
Date: Wed, 19 Mar 2025 21:12:01 UTC
The branch main has been updated by sjg:

URL: https://cgit.FreeBSD.org/src/commit/?id=d9a65c5de1c9f30ae71ce0be8fb88be9d20d216d

commit d9a65c5de1c9f30ae71ce0be8fb88be9d20d216d
Merge: 91d8ee3579ef 397f57656d61
Author:     Simon J. Gerraty <sjg@FreeBSD.org>
AuthorDate: 2025-03-19 21:06:16 +0000
Commit:     Simon J. Gerraty <sjg@FreeBSD.org>
CommitDate: 2025-03-19 21:10:44 +0000

    Merge bmake-20250308

 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 --cc contrib/bmake/Makefile
index 939b71c5e12c,000000000000..ba2b2e742d35
mode 100644,000000..100644
--- a/contrib/bmake/Makefile
+++ b/contrib/bmake/Makefile
@@@ -1,266 -1,0 +1,266 @@@
- #	$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
 +
 +SRCS = \
 +	arch.c \
 +	buf.c \
 +	compat.c \
 +	cond.c \
 +	dir.c \
 +	for.c \
 +	hash.c \
 +	job.c \
 +	lst.c \
 +	main.c \
 +	make.c \
 +	make_malloc.c \
 +	meta.c \
 +	metachar.c \
 +	parse.c \
 +	str.c \
 +	suff.c \
 +	targ.c \
 +	trace.c \
 +	util.c \
 +	var.c
 +
 +.MAIN: all
 +
 +MAN = ${PROG}.1
 +SRCS.${MAN} = ${srcdir}/make.1
 +
 +.-include "VERSION"
 +.-include "Makefile.inc"
 +
 +# this file gets generated by configure
 +.-include "Makefile.config"
 +
 +.if !empty(LIBOBJS)
 +SRCS += ${LIBOBJS:T:.o=.c}
 +.endif
 +
 +# just in case
 +prefix ?= /usr
 +srcdir ?= ${.PARSEDIR}
 +srcdir := ${srcdir}
 +
 +DEFAULT_SYS_PATH ?= ${prefix}/share/mk
 +
 +CPPFLAGS += -DUSE_META
 +CFLAGS += ${CPPFLAGS}
 +CFLAGS += -D_PATH_DEFSYSPATH=\"${DEFAULT_SYS_PATH}\"
 +CFLAGS += -I. -I${srcdir} ${XDEFS} -DMAKE_NATIVE
 +CFLAGS += ${COPTS.${.ALLSRC:M*.c:T:u}}
 +COPTS.main.c += "-DMAKE_VERSION=\"${_MAKE_VERSION}\""
 +
 +.for x in FORCE_MAKE_OS FORCE_MACHINE FORCE_MACHINE_ARCH
 +.ifdef $x
 +COPTS.main.c += "-D$x=\"${$x}\""
 +.endif
 +.endfor
 +
 +# meta mode can be useful even without filemon
 +# should be set by now
 +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}
 +
 +.if ${USE_FILEMON} == "dev"
 +FILEMON_H ?= /usr/include/dev/filemon/filemon.h
 +.if exists(${FILEMON_H}) && ${FILEMON_H:T} == "filemon.h"
 +COPTS.filemon_dev.c += -DHAVE_FILEMON_H -I${FILEMON_H:H}
 +.endif
 +.elif ${USE_FILEMON} == "ktrace"
 +COPTS.filemon_ktrace.c += -Wno-error=unused-parameter
 +.endif
 +
 +.endif				# USE_FILEMON
 +
 +.PATH:	${srcdir}
 +
 +# start-delete1 for bsd.after-import.mk
 +# we skip a lot of this when building as part of FreeBSD etc.
 +
 +# list of OS's which are derrived from BSD4.4
 +BSD44_LIST = NetBSD FreeBSD OpenBSD DragonFly MirBSD Bitrig
 +# we are...
 +OS := ${.MAKE.OS:U${uname -s:L:sh}}
 +# are we 4.4BSD ?
 +isBSD44 := ${BSD44_LIST:M${OS}}
 +
 +.if ${isBSD44} == "" && ${OS:NCygwin:NDarwin:NLinux} != ""
 +MANTARGET ?= cat
 +.if ${MACHINE} == "sun386"
 +# even I don't have one of these anymore :-)
 +CFLAGS += -DPORTAR
 +.elif ${OS} != "SunOS"
 +# assume the worst
 +SRCS += sigcompat.c
 +CFLAGS += -DSIGNAL_FLAGS=SA_RESTART
 +.endif
 +.else
 +MANTARGET ?= man
 +.endif
 +
 +# turn this on by default - ignored if we are root
 +WITH_INSTALL_AS_USER =
 +
 +# suppress with -DWITHOUT_*
 +OPTIONS_DEFAULT_YES += \
 +	AUTOCONF_MK \
 +	INSTALL_MK \
 +	PROG_LINK \
 +	TESTS \
 +
 +OPTIONS_DEFAULT_NO += \
 +	GEN_MAN \
 +	PROG_VERSION \
 +
 +.if ${PROG} != "make" || ${srcdir} != ${.CURDIR} || !exists(${srcdir}/${MAN})
 +WITH_GEN_MAN = 1
 +.endif
 +
 +# process options now
 +.include <own.mk>
 +
 +.if ${MK_PROG_VERSION} == "yes"
 +PROG_NAME = ${PROG}-${_MAKE_VERSION}
 +.if ${MK_PROG_LINK} == "yes"
 +SYMLINKS += ${PROG_NAME} ${BINDIR}/${PROG}
 +.endif
 +.endif
 +
- EXTRACT_MAN=no
++EXTRACT_MAN = no
 +# end-delete1
 +
 +.if make(obj) || make(clean)
 +SUBDIR.${MK_TESTS} += unit-tests
 +.endif
 +
 +MAN1 = ${MAN}
 +
 +.if ${MK_GEN_MAN:Uno} == "yes"
 +
 +# we use this to generate ${MAN}
 +.include <${srcdir}/mk/genfiles.mk>
 +
 +.if ${PROG} != "make"
 +CLEANFILES += my.history
 +SED_CMDS.${MAN} += \
 +	-e '/^.Dt/s/MAKE/${PROG:tu}/' \
 +	-e '/^.Nm/s/make/${PROG}/' \
 +
 +.endif
 +
 +.if ${CLEANFILES:U:Mmy.history} != ""
 +${MAN}: my.history
 +my.history:
 +	@(echo ".Nm"; \
 +	echo "is derived from NetBSD"; \
 +	echo ".Xr make 1 ."; \
 +	echo "It uses autoconf to facilitate portability to other platforms."; \
 +	echo ".Pp") > $@
 +
 +SED_CMDS.${MAN} += \
 +	-e '/^.Sh HISTORY/rmy.history' \
 +	-e '/^.Sh HISTORY/,/BUGS/s,^.Nm,make,' \
 +
 +.endif
 +
 +.if ${.MAKE.OS:N*BSD} != ""
 +# assume .Nx is not supported
 +SED_CMDS.${MAN} += -e 's/^\.Nx/NetBSD/'
 +.endif
 +
 +# watch out for a late change of PROG
 +.if !empty(SRCS.${MAN})
 +.NOPATH: ${MAN}
 +${MAN}:	${SRCS.${MAN}} _GENFILES_USE
 +
 +all man beforeinstall: ${MAN}
- _mfromdir=.
++_mfromdir = .
 +.endif
 +.endif				# MK_GEN_MAN
 +
 +MANTARGET ?= cat
 +MANDEST ?= ${MANDIR}/${MANTARGET}1
 +
 +.if ${MANTARGET} == "cat"
 +_mfromdir = ${srcdir}
 +.endif
 +
 +.include <prog.mk>
 +
 +CPPFLAGS += -DMAKE_NATIVE -DHAVE_CONFIG_H
 +COPTS.var.c += -Wno-cast-qual
 +COPTS.job.c += -Wno-format-nonliteral
 +COPTS.parse.c += -Wno-format-nonliteral
 +COPTS.var.c += -Wno-format-nonliteral
 +
 +# Force these
 +SHAREDIR = ${SHAREDIR.bmake:U${prefix}/share}
 +BINDIR = ${BINDIR.bmake:U${prefix}/bin}
 +MANDIR = ${MANDIR.bmake:U${SHAREDIR}/man}
 +
 +${OBJS}: config.h
 +
 +# start-delete2 for bsd.after-import.mk
 +
 +# make sure that MAKE_VERSION gets updated.
 +main.o: ${srcdir}/VERSION
 +
 +.if ${MK_AUTOCONF_MK} == "yes"
 +CONFIGURE_DEPS += ${.CURDIR}/VERSION
 +# we do not need or want the generated makefile
 +CONFIGURE_ARGS += --without-makefile
 +AUTOCONF_GENERATED_MAKEFILE = Makefile.config
 +.include <autoconf.mk>
 +.endif
 +SHARE_MK ?= ${SHAREDIR}/mk
 +MKSRC = ${srcdir}/mk
 +INSTALL ?= ${srcdir}/install-sh
 +
 +.if ${MK_INSTALL_MK} == "yes"
 +install: install-mk
 +.endif
 +
 +beforeinstall:
 +	test -d ${DESTDIR}${BINDIR} || ${INSTALL} -m ${DIRMODE} -d ${DESTDIR}${BINDIR}
 +	test -d ${DESTDIR}${MANDEST} || ${INSTALL} -m ${DIRMODE} -d ${DESTDIR}${MANDEST}
 +
 +install-mk:
 +.if exists(${MKSRC}/install-mk)
 +	test -d ${DESTDIR}${SHARE_MK} || ${INSTALL} -m ${DIRMODE} -d ${DESTDIR}${SHARE_MK}
 +	sh ${MKSRC}/install-mk -v -m ${NONBINMODE} ${DESTDIR}${SHARE_MK}
 +.else
 +	@echo need to unpack mk.tar.gz under ${srcdir} or set MKSRC; false
 +.endif
 +# end-delete2
 +
 +# A simple unit-test driver to help catch regressions
 +TEST_MAKE ?= ${.OBJDIR}/${PROG:T}
 +accept test: .NOMETA
 +	cd ${.CURDIR}/unit-tests && \
 +	MAKEFLAGS= ${TEST_MAKE} -r -m / ${.TARGET} ${TESTS:DTESTS=${TESTS:Q}}
 +
 +
 +.if make(test) && ${MK_AUTO_OBJ} == "yes"
 +# The test target above visits unit-tests with -r -m /
 +# which prevents MK_AUTO_OBJ doing its job
 +# so do it here
 +.if defined(MAKEOBJDIRPREFIX) || ${MAKEOBJDIR:U:M*/*} != ""
 +_utobj = ${.OBJDIR}/unit-tests
 +.else
 +_utobj = ${.CURDIR}/unit-tests/${MAKEOBJDIR:Uobj}
 +.endif
 +utobj: .NOMETA
 +	@test -d ${_utobj} && exit 0; \
 +	echo "[Creating ${_utobj}...]"; \
 +	umask ${OBJDIR_UMASK:U002}; \
 +	mkdir -p ${_utobj}
 +test: utobj
 +.endif
diff --cc contrib/bmake/job.c
index bd85e6d95fb8,775c8197ea19..d06b1570ba85
--- a/contrib/bmake/job.c
+++ b/contrib/bmake/job.c
@@@ -2207,15 -2169,9 +2186,15 @@@ Job_Init(void
  	aborting = ABORT_NONE;
  	job_errors = 0;
  
 +	Always_pass_job_queue = GetBooleanExpr(MAKE_ALWAYS_PASS_JOB_QUEUE,
 +	    Always_pass_job_queue);
 +
 +	Job_error_token = GetBooleanExpr(MAKE_JOB_ERROR_TOKEN, Job_error_token);
 +
 +
  	/*
- 	 * There is a non-zero chance that we already have children.
- 	 * eg after 'make -f- <<EOF'
+ 	 * There is a non-zero chance that we already have children,
+ 	 * e.g. after 'make -f- <<EOF'.
  	 * Since their termination causes a 'Child (pid) not in table'
  	 * message, Collect the status of any that are already dead, and
  	 * suppress the error message if there are any undead ones.
@@@ -2750,13 -2653,7 +2676,13 @@@ JobTokenAdd(void
  {
  	char tok = JOB_TOKENS[aborting], tok1;
  
 +	if (!Job_error_token && aborting == ABORT_ERROR) {
 +		if (jobTokensRunning == 0)
 +			return;
 +		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;
  
diff --cc contrib/bmake/os.sh
index 8216c774cd96,13b0730464e9..13b0730464e9
mode 100644,100755..100755
--- a/contrib/bmake/os.sh
+++ b/contrib/bmake/os.sh
diff --cc usr.bin/bmake/Makefile
index 9a146246df0d,000000000000..a8bcdfd9f859
mode 100644,000000..100644
--- a/usr.bin/bmake/Makefile
+++ b/usr.bin/bmake/Makefile
@@@ -1,203 -1,0 +1,203 @@@
 +# This is a generated file, do NOT edit!
 +# See contrib/bmake/bsd.after-import.mk
 +#
 +
- SRCTOP ?= ${.CURDIR:H:H}
++SRCTOP?= ${.CURDIR:H:H}
 +
 +# look here first for config.h
- CFLAGS += -I${.CURDIR}
++CFLAGS+= -I${.CURDIR}
 +
 +# for after-import
- CLEANDIRS += FreeBSD
- CLEANFILES += bootstrap
++CLEANDIRS+= FreeBSD
++CLEANFILES+= bootstrap
 +
- #	$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 ?= ${.CURDIR:T}
++PROG?= ${.CURDIR:T}
 +
- SRCS = \
++SRCS= \
 +	arch.c \
 +	buf.c \
 +	compat.c \
 +	cond.c \
 +	dir.c \
 +	for.c \
 +	hash.c \
 +	job.c \
 +	lst.c \
 +	main.c \
 +	make.c \
 +	make_malloc.c \
 +	meta.c \
 +	metachar.c \
 +	parse.c \
 +	str.c \
 +	suff.c \
 +	targ.c \
 +	trace.c \
 +	util.c \
 +	var.c
 +
 +.MAIN: all
 +
- MAN = ${PROG}.1
- SRCS.${MAN} = ${srcdir}/make.1
++MAN= ${PROG}.1
++SRCS.${MAN}= ${srcdir}/make.1
 +
 +.-include "Makefile.inc"
 +
 +# this file gets generated by configure
 +.-include "Makefile.config"
 +
 +.if !empty(LIBOBJS)
- SRCS += ${LIBOBJS:T:.o=.c}
++SRCS+= ${LIBOBJS:T:.o=.c}
 +.endif
 +
 +# just in case
- prefix ?= /usr
- srcdir ?= ${.PARSEDIR}
- srcdir := ${srcdir}
++prefix?= /usr
++srcdir?= ${.PARSEDIR}
++srcdir:= ${srcdir}
 +
- DEFAULT_SYS_PATH ?= ${prefix}/share/mk
++DEFAULT_SYS_PATH?= ${prefix}/share/mk
 +
- CPPFLAGS += -DUSE_META
- CFLAGS += ${CPPFLAGS}
- CFLAGS += -D_PATH_DEFSYSPATH=\"${DEFAULT_SYS_PATH}\"
- CFLAGS += -I. -I${srcdir} ${XDEFS} -DMAKE_NATIVE
- CFLAGS += ${COPTS.${.ALLSRC:M*.c:T:u}}
- COPTS.main.c += "-DMAKE_VERSION=\"${_MAKE_VERSION}\""
++CPPFLAGS+= -DUSE_META
++CFLAGS+= ${CPPFLAGS}
++CFLAGS+= -D_PATH_DEFSYSPATH=\"${DEFAULT_SYS_PATH}\"
++CFLAGS+= -I. -I${srcdir} ${XDEFS} -DMAKE_NATIVE
++CFLAGS+= ${COPTS.${.ALLSRC:M*.c:T:u}}
++COPTS.main.c+= "-DMAKE_VERSION=\"${_MAKE_VERSION}\""
 +
 +.for x in FORCE_MAKE_OS FORCE_MACHINE FORCE_MACHINE_ARCH
 +.ifdef $x
- COPTS.main.c += "-D$x=\"${$x}\""
++COPTS.main.c+= "-D$x=\"${$x}\""
 +.endif
 +.endfor
 +
 +# meta mode can be useful even without filemon
 +# should be set by now
- USE_FILEMON ?= no
++USE_FILEMON?= no
 +.if ${USE_FILEMON:tl} != "no"
 +.PATH:	${srcdir}/filemon
- SRCS +=	filemon_${USE_FILEMON}.c
- COPTS.meta.c += -DUSE_FILEMON -DUSE_FILEMON_${USE_FILEMON:tu}
- COPTS.job.c += ${COPTS.meta.c}
++SRCS+= filemon_${USE_FILEMON}.c
++COPTS.meta.c+= -DUSE_FILEMON -DUSE_FILEMON_${USE_FILEMON:tu}
++COPTS.job.c+= ${COPTS.meta.c}
 +
 +.if ${USE_FILEMON} == "dev"
- FILEMON_H ?= /usr/include/dev/filemon/filemon.h
++FILEMON_H?= /usr/include/dev/filemon/filemon.h
 +.if exists(${FILEMON_H}) && ${FILEMON_H:T} == "filemon.h"
- COPTS.filemon_dev.c += -DHAVE_FILEMON_H -I${FILEMON_H:H}
++COPTS.filemon_dev.c+= -DHAVE_FILEMON_H -I${FILEMON_H:H}
 +.endif
 +.elif ${USE_FILEMON} == "ktrace"
- COPTS.filemon_ktrace.c += -Wno-error=unused-parameter
++COPTS.filemon_ktrace.c+= -Wno-error=unused-parameter
 +.endif
 +
 +.endif				# USE_FILEMON
 +
 +.PATH:	${srcdir}
 +
 +
 +.if make(obj) || make(clean)
- SUBDIR.${MK_TESTS} += unit-tests
++SUBDIR.${MK_TESTS}+= unit-tests
 +.endif
 +
- MAN1 = ${MAN}
++MAN1= ${MAN}
 +
 +.if ${MK_GEN_MAN:Uno} == "yes"
 +
 +# we use this to generate ${MAN}
 +.include <${srcdir}/mk/genfiles.mk>
 +
 +.if ${PROG} != "make"
- CLEANFILES += my.history
- SED_CMDS.${MAN} += \
++CLEANFILES+= my.history
++SED_CMDS.${MAN}+= \
 +	-e '/^.Dt/s/MAKE/${PROG:tu}/' \
 +	-e '/^.Nm/s/make/${PROG}/' \
 +
 +.endif
 +
 +.if ${CLEANFILES:U:Mmy.history} != ""
 +${MAN}: my.history
 +my.history:
 +	@(echo ".Nm"; \
 +	echo "is derived from NetBSD"; \
 +	echo ".Xr make 1 ."; \
 +	echo "It uses autoconf to facilitate portability to other platforms."; \
 +	echo ".Pp") > $@
 +
- SED_CMDS.${MAN} += \
++SED_CMDS.${MAN}+= \
 +	-e '/^.Sh HISTORY/rmy.history' \
 +	-e '/^.Sh HISTORY/,/BUGS/s,^.Nm,make,' \
 +
 +.endif
 +
 +.if ${.MAKE.OS:N*BSD} != ""
 +# assume .Nx is not supported
- SED_CMDS.${MAN} += -e 's/^\.Nx/NetBSD/'
++SED_CMDS.${MAN}+= -e 's/^\.Nx/NetBSD/'
 +.endif
 +
 +# watch out for a late change of PROG
 +.if !empty(SRCS.${MAN})
 +.NOPATH: ${MAN}
 +${MAN}:	${SRCS.${MAN}} _GENFILES_USE
 +
 +all man beforeinstall: ${MAN}
- _mfromdir = .
++_mfromdir= .
 +.endif
 +.endif				# MK_GEN_MAN
 +
- MANTARGET ?= cat
- MANDEST ?= ${MANDIR}/${MANTARGET}1
++MANTARGET?= cat
++MANDEST?= ${MANDIR}/${MANTARGET}1
 +
 +.if ${MANTARGET} == "cat"
- _mfromdir = ${srcdir}
++_mfromdir= ${srcdir}
 +.endif
 +
 +.include <bsd.prog.mk>
 +
- CPPFLAGS += -DMAKE_NATIVE -DHAVE_CONFIG_H
- COPTS.var.c += -Wno-cast-qual
- COPTS.job.c += -Wno-format-nonliteral
- COPTS.parse.c += -Wno-format-nonliteral
- COPTS.var.c += -Wno-format-nonliteral
++CPPFLAGS+= -DMAKE_NATIVE -DHAVE_CONFIG_H
++COPTS.var.c+= -Wno-cast-qual
++COPTS.job.c+= -Wno-format-nonliteral
++COPTS.parse.c+= -Wno-format-nonliteral
++COPTS.var.c+= -Wno-format-nonliteral
 +
 +# Force these
- SHAREDIR = ${SHAREDIR.bmake:U${prefix}/share}
- BINDIR = ${BINDIR.bmake:U${prefix}/bin}
- MANDIR = ${MANDIR.bmake:U${SHAREDIR}/man}
++SHAREDIR= ${SHAREDIR.bmake:U${prefix}/share}
++BINDIR= ${BINDIR.bmake:U${prefix}/bin}
++MANDIR= ${MANDIR.bmake:U${SHAREDIR}/man}
 +
 +${OBJS}: config.h
 +
 +
 +# A simple unit-test driver to help catch regressions
- TEST_MAKE ?= ${.OBJDIR}/${PROG:T}
++TEST_MAKE?= ${.OBJDIR}/${PROG:T}
 +accept test: .NOMETA
 +	cd ${.CURDIR}/unit-tests && \
 +	MAKEFLAGS= ${TEST_MAKE} -r -m / ${.TARGET} ${TESTS:DTESTS=${TESTS:Q}}
 +
 +
 +.if make(test) && ${MK_AUTO_OBJ} == "yes"
 +# The test target above visits unit-tests with -r -m /
 +# which prevents MK_AUTO_OBJ doing its job
 +# so do it here
 +.if defined(MAKEOBJDIRPREFIX) || ${MAKEOBJDIR:U:M*/*} != ""
- _utobj = ${.OBJDIR}/unit-tests
++_utobj= ${.OBJDIR}/unit-tests
 +.else
- _utobj = ${.CURDIR}/unit-tests/${MAKEOBJDIR:Uobj}
++_utobj= ${.CURDIR}/unit-tests/${MAKEOBJDIR:Uobj}
 +.endif
 +utobj: .NOMETA
 +	@test -d ${_utobj} && exit 0; \
 +	echo "[Creating ${_utobj}...]"; \
 +	umask ${OBJDIR_UMASK:U002}; \
 +	mkdir -p ${_utobj}
 +test: utobj
 +.endif
 +
 +# override some simple things
- BINDIR = /usr/bin
- MANDIR = /usr/share/man/man
++BINDIR= /usr/bin
++MANDIR= /usr/share/man/man
 +
 +# make sure we get this
- CFLAGS += ${COPTS.${.IMPSRC:T}}
++CFLAGS+= ${COPTS.${.IMPSRC:T}}
 +
 +after-import: ${SRCTOP}/contrib/bmake/bsd.after-import.mk
 +	cd ${.CURDIR} && ${.MAKE} -f ${SRCTOP}/contrib/bmake/bsd.after-import.mk
 +
diff --cc usr.bin/bmake/Makefile.config
index 9ca3691cbb2a,000000000000..a5e81a13cd0a
mode 100644,000000..100644
--- a/usr.bin/bmake/Makefile.config
+++ b/usr.bin/bmake/Makefile.config
@@@ -1,28 -1,0 +1,28 @@@
 +# This is a generated file, do NOT edit!
 +# See contrib/bmake/bsd.after-import.mk
 +#
 +
 +SRCTOP?= ${.CURDIR:H:H}
 +
 +# things set by configure
 +
- _MAKE_VERSION?=20250125
++_MAKE_VERSION?=20250308
 +
 +prefix?= /usr
 +srcdir= ${SRCTOP}/contrib/bmake
 +CC?= cc
 +MAKE_OS?= 
 +DEFAULT_SYS_PATH?= .../share/mk:/usr/share/mk
 +
- EGREP = egrep
++EGREP= egrep
 +CPPFLAGS+= 
 +CFLAGS+= ${CPPFLAGS} -DHAVE_CONFIG_H
 +LDFLAGS+= 
 +LIBOBJS+=  ${LIBOBJDIR}stresep$U.o
 +LDADD+= 
 +USE_META?= yes
 +USE_FILEMON?= dev
 +FILEMON_H?= /usr/include/dev/filemon/filemon.h
 +BMAKE_PATH_MAX?= 1024
 +# used if MAXPATHLEN not defined
 +CPPFLAGS+= -DBMAKE_PATH_MAX=${BMAKE_PATH_MAX}
diff --cc usr.bin/bmake/unit-tests/Makefile
index 7011ab754b9e,000000000000..cdf252d5e474
mode 100644,000000..100644
--- a/usr.bin/bmake/unit-tests/Makefile
+++ b/usr.bin/bmake/unit-tests/Makefile
@@@ -1,918 -1,0 +1,918 @@@
 +# This is a generated file, do NOT edit!
 +# See contrib/bmake/bsd.after-import.mk
 +#
 +# $Id: Makefile,v 1.230 2025/01/30 18:04:20 sjg Exp $
 +#
 +# $NetBSD: Makefile,v 1.355 2025/01/25 22:46:30 sjg Exp $
 +#
 +# Unit tests for make(1)
 +#
 +# The main targets are:
 +#
 +# all:
 +#	run all the tests
 +# test:
 +#	run 'all', and compare to expected results
 +# accept:
 +#	move generated output to expected results
 +#
 +# Settable variables
 +#
 +# TEST_MAKE
 +#	The make program to be tested.
 +#
 +#
 +# Adding a test case
 +#
 +# Each feature should get its own set of tests in its own suitably
 +# named makefile (*.mk), with its own set of expected results (*.exp),
 +# and it should be added to the TESTS list.
 +#
 +
 +.MAIN: all
 +
 +# we use these below but we might be an older make
 +.MAKE.OS?= ${uname -s:L:sh}
 +.MAKE.UID?= ${id -u:L:sh}
 +
 +# for many tests we need a TMPDIR that will not collide
 +# with other users.
 +.if ${.OBJDIR} != ${.CURDIR}
 +# easy
 +TMPDIR:=	${.OBJDIR}/tmp
 +.elif defined(TMPDIR)
 +TMPDIR:=	${TMPDIR}/uid${.MAKE.UID}
 +.else
 +TMPDIR:=	/tmp/uid${.MAKE.UID}
 +.endif
 +# make sure it exists
 +.if !exist(${TMPDIR})
 +_!= mkdir -p ${TMPDIR}
 +.endif
 +# and clean it up - outside the context of
 +# any target that might be using it.
 +.END: rm-tmpdir
 +rm-tmpdir:	.NOMETA
 +	@rm -rf ${TMPDIR}
 +
 +# Each test is in a sub-makefile.
 +# Keep the list sorted.
 +# Any test that is commented out must be ignored in
 +# src/tests/usr.bin/make/t_make.sh as well.
 +#TESTS+=		archive
 +#TESTS+=		archive-suffix
 +TESTS+=		cmd-errors
 +TESTS+=		cmd-errors-jobs
 +TESTS+=		cmd-errors-lint
 +TESTS+=		cmd-interrupt
 +TESTS+=		cmdline
 +TESTS+=		cmdline-redirect-stdin
 +TESTS+=		cmdline-undefined
 +TESTS+=		comment
 +TESTS+=		compat-error
 +TESTS+=		cond-cmp-numeric
 +TESTS+=		cond-cmp-numeric-eq
 +TESTS+=		cond-cmp-numeric-ge
 +TESTS+=		cond-cmp-numeric-gt
 +TESTS+=		cond-cmp-numeric-le
 +TESTS+=		cond-cmp-numeric-lt
 +TESTS+=		cond-cmp-numeric-ne
 +TESTS+=		cond-cmp-string
 +TESTS+=		cond-cmp-unary
 +TESTS+=		cond-eof
 +TESTS+=		cond-func
 +TESTS+=		cond-func-commands
 +TESTS+=		cond-func-defined
 +TESTS+=		cond-func-empty
 +TESTS+=		cond-func-exists
 +TESTS+=		cond-func-make
 +TESTS+=		cond-func-make-main
 +TESTS+=		cond-func-target
 +TESTS+=		cond-late
 +TESTS+=		cond-op
 +TESTS+=		cond-op-and
 +TESTS+=		cond-op-and-lint
 +TESTS+=		cond-op-not
 +TESTS+=		cond-op-or
 +TESTS+=		cond-op-or-lint
 +TESTS+=		cond-op-parentheses
 +TESTS+=		cond-short
 +TESTS+=		cond-token-number
 +TESTS+=		cond-token-plain
 +TESTS+=		cond-token-string
 +TESTS+=		cond-token-var
 +TESTS+=		cond-undef-lint
 +TESTS+=		counter
 +TESTS+=		counter-append
 +TESTS+=		dep
 +TESTS+=		dep-colon
 +TESTS+=		dep-colon-bug-cross-file
 +TESTS+=		dep-double-colon
 +TESTS+=		dep-double-colon-indep
 +TESTS+=		dep-duplicate
 +TESTS+=		dep-exclam
 +TESTS+=		dep-none
 +TESTS+=		dep-op-missing
 +TESTS+=		dep-percent
 +TESTS+=		dep-var
 +TESTS+=		dep-wildcards
 +TESTS+=		depsrc
 +TESTS+=		depsrc-end
 +TESTS+=		depsrc-exec
 +TESTS+=		depsrc-ignore
 +TESTS+=		depsrc-made
 +TESTS+=		depsrc-make
 +TESTS+=		depsrc-meta
 +TESTS+=		depsrc-nometa
 +TESTS+=		depsrc-nometa_cmp
 +TESTS+=		depsrc-nopath
 +TESTS+=		depsrc-notmain
 +TESTS+=		depsrc-optional
 +TESTS+=		depsrc-phony
 +TESTS+=		depsrc-precious
 +TESTS+=		depsrc-recursive
 +TESTS+=		depsrc-silent
 +TESTS+=		depsrc-use
 +TESTS+=		depsrc-usebefore
 +TESTS+=		depsrc-usebefore-double-colon
 +TESTS+=		depsrc-wait
 +TESTS+=		deptgt
 +TESTS+=		deptgt-begin
 +TESTS+=		deptgt-begin-fail
 +TESTS+=		deptgt-begin-fail-indirect
 +TESTS+=		deptgt-default
 +TESTS+=		deptgt-delete_on_error
 +TESTS+=		deptgt-end
 +TESTS+=		deptgt-end-fail
 +TESTS+=		deptgt-end-fail-all
 +TESTS+=		deptgt-end-fail-indirect
 +TESTS+=		deptgt-end-jobs
 +TESTS+=		deptgt-error
 +TESTS+=		deptgt-ignore
 +TESTS+=		deptgt-interrupt
 +TESTS+=		deptgt-main
 +TESTS+=		deptgt-makeflags
 +TESTS+=		deptgt-no_parallel
 +TESTS+=		deptgt-nopath
 +TESTS+=		deptgt-notparallel
 +TESTS+=		deptgt-objdir
 +TESTS+=		deptgt-order
 +TESTS+=		deptgt-path
 +TESTS+=		deptgt-path-suffix
 +TESTS+=		deptgt-phony
 +TESTS+=		deptgt-posix
 +TESTS+=		deptgt-precious
 +TESTS+=		deptgt-shell
 +TESTS+=		deptgt-silent
 +TESTS+=		deptgt-silent-jobs
 +TESTS+=		deptgt-stale
 +TESTS+=		deptgt-suffixes
 +TESTS+=		dir
 +TESTS+=		dir-expand-path
 +TESTS+=		directive
 +TESTS+=		directive-dinclude
 +TESTS+=		directive-elif
 +TESTS+=		directive-elifdef
 +TESTS+=		directive-elifmake
 +TESTS+=		directive-elifndef
 +TESTS+=		directive-elifnmake
 +TESTS+=		directive-else
 +TESTS+=		directive-endfor
 +TESTS+=		directive-endif
 +TESTS+=		directive-error
 +TESTS+=		directive-export
 +TESTS+=		directive-export-env
 +TESTS+=		directive-export-impl
 +TESTS+=		directive-export-gmake
 +TESTS+=		directive-export-literal
 +TESTS+=		directive-for
 +TESTS+=		directive-for-break
 +TESTS+=		directive-for-empty
 +TESTS+=		directive-for-errors
 +TESTS+=		directive-for-escape
 +TESTS+=		directive-for-generating-endif
 +TESTS+=		directive-for-if
 +TESTS+=		directive-for-lines
 +TESTS+=		directive-for-null
 +TESTS+=		directive-hyphen-include
 +TESTS+=		directive-if
 +TESTS+=		directive-if-nested
 +TESTS+=		directive-ifdef
 +TESTS+=		directive-ifmake
 +TESTS+=		directive-ifndef
 +TESTS+=		directive-ifnmake
 +TESTS+=		directive-include
 +TESTS+=		directive-include-fatal
 +TESTS+=		directive-include-guard
 +TESTS+=		directive-info
 +TESTS+=		directive-misspellings
 +TESTS+=		directive-sinclude
 +TESTS+=		directive-undef
 +TESTS+=		directive-unexport
 +TESTS+=		directive-unexport-env
 +TESTS+=		directive-warning
 +TESTS+=		dollar
 +TESTS+=		doterror
 +TESTS+=		dotwait
 +TESTS+=		error
 +TESTS+=		# escape	# broken by reverting POSIX changes
 +TESTS+=		export
 +TESTS+=		export-all
 +TESTS+=		export-env
 +TESTS+=		export-variants
 +TESTS+=		gnode-submake
 +TESTS+=		hanoi-include
 +TESTS+=		impsrc
 +TESTS+=		include-main
 +TESTS+=		job-flags
 +TESTS+=		job-output-long-lines
 +TESTS+=		job-output-null
 +TESTS+=		jobs-empty-commands
 +TESTS+=		jobs-empty-commands-error
 +TESTS+=		jobs-error-indirect
 +TESTS+=		jobs-error-nested
 +TESTS+=		jobs-error-nested-make
 +TESTS+=		lint
 +TESTS+=		make-exported
 +TESTS+=		meta-cmd-cmp
 +TESTS+=		moderrs
 +TESTS+=		modmisc
 +.if ${.MAKE.UID} > 0
 +TESTS+=		objdir-writable
 +.endif
 +TESTS+=		opt
 +TESTS+=		opt-backwards
 +TESTS+=		opt-chdir
 +TESTS+=		opt-debug
 +TESTS+=		opt-debug-all
 +TESTS+=		opt-debug-archive
 +TESTS+=		opt-debug-curdir
 +TESTS+=		opt-debug-cond
 +TESTS+=		opt-debug-dir
 +TESTS+=		opt-debug-errors
 +TESTS+=		opt-debug-errors-jobs
 +TESTS+=		opt-debug-file
 +TESTS+=		opt-debug-for
 +TESTS+=		opt-debug-graph1
 +TESTS+=		opt-debug-graph2
 +TESTS+=		opt-debug-graph3
 +TESTS+=		opt-debug-hash
 +TESTS+=		opt-debug-jobs
 +TESTS+=		opt-debug-lint
 +TESTS+=		opt-debug-loud
 +TESTS+=		opt-debug-meta
 +TESTS+=		opt-debug-making
 +TESTS+=		opt-debug-no-rm
 +TESTS+=		opt-debug-parse
 +TESTS+=		opt-debug-suff
 +TESTS+=		opt-debug-targets
 +TESTS+=		opt-debug-varraw
 +TESTS+=		opt-debug-var
 +TESTS+=		opt-debug-x-trace
 +TESTS+=		opt-define
 +TESTS+=		opt-env
 +TESTS+=		opt-file
 +TESTS+=		opt-ignore
 +TESTS+=		opt-include-dir
 +TESTS+=		opt-jobs
 +TESTS+=		opt-jobs-internal
 +TESTS+=		opt-jobs-no-action
 +TESTS+=		opt-keep-going
 +TESTS+=		opt-keep-going-indirect
 +TESTS+=		opt-keep-going-multiple
 +TESTS+=		opt-m-include-dir
 +TESTS+=		opt-no-action
 +TESTS+=		opt-no-action-at-all
 +TESTS+=		opt-no-action-runflags
 +TESTS+=		opt-no-action-touch
 +TESTS+=		opt-query
 +TESTS+=		opt-raw
 +TESTS+=		opt-silent
 +TESTS+=		opt-touch
 +TESTS+=		opt-touch-jobs
 +TESTS+=		opt-tracefile
 +TESTS+=		opt-var-expanded
 +TESTS+=		opt-var-literal
 +TESTS+=		opt-version
 +TESTS+=		opt-warnings-as-errors
 +TESTS+=		opt-where-am-i
 +TESTS+=		opt-x-reduce-exported
 +TESTS+=		order
 +TESTS+=		parse
 +TESTS+=		parse-var
 +TESTS+=		phony-end
 +TESTS+=		posix
 +TESTS+=		# posix1	# broken by reverting POSIX changes
 +TESTS+=		recursive
 +TESTS+=		sh
 +TESTS+=		sh-dots
 +TESTS+=		sh-errctl
 +TESTS+=		sh-flags
 +TESTS+=		sh-jobs
 +TESTS+=		sh-jobs-error
 +TESTS+=		sh-leading-at
 +TESTS+=		sh-leading-hyphen
 +TESTS+=		sh-leading-plus
 +TESTS+=		sh-meta-chars
 +TESTS+=		sh-multi-line
 +TESTS+=		sh-single-line
 +TESTS+=		shell-csh
 +TESTS+=		shell-custom
 +.if exists(/bin/ksh)
 +TESTS+=		shell-ksh
 +.endif
 +TESTS+=		shell-sh
 +TESTS+=		suff
 +TESTS+=		suff-add-later
 +TESTS+=		suff-clear-regular
 +TESTS+=		suff-clear-single
 +TESTS+=		suff-incomplete
 +TESTS+=		suff-lookup
 +TESTS+=		suff-main
 +TESTS+=		suff-main-several
 +TESTS+=		suff-phony
*** 586 LINES SKIPPED ***