diff options
Diffstat (limited to 'sdk/update.go')
-rw-r--r-- | sdk/update.go | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/sdk/update.go b/sdk/update.go index 476a4a5ea..1ba58064d 100644 --- a/sdk/update.go +++ b/sdk/update.go @@ -350,6 +350,9 @@ func (s *sdk) buildSnapshot(ctx android.ModuleContext, sdkVariants []*sdk) andro bp = newGeneratedFile(ctx, "snapshot", "Android.bp") generateBpContents(&bp.generatedContents, bpFile) + contents := bp.content.String() + syntaxCheckSnapshotBpFile(ctx, contents) + bp.build(pctx, ctx, nil) filesToZip := builder.filesToZip @@ -394,6 +397,36 @@ func (s *sdk) buildSnapshot(ctx android.ModuleContext, sdkVariants []*sdk) andro return outputZipFile } +// Check the syntax of the generated Android.bp file contents and if they are +// invalid then log an error with the contents (tagged with line numbers) and the +// errors that were found so that it is easy to see where the problem lies. +func syntaxCheckSnapshotBpFile(ctx android.ModuleContext, contents string) { + errs := android.CheckBlueprintSyntax(ctx, "Android.bp", contents) + if len(errs) != 0 { + message := &strings.Builder{} + _, _ = fmt.Fprint(message, `errors in generated Android.bp snapshot: + +Generated Android.bp contents +======================================================================== +`) + for i, line := range strings.Split(contents, "\n") { + _, _ = fmt.Fprintf(message, "%6d: %s\n", i+1, line) + } + + _, _ = fmt.Fprint(message, ` +======================================================================== + +Errors found: +`) + + for _, err := range errs { + _, _ = fmt.Fprintf(message, "%s\n", err.Error()) + } + + ctx.ModuleErrorf("%s", message.String()) + } +} + func extractCommonProperties(ctx android.ModuleContext, extractor *commonValueExtractor, commonProperties interface{}, inputPropertiesSlice interface{}) { err := extractor.extractCommonProperties(commonProperties, inputPropertiesSlice) if err != nil { |