Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 663d5a74 authored by Martin Stjernholm's avatar Martin Stjernholm Committed by Automerger Merge Worker
Browse files

Merge "Do not allow duplicate deapexer dependencies." into sc-dev am: 8410eb15

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

Change-Id: Ifa13bc41cf84eca11214d374925eac03b8c453db
parents d0687fd6 8410eb15
Loading
Loading
Loading
Loading
+67 −0
Original line number Diff line number Diff line
@@ -6568,6 +6568,73 @@ func testDexpreoptWithApexes(t *testing.T, bp, errmsg string, preparer android.F
	return result.TestContext
}

func TestDuplicateDeapexeresFromPrebuiltApexes(t *testing.T) {
	preparers := android.GroupFixturePreparers(
		java.PrepareForTestWithJavaDefaultModules,
		PrepareForTestWithApexBuildComponents,
	).
		ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern(
			`Ambiguous duplicate deapexer module dependencies "com.android.myapex.deapexer" and "com.mycompany.android.myapex.deapexer"`))

	bpBase := `
		apex_set {
			name: "com.android.myapex",
			exported_bootclasspath_fragments: ["my-bootclasspath-fragment"],
			set: "myapex.apks",
		}

		apex_set {
			name: "com.mycompany.android.myapex",
			apex_name: "com.android.myapex",
			exported_bootclasspath_fragments: ["my-bootclasspath-fragment"],
			set: "company-myapex.apks",
		}

		prebuilt_bootclasspath_fragment {
			name: "my-bootclasspath-fragment",
			apex_available: ["com.android.myapex"],
			%s
		}
	`

	t.Run("java_import", func(t *testing.T) {
		_ = preparers.RunTestWithBp(t, fmt.Sprintf(bpBase, `contents: ["libfoo"]`)+`
			java_import {
				name: "libfoo",
				jars: ["libfoo.jar"],
				apex_available: ["com.android.myapex"],
			}
		`)
	})

	t.Run("java_sdk_library_import", func(t *testing.T) {
		_ = preparers.RunTestWithBp(t, fmt.Sprintf(bpBase, `contents: ["libfoo"]`)+`
			java_sdk_library_import {
				name: "libfoo",
				public: {
					jars: ["libbar.jar"],
				},
				apex_available: ["com.android.myapex"],
			}
		`)
	})

	t.Run("prebuilt_bootclasspath_fragment", func(t *testing.T) {
		_ = preparers.RunTestWithBp(t, fmt.Sprintf(bpBase, `
			image_name: "art",
			contents: ["libfoo"],
		`)+`
			java_sdk_library_import {
				name: "libfoo",
				public: {
					jars: ["libbar.jar"],
				},
				apex_available: ["com.android.myapex"],
			}
		`)
	})
}

func TestUpdatable_should_set_min_sdk_version(t *testing.T) {
	testApexError(t, `"myapex" .*: updatable: updatable APEXes should set min_sdk_version`, `
		apex {
+7 −3
Original line number Diff line number Diff line
@@ -907,11 +907,15 @@ func (module *prebuiltBootclasspathFragmentModule) produceBootImageFiles(ctx and
	}

	var deapexerModule android.Module
	ctx.VisitDirectDeps(func(module android.Module) {
		tag := ctx.OtherModuleDependencyTag(module)
	ctx.VisitDirectDeps(func(to android.Module) {
		tag := ctx.OtherModuleDependencyTag(to)
		// Save away the `deapexer` module on which this depends, if any.
		if tag == android.DeapexerTag {
			deapexerModule = module
			if deapexerModule != nil {
				ctx.ModuleErrorf("Ambiguous duplicate deapexer module dependencies %q and %q",
					deapexerModule.Name(), to.Name())
			}
			deapexerModule = to
		}
	})

+4 −0
Original line number Diff line number Diff line
@@ -1283,6 +1283,10 @@ func (j *Import) GenerateAndroidBuildActions(ctx android.ModuleContext) {

		// Save away the `deapexer` module on which this depends, if any.
		if tag == android.DeapexerTag {
			if deapexerModule != nil {
				ctx.ModuleErrorf("Ambiguous duplicate deapexer module dependencies %q and %q",
					deapexerModule.Name(), module.Name())
			}
			deapexerModule = module
		}
	})
+4 −0
Original line number Diff line number Diff line
@@ -2160,6 +2160,10 @@ func (module *SdkLibraryImport) GenerateAndroidBuildActions(ctx android.ModuleCo

		// Save away the `deapexer` module on which this depends, if any.
		if tag == android.DeapexerTag {
			if deapexerModule != nil {
				ctx.ModuleErrorf("Ambiguous duplicate deapexer module dependencies %q and %q",
					deapexerModule.Name(), to.Name())
			}
			deapexerModule = to
		}
	})