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

Commit 9e9bb7f2 authored by Martin Stjernholm's avatar Martin Stjernholm
Browse files

Only output make targets for uninstallable static libs in the APEX

unavailable-to-platform case.

This removes the special case added in https://r.android.com/1274763
from SkipInstall(), so that it doesn't cause conflicting AndroidMk
entries when a cc_prebuilt_library_static module has prefer:true and
the corresponding source module exists.

Test: `m` in a tree with a snapshot created from art-module-sdk where
  the libartimagevalues module has prefer:true
Bug: 151303681
Change-Id: I651ae325753b707296892adb4cae80daaddb6af2
parent 1f109cd3
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -296,7 +296,10 @@ func (m *ApexModuleBase) CreateApexVariations(mctx BottomUpMutatorContext) []Mod
		for i, mod := range modules {
			platformVariation := i == 0
			if platformVariation && !mctx.Host() && !mod.(ApexModule).AvailableFor(AvailableToPlatform) {
				mod.SkipInstall()
				// Do not install the module for platform, but still allow it to output
				// uninstallable AndroidMk entries in certain cases when they have
				// side effects.
				mod.MakeUninstallable()
			}
			if !platformVariation {
				mod.(ApexModule).apexModuleBase().ApexProperties.Info = m.apexVariations[i-1]
+10 −0
Original line number Diff line number Diff line
@@ -256,6 +256,7 @@ type Module interface {
	InstallForceOS() *OsType
	SkipInstall()
	IsSkipInstall() bool
	MakeUninstallable()
	ExportedToMake() bool
	InitRc() Paths
	VintfFragments() Paths
@@ -1046,6 +1047,15 @@ func (m *ModuleBase) IsSkipInstall() bool {
	return m.commonProperties.SkipInstall == true
}

// Similar to SkipInstall, but if the AndroidMk entry would set
// LOCAL_UNINSTALLABLE_MODULE then this variant may still output that entry
// rather than leaving it out altogether. That happens in cases where it would
// have other side effects, in particular when it adds a NOTICE file target,
// which other install targets might depend on.
func (m *ModuleBase) MakeUninstallable() {
	m.SkipInstall()
}

func (m *ModuleBase) ExportedToMake() bool {
	return m.commonProperties.NamespaceExportedToMake
}
+2 −4
Original line number Diff line number Diff line
@@ -286,10 +286,8 @@ func (library *libraryDecorator) AndroidMkEntries(ctx AndroidMkContext, entries
			entries.SubName = "." + library.stubsVersion()
		}
		entries.ExtraEntries = append(entries.ExtraEntries, func(entries *android.AndroidMkEntries) {
			// Note library.skipInstall() has a special case to get here for static
			// libraries that otherwise would have skipped installation and hence not
			// have executed AndroidMkEntries at all. The reason is to ensure they get
			// a NOTICE file make target which other libraries might depend on.
			// library.makeUninstallable() depends on this to bypass SkipInstall() for
			// static libraries.
			entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", true)
			if library.buildStubs() {
				entries.SetBool("LOCAL_NO_NOTICE_FILE", true)
+4 −4
Original line number Diff line number Diff line
@@ -418,7 +418,7 @@ type installer interface {
	inSanitizerDir() bool
	hostToolPath() android.OptionalPath
	relativeInstallPath() string
	skipInstall(mod *Module)
	makeUninstallable(mod *Module)
}

type xref interface {
@@ -2730,12 +2730,12 @@ func (c *Module) InstallInRecovery() bool {
	return c.InRecovery()
}

func (c *Module) SkipInstall() {
func (c *Module) MakeUninstallable() {
	if c.installer == nil {
		c.ModuleBase.SkipInstall()
		c.ModuleBase.MakeUninstallable()
		return
	}
	c.installer.skipInstall(c)
	c.installer.makeUninstallable(c)
}

func (c *Module) HostToolPath() android.OptionalPath {
+2 −2
Original line number Diff line number Diff line
@@ -107,6 +107,6 @@ func (installer *baseInstaller) relativeInstallPath() string {
	return String(installer.Properties.Relative_install_path)
}

func (installer *baseInstaller) skipInstall(mod *Module) {
	mod.ModuleBase.SkipInstall()
func (installer *baseInstaller) makeUninstallable(mod *Module) {
	mod.ModuleBase.MakeUninstallable()
}
Loading