From 62e051120245733c18a9ab3087ce7f30a018e4fb Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Tue, 5 Apr 2022 17:56:11 -0700 Subject: [PATCH] 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 --- mk2rbc/mk2rbc.go | 12 ++++++++++++ mk2rbc/mk2rbc_test.go | 24 ++++++++++++++++++++---- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/mk2rbc/mk2rbc.go b/mk2rbc/mk2rbc.go index 5ce031daa..0942c28c0 100644 --- a/mk2rbc/mk2rbc.go +++ b/mk2rbc/mk2rbc.go @@ -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) diff --git a/mk2rbc/mk2rbc_test.go b/mk2rbc/mk2rbc_test.go index f94aa18f5..9c2b392c5 100644 --- a/mk2rbc/mk2rbc_test.go +++ b/mk2rbc/mk2rbc_test.go @@ -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) `, }, {