From 5d5fcc3092997fe5b528d6ab519b244ea8e99a6d Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Tue, 26 Apr 2022 18:02:05 -0700 Subject: [PATCH] Ignore assignments to .KATI_READONLY Since the rbc results file is sorted, .KATI_READONLY ends up trying to make a variable that hasn't been defined yet readonly, which is an error. It's not really worth supporting moving it down in the list, because it wouldn't affect the variable being writable while still in Starlark code. Bug: 226974242 Test: go test Change-Id: I9402f69be97e5c7cf010ad86f124422ea55fda7f --- mk2rbc/mk2rbc.go | 6 ++++++ mk2rbc/mk2rbc_test.go | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/mk2rbc/mk2rbc.go b/mk2rbc/mk2rbc.go index 8f4fea4b1..4d777a05c 100644 --- a/mk2rbc/mk2rbc.go +++ b/mk2rbc/mk2rbc.go @@ -542,6 +542,12 @@ func (ctx *parseContext) handleAssignment(a *mkparser.Assignment) []starlarkNode if strings.HasPrefix(name, "override ") { return []starlarkNode{ctx.newBadNode(a, "cannot handle override directive")} } + if name == ".KATI_READONLY" { + // Skip assignments to .KATI_READONLY. If it was in the output file, it + // would be an error because it would be sorted before the definition of + // the variable it's trying to make readonly. + return []starlarkNode{} + } // Soong configuration if strings.HasPrefix(name, soongNsPrefix) { diff --git a/mk2rbc/mk2rbc_test.go b/mk2rbc/mk2rbc_test.go index de7512927..1287cfd16 100644 --- a/mk2rbc/mk2rbc_test.go +++ b/mk2rbc/mk2rbc_test.go @@ -1527,6 +1527,20 @@ def init(g, handle): cfg["PRODUCT_COPY_FILES"] += ("foo/bar/%s:%s/etc/%s" % (x, g.get("TARGET_COPY_OUT_VENDOR", ""), x)).split() if g.get("MY_OTHER_VAR", ""): cfg["PRODUCT_COPY_FILES"] += ("%s:foo/bar/%s" % (g.get("MY_OTHER_VAR", ""), x)).split() +`, + }, + { + desc: ".KATI_READONLY", + mkname: "product.mk", + in: ` +MY_VAR := foo +.KATI_READONLY := MY_VAR +`, + expected: `load("//build/make/core:product_config.rbc", "rblf") + +def init(g, handle): + cfg = rblf.cfg(handle) + g["MY_VAR"] = "foo" `, }, }