Merge "Fix error reporting when parsing genrule cmd"

This commit is contained in:
Colin Cross
2018-07-10 14:53:06 +00:00
committed by Gerrit Code Review

View File

@@ -223,13 +223,18 @@ func (g *Module) GenerateAndroidBuildActions(ctx android.ModuleContext) {
task := g.taskGenerator(ctx, String(g.properties.Cmd), srcFiles)
rawCommand, err := android.Expand(task.cmd, func(name string) (string, error) {
// report the error directly without returning an error to android.Expand to catch multiple errors in a
// single run
reportError := func(fmt string, args ...interface{}) (string, error) {
ctx.PropertyErrorf("cmd", fmt, args...)
return "SOONG_ERROR", nil
}
switch name {
case "location":
if len(g.properties.Tools) == 0 && len(toolFiles) == 0 {
return "", fmt.Errorf("at least one `tools` or `tool_files` is required if $(location) is used")
}
if len(g.properties.Tools) > 0 {
return reportError("at least one `tools` or `tool_files` is required if $(location) is used")
} else if len(g.properties.Tools) > 0 {
return tools[g.properties.Tools[0]].String(), nil
} else {
return tools[toolFiles[0].Rel()].String(), nil
@@ -241,7 +246,7 @@ func (g *Module) GenerateAndroidBuildActions(ctx android.ModuleContext) {
case "depfile":
referencedDepfile = true
if !Bool(g.properties.Depfile) {
return "", fmt.Errorf("$(depfile) used without depfile property")
return reportError("$(depfile) used without depfile property")
}
return "__SBOX_DEPFILE__", nil
case "genDir":
@@ -252,22 +257,22 @@ func (g *Module) GenerateAndroidBuildActions(ctx android.ModuleContext) {
if tool, ok := tools[label]; ok {
return tool.String(), nil
} else {
return "", fmt.Errorf("unknown location label %q", label)
return reportError("unknown location label %q", label)
}
}
return "", fmt.Errorf("unknown variable '$(%s)'", name)
return reportError("unknown variable '$(%s)'", name)
}
})
if Bool(g.properties.Depfile) && !referencedDepfile {
ctx.PropertyErrorf("cmd", "specified depfile=true but did not include a reference to '${depfile}' in cmd")
}
if err != nil {
ctx.PropertyErrorf("cmd", "%s", err.Error())
return
}
if Bool(g.properties.Depfile) && !referencedDepfile {
ctx.PropertyErrorf("cmd", "specified depfile=true but did not include a reference to '${depfile}' in cmd")
}
// tell the sbox command which directory to use as its sandbox root
buildDir := android.PathForOutput(ctx).String()
sandboxPath := shared.TempDirForOutDir(buildDir)