summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeah Rowe <leah@libreboot.org>2026-09-24 07:01:32 +0100
committerLeah Rowe <leah@libreboot.org>2026-09-24 07:09:13 +0100
commit4b4fa831bba05202b94b18b5ff729ac935471144 (patch)
tree083d11de5ca50ce252252dfb7ca438db9a903e43
parent1e78a7f4e4faace87b673edf775c8568350351c5 (diff)
mk: infinite tree loop detection
Signed-off-by: Leah Rowe <leah@libreboot.org>
-rwxr-xr-xmk14
1 files changed, 12 insertions, 2 deletions
diff --git a/mk b/mk
index 48ab08d3..0e42ca62 100755
--- a/mk
+++ b/mk
@@ -89,7 +89,7 @@ eval "`newvar if_not_make_config if_not_build if_not_dry_build if_not_fetch`"
cfgvars="autogenargs cmakedir configureargs badhash badtghash bootstrapargs \
build_depend cleanargs fetch_depend makeargs mkhelper noconfig postmake \
premake release rev tree xarch xgcctree xlang cfgname defscan \
- if_not_skip_build cook_config"
+ if_not_skip_build cook_config seen"
eval "`newvar buildcfg dest_dir elfdir flag forcepull listfile mdir \
mkhelpercfg mode project srcdir target target_dir _tcfg \
@@ -260,6 +260,17 @@ try_target_config()
eval "`newvar rev tree`"
. "$_tcfg" || err "Can't read '$_tcfg'" configure_target "$@"
+
+ _tname="${_tcfg%/*}"
+ _tname="${_tname##*/}"
+
+ for loopvar in $seen; do
+ [ "$loopvar" = "$_tname" ] && \
+ err "$project/$target: infinite tree loop"
+ done
+
+ seen="$seen $_tname"
+
if [ -n "$rev" ] && [ -z "$tree" ]; then
# this makes setting tree= optional on configless projects
tree="${_tcfg%/target.cfg}"
@@ -280,7 +291,6 @@ try_target_config()
# projects can specify which other projects
# to build first, as declared dependencies:
-# TODO: detect infinite loops
mk_dependencies()
{
bdf="${1-}"