diff options
author | Jiyong Park <jiyong@google.com> | 2024-05-04 03:56:55 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-05-04 03:56:55 +0000 |
commit | 7c9ab4f5b188ce04c59164d44cf067a8f433b592 (patch) | |
tree | b66aea248ddf512705014c91ba585fbe276c9b1b | |
parent | b92fc67f50ff9d5460aa34823df71077f4f2e0c0 (diff) | |
parent | 7e7d4af6b5ad646e47138a65a3942ba6ee4a5fe2 (diff) | |
download | soong-main.tar.gz |
Merge changes from topic "revert-3069323-revert-3066748-duplicate_entry_fs-CIBDJQYRHU-FVLDIVWUZV" into mainHEADmastermain
* changes:
Revert^2 "Filesystem modules follow the installation semantic"
Revert "Revert "Prevent multiple PackagingSpecs having same inst..."
-rw-r--r-- | android/packaging.go | 29 | ||||
-rw-r--r-- | filesystem/filesystem.go | 7 | ||||
-rw-r--r-- | filesystem/filesystem_test.go | 23 | ||||
-rw-r--r-- | filesystem/system_image.go | 2 |
4 files changed, 58 insertions, 3 deletions
diff --git a/android/packaging.go b/android/packaging.go index 66772183c..fe61da1e9 100644 --- a/android/packaging.go +++ b/android/packaging.go @@ -50,6 +50,25 @@ type PackagingSpec struct { skipInstall bool } +func (p *PackagingSpec) Equals(other *PackagingSpec) bool { + if other == nil { + return false + } + if p.relPathInPackage != other.relPathInPackage { + return false + } + if p.srcPath != other.srcPath || p.symlinkTarget != other.symlinkTarget { + return false + } + if p.executable != other.executable { + return false + } + if p.partition != other.partition { + return false + } + return true +} + // Get file name of installed package func (p *PackagingSpec) FileName() string { if p.relPathInPackage != "" { @@ -243,9 +262,15 @@ func (p *PackagingBase) GatherPackagingSpecsWithFilter(ctx ModuleContext, filter continue } } - if _, ok := m[ps.relPathInPackage]; !ok { - m[ps.relPathInPackage] = ps + dstPath := ps.relPathInPackage + if existingPs, ok := m[dstPath]; ok { + if !existingPs.Equals(&ps) { + ctx.ModuleErrorf("packaging conflict at %v:\n%v\n%v", dstPath, existingPs, ps) + } + continue } + + m[dstPath] = ps } }) return m diff --git a/filesystem/filesystem.go b/filesystem/filesystem.go index 3bbf9f3e6..b342ae930 100644 --- a/filesystem/filesystem.go +++ b/filesystem/filesystem.go @@ -141,6 +141,7 @@ type filesystemProperties struct { // partitions like system.img. For example, cc_library modules are placed under ./lib[64] directory. func filesystemFactory() android.Module { module := &filesystem{} + module.filterPackagingSpec = module.filterInstallablePackagingSpec initFilesystemModule(module) return module } @@ -193,6 +194,12 @@ func (f *filesystem) partitionName() string { return proptools.StringDefault(f.properties.Partition_name, f.Name()) } +func (f *filesystem) filterInstallablePackagingSpec(ps android.PackagingSpec) bool { + // Filesystem module respects the installation semantic. A PackagingSpec from a module with + // IsSkipInstall() is skipped. + return !ps.SkipInstall() +} + var pctx = android.NewPackageContext("android/soong/filesystem") func (f *filesystem) GenerateAndroidBuildActions(ctx android.ModuleContext) { diff --git a/filesystem/filesystem_test.go b/filesystem/filesystem_test.go index 121504867..acd481352 100644 --- a/filesystem/filesystem_test.go +++ b/filesystem/filesystem_test.go @@ -442,3 +442,26 @@ func TestInconsistentPartitionTypesInDefaults(t *testing.T) { } `) } + +func TestPreventDuplicatedEntries(t *testing.T) { + fixture.ExtendWithErrorHandler(android.FixtureExpectsOneErrorPattern( + "packaging conflict at")). + RunTestWithBp(t, ` + android_filesystem { + name: "fs", + deps: [ + "foo", + "foo_dup", + ], + } + + cc_binary { + name: "foo", + } + + cc_binary { + name: "foo_dup", + stem: "foo", + } + `) +} diff --git a/filesystem/system_image.go b/filesystem/system_image.go index 5028a493e..15cacfb4f 100644 --- a/filesystem/system_image.go +++ b/filesystem/system_image.go @@ -98,5 +98,5 @@ func (s *systemImage) buildLinkerConfigFile(ctx android.ModuleContext, root andr // Note that "apex" module installs its contents to "apex"(fake partition) as well // for symbol lookup by imitating "activated" paths. func (s *systemImage) filterPackagingSpec(ps android.PackagingSpec) bool { - return ps.Partition() == "system" + return s.filesystem.filterInstallablePackagingSpec(ps) && ps.Partition() == "system" } |