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:
Cole Faust
2022-04-05 17:56:11 -07:00
parent 95b95cb647
commit 62e0511202
2 changed files with 32 additions and 4 deletions

View File

@@ -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)