Update share/mk files from bmake

Update to the latest makefiles etc from bmake.
Mostly this just replaces sjg license with an SPDX tag.

There are also some improvements to meta2deps* and optimizations
to leverage POSIX shell features in some target scripts.
Default isPOSIX_SHELL to ':' in sys.mk to enable these.

Use :sh1 in M_type if possible.

bsd.progs.mk has diverged too much to touch beyond making the
SPDX tag update.

Reviewed by:	stevek
Differential Revision:	https://reviews.freebsd.org/D54150
This commit is contained in:
Simon J. Gerraty
2025-12-09 21:06:31 -08:00
parent cc1e4aae5a
commit 9bbb08f905
18 changed files with 232 additions and 199 deletions
+2 -9
View File
@@ -1,15 +1,8 @@
# SPDX-License-Identifier: BSD-2-Clause
#
# $Id: auto.obj.mk,v 1.20 2025/05/17 15:29:55 sjg Exp $
# $Id: auto.obj.mk,v 1.21 2025/08/09 22:42:24 sjg Exp $
#
# @(#) Copyright (c) 2004-2025, Simon J. Gerraty
#
# This file is provided in the hope that it will
# be of use. There is absolutely NO WARRANTY.
# Permission to copy, redistribute or otherwise
# use this file is hereby granted provided that
# the above copyright notice and this notice are
# left intact.
# SPDX-License-Identifier: BSD-2-Clause
#
# Please send copies of changes and bug-fixes to:
# sjg@crufty.net
+1 -6
View File
@@ -2,12 +2,7 @@
#
# @(#) Copyright (c) 2006, Simon J. Gerraty
#
# This file is provided in the hope that it will
# be of use. There is absolutely NO WARRANTY.
# Permission to copy, redistribute or otherwise
# use this file is hereby granted provided that
# the above copyright notice and this notice are
# left intact.
# SPDX-License-Identifier: BSD-2-Clause
#
# Please send copies of changes and bug-fixes to:
# sjg@crufty.net
+2 -9
View File
@@ -1,15 +1,8 @@
# SPDX-License-Identifier: BSD-2-Clause
#
# $Id: dirdeps-options.mk,v 1.22 2024/02/17 17:26:57 sjg Exp $
# $Id: dirdeps-options.mk,v 1.23 2025/08/09 22:42:24 sjg Exp $
#
# @(#) Copyright (c) 2018-2022, Simon J. Gerraty
#
# This file is provided in the hope that it will
# be of use. There is absolutely NO WARRANTY.
# Permission to copy, redistribute or otherwise
# use this file is hereby granted provided that
# the above copyright notice and this notice are
# left intact.
# SPDX-License-Identifier: BSD-2-Clause
#
# Please send copies of changes and bug-fixes to:
# sjg@crufty.net
+5 -13
View File
@@ -1,19 +1,11 @@
# SPDX-License-Identifier: BSD-2-Clause
# $Id: dirdeps-targets.mk,v 1.29 2025/08/09 22:42:24 sjg Exp $
#
# RCSid:
# $Id: dirdeps-targets.mk,v 1.28 2024/10/19 00:47:38 sjg Exp $
# @(#) Copyright (c) 2019-2020 Simon J. Gerraty
#
# @(#) Copyright (c) 2019-2020 Simon J. Gerraty
# SPDX-License-Identifier: BSD-2-Clause
#
# This file is provided in the hope that it will
# be of use. There is absolutely NO WARRANTY.
# Permission to copy, redistribute or otherwise
# use this file is hereby granted provided that
# the above copyright notice and this notice are
# left intact.
#
# Please send copies of changes and bug-fixes to:
# sjg@crufty.net
# Please send copies of changes and bug-fixes to:
# sjg@crufty.net
#
##
+17 -7
View File
@@ -1,8 +1,8 @@
# $Id: gendirdeps.mk,v 1.51 2025/01/05 01:16:19 sjg Exp $
# $Id: gendirdeps.mk,v 1.54 2025/08/12 21:36:43 sjg Exp $
# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2011-2020, Simon J. Gerraty
# Copyright (c) 2011-2025, Simon J. Gerraty
# Copyright (c) 2010-2018, Juniper Networks, Inc.
# All rights reserved.
#
@@ -76,6 +76,12 @@
#
.MAIN: all
.if ${DEBUG_GENDIRDEPS:Uno:@m@${RELDIR:M$m}@} != ""
_debug.gendirdeps = 1
.else
_debug.gendirdeps = 0
.endif
# keep this simple
.MAKE.MODE = compat
@@ -108,6 +114,9 @@ META_FILES += ${META_XTRAS:N\*.meta}
.endif
.if !empty(META_FILES)
.if ${_debug.gendirdeps} && ${DEBUG_GENDIRDEPS:Mmeta*} != ""
.info ${RELDIR}: META_FILES=${META_FILES}
.endif
.if ${.MAKE.LEVEL} > 0 && !empty(GENDIRDEPS_FILTER)
# so we can compare below
@@ -146,7 +155,7 @@ GENDIRDEPS_FILTER += ${GENDIRDEPS_FILTER_VARS:@v@S,/${$v}/,/_{${v}}/,@:NS,//,*:u
META2DEPS ?= ${.PARSEDIR}/meta2deps.sh
META2DEPS := ${META2DEPS}
.if ${DEBUG_GENDIRDEPS:Uno:@x@${RELDIR:M$x}@} != "" && ${DEBUG_GENDIRDEPS:Uno:Mmeta2d*} != ""
.if ${_debug.gendirdeps} && ${DEBUG_GENDIRDEPS:Mmeta2d*} != ""
_time = time
_sh_x = sh -x
_py_d = -ddd
@@ -260,7 +269,7 @@ dpadd_dir_list += ${f:H:tA}
ddeps != cat ${ddep_list:O:u} | ${META2DEPS_FILTER} ${_skip_gendirdeps} \
sed ${GENDIRDEPS_SEDCMDS}
.if ${DEBUG_GENDIRDEPS:Uno:@x@${RELDIR:M$x}@} != ""
.if ${_debug.gendirdeps}
.info ${RELDIR}: raw_dir_list='${dir_list}'
.info ${RELDIR}: ddeps='${ddeps}'
.endif
@@ -289,12 +298,13 @@ M2D_OBJROOTS := ${M2D_OBJROOTS:O:u:[-1..1]}
# anything we use from an object dir other than ours
# needs to be qualified with its .<machine> suffix
# (we used the pseudo machine "host" for the HOST_TARGET).
skip_ql= ${SRCTOP}* ${_objtops:@o@$o*@}
skip_ql = ${SRCTOP}* ${_objtops:@o@$o*@}
M_ListToSkip ?= O:u:S,^,N,:ts:
.for o in ${M2D_OBJROOTS:${skip_ql:${M_ListToSkip}}}
# we need := so only skip_ql to this point applies
ql.$o := ${dir_list:${skip_ql:${M_ListToSkip}}:M$o*/*/*:C,$o([^/]+)/(.*),\2.\1,:S,.${HOST_TARGET},.host,}
qualdir_list += ${ql.$o}
.if ${DEBUG_GENDIRDEPS:Uno:@x@${RELDIR:M$x}@} != ""
.if ${_debug.gendirdeps}
.info ${RELDIR}: o=$o ${ql.$o qualdir_list:L:@v@$v=${$v}@}
.endif
skip_ql+= $o*
@@ -323,7 +333,7 @@ DIRDEPS += \
GENDIRDEPS_FILTER_MASK += @CMNS
DIRDEPS := ${DIRDEPS:${GENDIRDEPS_FILTER:UNno:M[${GENDIRDEPS_FILTER_MASK:O:u:ts}]*:ts:}:C,//+,/,g:O:u}
.if ${DEBUG_GENDIRDEPS:Uno:@x@${RELDIR:M$x}@} != ""
.if ${_debug.gendirdeps}
.info ${RELDIR}: M2D_OBJROOTS=${M2D_OBJROOTS}
.info ${RELDIR}: M2D_EXCLUDES=${M2D_EXCLUDES}
.info ${RELDIR}: dir_list='${dir_list}'
+21 -29
View File
@@ -1,53 +1,41 @@
# $Id: install-new.mk,v 1.3 2012/03/24 18:25:49 sjg Exp $
# $Id: install-new.mk,v 1.9 2025/11/19 17:44:15 sjg Exp $
#
# @(#) Copyright (c) 2009, Simon J. Gerraty
#
# This file is provided in the hope that it will
# be of use. There is absolutely NO WARRANTY.
# Permission to copy, redistribute or otherwise
# use this file is hereby granted provided that
# the above copyright notice and this notice are
# left intact.
#
# SPDX-License-Identifier: BSD-2-Clause
#
# Please send copies of changes and bug-fixes to:
# sjg@crufty.net
#
.if !defined(InstallNew)
# copy if src and target are different making a backup if desired
CmpCp= CmpCp() { \
# How do we want CmpCpMv to do the final operation?
# the backup (if any) will use the opposite.
CPMV_OP ?= mv
# clear this if not supported
CPMV_f ?= -f
# copy/move if src and target are different making a backup if desired
CmpCpMv= CmpCpMv() { \
src=$$1 target=$$2 _bak=$$3; \
if ! test -s $$target || ! cmp -s $$target $$src; then \
trap "" 1 2 3 15; \
case "/${CPMV_OP}" in */cp) bop=mv;; */mv) bop=cp;; esac; \
if test -s $$target; then \
if test "x$$_bak" != x; then \
rm -f $$target$$_bak; \
mv $$target $$target$$_bak; \
$$bop ${CPMV_f} $$target $$target$$_bak; \
else \
rm -f $$target; \
fi; \
fi; \
cp $$src $$target; \
fi; }
# Replace the file if they are different and make a backup if desired
CmpReplace= CmpReplace() { \
src=$$1 target=$$2 _bak=$$3; \
if ! test -s $$target || ! cmp -s $$target $$src; then \
trap "" 1 2 3 15; \
if test -s $$target; then \
if test "x$$_bak" != x; then \
rm -f $$target$$_bak; \
cp -f $$target $$target$$_bak; \
fi; \
fi; \
mv -f $$src $$target; \
${CPMV_OP} ${CPMV_f} $$src $$target; \
fi; }
# If the .new file is different, we want it.
# Note: this function will work as is for *.new$RANDOM"
InstallNew= ${CmpReplace}; InstallNew() { \
InstallNew= ${CmpCpMv}; InstallNew() { \
_t=-e; _bak=; \
while :; do \
case "$$1" in \
@@ -58,8 +46,12 @@ InstallNew= ${CmpReplace}; InstallNew() { \
done; \
for new in "$$@"; do \
if test $$_t $$new; then \
target=`expr $$new : '\(.*\).new'`; \
CmpReplace $$new $$target $$_bak; \
if ${isPOSIX_SHELL:Ufalse}; then \
target=$${new%.new}; \
else \
target=`expr $$new : '\(.*\).new'`; \
fi; \
CmpCpMv $$new $$target $$_bak; \
fi; \
rm -f $$new; \
done; :; }
+2 -9
View File
@@ -1,15 +1,8 @@
# SPDX-License-Identifier: BSD-2-Clause
#
# $Id: jobs.mk,v 1.19 2025/02/03 21:18:44 sjg Exp $
# $Id: jobs.mk,v 1.20 2025/08/09 22:42:24 sjg Exp $
#
# @(#) 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.
# Permission to copy, redistribute or otherwise
# use this file is hereby granted provided that
# the above copyright notice and this notice are
# left intact.
# SPDX-License-Identifier: BSD-2-Clause
#
# Please send copies of changes and bug-fixes to:
# sjg@crufty.net
+8 -1
View File
@@ -22,9 +22,16 @@ M_L_TARGETS = ${M_ListToMatch:S,V,_TARGETS,}
# NskipFoo = ${Foo:${M_ListToSkip}}
M_ListToSkip= O:u:ts::S,:,:N,g:S,^,N,
# :sh1 evaluates command only once and caches the result.
.if ${MAKE_VERSION} < 20251111
M_sh1 = sh
.else
M_sh1 = sh1
.endif
# type should be a builtin in any sh since about 1980,
# AUTOCONF := ${autoconf:L:${M_whence}}
M_type = @x@(type $$x 2> /dev/null); echo;@:sh:[0]:N* found*:[@]:C,[()],,g
M_type = @x@(type $$x 2> /dev/null); echo;@:${M_sh1:Ush}:[0]:N* found*:[@]:C,[()],,g
M_whence = ${M_type}:M/*:[1]
# convert a path to a valid shell variable
+52 -31
View File
@@ -1,16 +1,8 @@
# SPDX-License-Identifier: BSD-2-Clause
# $Id: meta.autodep.mk,v 1.71 2025/08/09 22:42:24 sjg Exp $
#
# $Id: meta.autodep.mk,v 1.63 2024/04/24 18:56:41 sjg Exp $
# @(#) Copyright (c) 2010-2025, Simon J. Gerraty
#
# @(#) Copyright (c) 2010, Simon J. Gerraty
#
# This file is provided in the hope that it will
# be of use. There is absolutely NO WARRANTY.
# Permission to copy, redistribute or otherwise
# use this file is hereby granted provided that
# the above copyright notice and this notice are
# left intact.
# SPDX-License-Identifier: BSD-2-Clause
#
# Please send copies of changes and bug-fixes to:
# sjg@crufty.net
@@ -22,6 +14,12 @@ __${_this}__: .NOTMAIN
.-include <local.autodep.mk>
.if ${DEBUG_AUTODEP:Uno:@m@${RELDIR:M$m}@} != ""
_debug.autodep = 1
.else
_debug.autodep = 0
.endif
PICO?= .pico
.if defined(SRCS)
@@ -85,9 +83,9 @@ UPDATE_DEPENDFILE = NO
_bootstrap_dirdeps = yes
.endif
_bootstrap_dirdeps ?= no
UPDATE_DEPENDFILE ?= yes
UPDATE_DEPENDFILE ?= ${MK_UPDATE_DEPENDFILE:Uyes}
.if ${DEBUG_AUTODEP:Uno:@m@${RELDIR:M$m}@} != ""
.if ${_debug.autodep}
.info ${_DEPENDFILE:S,${SRCTOP}/,,} update=${UPDATE_DEPENDFILE}
.endif
@@ -111,7 +109,7 @@ WANT_UPDATE_DEPENDFILE ?= yes
UPDATE_DEPENDFILE = no
.endif
.if ${DEBUG_AUTODEP:Uno:@m@${RELDIR:M$m}@} != ""
.if ${_debug.autodep}
.info ${_DEPENDFILE:S,${SRCTOP}/,,} update=${UPDATE_DEPENDFILE}
.endif
@@ -207,7 +205,7 @@ CAT_DEPEND = /dev/null
_depend =
.endif
.if ${DEBUG_AUTODEP:Uno:@m@${RELDIR:M$m}@} != ""
.if ${_debug.autodep}
.info ${_DEPENDFILE:S,${SRCTOP}/,,} _depend=${_depend}
.endif
@@ -253,19 +251,33 @@ _gendirdeps_mutex = ${GENDIRDEPS_MUTEXER} ${GENDIRDEPS_MUTEX:U${_CURDIR}/Makefil
# but we need to behave as if we did.
# Avoid adding glob patterns to .MAKE.META.CREATED though.
.MAKE.META.CREATED += ${META_XTRAS:N*\**:O:u}
OPTIMIZE_OBJECT_META_FILES ?= no
.if make(gendirdeps)
META_FILES = *.meta
.elif ${OPTIMIZE_OBJECT_META_FILES:Uno:tl} == "no"
META_FILES = ${.MAKE.META.FILES:T:N.depend*:O:u}
.else
# if we have 1000's of .o.meta, ${PICO}.meta etc we need only look at one set
# it is left as an exercise for the reader to work out what this does
META_FILES = ${.MAKE.META.FILES:T:N.depend*:N*o.meta:O:u} \
${.MAKE.META.FILES:T:M*.${.MAKE.META.FILES:M*o.meta:R:E:O:u:[1]}.meta:O:u}
.if ${OPTIMIZE_OBJECT_META_FILES} == "yes"
# If we have lots of .o.meta, ${PICO}.meta etc we need only look at one set.
# If META_FILE_OBJ_FILTER is not already set, we default it to a
# .SUFFIX which matches the first *o.meta.
# There is no guarantee it will be just .o or .So etc,
META_FILE_OBJ_FILTER ?= \
${.SUFFIXES:M*o:@o@${"${.MAKE.META.FILES:T:M*$o.meta:[1]}":?M*$o.meta:}@:[1]}
.endif
.if ${DEBUG_AUTODEP:Uno:@m@${RELDIR:M$m}@} != ""
# parent may have set META_FILE_OBJ_FILTER
.if ${OPTIMIZE_OBJECT_META_FILES} == "yes" || !empty(META_FILE_OBJ_FILTER)
META_FILES = \
${.MAKE.META.FILES:N.depend*:N*o.meta} \
${.MAKE.META.FILES:${META_FILE_OBJ_FILTER}}
.else
META_FILES = ${.MAKE.META.FILES:N.depend*}
.endif
# ensure this is not empty (this will sort after any M and N
# we use S,${_OBJDIR}/,, rather than :T since some makefiles have
# objects in subdirs
META_FILE_FILTER += S,${_OBJDIR}/,,:O:u
# we have to defer evaluation until the target script runs
GENDIRDEPS_ENV += META_FILES="${META_FILES:${META_FILE_FILTER:O:u:ts:}}}"
.if ${_debug.autodep}
.info ${_DEPENDFILE:S,${SRCTOP}/,,}: ${_depend} ${.PARSEDIR}/gendirdeps.mk ${META2DEPS} xtras=${META_XTRAS}
.endif
@@ -276,20 +288,29 @@ META_FILES = ${.MAKE.META.FILES:T:N.depend*:N*o.meta:O:u} \
.if !empty(GENDIRDEPS_FILTER)
.export GENDIRDEPS_FILTER
.endif
# export to avoid blowing command line limit
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})
${.MAKE} -B -f gendirdeps.mk RELDIR=${RELDIR} _DEPENDFILE=${_DEPENDFILE})
@test -s $@ && touch $@; :
.endif
+28 -18
View File
@@ -1,15 +1,8 @@
# SPDX-License-Identifier: BSD-2-Clause
# $Id: meta.stage.mk,v 1.75 2025/12/08 17:44:57 sjg Exp $
#
# $Id: meta.stage.mk,v 1.69 2024/02/17 17:26:57 sjg Exp $
# @(#) Copyright (c) 2011-2025, Simon J. Gerraty
#
# @(#) Copyright (c) 2011-2017, Simon J. Gerraty
#
# This file is provided in the hope that it will
# be of use. There is absolutely NO WARRANTY.
# Permission to copy, redistribute or otherwise
# use this file is hereby granted provided that
# the above copyright notice and this notice are
# left intact.
# SPDX-License-Identifier: BSD-2-Clause
#
# Please send copies of changes and bug-fixes to:
# sjg@crufty.net
@@ -38,12 +31,14 @@ CLEANFILES+= .dirdep
@echo '${_dirdep}' > $@
.endif
.if defined(NO_POSIX_SHELL) || ${type printf:L:sh:Mbuiltin} == ""
_stage_file_basename = `basename $$f`
_stage_target_dirname = `dirname $$t`
.else
.if ${isPOSIX_SHELL:U:Nfalse}
_stage_file_basename = $${f\#\#*/}
_stage_file_dirname = $${f%/*}
_stage_target_dirname = $${t%/*}
.else
_stage_file_basename = `basename $$f`
_stage_file_dirname = `dirname $$f`
_stage_target_dirname = `dirname $$t`
.endif
_OBJROOT ?= ${OBJROOT:U${OBJTOP:H}}
@@ -86,22 +81,37 @@ STAGE_DIRDEP_SCRIPT = ${LN_CP_SCRIPT}; StageDirdep() { \
if [ -s $$t.dirdep ]; then \
cmp -s .dirdep $$t.dirdep && return; \
x=`cat $$t.dirdep`; \
case "${RELDIR}:${_dirdep}" in $${x%.*}:$${x}*) ;; \
case "${RELDIR}:${_dirdep}" in \
$${x%.*}:$${x}*) ;; \
*) echo "${STAGE_CONFLICT}: $$t installed by $$x not ${_dirdep}" >&2; \
${STAGE_CONFLICT_ACTION} ;; esac; \
${STAGE_CONFLICT_ACTION} ;; \
esac; \
fi; \
LnCp .dirdep $$t.dirdep || exit 1; }
# common logic for staging files
# this all relies on RELDIR being set to a subdir of SRCTOP
# we use ln(1) if we can, else cp(1)
# if --subdir is given the dirname part of each file will be preserved
STAGE_FILE_SCRIPT = ${STAGE_DIRDEP_SCRIPT}; StageFiles() { \
case "$$1" in "") return;; -m) mode=$$2; shift 2;; *) mode=;; esac; \
mode= subdir=; \
while : ; do \
case "$$1" in \
"") return;; \
-m) mode=$$2; shift 2;; \
--subdir) subdir=1; shift;; \
*) break;; \
esac; \
done; \
dest=$$1; shift; \
mkdir -p $$dest; \
[ -s .dirdep ] || echo '${_dirdep}' > .dirdep; \
for f in "$$@"; do \
case "$$f" in */*) t=$$dest/${_stage_file_basename};; *) t=$$dest/$$f;; esac; \
case "$$subdir,$$f" in \
1,*/*) t=$$dest/$$f; mkdir -p $$dest/${_stage_file_dirname};; \
*/*) t=$$dest/${_stage_file_basename};; \
*) t=$$dest/$$f;; \
esac; \
StageDirdep $$t; \
LnCp $$f $$t || exit 1; \
[ -z "$$mode" ] || chmod $$mode $$t; \
+2 -10
View File
@@ -1,16 +1,8 @@
# SPDX-License-Identifier: BSD-2-Clause
#
# $Id: meta.subdir.mk,v 1.15 2024/04/19 15:10:22 sjg Exp $
# $Id: meta.subdir.mk,v 1.16 2025/08/09 22:42:24 sjg Exp $
#
# @(#) Copyright (c) 2010, Simon J. Gerraty
#
# This file is provided in the hope that it will
# be of use. There is absolutely NO WARRANTY.
# Permission to copy, redistribute or otherwise
# use this file is hereby granted provided that
# the above copyright notice and this notice are
# left intact.
# SPDX-License-Identifier: BSD-2-Clause
#
# Please send copies of changes and bug-fixes to:
# sjg@crufty.net
+2 -10
View File
@@ -1,16 +1,8 @@
# SPDX-License-Identifier: BSD-2-Clause
#
# $Id: meta.sys.mk,v 1.56 2024/11/22 23:51:48 sjg Exp $
# $Id: meta.sys.mk,v 1.57 2025/08/09 22:42:24 sjg Exp $
#
# @(#) Copyright (c) 2010-2023, Simon J. Gerraty
#
# This file is provided in the hope that it will
# be of use. There is absolutely NO WARRANTY.
# Permission to copy, redistribute or otherwise
# use this file is hereby granted provided that
# the above copyright notice and this notice are
# left intact.
# SPDX-License-Identifier: BSD-2-Clause
#
# Please send copies of changes and bug-fixes to:
# sjg@crufty.net
+39 -10
View File
@@ -39,9 +39,9 @@
SPDX-License-Identifier: BSD-2-Clause
RCSid:
$Id: meta2deps.py,v 1.50 2024/09/27 00:08:36 sjg Exp $
$Id: meta2deps.py,v 1.54 2025/07/24 16:05:48 sjg Exp $
Copyright (c) 2011-2020, Simon J. Gerraty
Copyright (c) 2011-2025, Simon J. Gerraty
Copyright (c) 2011-2017, Juniper Networks, Inc.
All rights reserved.
@@ -441,7 +441,7 @@ def parse(self, name=None, file=None):
# Bye bye
We go to some effort to avoid processing a dependency more than once.
Of the above record types only C,E,F,L,R,V and W are of interest.
Of the above record types only C,E,F,L,M,R,V,W and X are of interest.
"""
version = 0 # unknown
@@ -465,8 +465,8 @@ def parse(self, name=None, file=None):
if self.sb and self.name.startswith(self.sb):
error_name = self.name.replace(self.sb+'/','')
else:
error_name = self.name
interesting = '#CEFLRVX'
error_name = self.name
interesting = '#CEFLMRVX'
for line in f:
self.line += 1
# ignore anything we don't care about
@@ -475,6 +475,7 @@ def parse(self, name=None, file=None):
if self.debug > 2:
print("input:", line, end=' ', file=self.debug_out)
w = line.split()
wlen = len(w)
if skip:
if w[0] == 'V':
@@ -498,6 +499,23 @@ def parse(self, name=None, file=None):
if line.find('Bye') > 0:
eof_token = True
continue
else:
# before we go further check we have a sane number of args
# the Linux filemon module is rather unreliable.
if w[0] in 'LM':
elen = 4
elif w[0] == 'X':
# at least V4 on Linux does 3 args
if wlen == 3:
elen = 3
else:
elen = 4
else:
elen = 3
if self.debug > 2:
print('op={} elen={} wlen={} line="{}"'.format(w[0], elen, wlen, line.strip()), file=self.debug_out)
if wlen != elen:
raise AssertionError('corrupted filemon data: wrong number of words: expected {} got {} in: {}'.format(elen, wlen, line))
pid = int(w[1])
if pid != last_pid:
@@ -540,11 +558,11 @@ def parse(self, name=None, file=None):
print("seen:", w[2], file=self.debug_out)
continue
# file operations
if w[0] in 'ML':
if w[0] in 'LM':
# these are special, tread src as read and
# target as write
self.parse_path(w[2].strip("'"), cwd, 'R', w)
self.parse_path(w[3].strip("'"), cwd, 'W', w)
self.parse_path(w[2].strip("'"), cwd, 'R', w)
continue
elif w[0] in 'ERWS':
path = w[2]
@@ -611,9 +629,19 @@ def parse_path(self, path, cwd, op=None, w=[]):
return
# we don't want to resolve the last component if it is
# a symlink
path = resolve(path, cwd, self.last_dir, self.debug, self.debug_out)
if not path:
return
npath = resolve(path, cwd, self.last_dir, self.debug, self.debug_out)
if not npath:
if len(w) > 3 and w[0] in 'ML' and op == 'R' and path.startswith('../'):
# we already resolved the target of the M/L
# so it makes sense to try and resolve relative to that dir.
if os.path.isdir(self.last_path):
dir = self.last_path
else:
dir,junk = os.path.split(self.last_path)
npath = resolve(path, cwd, dir, self.debug, self.debug_out)
if not npath:
return
path = npath
dir,base = os.path.split(path)
if dir in self.seen:
if self.debug > 2:
@@ -631,6 +659,7 @@ def parse_path(self, path, cwd, op=None, w=[]):
rdir = None
# now put path back together
path = '/'.join([dir,base])
self.last_path = path
if self.debug > 1:
print("raw=%s rdir=%s dir=%s path=%s" % (w[2], rdir, dir, path), file=self.debug_out)
if op in 'RWS':
+42 -12
View File
@@ -49,8 +49,10 @@
# The output, is a set of absolute paths with "SB" like:
#.nf
#
# $SB/obj-i386/bsd/gnu/lib/csu
# $SB/obj-i386/bsd/gnu/lib/libgcc
# $SB/obj-i386/bsd/include
# $SB/obj-i386/bsd/lib/csu/i386
# $SB/obj-i386/bsd/lib/csu/i386-elf
# $SB/obj-i386/bsd/lib/libc
# $SB/src/bsd/include
# $SB/src/bsd/sys/i386/include
@@ -75,10 +77,11 @@
# RCSid:
# $Id: meta2deps.sh,v 1.21 2024/02/17 17:26:57 sjg Exp $
# $Id: meta2deps.sh,v 1.26 2025/12/08 17:34:02 sjg Exp $
# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2011-2025, Simon J. Gerraty
# Copyright (c) 2010-2013, Juniper Networks, Inc.
# All rights reserved.
#
@@ -103,6 +106,10 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
case ",$DEBUG_SH," in
*,meta2deps*) set -x;;
esac
meta2src() {
cat /dev/null "$@" |
sed -n '/^R .*\.[chyl]$/s,^..[0-9]* ,,p' |
@@ -248,13 +255,31 @@ meta2deps() {
;;
*) cat /dev/null "$@";;
esac 2> /dev/null |
sed -e 's,^CWD,C C,;/^[#CREFLMVX] /!d' -e "s,',,g" |
sed -e 's,^CWD,C C,;/^[#CREFLMVWX] /!d' -e "s,',,g" |
$_excludes | ( version=no epids= xpids= eof_token=no
while read op pid path junk
while read op pid path path2
do
: op=$op pid=$pid path=$path
: op=$op pid=$pid path=$path path2=$path2
# first a sanity check - filemon on Linux is not very reliable
# path2 should only be non-empty for op L or M
# and it should not contain spaces.
# It will also be non-empty for # Meta line
# which tells us which meta_file we are processing
case "$op,$path2" in
\#*,*.meta) # new file, reset some vars
version=no epids= xpids= eof_token=no lpid=
meta_file=`set -- $path2; echo $2`
continue
;;
\#*) ;; # ok
[LM],) error "missing path2 in: '$op $pid $path'";;
[LMX],*" "*) error "wrong number of words in: '$op $pid $path $path2'";;
*,|[LMX],*) ;; # ok
*) error "wrong number of words in: '$op $pid $path $path2'";;
esac
# we track cwd and ldir (of interest) per pid
# CWD is bmake's cwd
: lpid=$lpid,pid=$pid
case "$lpid,$pid" in
,C) CWD=$path cwd=$path ldir=$path
if [ -z "$SB" ]; then
@@ -263,13 +288,13 @@ meta2deps() {
SRCTOP=${SRCTOP:-$SB/src}
case "$verion" in
no) ;; # ignore
0) error "no filemon data";;
0) error "no filemon data: $meta_file";;
*) ;;
esac
version=0
case "$eof_token" in
no) ;; # ignore
0) error "truncated filemon data";;
0) error "truncated filemon data: $meta_file";;
esac
eof_token=0
continue
@@ -319,9 +344,14 @@ meta2deps() {
$src_re|$obj_re) ;;
/*/stage/*) ;;
/*) continue;;
*) for path in $ldir/$path $cwd/$path
*)
rlist="$ldir/$path $cwd/$path"
case "$op,$path" in
[ML],../*) rlist="$rlist $path2/$path `dirname $path2`/$path";;
esac
for path in $rlist
do
test -e $path && break
test -e $path && break
done
dir=${path%/*}
;;
@@ -406,18 +436,18 @@ meta2deps() {
done > $tf.dirdep
: version=$version
case "$version" in
0) error "no filemon data";;
0) error "no filemon data: $meta_file";;
esac
: eof_token=$eof_token
case "$eof_token" in
0) error "truncated filemon data";;
0) error "truncated filemon data: $meta_file";;
esac
for p in $epids
do
: p=$p
case " $xpids " in
*" $p "*) ;;
*) error "missing eXit for pid $p";;
*) error "missing eXit for pid $p: $meta_file";;
esac
done ) || exit 1
_nl=echo
+2 -7
View File
@@ -37,18 +37,13 @@
#
# RCSid:
# $Id: stage-install.sh,v 1.11 2024/02/17 17:26:57 sjg Exp $
# $Id: stage-install.sh,v 1.12 2025/08/09 22:42:24 sjg Exp $
#
# SPDX-License-Identifier: BSD-2-Clause
#
# @(#) Copyright (c) 2013-2020, Simon J. Gerraty
#
# This file is provided in the hope that it will
# be of use. There is absolutely NO WARRANTY.
# Permission to copy, redistribute or otherwise
# use this file is hereby granted provided that
# the above copyright notice and this notice are
# left intact.
# SPDX-License-Identifier: BSD-2-Clause
#
# Please send copies of changes and bug-fixes to:
# sjg@crufty.net
+2 -9
View File
@@ -1,15 +1,8 @@
# SPDX-License-Identifier: BSD-2-Clause
#
# $Id: sys.dependfile.mk,v 1.11 2024/02/17 17:26:57 sjg Exp $
# $Id: sys.dependfile.mk,v 1.12 2025/08/09 22:42:24 sjg Exp $
#
# @(#) Copyright (c) 2012-2023, Simon J. Gerraty
#
# This file is provided in the hope that it will
# be of use. There is absolutely NO WARRANTY.
# Permission to copy, redistribute or otherwise
# use this file is hereby granted provided that
# the above copyright notice and this notice are
# left intact.
# SPDX-License-Identifier: BSD-2-Clause
#
# Please send copies of changes and bug-fixes to:
# sjg@crufty.net
+2 -9
View File
@@ -1,15 +1,8 @@
# SPDX-License-Identifier: BSD-2-Clause
#
# $Id: sys.dirdeps.mk,v 1.15 2024/04/18 17:18:31 sjg Exp $
# $Id: sys.dirdeps.mk,v 1.16 2025/08/09 22:42:24 sjg Exp $
#
# @(#) Copyright (c) 2012-2023, Simon J. Gerraty
#
# This file is provided in the hope that it will
# be of use. There is absolutely NO WARRANTY.
# Permission to copy, redistribute or otherwise
# use this file is hereby granted provided that
# the above copyright notice and this notice are
# left intact.
# SPDX-License-Identifier: BSD-2-Clause
#
# Please send copies of changes and bug-fixes to:
# sjg@crufty.net
+3
View File
@@ -314,6 +314,9 @@ __MAKE_SHELL?=/bin/sh
path=${__MAKE_SHELL}
.endif
# We expect .SHELL to be POSIX
isPOSIX_SHELL?= :
# Hack for ports compatibility. Historically, ports makefiles have
# assumed they can examine MACHINE_CPU without including anything
# because this was automatically included in sys.mk. For /usr/src,