diff options
| author | 2024-10-23 20:22:38 +0000 | |
|---|---|---|
| committer | 2024-10-23 20:22:38 +0000 | |
| commit | bf1a7574b7d1ca32b82a4ee8dd9b092e4a6e6116 (patch) | |
| tree | ebc7c36635c1cf979a3681b39ae7824519a884f3 | |
| parent | 2ea50e17c72dc055a09b0307c3d7789e87a61158 (diff) | |
| parent | 6c2b01d2059569554e6178f2f3d6cfe7c37e30ad (diff) | |
Merge "Do not install transitive packaging specs of overriden modules" into main
| -rw-r--r-- | android/packaging.go | 12 | ||||
| -rw-r--r-- | filesystem/filesystem_test.go | 35 |
2 files changed, 46 insertions, 1 deletions
diff --git a/android/packaging.go b/android/packaging.go index b505964d9..fe76bfc4a 100644 --- a/android/packaging.go +++ b/android/packaging.go @@ -395,6 +395,11 @@ func (p *PackagingBase) AddDeps(ctx BottomUpMutatorContext, depTag blueprint.Dep func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter func(PackagingSpec) bool) map[string]PackagingSpec { // all packaging specs gathered from the dep. var all []PackagingSpec + // Name of the dependency which requested the packaging spec. + // If this dep is overridden, the packaging spec will not be installed via this dependency chain. + // (the packaging spec might still be installed if there are some other deps which depend on it). + var depNames []string + // list of module names overridden var overridden []string @@ -429,6 +434,7 @@ func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter } } all = append(all, ps) + depNames = append(depNames, child.Name()) if ps.overrides != nil { overridden = append(overridden, *ps.overrides...) } @@ -437,10 +443,14 @@ func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter // all minus packaging specs that are overridden var filtered []PackagingSpec - for _, ps := range all { + for index, ps := range all { if ps.owner != "" && InList(ps.owner, overridden) { continue } + // The dependency which requested this packaging spec has been overridden. + if InList(depNames[index], overridden) { + continue + } filtered = append(filtered, ps) } diff --git a/filesystem/filesystem_test.go b/filesystem/filesystem_test.go index ab63550ca..730006116 100644 --- a/filesystem/filesystem_test.go +++ b/filesystem/filesystem_test.go @@ -629,3 +629,38 @@ func TestUseSharedVariationOfNativeLib(t *testing.T) { fileList := android.ContentFromFileRuleForTests(t, result.TestContext, partition.Output("fileList")) android.AssertDeepEquals(t, "cc_library listed in deps", "lib64/libc++.so\nlib64/libc.so\nlib64/libdl.so\nlib64/libfoo.so\nlib64/libm.so\n", fileList) } + +// binfoo1 overrides binbar. transitive deps of binbar should not be installed. +func TestDoNotInstallTransitiveDepOfOverriddenModule(t *testing.T) { + result := fixture.RunTestWithBp(t, ` +android_filesystem { + name: "myfilesystem", + deps: ["binfoo1", "libfoo2", "binbar"], +} +cc_binary { + name: "binfoo1", + shared_libs: ["libfoo"], + overrides: ["binbar"], +} +cc_library { + name: "libfoo", +} +cc_library { + name: "libfoo2", + overrides: ["libfoo"], +} +// binbar gets overridden by binfoo1 +// therefore, libbar should not be installed +cc_binary { + name: "binbar", + shared_libs: ["libbar"] +} +cc_library { + name: "libbar", +} + `) + + partition := result.ModuleForTests("myfilesystem", "android_common") + fileList := android.ContentFromFileRuleForTests(t, result.TestContext, partition.Output("fileList")) + android.AssertDeepEquals(t, "Shared library dep of overridden binary should not be installed", fileList, "bin/binfoo1\nlib64/libc++.so\nlib64/libc.so\nlib64/libdl.so\nlib64/libfoo2.so\nlib64/libm.so\n") +} |