From 24658d07f8ec45362bf6ea9a46692b74498c962c Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Tue, 31 Aug 2021 20:00:52 +0000 Subject: [PATCH] Add support for --optional-uses-libs to pom2bp Fixes: 198303986 Test: ./update_prebuilts.py -x Change-Id: I4eb322e905f636eb18d1940f05682f38e448a344 --- cmd/pom2bp/pom2bp.go | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/cmd/pom2bp/pom2bp.go b/cmd/pom2bp/pom2bp.go index d31489e3a..5770a7fff 100644 --- a/cmd/pom2bp/pom2bp.go +++ b/cmd/pom2bp/pom2bp.go @@ -93,6 +93,8 @@ var extraStaticLibs = make(ExtraDeps) var extraLibs = make(ExtraDeps) +var optionalUsesLibs = make(ExtraDeps) + type Exclude map[string]bool func (e Exclude) String() string { @@ -269,6 +271,10 @@ func (p Pom) BpExtraLibs() []string { return extraLibs[p.BpName()] } +func (p Pom) BpOptionalUsesLibs() []string { + return optionalUsesLibs[p.BpName()] +} + // BpDeps obtains dependencies filtered by type and scope. The results of this // method are formatted as Android.bp targets, e.g. run through MavenToBp rules. func (p Pom) BpDeps(typeExt string, scopes []string) []string { @@ -400,6 +406,12 @@ var bpTemplate = template.Must(template.New("bp").Parse(` "{{.}}", {{- end}} ], + {{- if .BpOptionalUsesLibs}} + optional_uses_libs: [ + {{- range .BpOptionalUsesLibs}} + "{{.}}", + {{- end}} + ], {{- end}} {{- else if not .IsHostOnly}} min_sdk_version: "{{.DefaultMinSdkVersion}}", @@ -443,6 +455,12 @@ var bpDepsTemplate = template.Must(template.New("bp").Parse(` "{{.}}", {{- end}} ], + {{- if .BpOptionalUsesLibs}} + optional_uses_libs: [ + {{- range .BpOptionalUsesLibs}} + "{{.}}", + {{- end}} + ], {{- end}} {{- else if not .IsHostOnly}} min_sdk_version: "{{.DefaultMinSdkVersion}}", @@ -487,6 +505,12 @@ var bpDepsTemplate = template.Must(template.New("bp").Parse(` "{{.}}", {{- end}} ], + {{- if .BpOptionalUsesLibs}} + optional_uses_libs: [ + {{- range .BpOptionalUsesLibs}} + "{{.}}", + {{- end}} + ], {{- end}} java_version: "1.7", } @@ -587,7 +611,7 @@ func main() { The tool will extract the necessary information from *.pom files to create an Android.bp whose aar libraries can be linked against when using AAPT2. -Usage: %s [--rewrite =] [-exclude ] [--extra-static-libs =[,]] [--extra-libs =[,]] [] [-regen ] +Usage: %s [--rewrite =] [--exclude ] [--extra-static-libs =[,]] [--extra-libs =[,]] [--optional-uses-libs =[,]] [] [-regen ] -rewrite = rewrite can be used to specify mappings between Maven projects and Android.bp modules. The -rewrite @@ -605,6 +629,11 @@ Usage: %s [--rewrite =] [-exclude ] [--extra-static-libs Some Android.bp modules have transitive runtime dependencies that must be specified when they are depended upon (like androidx.test.rules requires android.test.base). This may be specified multiple times to declare these dependencies. + -optional-uses-libs =[,] + Some Android.bp modules have optional dependencies (typically specified with in + the module's AndroidManifest.xml) that must be specified when they are depended upon (like + androidx.window:window optionally requires androidx.window:window-extensions). + This may be specified multiple times to declare these dependencies. -sdk-version Sets sdk_version: "" for all modules. -default-min-sdk-version @@ -629,6 +658,7 @@ Usage: %s [--rewrite =] [-exclude ] [--extra-static-libs flag.Var(&excludes, "exclude", "Exclude module") flag.Var(&extraStaticLibs, "extra-static-libs", "Extra static dependencies needed when depending on a module") flag.Var(&extraLibs, "extra-libs", "Extra runtime dependencies needed when depending on a module") + flag.Var(&optionalUsesLibs, "optional-uses-libs", "Extra optional dependencies needed when depending on a module") flag.Var(&rewriteNames, "rewrite", "Regex(es) to rewrite artifact names") flag.Var(&hostModuleNames, "host", "Specifies that the corresponding module (specified in the form 'module.group:module.artifact') is a host module") flag.Var(&hostAndDeviceModuleNames, "host-and-device", "Specifies that the corresponding module (specified in the form 'module.group:module.artifact') is both a host and device module.")