Prevent multiple PackagingSpecs having same installation path am: a51c4ce10e

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/3066922

Change-Id: I8312cc64b24d8a446f53627917d492410ff32847
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jiyong Park
2024-05-01 03:15:32 +00:00
committed by Automerger Merge Worker
2 changed files with 50 additions and 2 deletions

View File

@@ -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

View File

@@ -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",
}
`)
}