Emit mksubst call for $(subst ...)
Bug: 172923994 Test: internal Change-Id: I7994bee61f6f8bdee6eac50ecb8a6064830447a4
This commit is contained in:
@@ -99,7 +99,7 @@ var knownFunctions = map[string]struct {
|
||||
// TODO(asmundak): remove it once all calls are removed from configuration makefiles. see b/183161002
|
||||
"shell": {baseName + ".shell", starlarkTypeString},
|
||||
"strip": {baseName + ".mkstrip", starlarkTypeString},
|
||||
"subst": {baseName + ".subst", starlarkTypeString},
|
||||
"subst": {baseName + ".mksubst", starlarkTypeString},
|
||||
"warning": {baseName + ".mkwarning", starlarkTypeVoid},
|
||||
"word": {baseName + "!word", starlarkTypeString},
|
||||
"wildcard": {baseName + ".expand_wildcard", starlarkTypeList},
|
||||
@@ -509,13 +509,7 @@ func (ctx *parseContext) handleAssignment(a *mkparser.Assignment) {
|
||||
}
|
||||
inferred_type := asgn.value.typ()
|
||||
if inferred_type != starlarkTypeUnknown {
|
||||
if ogv, ok := lhs.(*otherGlobalVariable); ok {
|
||||
ogv.typ = inferred_type
|
||||
} else if pcv, ok := lhs.(*productConfigVariable); ok {
|
||||
pcv.typ = inferred_type
|
||||
} else {
|
||||
panic(fmt.Errorf("cannot assign new type to a variable %s, its flavor is %T", lhs.name(), lhs))
|
||||
}
|
||||
lhs.setValueType(inferred_type)
|
||||
}
|
||||
}
|
||||
if lhs.valueType() == starlarkTypeList {
|
||||
@@ -1114,11 +1108,19 @@ func (ctx *parseContext) parseSubstFunc(node mkparser.Node, args *mkparser.MakeS
|
||||
words[2].TrimLeftSpaces()
|
||||
words[2].TrimRightSpaces()
|
||||
obj := ctx.parseMakeString(node, words[2])
|
||||
typ := obj.typ()
|
||||
if typ == starlarkTypeString {
|
||||
return &callExpr{
|
||||
object: obj,
|
||||
name: "replace",
|
||||
args: []starlarkExpr{&stringLiteralExpr{from}, &stringLiteralExpr{to}},
|
||||
returnType: starlarkTypeString,
|
||||
returnType: typ,
|
||||
}
|
||||
}
|
||||
return &callExpr{
|
||||
name: "subst",
|
||||
args: []starlarkExpr{&stringLiteralExpr{from}, &stringLiteralExpr{to}, obj},
|
||||
returnType: obj.typ(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -637,6 +637,22 @@ def init(g, handle):
|
||||
cfg["PRODUCT_COPY_FILES"] = rblf.addprefix("pfx-", "a b c")
|
||||
cfg["PRODUCT_COPY_FILES"] = rblf.addsuffix(".sff", "a b c")
|
||||
cfg["PRODUCT_NAME"] = ((g.get("TARGET_BOARD_PLATFORM", "")).replace(".", " ")).split()[0]
|
||||
`,
|
||||
},
|
||||
{
|
||||
desc: "subst in list",
|
||||
mkname: "product.mk",
|
||||
in: `
|
||||
files = $(call find-copy-subdir-files,*,from,to)
|
||||
PRODUCT_COPY_FILES += $(subst foo,bar,$(files))
|
||||
`,
|
||||
expected: `load("//build/make/core:product_config.rbc", "rblf")
|
||||
|
||||
def init(g, handle):
|
||||
cfg = rblf.cfg(handle)
|
||||
_files = rblf.find_and_copy("*", "from", "to")
|
||||
rblf.setdefault(handle, "PRODUCT_COPY_FILES")
|
||||
cfg["PRODUCT_COPY_FILES"] += rblf.mksubst("foo", "bar", _files)
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
@@ -26,6 +26,7 @@ type variable interface {
|
||||
emitSet(gctx *generationContext, asgn *assignmentNode)
|
||||
emitDefined(gctx *generationContext)
|
||||
valueType() starlarkType
|
||||
setValueType(t starlarkType)
|
||||
defaultValueString() string
|
||||
isPreset() bool
|
||||
}
|
||||
@@ -44,6 +45,10 @@ func (v baseVariable) valueType() starlarkType {
|
||||
return v.typ
|
||||
}
|
||||
|
||||
func (v *baseVariable) setValueType(t starlarkType) {
|
||||
v.typ = t
|
||||
}
|
||||
|
||||
func (v baseVariable) isPreset() bool {
|
||||
return v.preset
|
||||
}
|
||||
@@ -279,7 +284,7 @@ func (ctx *parseContext) addVariable(name string) variable {
|
||||
} else if name == strings.ToLower(name) {
|
||||
// Heuristics: if variable's name is all lowercase, consider it local
|
||||
// string variable.
|
||||
v = &localVariable{baseVariable{nam: name, typ: starlarkTypeString}}
|
||||
v = &localVariable{baseVariable{nam: name, typ: starlarkTypeUnknown}}
|
||||
} else {
|
||||
vt := starlarkTypeUnknown
|
||||
if strings.HasPrefix(name, "LOCAL_") {
|
||||
|
Reference in New Issue
Block a user