git: 8c973ee23d64 - main - Merge bmake-20230414

From: Simon J. Gerraty <sjg_at_FreeBSD.org>
Date: Mon, 24 Apr 2023 23:51:09 UTC
The branch main has been updated by sjg:

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

commit 8c973ee23d647bbdebd2c12cb51460d80101e11a
Merge: 1f782fcc0cf1 51d8a8b4ac1d
Author:     Simon J. Gerraty <sjg@FreeBSD.org>
AuthorDate: 2023-04-24 23:46:44 +0000
Commit:     Simon J. Gerraty <sjg@FreeBSD.org>
CommitDate: 2023-04-24 23:50:16 +0000

    Merge bmake-20230414
    
    Merge commit '51d8a8b4ac1dd7265e891149e470a803906de2a7'

 contrib/bmake/ChangeLog                            |  52 ++++
 contrib/bmake/FILES                                |   1 +
 contrib/bmake/Makefile                             |   4 +-
 contrib/bmake/VERSION                              |   2 +-
 contrib/bmake/arch.c                               |  11 +-
 contrib/bmake/bmake.1                              |  27 +-
 contrib/bmake/bmake.cat1                           |  32 ++-
 contrib/bmake/compat.c                             |   9 +-
 contrib/bmake/cond.c                               |  39 +--
 contrib/bmake/for.c                                |   8 +-
 contrib/bmake/job.c                                |  19 +-
 contrib/bmake/main.c                               |  64 ++---
 contrib/bmake/make.1                               |  27 +-
 contrib/bmake/make.c                               |   6 +-
 contrib/bmake/make.h                               |  52 ++--
 contrib/bmake/meta.c                               |  89 +++----
 contrib/bmake/mk/ChangeLog                         |  59 +++++
 contrib/bmake/mk/FILES                             |   1 +
 contrib/bmake/mk/autoconf.mk                       |   4 +-
 contrib/bmake/mk/dirdeps.mk                        |  29 ++-
 contrib/bmake/mk/gendirdeps.mk                     |  35 ++-
 contrib/bmake/mk/install-mk                        |   4 +-
 contrib/bmake/mk/jobs.mk                           |  88 +++++++
 contrib/bmake/mk/lib.mk                            |  17 +-
 contrib/bmake/mk/meta.stage.mk                     |   6 +-
 contrib/bmake/mk/meta.sys.mk                       |  43 +++-
 contrib/bmake/mk/mk-files.txt                      |  29 ++-
 contrib/bmake/mk/prog.mk                           |   4 +-
 contrib/bmake/mk/sys.vars.mk                       |  10 +-
 contrib/bmake/mk/warnings.mk                       |  70 +++--
 contrib/bmake/os.sh                                |   0
 contrib/bmake/parse.c                              |  36 ++-
 contrib/bmake/suff.c                               |  10 +-
 contrib/bmake/trace.c                              |   6 +-
 contrib/bmake/unit-tests/Makefile                  |  63 +++--
 contrib/bmake/unit-tests/cmd-interrupt.exp         |   1 -
 contrib/bmake/unit-tests/cmd-interrupt.mk          |   4 +-
 contrib/bmake/unit-tests/cond-cmp-numeric.exp      |   8 +-
 contrib/bmake/unit-tests/cond-cmp-numeric.mk       |  11 +-
 contrib/bmake/unit-tests/cond-cmp-string.exp       |  16 +-
 contrib/bmake/unit-tests/cond-cmp-string.mk        |  10 +-
 contrib/bmake/unit-tests/cond-func-empty.exp       |   4 +-
 contrib/bmake/unit-tests/cond-func-empty.mk        |  47 ++--
 contrib/bmake/unit-tests/cond-short.exp            |  11 +-
 contrib/bmake/unit-tests/cond-short.mk             | 140 +++++-----
 contrib/bmake/unit-tests/cond-token-number.exp     |   1 -
 contrib/bmake/unit-tests/cond-token-number.mk      |  22 +-
 contrib/bmake/unit-tests/cond-token-plain.exp      |   1 +
 contrib/bmake/unit-tests/cond-token-plain.mk       |   8 +-
 contrib/bmake/unit-tests/cond-undef-lint.exp       |   3 +
 contrib/bmake/unit-tests/dep-var.exp               |  24 ++
 contrib/bmake/unit-tests/dep-var.mk                |  21 +-
 .../bmake/unit-tests/deptgt-delete_on_error.exp    |   2 -
 contrib/bmake/unit-tests/meta-ignore.inc           |  63 +++++
 contrib/bmake/unit-tests/opt-debug-lint.exp        |   2 +
 contrib/bmake/unit-tests/opt.mk                    |   4 +-
 contrib/bmake/unit-tests/parse-var.exp             |   6 +-
 contrib/bmake/unit-tests/parse-var.mk              |  40 ++-
 contrib/bmake/unit-tests/var-eval-short.exp        |   4 +
 contrib/bmake/unit-tests/var-scope-cmdline.exp     |   4 +-
 contrib/bmake/unit-tests/var-scope-cmdline.mk      |   6 +-
 contrib/bmake/unit-tests/varcmd.mk                 |   6 +-
 contrib/bmake/unit-tests/varmod-ifelse.exp         |   7 +
 contrib/bmake/unit-tests/varmod-ifelse.mk          |  66 ++++-
 contrib/bmake/unit-tests/varmod-loop.exp           |   6 +-
 contrib/bmake/unit-tests/varmod-loop.mk            |  24 +-
 contrib/bmake/unit-tests/varmod-no-match.mk        |  98 ++++++-
 contrib/bmake/unit-tests/varmod-order-shuffle.mk   |   7 +-
 contrib/bmake/unit-tests/varmod-order.exp          |   2 +
 contrib/bmake/unit-tests/varmod-order.mk           |  16 +-
 .../varname-dot-make-meta-ignore_filter.exp        |  10 +
 .../varname-dot-make-meta-ignore_filter.mk         |   7 +-
 .../varname-dot-make-meta-ignore_paths.exp         |  10 +
 .../varname-dot-make-meta-ignore_paths.mk          |   7 +-
 .../varname-dot-make-meta-ignore_patterns.exp      |  10 +
 .../varname-dot-make-meta-ignore_patterns.mk       |   7 +-
 contrib/bmake/unit-tests/varname-dot-makeflags.exp |  11 +-
 contrib/bmake/unit-tests/varname-dot-makeflags.mk  |  39 ++-
 .../bmake/unit-tests/varname-dot-makeoverrides.exp |   7 +
 .../bmake/unit-tests/varname-dot-makeoverrides.mk  |  25 +-
 contrib/bmake/unit-tests/varname-makeflags.exp     |  20 ++
 contrib/bmake/unit-tests/varname-makeflags.mk      | 182 +++++++++++--
 contrib/bmake/unit-tests/varparse-errors.exp       |   8 +-
 contrib/bmake/unit-tests/varparse-errors.mk        |   3 +-
 contrib/bmake/var.c                                | 281 ++++++++-------------
 usr.bin/bmake/Makefile                             |   4 +-
 usr.bin/bmake/Makefile.config                      |   2 +-
 usr.bin/bmake/unit-tests/Makefile                  |  63 +++--
 88 files changed, 1594 insertions(+), 753 deletions(-)

diff --cc contrib/bmake/Makefile
index 4ad9ac92b266,000000000000..212885f7b900
mode 100644,000000..100644
--- a/contrib/bmake/Makefile
+++ b/contrib/bmake/Makefile
@@@ -1,238 -1,0 +1,236 @@@
- #	$Id: Makefile,v 1.123 2023/01/28 02:49:20 sjg Exp $
++#	$Id: Makefile,v 1.124 2023/02/25 20:27:44 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
 +
 +.-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?= ${.CURDIR}
 +
 +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_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
 +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
 +.endif				# USE_FILEMON == dev
 +
 +.endif				# USE_FILEMON
 +
 +.PATH:	${srcdir}
 +
 +.if make(obj) || make(clean)
 +SUBDIR+= unit-tests
 +.endif
 +
 +# 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:NDarwin:NLinux} != ""
 +MANTARGET= cat
 +INSTALL?=${srcdir}/install-sh
 +.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
 +
 +OPTIONS_DEFAULT_NO+= \
 +	PROG_VERSION
 +
 +# 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
 +# end-delete1
 +
 +MAN= ${PROG}.1
 +MAN1= ${MAN}
 +
 +.if ${PROG} != "make"
 +CLEANFILES+= my.history
 +.if make(${MAN}) || !exists(${srcdir}/${MAN})
 +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") > $@
 +
 +.NOPATH: ${MAN}
 +${MAN}:	make.1 my.history
 +	@echo making $@
 +	@sed \
 +	-e '/^.Dt/s/MAKE/${PROG:tu}/' \
 +	-e 's/^.Nx/NetBSD/' \
 +	-e '/^.Nm/s/make/${PROG}/' \
 +	-e '/^.Sh HISTORY/rmy.history' \
 +	-e '/^.Sh HISTORY/,$$s,^.Nm,make,' ${srcdir}/make.1 > $@
 +
 +all beforeinstall: ${MAN}
 +_mfromdir=.
 +.endif
 +.endif
 +
 +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}
 +
- .if !exists(.depend)
 +${OBJS}: config.h
- .endif
 +
 +# 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/mk/jobs.mk
index 000000000000,f465ea06310b..f465ea06310b
mode 000000,100644..100644
--- a/contrib/bmake/mk/jobs.mk
+++ b/contrib/bmake/mk/jobs.mk
diff --cc contrib/bmake/os.sh
index 6bf52420c90f,6bf52420c90f..6bf52420c90f
mode 100644,100755..100755
--- a/contrib/bmake/os.sh
+++ b/contrib/bmake/os.sh
diff --cc contrib/bmake/unit-tests/meta-ignore.inc
index 000000000000,ed74f4d79017..ed74f4d79017
mode 000000,100644..100644
--- a/contrib/bmake/unit-tests/meta-ignore.inc
+++ b/contrib/bmake/unit-tests/meta-ignore.inc
diff --cc usr.bin/bmake/Makefile
index f94c7d3d2914,000000000000..ed2f5b3d5e2f
mode 100644,000000..100644
--- a/usr.bin/bmake/Makefile
+++ b/usr.bin/bmake/Makefile
@@@ -1,181 -1,0 +1,179 @@@
 +# This is a generated file, do NOT edit!
 +# See contrib/bmake/bsd.after-import.mk
 +#
 +# $FreeBSD$
 +
 +SRCTOP?= ${.CURDIR:H:H}
 +
 +# look here first for config.h
 +CFLAGS+= -I${.CURDIR}
 +
 +# for after-import
 +CLEANDIRS+= FreeBSD
 +CLEANFILES+= bootstrap
 +
- #	$Id: Makefile,v 1.123 2023/01/28 02:49:20 sjg Exp $
++#	$Id: Makefile,v 1.124 2023/02/25 20:27:44 sjg Exp $
 +
 +PROG?=	${.CURDIR:T}
 +
 +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
 +
 +.sinclude "Makefile.inc"
 +
 +# this file gets generated by configure
 +.sinclude "Makefile.config"
 +
 +.if !empty(LIBOBJS)
 +SRCS+= ${LIBOBJS:T:.o=.c}
 +.endif
 +
 +# just in case
 +prefix?= /usr
 +srcdir?= ${.CURDIR}
 +
 +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_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
 +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
 +.endif				# USE_FILEMON == dev
 +
 +.endif				# USE_FILEMON
 +
 +.PATH:	${srcdir}
 +
 +.if make(obj) || make(clean)
 +SUBDIR+= unit-tests
 +.endif
 +
 +
 +MAN= ${PROG}.1
 +MAN1= ${MAN}
 +
 +.if ${PROG} != "make"
 +CLEANFILES+= my.history
 +.if make(${MAN}) || !exists(${srcdir}/${MAN})
 +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") > $@
 +
 +.NOPATH: ${MAN}
 +${MAN}:	make.1 my.history
 +	@echo making $@
 +	@sed \
 +	-e '/^.Dt/s/MAKE/${PROG:tu}/' \
 +	-e 's/^.Nx/NetBSD/' \
 +	-e '/^.Nm/s/make/${PROG}/' \
 +	-e '/^.Sh HISTORY/rmy.history' \
 +	-e '/^.Sh HISTORY/,$$s,^.Nm,make,' ${srcdir}/make.1 > $@
 +
 +all beforeinstall: ${MAN}
 +_mfromdir=.
 +.endif
 +.endif
 +
 +MANTARGET?= cat
 +MANDEST?= ${MANDIR}/${MANTARGET}1
 +
 +.if ${MANTARGET} == "cat"
 +_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
 +
 +# Force these
 +SHAREDIR= ${SHAREDIR.bmake:U${prefix}/share}
 +BINDIR= ${BINDIR.bmake:U${prefix}/bin}
 +MANDIR= ${MANDIR.bmake:U${SHAREDIR}/man}
 +
- .if !exists(.depend)
 +${OBJS}: config.h
- .endif
 +
 +
 +# 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
 +
 +# override some simple things
 +BINDIR= /usr/bin
 +MANDIR= /usr/share/man/man
 +
 +# make sure we get this
 +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 a0310f91a5f8,000000000000..60e86b185246
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
 +#
 +# $FreeBSD$
 +
 +SRCTOP?= ${.CURDIR:H:H}
 +
 +# things set by configure
 +
- _MAKE_VERSION?=20230208
++_MAKE_VERSION?=20230414
 +
 +prefix?= /usr
 +srcdir= ${SRCTOP}/contrib/bmake
 +CC?= cc
 +DEFAULT_SYS_PATH?= .../share/mk:/usr/share/mk
 +
 +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 3214dacda5fc,000000000000..6594bdd5cd81
mode 100644,000000..100644
--- a/usr.bin/bmake/unit-tests/Makefile
+++ b/usr.bin/bmake/unit-tests/Makefile
@@@ -1,850 -1,0 +1,859 @@@
 +# This is a generated file, do NOT edit!
 +# See contrib/bmake/bsd.after-import.mk
 +#
 +# $FreeBSD$
- # $Id: Makefile,v 1.191 2023/01/24 06:09:49 sjg Exp $
++# $Id: Makefile,v 1.193 2023/02/25 20:03:25 sjg Exp $
 +#
- # $NetBSD: Makefile,v 1.331 2023/01/24 00:24:02 sjg Exp $
++# $NetBSD: Makefile,v 1.333 2023/02/25 19:30:32 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
++
 +# 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-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+=		forloop
 +TESTS+=		forsubst
 +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+=		modmatch
 +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-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
 +TESTS+=		suff-rebuild
 +TESTS+=		suff-self
 +TESTS+=		suff-transform-debug
 +TESTS+=		suff-transform-endless
 +TESTS+=		suff-transform-expand
 +TESTS+=		suff-transform-select
 +TESTS+=		suff-use
 +TESTS+=		sunshcmd
 +TESTS+=		ternary
 +TESTS+=		unexport
 +TESTS+=		unexport-env
 +TESTS+=		use-inference
 +TESTS+=		var-readonly
 +TESTS+=		var-scope
 +TESTS+=		var-scope-cmdline
 +TESTS+=		var-scope-env
 +TESTS+=		var-scope-global
 +TESTS+=		var-scope-local
 +TESTS+=		var-scope-local-legacy
 +TESTS+=		var-eval-short
 +TESTS+=		var-op
 +TESTS+=		var-op-append
 +TESTS+=		var-op-assign
 +TESTS+=		var-op-default
 +TESTS+=		var-op-expand
 +TESTS+=		var-op-shell
 +TESTS+=		var-op-sunsh
 +TESTS+=		var-recursive
 +TESTS+=		varcmd
 +TESTS+=		vardebug
 +TESTS+=		varfind
 +TESTS+=		varmisc
 +TESTS+=		varmod
 +TESTS+=		varmod-assign
 +TESTS+=		varmod-assign-shell
 +TESTS+=		varmod-defined
 +TESTS+=		varmod-edge
 +TESTS+=		varmod-exclam-shell
 +TESTS+=		varmod-extension
 +TESTS+=		varmod-gmtime
 +TESTS+=		varmod-hash
 +TESTS+=		varmod-head
 +TESTS+=		varmod-ifelse
 +TESTS+=		varmod-indirect
 +TESTS+=		varmod-l-name-to-value
 +TESTS+=		varmod-localtime
 +TESTS+=		varmod-loop
 +TESTS+=		varmod-loop-delete
 +TESTS+=		varmod-loop-varname
 +TESTS+=		varmod-match
 +TESTS+=		varmod-match-escape
 +TESTS+=		varmod-no-match
 +TESTS+=		varmod-order
 +TESTS+=		varmod-order-numeric
 +TESTS+=		varmod-order-reverse
 +TESTS+=		varmod-order-shuffle
 +TESTS+=		varmod-order-string
 +TESTS+=		varmod-path
 +TESTS+=		varmod-quote
 +TESTS+=		varmod-quote-dollar
 +TESTS+=		varmod-range
*** 493 LINES SKIPPED ***