Fix Soong CMakeLists.txt generator

Problem: Soong does not guarantee that the list of parameters will
be in individual strings. This means the CMakeLists generator can
receive as input:

  params = {"-isystem", "path/to/system"}

or it could receive:

  params = {"-isystem path/to/system"}

Solution: Normalize the list of parameters into a flattened list
of parameters where each parameters is in an individual string.

Fixes: 143378093
Test: None
Change-Id: I9bd1a2006a1cf0ba383f467748b6fd4eadef6866
This commit is contained in:
Fabien Sanglard 2019-11-05 16:18:47 -08:00
parent af60d490ff
commit 33ca8080e5
1 changed files with 23 additions and 0 deletions

View File

@ -306,6 +306,20 @@ func categorizeParameter(parameter string) parameterType {
return flag
}
// Flattens a list of strings potentially containing space characters into a list of string containing no
// spaces.
func normalizeParameters(params []string) []string {
var flatParams []string
for _, s := range params {
s = strings.Trim(s, " ")
if len(s) == 0 {
continue
}
flatParams = append(flatParams, strings.Split(s, " ")...)
}
return flatParams
}
func parseCompilerParameters(params []string, ctx android.SingletonContext, f *os.File) compilerParameters {
var compilerParameters = makeCompilerParameters()
@ -313,6 +327,15 @@ func parseCompilerParameters(params []string, ctx android.SingletonContext, f *o
f.WriteString(fmt.Sprintf("# Raw param [%d] = '%s'\n", i, str))
}
// Soong does not guarantee that each flag will be in an individual string. e.g: The
// input received could be:
// params = {"-isystem", "path/to/system"}
// or it could be
// params = {"-isystem path/to/system"}
// To normalize the input, we split all strings with the "space" character and consolidate
// all tokens into a flattened parameters list
params = normalizeParameters(params)
for i := 0; i < len(params); i++ {
param := params[i]
if param == "" {