Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e15f697 authored by Cole Faust's avatar Cole Faust
Browse files

Remove ?= assignements to product variables

In make, all product variables are assigned to an empty string before
including the product config makefiles. In starlark, we don't do that
just so the memory usage is smaller. This means that in make, using
?= to assign a product config variable has no effect. Replicate this
behavior in starlark by not emitting any code for ?= assignments of
product variables.

Fixes: 304324003
Test: go test
Change-Id: Id31531506ac9e372a1bea92ce9ae8e17ae0ca70c
parent 69cf8a32
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -635,6 +635,13 @@ func (ctx *parseContext) handleAssignment(a *mkparser.Assignment) []starlarkNode
	case "+=":
	case "+=":
		asgn.flavor = asgnAppend
		asgn.flavor = asgnAppend
	case "?=":
	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
		asgn.flavor = asgnMaybeSet
	default:
	default:
		panic(fmt.Errorf("unexpected assignment type %s", a.Type))
		panic(fmt.Errorf("unexpected assignment type %s", a.Type))
+8 −12
Original line number Original line Diff line number Diff line
@@ -923,8 +923,6 @@ def init(g, handle):
  cfg["PRODUCT_LIST2"] += ["a"]
  cfg["PRODUCT_LIST2"] += ["a"]
  cfg["PRODUCT_LIST1"] += ["b"]
  cfg["PRODUCT_LIST1"] += ["b"]
  cfg["PRODUCT_LIST2"] += ["b"]
  cfg["PRODUCT_LIST2"] += ["b"]
  if cfg.get("PRODUCT_LIST3") == None:
    cfg["PRODUCT_LIST3"] = ["a"]
  cfg["PRODUCT_LIST1"] = ["c"]
  cfg["PRODUCT_LIST1"] = ["c"]
  g.setdefault("PLATFORM_LIST", [])
  g.setdefault("PLATFORM_LIST", [])
  g["PLATFORM_LIST"] += ["x"]
  g["PLATFORM_LIST"] += ["x"]
@@ -966,9 +964,10 @@ PRODUCT_LIST1 = a $(PRODUCT_LIST1)
PRODUCT_LIST2 ?= a $(PRODUCT_LIST2)
PRODUCT_LIST2 ?= a $(PRODUCT_LIST2)
PRODUCT_LIST3 += a
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_LIST1 = a $(PRODUCT_LIST1)
PRODUCT_LIST2 ?= a $(PRODUCT_LIST2)
PRODUCT_LIST2 = a $(PRODUCT_LIST2)
PRODUCT_LIST3 += a
PRODUCT_LIST3 += a
`,
`,
		expected: `# All of these should have a setdefault because they're self-referential and not defined before
		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")
  rblf.setdefault(handle, "PRODUCT_LIST1")
  cfg["PRODUCT_LIST1"] = (["a"] +
  cfg["PRODUCT_LIST1"] = (["a"] +
      cfg.get("PRODUCT_LIST1", []))
      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")
  rblf.setdefault(handle, "PRODUCT_LIST3")
  cfg["PRODUCT_LIST3"] += ["a"]
  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"] = (["a"] +
      cfg["PRODUCT_LIST1"])
      cfg["PRODUCT_LIST1"])
  if cfg.get("PRODUCT_LIST2") == None:
  rblf.setdefault(handle, "PRODUCT_LIST2")
  cfg["PRODUCT_LIST2"] = (["a"] +
  cfg["PRODUCT_LIST2"] = (["a"] +
        cfg["PRODUCT_LIST2"])
      cfg.get("PRODUCT_LIST2", []))
  cfg["PRODUCT_LIST3"] += ["a"]
  cfg["PRODUCT_LIST3"] += ["a"]
`,
`,
	},
	},
+5 −8
Original line number Original line Diff line number Diff line
@@ -109,14 +109,11 @@ func (pcv productConfigVariable) emitSet(gctx *generationContext, asgn *assignme
		}
		}
		emitAppend()
		emitAppend()
	case asgnMaybeSet:
	case asgnMaybeSet:
		gctx.writef("if cfg.get(%q) == None:", pcv.nam)
		// In mk2rbc.go we never emit a maybeSet assignment for product config variables, because
		gctx.indentLevel++
		// they are set to empty strings before running product config.
		gctx.newLine()
		panic("Should never get here")
		if needsSetDefault {
	default:
			emitSetDefault()
		panic("Unknown assignment flavor")
		}
		emitAssignment()
		gctx.indentLevel--
	}
	}


	gctx.setHasBeenAssigned(&pcv)
	gctx.setHasBeenAssigned(&pcv)