diff --git a/mk2rbc/mk2rbc.go b/mk2rbc/mk2rbc.go index 212b7f658..c881751d7 100644 --- a/mk2rbc/mk2rbc.go +++ b/mk2rbc/mk2rbc.go @@ -1376,7 +1376,7 @@ func (p *myDirCallParser) parse(ctx *parseContext, node mkparser.Node, args *mkp if !args.Empty() { return ctx.newBadExpr(node, "my-dir function cannot have any arguments passed to it.") } - return &variableRefExpr{ctx.addVariable("LOCAL_PATH"), true} + return &stringLiteralExpr{literal: filepath.Dir(ctx.script.mkFile)} } type isProductInListCallParser struct{} diff --git a/mk2rbc/mk2rbc_test.go b/mk2rbc/mk2rbc_test.go index 1aca983d6..31739fa98 100644 --- a/mk2rbc/mk2rbc_test.go +++ b/mk2rbc/mk2rbc_test.go @@ -1459,6 +1459,19 @@ def init(g, handle): g["MY_VAR_4"] = "foo" _my_local_var_with_dashes = ["foo"] g["MY_STRING_VAR"] = " ".join(rblf.expand_wildcard("foo/bar.mk")) +`, + }, + { + desc: "Set LOCAL_PATH to my-dir", + mkname: "product.mk", + in: ` +LOCAL_PATH := $(call my-dir) +`, + expected: `load("//build/make/core:product_config.rbc", "rblf") + +def init(g, handle): + cfg = rblf.cfg(handle) + `, }, } diff --git a/mk2rbc/variable.go b/mk2rbc/variable.go index 506266a29..be1b17428 100644 --- a/mk2rbc/variable.go +++ b/mk2rbc/variable.go @@ -319,15 +319,13 @@ func (ctx *parseContext) addVariable(name string) variable { v = &localVariable{baseVariable{nam: name, typ: hintType}} } else { vt := hintType - if strings.HasPrefix(name, "LOCAL_") && vt == starlarkTypeUnknown { - // Heuristics: local variables that contribute to corresponding config variables - if cfgVarName, found := localProductConfigVariables[name]; found { - vi, found2 := KnownVariables[cfgVarName] - if !found2 { - panic(fmt.Errorf("unknown config variable %s for %s", cfgVarName, name)) - } - vt = vi.valueType + // Heuristics: local variables that contribute to corresponding config variables + if cfgVarName, found := localProductConfigVariables[name]; found && vt == starlarkTypeUnknown { + vi, found2 := KnownVariables[cfgVarName] + if !found2 { + panic(fmt.Errorf("unknown config variable %s for %s", cfgVarName, name)) } + vt = vi.valueType } if strings.HasSuffix(name, "_LIST") && vt == starlarkTypeUnknown { // Heuristics: Variables with "_LIST" suffix are lists