Add package for printing starlark formatted data

Bug: 216168792
Test: build/bazel/ci/bp2build.sh
Change-Id: I3a06b19396f7ffe1c638042cda7e731dd840f1d6
This commit is contained in:
Liz Kammer
2022-02-03 08:42:10 -05:00
parent db07f002b8
commit 72beb34609
15 changed files with 435 additions and 166 deletions

View File

@@ -8,6 +8,7 @@ bootstrap_go_package {
deps: [
"soong-android",
"soong-remoteexec",
"soong-starlark-format",
],
srcs: [
"bp2build.go",

View File

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

View File

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