in tools/migration/crosstool_to_starlark_lib.go [1110:1167]
func getIfStatement(ifOrElseIf string, identifiers []string, field, val string,
toCToolchainIdentifier map[string]CToolchainIdentifier, depth int,
isPlainString bool) string {
usedStmts := make(map[string]bool)
if val != "None" && isPlainString {
val = "\"" + val + "\""
}
var cToolchainIdentifiers []CToolchainIdentifier
for _, value := range toCToolchainIdentifier {
cToolchainIdentifiers = append(cToolchainIdentifiers, value)
}
cpuToCompilers := getCPUToCompilers(cToolchainIdentifiers)
countCpus := make(map[string]int)
var conditions []string
for _, id := range identifiers {
identifier := toCToolchainIdentifier[id]
stmt := getConditionStatementForCToolchainIdentifier(identifier)
if _, ok := usedStmts[stmt]; !ok {
conditions = append(conditions, stmt)
usedStmts[stmt] = true
if identifier.compiler != "" {
countCpus[identifier.cpu]++
}
}
}
var compressedConditions []string
usedStmtsOptimized := make(map[string]bool)
for _, id := range identifiers {
identifier := toCToolchainIdentifier[id]
var stmt string
if _, ok := countCpus[identifier.cpu]; ok {
if countCpus[identifier.cpu] == len(cpuToCompilers[identifier.cpu]) {
stmt = getConditionStatementForCToolchainIdentifier(
CToolchainIdentifier{cpu: identifier.cpu, compiler: ""})
} else {
stmt = getConditionStatementForCToolchainIdentifier(identifier)
}
} else {
stmt = getConditionStatementForCToolchainIdentifier(identifier)
}
if _, ok := usedStmtsOptimized[stmt]; !ok {
compressedConditions = append(compressedConditions, stmt)
usedStmtsOptimized[stmt] = true
}
}
sort.Strings(compressedConditions)
val = strings.Join(strings.Split(val, "\n"+getTabs(depth)), "\n"+getTabs(depth+1))
return fmt.Sprintf(`%s%s %s:
%s%s = %s
`, getTabs(depth),
ifOrElseIf,
"("+strings.Join(compressedConditions, "\n"+getTabs(depth+1)+"or ")+")",
getTabs(depth+1),
field,
val)
}