diff --git a/mk2rbc/mk2rbc.go b/mk2rbc/mk2rbc.go index 7c1176ba6..74053fefb 100644 --- a/mk2rbc/mk2rbc.go +++ b/mk2rbc/mk2rbc.go @@ -807,20 +807,16 @@ func (ctx *parseContext) handleSubConfig( if len(matchingPaths) > maxMatchingFiles { return []starlarkNode{ctx.newBadNode(v, "there are >%d files matching the pattern, please rewrite it", maxMatchingFiles)} } - if len(matchingPaths) == 1 { - res := inheritedStaticModule{ctx.newDependentModule(matchingPaths[0], loadAlways && ctx.ifNestLevel == 0), loadAlways} - return []starlarkNode{processModule(res)} - } else { - needsWarning := pathPattern[0] == "" && len(ctx.includeTops) == 0 - res := inheritedDynamicModule{*varPath, []*moduleInfo{}, loadAlways, ctx.errorLocation(v), needsWarning} - for _, p := range matchingPaths { - // A product configuration files discovered dynamically may attempt to inherit - // from another one which does not exist in this source tree. Prevent load errors - // by always loading the dynamic files as optional. - res.candidateModules = append(res.candidateModules, ctx.newDependentModule(p, true)) - } - return []starlarkNode{processModule(res)} + + needsWarning := pathPattern[0] == "" && len(ctx.includeTops) == 0 + res := inheritedDynamicModule{*varPath, []*moduleInfo{}, loadAlways, ctx.errorLocation(v), needsWarning} + for _, p := range matchingPaths { + // A product configuration files discovered dynamically may attempt to inherit + // from another one which does not exist in this source tree. Prevent load errors + // by always loading the dynamic files as optional. + res.candidateModules = append(res.candidateModules, ctx.newDependentModule(p, true)) } + return []starlarkNode{processModule(res)} } func (ctx *parseContext) findMatchingPaths(pattern []string) []string { diff --git a/mk2rbc/mk2rbc_test.go b/mk2rbc/mk2rbc_test.go index a162021b4..55d48ff54 100644 --- a/mk2rbc/mk2rbc_test.go +++ b/mk2rbc/mk2rbc_test.go @@ -1081,7 +1081,13 @@ load("//vendor/foo1:cfg.star|init", _cfg_init = "init") def init(g, handle): cfg = rblf.cfg(handle) g["MY_PATH"] = "foo" - rblf.inherit(handle, "vendor/foo1/cfg", _cfg_init) + _entry = { + "vendor/foo1/cfg.mk": ("vendor/foo1/cfg", _cfg_init), + }.get("%s/cfg.mk" % g["MY_PATH"]) + (_varmod, _varmod_init) = _entry if _entry else (None, None) + if not _varmod_init: + rblf.mkerror("product.mk", "Cannot find %s" % ("%s/cfg.mk" % g["MY_PATH"])) + rblf.inherit(handle, _varmod, _varmod_init) `, }, { @@ -1101,8 +1107,20 @@ load("//vendor/foo1:cfg.star|init", _cfg_init = "init") def init(g, handle): cfg = rblf.cfg(handle) g["MY_PATH"] = "foo" - rblf.inherit(handle, "vendor/foo1/cfg", _cfg_init) - rblf.inherit(handle, "vendor/foo1/cfg", _cfg_init) + _entry = { + "vendor/foo1/cfg.mk": ("vendor/foo1/cfg", _cfg_init), + }.get("%s/cfg.mk" % g["MY_PATH"]) + (_varmod, _varmod_init) = _entry if _entry else (None, None) + if not _varmod_init: + rblf.mkerror("product.mk", "Cannot find %s" % ("%s/cfg.mk" % g["MY_PATH"])) + rblf.inherit(handle, _varmod, _varmod_init) + _entry = { + "vendor/foo1/cfg.mk": ("vendor/foo1/cfg", _cfg_init), + }.get("%s/cfg.mk" % g["MY_PATH"]) + (_varmod, _varmod_init) = _entry if _entry else (None, None) + if not _varmod_init: + rblf.mkerror("product.mk", "Cannot find %s" % ("%s/cfg.mk" % g["MY_PATH"])) + rblf.inherit(handle, _varmod, _varmod_init) `, }, { @@ -1126,9 +1144,21 @@ load("//bar:font.star|init", _font1_init = "init") def init(g, handle): cfg = rblf.cfg(handle) - rblf.inherit(handle, "foo/font", _font_init) + _entry = { + "foo/font.mk": ("foo/font", _font_init), + }.get("%s/font.mk" % g.get("MY_VAR", "")) + (_varmod, _varmod_init) = _entry if _entry else (None, None) + if not _varmod_init: + rblf.mkerror("product.mk", "Cannot find %s" % ("%s/font.mk" % g.get("MY_VAR", ""))) + rblf.inherit(handle, _varmod, _varmod_init) # There's some space and even this comment between the include_top and the inherit-product - rblf.inherit(handle, "foo/font", _font_init) + _entry = { + "foo/font.mk": ("foo/font", _font_init), + }.get("%s/font.mk" % g.get("MY_VAR", "")) + (_varmod, _varmod_init) = _entry if _entry else (None, None) + if not _varmod_init: + rblf.mkerror("product.mk", "Cannot find %s" % ("%s/font.mk" % g.get("MY_VAR", ""))) + rblf.inherit(handle, _varmod, _varmod_init) rblf.mkwarning("product.mk:11", "Please avoid starting an include path with a variable. See https://source.android.com/setup/build/bazel/product_config/issues/includes for details.") _entry = { "foo/font.mk": ("foo/font", _font_init),