Add package for printing starlark formatted data
Bug: 216168792 Test: build/bazel/ci/bp2build.sh Change-Id: I3a06b19396f7ffe1c638042cda7e731dd840f1d6
This commit is contained in:
@@ -8,6 +8,7 @@ bootstrap_go_package {
|
||||
deps: [
|
||||
"soong-android",
|
||||
"soong-remoteexec",
|
||||
"soong-starlark-format",
|
||||
],
|
||||
srcs: [
|
||||
"bp2build.go",
|
||||
|
@@ -22,14 +22,11 @@ import (
|
||||
"strings"
|
||||
|
||||
"android/soong/android"
|
||||
"android/soong/starlark_fmt"
|
||||
|
||||
"github.com/google/blueprint"
|
||||
)
|
||||
|
||||
const (
|
||||
bazelIndent = 4
|
||||
)
|
||||
|
||||
type bazelVarExporter interface {
|
||||
asBazel(android.Config, exportedStringVariables, exportedStringListVariables, exportedConfigDependingVariables) []bazelConstant
|
||||
}
|
||||
@@ -73,21 +70,6 @@ func (m exportedStringVariables) Set(k string, v string) {
|
||||
m[k] = v
|
||||
}
|
||||
|
||||
func bazelIndention(level int) string {
|
||||
return strings.Repeat(" ", level*bazelIndent)
|
||||
}
|
||||
|
||||
func printBazelList(items []string, indentLevel int) string {
|
||||
list := make([]string, 0, len(items)+2)
|
||||
list = append(list, "[")
|
||||
innerIndent := bazelIndention(indentLevel + 1)
|
||||
for _, item := range items {
|
||||
list = append(list, fmt.Sprintf(`%s"%s",`, innerIndent, item))
|
||||
}
|
||||
list = append(list, bazelIndention(indentLevel)+"]")
|
||||
return strings.Join(list, "\n")
|
||||
}
|
||||
|
||||
func (m exportedStringVariables) asBazel(config android.Config,
|
||||
stringVars exportedStringVariables, stringListVars exportedStringListVariables, cfgDepVars exportedConfigDependingVariables) []bazelConstant {
|
||||
ret := make([]bazelConstant, 0, len(m))
|
||||
@@ -139,7 +121,7 @@ func (m exportedStringListVariables) asBazel(config android.Config,
|
||||
// out through a constants struct later.
|
||||
ret = append(ret, bazelConstant{
|
||||
variableName: k,
|
||||
internalDefinition: printBazelList(expandedVars, 0),
|
||||
internalDefinition: starlark_fmt.PrintStringList(expandedVars, 0),
|
||||
})
|
||||
}
|
||||
return ret
|
||||
@@ -173,17 +155,6 @@ func (m exportedStringListDictVariables) Set(k string, v map[string][]string) {
|
||||
m[k] = v
|
||||
}
|
||||
|
||||
func printBazelStringListDict(dict map[string][]string) string {
|
||||
bazelDict := make([]string, 0, len(dict)+2)
|
||||
bazelDict = append(bazelDict, "{")
|
||||
for k, v := range dict {
|
||||
bazelDict = append(bazelDict,
|
||||
fmt.Sprintf(`%s"%s": %s,`, bazelIndention(1), k, printBazelList(v, 1)))
|
||||
}
|
||||
bazelDict = append(bazelDict, "}")
|
||||
return strings.Join(bazelDict, "\n")
|
||||
}
|
||||
|
||||
// Since dictionaries are not supported in Ninja, we do not expand variables for dictionaries
|
||||
func (m exportedStringListDictVariables) asBazel(_ android.Config, _ exportedStringVariables,
|
||||
_ exportedStringListVariables, _ exportedConfigDependingVariables) []bazelConstant {
|
||||
@@ -191,7 +162,7 @@ func (m exportedStringListDictVariables) asBazel(_ android.Config, _ exportedStr
|
||||
for k, dict := range m {
|
||||
ret = append(ret, bazelConstant{
|
||||
variableName: k,
|
||||
internalDefinition: printBazelStringListDict(dict),
|
||||
internalDefinition: starlark_fmt.PrintStringListDict(dict, 0),
|
||||
})
|
||||
}
|
||||
return ret
|
||||
@@ -223,7 +194,7 @@ func bazelToolchainVars(config android.Config, vars ...bazelVarExporter) string
|
||||
definitions = append(definitions,
|
||||
fmt.Sprintf("_%s = %s", b.variableName, b.internalDefinition))
|
||||
constants = append(constants,
|
||||
fmt.Sprintf("%[1]s%[2]s = _%[2]s,", bazelIndention(1), b.variableName))
|
||||
fmt.Sprintf("%[1]s%[2]s = _%[2]s,", starlark_fmt.Indention(1), b.variableName))
|
||||
}
|
||||
|
||||
// Build the exported constants struct.
|
||||
|
@@ -211,15 +211,11 @@ constants = struct(
|
||||
expectedOut: `# GENERATED FOR BAZEL FROM SOONG. DO NOT EDIT.
|
||||
|
||||
_a = {
|
||||
"b1": [
|
||||
"b2",
|
||||
],
|
||||
"b1": ["b2"],
|
||||
}
|
||||
|
||||
_c = {
|
||||
"d1": [
|
||||
"d2",
|
||||
],
|
||||
"d1": ["d2"],
|
||||
}
|
||||
|
||||
constants = struct(
|
||||
@@ -246,27 +242,19 @@ constants = struct(
|
||||
expectedOut: `# GENERATED FOR BAZEL FROM SOONG. DO NOT EDIT.
|
||||
|
||||
_a = {
|
||||
"a1": [
|
||||
"a2",
|
||||
],
|
||||
"a1": ["a2"],
|
||||
}
|
||||
|
||||
_b = "b-val"
|
||||
|
||||
_c = [
|
||||
"c-val",
|
||||
]
|
||||
_c = ["c-val"]
|
||||
|
||||
_d = "d-val"
|
||||
|
||||
_e = [
|
||||
"e-val",
|
||||
]
|
||||
_e = ["e-val"]
|
||||
|
||||
_f = {
|
||||
"f1": [
|
||||
"f2",
|
||||
],
|
||||
"f1": ["f2"],
|
||||
}
|
||||
|
||||
constants = struct(
|
||||
|
Reference in New Issue
Block a user