Merge "Remove ?= assignements to product variables" into main am: cbe61221b6 am: 07829d80db

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2779549

Change-Id: I77c1831722277b3eb732e8ac459820d6c9d47b83
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot 2023-10-09 23:56:34 +00:00 committed by Automerger Merge Worker
commit 0ed4cb5708
3 changed files with 20 additions and 20 deletions

View file

@ -635,6 +635,13 @@ func (ctx *parseContext) handleAssignment(a *mkparser.Assignment) []starlarkNode
case "+=":
asgn.flavor = asgnAppend
case "?=":
if _, ok := lhs.(*productConfigVariable); ok {
// Make sets all product configuration variables to empty strings before running product
// config makefiles. ?= will have no effect on a variable that has been assigned before,
// even if assigned to an empty string. So just skip emitting any code for this
// assignment.
return nil
}
asgn.flavor = asgnMaybeSet
default:
panic(fmt.Errorf("unexpected assignment type %s", a.Type))

View file

@ -923,8 +923,6 @@ def init(g, handle):
cfg["PRODUCT_LIST2"] += ["a"]
cfg["PRODUCT_LIST1"] += ["b"]
cfg["PRODUCT_LIST2"] += ["b"]
if cfg.get("PRODUCT_LIST3") == None:
cfg["PRODUCT_LIST3"] = ["a"]
cfg["PRODUCT_LIST1"] = ["c"]
g.setdefault("PLATFORM_LIST", [])
g["PLATFORM_LIST"] += ["x"]
@ -966,9 +964,10 @@ PRODUCT_LIST1 = a $(PRODUCT_LIST1)
PRODUCT_LIST2 ?= a $(PRODUCT_LIST2)
PRODUCT_LIST3 += a
# Now doing them again should not have a setdefault because they've already been set
# Now doing them again should not have a setdefault because they've already been set, except 2
# which did not emit an assignment before
PRODUCT_LIST1 = a $(PRODUCT_LIST1)
PRODUCT_LIST2 ?= a $(PRODUCT_LIST2)
PRODUCT_LIST2 = a $(PRODUCT_LIST2)
PRODUCT_LIST3 += a
`,
expected: `# All of these should have a setdefault because they're self-referential and not defined before
@ -979,18 +978,15 @@ def init(g, handle):
rblf.setdefault(handle, "PRODUCT_LIST1")
cfg["PRODUCT_LIST1"] = (["a"] +
cfg.get("PRODUCT_LIST1", []))
if cfg.get("PRODUCT_LIST2") == None:
rblf.setdefault(handle, "PRODUCT_LIST2")
cfg["PRODUCT_LIST2"] = (["a"] +
cfg.get("PRODUCT_LIST2", []))
rblf.setdefault(handle, "PRODUCT_LIST3")
cfg["PRODUCT_LIST3"] += ["a"]
# Now doing them again should not have a setdefault because they've already been set
# Now doing them again should not have a setdefault because they've already been set, except 2
# which did not emit an assignment before
cfg["PRODUCT_LIST1"] = (["a"] +
cfg["PRODUCT_LIST1"])
if cfg.get("PRODUCT_LIST2") == None:
cfg["PRODUCT_LIST2"] = (["a"] +
cfg["PRODUCT_LIST2"])
rblf.setdefault(handle, "PRODUCT_LIST2")
cfg["PRODUCT_LIST2"] = (["a"] +
cfg.get("PRODUCT_LIST2", []))
cfg["PRODUCT_LIST3"] += ["a"]
`,
},

View file

@ -109,14 +109,11 @@ func (pcv productConfigVariable) emitSet(gctx *generationContext, asgn *assignme
}
emitAppend()
case asgnMaybeSet:
gctx.writef("if cfg.get(%q) == None:", pcv.nam)
gctx.indentLevel++
gctx.newLine()
if needsSetDefault {
emitSetDefault()
}
emitAssignment()
gctx.indentLevel--
// In mk2rbc.go we never emit a maybeSet assignment for product config variables, because
// they are set to empty strings before running product config.
panic("Should never get here")
default:
panic("Unknown assignment flavor")
}
gctx.setHasBeenAssigned(&pcv)