From c3fcdb4baa21c2be267fae4d877373bc18371b41 Mon Sep 17 00:00:00 2001 From: Jaewoong Jung Date: Wed, 13 Feb 2019 05:50:33 -0800 Subject: [PATCH] Add a prebuilt module type for usr/share. This is almost the same as prebuilt_etc except the base path. Bug: 122616578 Test: prebuilt_etc_test.go + manual test with external/neven Change-Id: Ie3d17c06a878853ec9df93fe2c61c8772bc5cff4 --- android/prebuilt_etc.go | 26 +++++++++++++++++++------- android/prebuilt_etc_test.go | 17 +++++++++++++++++ 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/android/prebuilt_etc.go b/android/prebuilt_etc.go index 8af08c14b..a047e474e 100644 --- a/android/prebuilt_etc.go +++ b/android/prebuilt_etc.go @@ -20,12 +20,12 @@ import ( "strings" ) -// prebuilt_etc is for prebuilts that will be installed to -// /etc/ +// TODO(jungw): Now that it handles more than the ones in etc/, consider renaming this file. func init() { RegisterModuleType("prebuilt_etc", PrebuiltEtcFactory) RegisterModuleType("prebuilt_etc_host", PrebuiltEtcHostFactory) + RegisterModuleType("prebuilt_usr_share", PrebuiltUserShareFactory) PreDepsMutators(func(ctx RegisterMutatorsContext) { ctx.BottomUp("prebuilt_etc", prebuiltEtcMutator).Parallel() @@ -60,8 +60,10 @@ type PrebuiltEtc struct { properties prebuiltEtcProperties - sourceFilePath Path - outputFilePath OutputPath + sourceFilePath Path + outputFilePath OutputPath + // The base install location, e.g. "etc" for prebuilt_etc, "usr/share" for prebuilt_usr_share. + installDirBase string installDirPath OutputPath additionalDependencies *Paths } @@ -124,7 +126,7 @@ func (p *PrebuiltEtc) GenerateAndroidBuildActions(ctx ModuleContext) { return } p.outputFilePath = PathForModuleOut(ctx, filename).OutputPath - p.installDirPath = PathForModuleInstall(ctx, "etc", String(p.properties.Sub_dir)) + p.installDirPath = PathForModuleInstall(ctx, p.installDirBase, String(p.properties.Sub_dir)) // This ensures that outputFilePath has the correct name for others to // use, as the source file may have a different name. @@ -174,8 +176,9 @@ func InitPrebuiltEtcModule(p *PrebuiltEtc) { p.AddProperties(&p.properties) } +// prebuilt_etc is for prebuilts that will be installed to /etc/ func PrebuiltEtcFactory() Module { - module := &PrebuiltEtc{} + module := &PrebuiltEtc{installDirBase: "etc"} InitPrebuiltEtcModule(module) // This module is device-only InitAndroidArchModule(module, DeviceSupported, MultilibFirst) @@ -183,13 +186,22 @@ func PrebuiltEtcFactory() Module { } func PrebuiltEtcHostFactory() Module { - module := &PrebuiltEtc{} + module := &PrebuiltEtc{installDirBase: "etc"} InitPrebuiltEtcModule(module) // This module is host-only InitAndroidArchModule(module, HostSupported, MultilibCommon) return module } +// prebuilt_usr_share is for prebuilts that will be installed to /usr/share/ +func PrebuiltUserShareFactory() Module { + module := &PrebuiltEtc{installDirBase: "usr/share"} + InitPrebuiltEtcModule(module) + // This module is device-only + InitAndroidArchModule(module, DeviceSupported, MultilibFirst) + return module +} + const ( // coreMode is the variant for modules to be installed to system. coreMode = "core" diff --git a/android/prebuilt_etc_test.go b/android/prebuilt_etc_test.go index d0961a7c4..206f53b2a 100644 --- a/android/prebuilt_etc_test.go +++ b/android/prebuilt_etc_test.go @@ -29,6 +29,7 @@ func testPrebuiltEtc(t *testing.T, bp string) *TestContext { ctx := NewTestArchContext() ctx.RegisterModuleType("prebuilt_etc", ModuleFactoryAdaptor(PrebuiltEtcFactory)) ctx.RegisterModuleType("prebuilt_etc_host", ModuleFactoryAdaptor(PrebuiltEtcHostFactory)) + ctx.RegisterModuleType("prebuilt_usr_share", ModuleFactoryAdaptor(PrebuiltUserShareFactory)) ctx.PreDepsMutators(func(ctx RegisterMutatorsContext) { ctx.BottomUp("prebuilt_etc", prebuiltEtcMutator).Parallel() }) @@ -193,3 +194,19 @@ func TestPrebuiltEtcHost(t *testing.T) { t.Errorf("host bit is not set for a prebuilt_etc_host module.") } } + +func TestPrebuiltUserShareInstallDirPath(t *testing.T) { + ctx := testPrebuiltEtc(t, ` + prebuilt_usr_share { + name: "foo.conf", + src: "foo.conf", + sub_dir: "bar", + } + `) + + p := ctx.ModuleForTests("foo.conf", "android_arm64_armv8-a_core").Module().(*PrebuiltEtc) + expected := "target/product/test_device/system/usr/share/bar" + if p.installDirPath.RelPathString() != expected { + t.Errorf("expected %q, got %q", expected, p.installDirPath.RelPathString()) + } +}