diff options
Diffstat (limited to 'apex')
-rw-r--r-- | apex/apex.go | 10 | ||||
-rw-r--r-- | apex/apex_test.go | 32 |
2 files changed, 40 insertions, 2 deletions
diff --git a/apex/apex.go b/apex/apex.go index fdfcf862..5ce0e057 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -684,8 +684,14 @@ func (a *apexBundle) buildUnflattenedApex(ctx android.ModuleContext, keyFile and } else { readOnlyPaths = append(readOnlyPaths, pathInApex) } - if !android.InList(f.installDir, executablePaths) { - executablePaths = append(executablePaths, f.installDir) + dir := f.installDir + for !android.InList(dir, executablePaths) && dir != "" { + executablePaths = append(executablePaths, dir) + dir, _ = filepath.Split(dir) // move up to the parent + if len(dir) > 0 { + // remove trailing slash + dir = dir[:len(dir)-1] + } } } sort.Strings(readOnlyPaths) diff --git a/apex/apex_test.go b/apex/apex_test.go index b1788297..c7ef58ef 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -40,6 +40,7 @@ func testApex(t *testing.T, bp string) *android.TestContext { ctx.RegisterModuleType("cc_library_shared", android.ModuleFactoryAdaptor(cc.LibrarySharedFactory)) ctx.RegisterModuleType("cc_object", android.ModuleFactoryAdaptor(cc.ObjectFactory)) ctx.RegisterModuleType("toolchain_library", android.ModuleFactoryAdaptor(cc.ToolchainLibraryFactory)) + ctx.RegisterModuleType("prebuilt_etc", android.ModuleFactoryAdaptor(android.PrebuiltEtcFactory)) ctx.PreDepsMutators(func(ctx android.RegisterMutatorsContext) { ctx.BottomUp("link", cc.LinkageMutator).Parallel() ctx.BottomUp("version", cc.VersionMutator).Parallel() @@ -94,6 +95,7 @@ func testApex(t *testing.T, bp string) *android.TestContext { "apex_manifest.json": nil, "system/sepolicy/apex/myapex-file_contexts": nil, "mylib.cpp": nil, + "myprebuilt": nil, }) _, errs := ctx.ParseFileList(".", []string{"Android.bp"}) android.FailIfErrored(t, errs) @@ -415,3 +417,33 @@ func TestApexWithSystemLibsStubs(t *testing.T) { ensureContains(t, mylibCFlags, "__LIBDL_API__=27") ensureContains(t, mylibSharedCFlags, "__LIBDL_API__=27") } + +func TestFilesInSubDir(t *testing.T) { + ctx := testApex(t, ` + apex { + name: "myapex", + key: "myapex.key", + prebuilts: ["myetc"], + } + + apex_key { + name: "myapex.key", + public_key: "testkey.avbpubkey", + private_key: "testkey.pem", + } + + prebuilt_etc { + name: "myetc", + src: "myprebuilt", + sub_dir: "foo/bar", + } + `) + + generateFsRule := ctx.ModuleForTests("myapex", "android_common_myapex").Rule("generateFsConfig") + dirs := strings.Split(generateFsRule.Args["exec_paths"], " ") + + // Ensure that etc, etc/foo, and etc/foo/bar are all listed + ensureListContains(t, dirs, "etc") + ensureListContains(t, dirs, "etc/foo") + ensureListContains(t, dirs, "etc/foo/bar") +} |