From bca9028825d3130762e2b9cb6de4a8a7f85010b6 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Tue, 23 Jun 2020 10:22:49 -0700 Subject: Set ANDROID_SDK_HOME when running lint Lint tries to create ~/.android, set ANDROID_SDK_HOME to keep it from attempting to write to the home directory, which may not be writable. Test: run lint Bug: 159676171 Change-Id: I16375b88d309a8fa416b3a8efeabe15759889ae3 Merged-In: I16375b88d309a8fa416b3a8efeabe15759889ae3 (cherry picked from commit 977b6a822d4239c6af060340c1670582c6af647d) --- java/lint.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/java/lint.go b/java/lint.go index fac9a198..ca87dbab 100644 --- a/java/lint.go +++ b/java/lint.go @@ -88,7 +88,7 @@ func (l *linter) deps(ctx android.BottomUpMutatorContext) { } func (l *linter) writeLintProjectXML(ctx android.ModuleContext, - rule *android.RuleBuilder) (projectXMLPath, configXMLPath, cacheDir android.WritablePath, deps android.Paths) { + rule *android.RuleBuilder) (projectXMLPath, configXMLPath, cacheDir, homeDir android.WritablePath, deps android.Paths) { var resourcesList android.WritablePath if len(l.resources) > 0 { @@ -106,6 +106,7 @@ func (l *linter) writeLintProjectXML(ctx android.ModuleContext, // Lint looks for a lint.xml file next to the project.xml file, give it one. configXMLPath = android.PathForModuleOut(ctx, "lint", "lint.xml") cacheDir = android.PathForModuleOut(ctx, "lint", "cache") + homeDir = android.PathForModuleOut(ctx, "lint", "home") srcJarDir := android.PathForModuleOut(ctx, "lint-srcjars") srcJarList := zipSyncCmd(ctx, rule, srcJarDir, l.srcJars) @@ -165,7 +166,7 @@ func (l *linter) writeLintProjectXML(ctx android.ModuleContext, cmd.FlagForEachArg("--error_check ", l.properties.Lint.Error_checks) cmd.FlagForEachArg("--fatal_check ", l.properties.Lint.Fatal_checks) - return projectXMLPath, configXMLPath, cacheDir, deps + return projectXMLPath, configXMLPath, cacheDir, homeDir, deps } // generateManifest adds a command to the rule to write a dummy manifest cat contains the @@ -207,18 +208,19 @@ func (l *linter) lint(ctx android.ModuleContext) { l.manifest = manifest } - projectXML, lintXML, cacheDir, deps := l.writeLintProjectXML(ctx, rule) + projectXML, lintXML, cacheDir, homeDir, deps := l.writeLintProjectXML(ctx, rule) l.outputs.html = android.PathForModuleOut(ctx, "lint-report.html") l.outputs.text = android.PathForModuleOut(ctx, "lint-report.txt") l.outputs.xml = android.PathForModuleOut(ctx, "lint-report.xml") - rule.Command().Text("rm -rf").Flag(cacheDir.String()) - rule.Command().Text("mkdir -p").Flag(cacheDir.String()) + rule.Command().Text("rm -rf").Flag(cacheDir.String()).Flag(homeDir.String()) + rule.Command().Text("mkdir -p").Flag(cacheDir.String()).Flag(homeDir.String()) rule.Command(). Text("("). Flag("JAVA_OPTS=-Xmx2048m"). + FlagWithArg("ANDROID_SDK_HOME=", homeDir.String()). FlagWithInput("SDK_ANNOTATIONS=", annotationsZipPath(ctx)). FlagWithInput("LINT_OPTS=-DLINT_API_DATABASE=", apiVersionsXmlPath(ctx)). Tool(android.PathForSource(ctx, "prebuilts/cmdline-tools/tools/bin/lint")). @@ -239,7 +241,7 @@ func (l *linter) lint(ctx android.ModuleContext) { Text("|| (").Text("cat").Input(l.outputs.text).Text("; exit 7)"). Text(")") - rule.Command().Text("rm -rf").Flag(cacheDir.String()) + rule.Command().Text("rm -rf").Flag(cacheDir.String()).Flag(homeDir.String()) rule.Build(pctx, ctx, "lint", "lint") } -- cgit v1.2.3 From 91edfc29c3fa54b8f55642724fc9e90397d225cc Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Tue, 23 Jun 2020 10:25:26 -0700 Subject: Set root dir in lint project.xml Set the root dir in the project.xml for lint so that the paths in the lint report are relative to the top of the tree instead of relative to the project.xml. Bug: 153485543 Test: run lint Change-Id: Ie163a4dadd976e708f798855de73e58084931a91 Merged-In: Ie163a4dadd976e708f798855de73e58084931a91 (cherry picked from commit c31efeb25cac61fd3c2af3fed5bedeca2d401994) --- java/lint.go | 7 +++++-- scripts/lint-project-xml.py | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/java/lint.go b/java/lint.go index ca87dbab..b73d6a51 100644 --- a/java/lint.go +++ b/java/lint.go @@ -155,8 +155,11 @@ func (l *linter) writeLintProjectXML(ctx android.ModuleContext, cmd.FlagForEachArg("--extra_checks_jar ", l.extraLintCheckJars.Strings()) deps = append(deps, l.extraLintCheckJars...) - // The cache tag in project.xml is relative to the project.xml file. - cmd.FlagWithArg("--cache_dir ", "cache") + cmd.FlagWithArg("--root_dir ", "$PWD") + + // The cache tag in project.xml is relative to the root dir, or the project.xml file if + // the root dir is not set. + cmd.FlagWithArg("--cache_dir ", cacheDir.String()) cmd.FlagWithInput("@", android.PathForSource(ctx, "build/soong/java/lint_defaults.txt")) diff --git a/scripts/lint-project-xml.py b/scripts/lint-project-xml.py index 7ab4f015..38c57cad 100755 --- a/scripts/lint-project-xml.py +++ b/scripts/lint-project-xml.py @@ -77,6 +77,8 @@ def parse_args(): help='mark the module as a test.') parser.add_argument('--cache_dir', dest='cache_dir', help='directory to use for cached file.') + parser.add_argument('--root_dir', dest='root_dir', + help='directory to use for root dir.') group = parser.add_argument_group('check arguments', 'later arguments override earlier ones.') group.add_argument('--fatal_check', dest='checks', action=check_action('fatal'), default=[], help='treat a lint issue as a fatal error.') @@ -162,6 +164,8 @@ def write_project_xml(f, args): f.write("\n") f.write("\n") + if args.root_dir: + f.write(" \n" % args.root_dir) f.write(" \n" % (args.name, "library='true' " if args.library else "")) if args.manifest: f.write(" \n" % (args.manifest, test_attr)) -- cgit v1.2.3