Allow include $(sort $(wildcard */font.mk)) and variants
Include/inherit-product calls already allow asterisks, the wildcard is not necessary. If we see an include using $(wildcard), act as if it doesn't exist. Bug: 218736658 Test: go test Change-Id: Ib21007a2042fbfaa95c07571792983e14135a035
This commit is contained in:
@@ -32,6 +32,7 @@ import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"text/scanner"
|
||||
@@ -759,6 +760,16 @@ func (ctx *parseContext) newDependentModule(path string, optional bool) *moduleI
|
||||
func (ctx *parseContext) handleSubConfig(
|
||||
v mkparser.Node, pathExpr starlarkExpr, loadAlways bool, processModule func(inheritedModule) starlarkNode) []starlarkNode {
|
||||
|
||||
// Allow seeing $(sort $(wildcard realPathExpr)) or $(wildcard realPathExpr)
|
||||
// because those are functionally the same as not having the sort/wildcard calls.
|
||||
if ce, ok := pathExpr.(*callExpr); ok && ce.name == "rblf.mksort" && len(ce.args) == 1 {
|
||||
if ce2, ok2 := ce.args[0].(*callExpr); ok2 && ce2.name == "rblf.expand_wildcard" && len(ce2.args) == 1 {
|
||||
pathExpr = ce2.args[0]
|
||||
}
|
||||
} else if ce2, ok2 := pathExpr.(*callExpr); ok2 && ce2.name == "rblf.expand_wildcard" && len(ce2.args) == 1 {
|
||||
pathExpr = ce2.args[0]
|
||||
}
|
||||
|
||||
// In a simple case, the name of a module to inherit/include is known statically.
|
||||
if path, ok := maybeString(pathExpr); ok {
|
||||
// Note that even if this directive loads a module unconditionally, a module may be
|
||||
@@ -766,6 +777,7 @@ func (ctx *parseContext) handleSubConfig(
|
||||
moduleShouldExist := loadAlways && ctx.ifNestLevel == 0
|
||||
if strings.Contains(path, "*") {
|
||||
if paths, err := fs.Glob(ctx.script.sourceFS, path); err == nil {
|
||||
sort.Strings(paths)
|
||||
result := make([]starlarkNode, 0)
|
||||
for _, p := range paths {
|
||||
mi := ctx.newDependentModule(p, !moduleShouldExist)
|
||||
|
@@ -197,15 +197,31 @@ def init(g, handle):
|
||||
mkname: "path/product.mk",
|
||||
in: `
|
||||
$(call inherit-product, */font.mk)
|
||||
$(call inherit-product, $(sort $(wildcard */font.mk)))
|
||||
$(call inherit-product, $(wildcard */font.mk))
|
||||
|
||||
include */font.mk
|
||||
include $(sort $(wildcard */font.mk))
|
||||
include $(wildcard */font.mk)
|
||||
`,
|
||||
expected: `load("//build/make/core:product_config.rbc", "rblf")
|
||||
load("//foo:font.star", _font_init = "init")
|
||||
load("//bar:font.star", _font1_init = "init")
|
||||
load("//bar:font.star", _font_init = "init")
|
||||
load("//foo:font.star", _font1_init = "init")
|
||||
|
||||
def init(g, handle):
|
||||
cfg = rblf.cfg(handle)
|
||||
rblf.inherit(handle, "foo/font", _font_init)
|
||||
rblf.inherit(handle, "bar/font", _font1_init)
|
||||
rblf.inherit(handle, "bar/font", _font_init)
|
||||
rblf.inherit(handle, "foo/font", _font1_init)
|
||||
rblf.inherit(handle, "bar/font", _font_init)
|
||||
rblf.inherit(handle, "foo/font", _font1_init)
|
||||
rblf.inherit(handle, "bar/font", _font_init)
|
||||
rblf.inherit(handle, "foo/font", _font1_init)
|
||||
_font_init(g, handle)
|
||||
_font1_init(g, handle)
|
||||
_font_init(g, handle)
|
||||
_font1_init(g, handle)
|
||||
_font_init(g, handle)
|
||||
_font1_init(g, handle)
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
Reference in New Issue
Block a user