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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user