Update dirdeps.mk et al

bmake-20240309 includes updates to dirdeps and meta mode makefiles
This commit is contained in:
Simon J. Gerraty 2024-03-13 22:51:08 -07:00
parent 3ff501040b
commit f974ced38a
11 changed files with 81 additions and 41 deletions

View file

@ -1,4 +1,6 @@
# $Id: dirdeps-options.mk,v 1.21 2022/09/06 22:18:45 sjg Exp $
# SPDX-License-Identifier: BSD-2-Clause
#
# $Id: dirdeps-options.mk,v 1.22 2024/02/17 17:26:57 sjg Exp $
#
# @(#) Copyright (c) 2018-2022, Simon J. Gerraty
#

View file

@ -1,5 +1,7 @@
# SPDX-License-Identifier: BSD-2-Clause
#
# RCSid:
# $Id: dirdeps-targets.mk,v 1.25 2023/05/11 05:07:28 sjg Exp $
# $Id: dirdeps-targets.mk,v 1.27 2024/02/25 19:12:13 sjg Exp $
#
# @(#) Copyright (c) 2019-2020 Simon J. Gerraty
#
@ -40,6 +42,9 @@
# pickup customizations
.-include <local.dirdeps-targets.mk>
# this is what we are here for
.MAIN: dirdeps
# for DIRDEPS_BUILD this is how we prime the pump
# include . to allow any directory to work as a target
DIRDEPS_TARGETS_DIRS ?= targets targets/pseudo

View file

@ -1,4 +1,4 @@
# $Id: dirdeps.mk,v 1.162 2023/05/15 17:37:46 sjg Exp $
# $Id: dirdeps.mk,v 1.166 2024/01/05 23:16:34 sjg Exp $
# SPDX-License-Identifier: BSD-2-Clause
#
@ -155,7 +155,7 @@
# if any test fails, but without the risk of introducing
# circular dependencies.
now_utc ?= ${%s:L:gmtime}
now_utc ?= ${%s:L:localtime}
.if !defined(start_utc)
start_utc := ${now_utc}
.endif
@ -415,6 +415,8 @@ DIRDEPS_FILTER += M${_DEP_RELDIR}
# this is what we run below
DIRDEP_MAKE ?= ${.MAKE}
DIRDEP_DIR ?= ${.TARGET:R}
# we normally want the default target
DIRDEP_TARGETS ?=
# if you want us to report load averages during build
# DIRDEP_USE_PRELUDE += ${DIRDEP_LOADAVG_REPORT};
@ -442,7 +444,7 @@ _DIRDEP_USE: .USE .MAKE
MACHINE_ARCH= NO_SUBDIR=1 ${DIRDEP_USE_ENV} \
TARGET_SPEC=${.TARGET:E} \
MACHINE=${.TARGET:E} \
${DIRDEP_MAKE} -C ${DIRDEP_DIR} || exit 1; \
${DIRDEP_MAKE} -C ${DIRDEP_DIR} ${DIRDEP_TARGETS} || exit 1; \
break; \
done
@ -680,7 +682,7 @@ _build_dirs += ${_machines:@m@${_CURDIR}.$m@}
.if ${_debug_reldir}
.info ${DEP_RELDIR}.${DEP_TARGET_SPEC}: nDIRDEPS=${DIRDEPS:[#]}
.info ${DEP_RELDIR}.${DEP_TARGET_SPEC}: DIRDEPS='${DIRDEPS}'
.info ${DEP_RELDIR}.${DEP_TARGET_SPEC}: DIRDEPS=${DIRDEPS:${DEBUG_DIRDEPS_LIST_FILTER:U:N/:ts:}}
.info ${DEP_RELDIR}.${DEP_TARGET_SPEC}: _machines='${_machines}'
.endif
@ -712,9 +714,9 @@ __qual_depdirs += ${__hostdpadd}
.if ${_debug_reldir}
.info DEP_DIRDEPS_FILTER=${DEP_DIRDEPS_FILTER:ts:}
.info depdirs=${__depdirs:S,^${SRCTOP}/,,}
.info qualified=${__qual_depdirs:S,^${SRCTOP}/,,}
.info unqualified=${__unqual_depdirs:S,^${SRCTOP}/,,}
.info depdirs=${__depdirs:S,^${SRCTOP}/,,:${DEBUG_DIRDEPS_LIST_FILTER:U:N/:ts:}}
.info qualified=${__qual_depdirs:S,^${SRCTOP}/,,:${DEBUG_DIRDEPS_LIST_FILTER:U:N/:ts:}}
.info unqualified=${__unqual_depdirs:S,^${SRCTOP}/,,:${DEBUG_DIRDEPS_LIST_FILTER:U:N/:ts:}}
.endif
# _build_dirs is what we will feed to _DIRDEP_USE
@ -726,14 +728,14 @@ _build_dirs += \
# qualify everything now
.if ${_debug_reldir}
.info _build_dirs=${_build_dirs}
.info _build_dirs=${_build_dirs:${DEBUG_DIRDEPS_LIST_FILTER:U:N/:ts:}}
.endif
# make sure we do not mess with qualifying "host" entries
_build_dirs := ${_build_dirs:M*.host*:${M_dep_qual_fixes.host:ts:}} \
${_build_dirs:N*.host*:${M_dep_qual_fixes:ts:}}
_build_dirs := ${_build_dirs:O:u}
.if ${_debug_reldir}
.info _build_dirs=${_build_dirs}
.info _build_dirs=${_build_dirs:${DEBUG_DIRDEPS_LIST_FILTER:U:N/:ts:}}
.endif
.endif # empty DIRDEPS
@ -752,7 +754,6 @@ _cache_script = echo '\# ${DEP_RELDIR}.${DEP_TARGET_SPEC}';
# guard against _new_dirdeps being too big for a single command line
_new_dirdeps := ${_build_all_dirs:@x@${target($x):?:$x}@:S,^${SRCTOP}/,,}
_cache_xtra_deps := ${_build_xtra_dirs:S,^${SRCTOP}/,,}
.export _cache_xtra_deps _new_dirdeps
.if !empty(DIRDEPS_EXPORT_VARS) || !empty(DEP_EXPORT_VARS)
# Discouraged, but there are always exceptions.
# Handle it here rather than explain how.
@ -767,7 +768,7 @@ dirdeps: ${_build_all_dirs}
${_build_all_dirs}: _DIRDEP_USE
.if ${_debug_reldir}
.info ${DEP_RELDIR}.${DEP_TARGET_SPEC}: needs: ${_build_dirs:S,^${SRCTOP}/,,}
.info ${DEP_RELDIR}.${DEP_TARGET_SPEC}: needs: ${_build_dirs:S,^${SRCTOP}/,,:${DEBUG_DIRDEPS_LIST_FILTER:U:N/:ts:}}
.endif
.if !empty(DIRDEPS_EXPORT_VARS) || !empty(DEP_EXPORT_VARS)
@ -802,15 +803,27 @@ ${_this_dir}.$m: ${_build_dirs:M*.$q}
.if ${BUILD_DIRDEPS_CACHE} == "yes"
.if !empty(_build_dirs)
_cache_deps += ${_build_dirs:M*.$m:N${_this_dir}.$m:S,^${SRCTOP}/,,}
# anything in _{build,env}_xtra_dirs is hooked to dirdeps: only
.if ${MAKE_VERSION} < 20240105
.if !empty(_cache_deps)
.export _cache_deps
_cache_script += for x in $$_cache_deps; do echo " _{SRCTOP}/$$x \\"; done;
.endif
# anything in _{build,env}_xtra_dirs is hooked to dirdeps: only
.export _cache_xtra_deps _new_dirdeps
x!= echo; { echo; ${_cache_script} echo; echo '${_this_dir}.$m: $${DIRDEPS.${_this_dir}.$m}'; \
echo; echo 'dirdeps: ${_this_dir}.$m \'; \
for x in $$_cache_xtra_deps; do echo " _{SRCTOP}/$$x \\"; done; \
echo; for x in $$_new_dirdeps; do echo "_{SRCTOP}/$$x: _DIRDEP_USE"; done; } >&3
.else
# we do not have the same limits on command lines
.if !empty(_cache_deps)
_cache_script += for x in ${_cache_deps}; do echo " _{SRCTOP}/$$x \\"; done;
.endif
x!= echo; { echo; ${_cache_script} echo; echo '${_this_dir}.$m: $${DIRDEPS.${_this_dir}.$m}'; \
echo; echo 'dirdeps: ${_this_dir}.$m \'; \
for x in ${_cache_xtra_deps}; do echo " _{SRCTOP}/$$x \\"; done; \
echo; for x in ${_new_dirdeps}; do echo "_{SRCTOP}/$$x: _DIRDEP_USE"; done; } >&3
.endif
.endif
.else
${_this_dir}.$m: ${_build_dirs:M*.$m:N${_this_dir}.$m}

View file

@ -7,10 +7,6 @@ UPDATE_DEPENDFILE= no
.endif
.endif
NOSSPPICO?= .nossppico
PIEO?= .pieo
OBJ_EXTENSIONS+= ${NOSSPPICO} ${PIEO}
CLEANFILES+= .depend
# handy for debugging

View file

@ -1,4 +1,6 @@
# $Id: meta.autodep.mk,v 1.59 2023/08/19 17:35:32 sjg Exp $
# SPDX-License-Identifier: BSD-2-Clause
#
# $Id: meta.autodep.mk,v 1.62 2024/02/17 17:26:57 sjg Exp $
#
# @(#) Copyright (c) 2010, Simon J. Gerraty
@ -24,16 +26,16 @@ PICO?= .pico
.if defined(SRCS)
.if ${MAKE_VERSION:U0} >= 20211212
OBJ_EXTENSIONS += ${.SUFFIXES:M*o}
OBJ_SUFFIXES += ${.SUFFIXES:M*o}
.else
# it would be nice to be able to query .SUFFIXES
OBJ_EXTENSIONS += .o .po .lo ${PICO}
OBJ_SUFFIXES += .o .po .lo ${PICO}
.endif
# explicit dependencies help short-circuit .SUFFIX searches
SRCS_DEP_FILTER+= N*.[hly]
.for s in ${SRCS:${SRCS_DEP_FILTER:O:u:ts:}}
.for e in ${OBJ_EXTENSIONS:O:u}
.for e in ${OBJ_SUFFIXES:O:u}
.if !target(${s:T:R}$e)
${s:T:R}$e: $s
.endif
@ -190,7 +192,7 @@ DEPEND_SUFFIXES += .c .h .cpp .hpp .cxx .hxx .cc .hh
@case "${.MAKE.META.FILES:T:M*.po.*}" in \
*.po.*) mv $@.${.MAKE.PID} $@;; \
*) { cat $@.${.MAKE.PID}; \
sed ${OBJ_EXTENSIONS:N.o:N.po:@o@-e 's,\$o:,.o:,'@} \
sed ${OBJ_SUFFIXES:N.o:N.po:@o@-e 's,\$o:,.o:,'@} \
-e 's,\.o:,.po:,' $@.${.MAKE.PID}; } | sort -u > $@; \
rm -f $@.${.MAKE.PID};; \
esac
@ -305,7 +307,7 @@ ${_DEPENDFILE}: .PRECIOUS
CLEANFILES += *.meta filemon.* *.db
# these make it easy to gather some stats
now_utc = ${%s:L:localtime}
now_utc ?= ${%s:L:localtime}
start_utc := ${now_utc}
meta_stats= meta=${empty(.MAKE.META.FILES):?0:${.MAKE.META.FILES:[#]}} \
@ -331,4 +333,6 @@ _reldir_failed: .NOMETA
.ERROR: _reldir_failed
.endif
.-include <ccm.dep.mk>
.endif

View file

@ -1,4 +1,6 @@
# $Id: meta.stage.mk,v 1.67 2023/04/17 01:22:10 sjg Exp $
# SPDX-License-Identifier: BSD-2-Clause
#
# $Id: meta.stage.mk,v 1.69 2024/02/17 17:26:57 sjg Exp $
#
# @(#) Copyright (c) 2011-2017, Simon J. Gerraty
#
@ -212,7 +214,7 @@ stage_files.$s: .dirdep
STAGE_FILES ?= ${.ALLSRC:N.dirdep:Nstage_*}
stage_files: .dirdep
.endif
@${STAGE_FILE_SCRIPT}; StageFiles ${FLAGS.$@} ${STAGE_FILES_DIR.$s:U${STAGE_DIR.$s}:${STAGE_DIR_FILTER}} ${STAGE_FILES.$s:O}
@${STAGE_FILE_SCRIPT}; StageFiles ${FLAGS.$@:U} ${STAGE_FILES_DIR.$s:U${STAGE_DIR.$s}:${STAGE_DIR_FILTER}} ${STAGE_FILES.$s:O}
@touch $@
.endif
.endif

View file

@ -1,4 +1,6 @@
# $Id: meta.subdir.mk,v 1.13 2021/01/05 22:24:37 sjg Exp $
# SPDX-License-Identifier: BSD-2-Clause
#
# $Id: meta.subdir.mk,v 1.14 2024/02/17 17:26:57 sjg Exp $
#
# @(#) Copyright (c) 2010, Simon J. Gerraty

View file

@ -1,4 +1,6 @@
# $Id: meta.sys.mk,v 1.51 2023/05/11 20:05:32 sjg Exp $
# SPDX-License-Identifier: BSD-2-Clause
#
# $Id: meta.sys.mk,v 1.54 2024/03/10 15:53:51 sjg Exp $
#
# @(#) Copyright (c) 2010-2023, Simon J. Gerraty
@ -82,6 +84,7 @@ META2DEPS := ${META2DEPS}
MAKE_PRINT_VAR_ON_ERROR += \
.ERROR_TARGET \
.ERROR_EXIT \
.ERROR_META_FILE \
.MAKE.LEVEL \
MAKEFILE \
@ -98,10 +101,13 @@ SB = ${SRCTOP:H}
ERROR_LOGDIR ?= ${SB}/error
meta_error_log = ${ERROR_LOGDIR}/meta-${.MAKE.PID}.log
# we are not interested in make telling us a failure happened elsewhere
.ERROR: _metaError
# We are interested here in the target(s) that caused the build to fail.
# We want to ignore targets that were "aborted" due to failure
# elsewhere per the message below or a sub-make may just exit 6.
_metaError: .NOMETA .NOTMAIN
-@[ "${.ERROR_META_FILE}" ] && { \
-@[ ${.ERROR_EXIT:U0} = 6 ] && exit 0; \
[ "${.ERROR_META_FILE}" ] && { \
grep -q 'failure has been detected in another branch' ${.ERROR_META_FILE} && exit 0; \
mkdir -p ${meta_error_log:H}; \
cp ${.ERROR_META_FILE} ${meta_error_log}; \

View file

@ -36,8 +36,10 @@
"""
"""
SPDX-License-Identifier: BSD-2-Clause
RCSid:
$Id: meta2deps.py,v 1.45 2023/01/18 01:35:24 sjg Exp $
$Id: meta2deps.py,v 1.47 2024/02/17 17:26:57 sjg Exp $
Copyright (c) 2011-2020, Simon J. Gerraty
Copyright (c) 2011-2017, Juniper Networks, Inc.
@ -74,8 +76,10 @@
def resolve(path, cwd, last_dir=None, debug=0, debug_out=sys.stderr):
"""
Return an absolute path, resolving via cwd or last_dir if needed.
Cleanup any leading ``./`` and trailing ``/.``
"""
if path.endswith('/.'):
while path.endswith('/.'):
path = path[0:-2]
if len(path) > 0 and path[0] == '/':
if os.path.exists(path):
@ -86,7 +90,9 @@ def resolve(path, cwd, last_dir=None, debug=0, debug_out=sys.stderr):
if path == '.':
return cwd
if path.startswith('./'):
return cwd + path[1:]
while path.startswith('./'):
path = path[1:]
return cwd + path
if last_dir == cwd:
last_dir = None
for d in [last_dir, cwd]:
@ -144,6 +150,7 @@ def abspath(path, cwd, last_dir=None, debug=0, debug_out=sys.stderr):
return None
if (path.find('/') < 0 or
path.find('./') > 0 or
path.find('/../') > 0 or
path.endswith('/..')):
path = cleanpath(path)
return path
@ -197,7 +204,7 @@ class MetaFile:
def __init__(self, name, conf={}):
"""if name is set we will parse it now.
conf can have the following keys:
conf can have the follwing keys:
SRCTOPS list of tops of the src tree(s).

View file

@ -49,10 +49,8 @@
# 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-elf
# $SB/obj-i386/bsd/lib/csu/i386
# $SB/obj-i386/bsd/lib/libc
# $SB/src/bsd/include
# $SB/src/bsd/sys/i386/include
@ -77,8 +75,10 @@
# RCSid:
# $Id: meta2deps.sh,v 1.20 2023/01/18 01:35:24 sjg Exp $
# $Id: meta2deps.sh,v 1.21 2024/02/17 17:26:57 sjg Exp $
# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (c) 2010-2013, Juniper Networks, Inc.
# All rights reserved.
#

View file

@ -1,4 +1,6 @@
# $Id: sys.dirdeps.mk,v 1.12 2023/05/14 16:16:03 sjg Exp $
# SPDX-License-Identifier: BSD-2-Clause
#
# $Id: sys.dirdeps.mk,v 1.14 2024/02/25 19:12:13 sjg Exp $
#
# @(#) Copyright (c) 2012-2023, Simon J. Gerraty
#
@ -31,9 +33,10 @@ _PARSEDIR ?= ${.PARSEDIR:tA}
.if ${.MAKE.LEVEL} == 0
# make sure dirdeps target exists and do it first
# init.mk will set .MAIN to 'dirdeps' if appropriate
# as will dirdeps-targets.mk for top-level builds.
# This allows a Makefile to have more control.
dirdeps:
# first .MAIN is what counts
.MAIN: dirdeps
.NOPATH: dirdeps
all: dirdeps .WAIT
.endif