Merge "Change how override_modules work with prebuilts."
This commit is contained in:
commit
caec264ba9
|
@ -42,6 +42,11 @@ type OverrideModule interface {
|
||||||
setOverridingProperties(properties []interface{})
|
setOverridingProperties(properties []interface{})
|
||||||
|
|
||||||
getOverrideModuleProperties() *OverrideModuleProperties
|
getOverrideModuleProperties() *OverrideModuleProperties
|
||||||
|
|
||||||
|
// Internal funcs to handle interoperability between override modules and prebuilts.
|
||||||
|
// i.e. cases where an overriding module, too, is overridden by a prebuilt module.
|
||||||
|
setOverriddenByPrebuilt(overridden bool)
|
||||||
|
getOverriddenByPrebuilt() bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Base module struct for override module types
|
// Base module struct for override module types
|
||||||
|
@ -49,6 +54,8 @@ type OverrideModuleBase struct {
|
||||||
moduleProperties OverrideModuleProperties
|
moduleProperties OverrideModuleProperties
|
||||||
|
|
||||||
overridingProperties []interface{}
|
overridingProperties []interface{}
|
||||||
|
|
||||||
|
overriddenByPrebuilt bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type OverrideModuleProperties struct {
|
type OverrideModuleProperties struct {
|
||||||
|
@ -74,6 +81,14 @@ func (o *OverrideModuleBase) GetOverriddenModuleName() string {
|
||||||
return proptools.String(o.moduleProperties.Base)
|
return proptools.String(o.moduleProperties.Base)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (o *OverrideModuleBase) setOverriddenByPrebuilt(overridden bool) {
|
||||||
|
o.overriddenByPrebuilt = overridden
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *OverrideModuleBase) getOverriddenByPrebuilt() bool {
|
||||||
|
return o.overriddenByPrebuilt
|
||||||
|
}
|
||||||
|
|
||||||
func InitOverrideModule(m OverrideModule) {
|
func InitOverrideModule(m OverrideModule) {
|
||||||
m.setOverridingProperties(m.GetProperties())
|
m.setOverridingProperties(m.GetProperties())
|
||||||
|
|
||||||
|
@ -208,21 +223,19 @@ var overrideBaseDepTag overrideBaseDependencyTag
|
||||||
// next phase.
|
// next phase.
|
||||||
func overrideModuleDepsMutator(ctx BottomUpMutatorContext) {
|
func overrideModuleDepsMutator(ctx BottomUpMutatorContext) {
|
||||||
if module, ok := ctx.Module().(OverrideModule); ok {
|
if module, ok := ctx.Module().(OverrideModule); ok {
|
||||||
// Skip this overriding module if there's a prebuilt module that overrides it with prefer flag.
|
// See if there's a prebuilt module that overrides this override module with prefer flag,
|
||||||
overriddenByPrebuilt := false
|
// in which case we call SkipInstall on the corresponding variant later.
|
||||||
ctx.VisitDirectDepsWithTag(PrebuiltDepTag, func(dep Module) {
|
ctx.VisitDirectDepsWithTag(PrebuiltDepTag, func(dep Module) {
|
||||||
prebuilt, ok := dep.(PrebuiltInterface)
|
prebuilt, ok := dep.(PrebuiltInterface)
|
||||||
if !ok {
|
if !ok {
|
||||||
panic("PrebuiltDepTag leads to a non-prebuilt module " + dep.Name())
|
panic("PrebuiltDepTag leads to a non-prebuilt module " + dep.Name())
|
||||||
}
|
}
|
||||||
if prebuilt.Prebuilt().UsePrebuilt() {
|
if prebuilt.Prebuilt().UsePrebuilt() {
|
||||||
overriddenByPrebuilt = true
|
module.setOverriddenByPrebuilt(true)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
if !overriddenByPrebuilt {
|
ctx.AddDependency(ctx.Module(), overrideBaseDepTag, *module.getOverrideModuleProperties().Base)
|
||||||
ctx.AddDependency(ctx.Module(), overrideBaseDepTag, *module.getOverrideModuleProperties().Base)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,6 +271,10 @@ func performOverrideMutator(ctx BottomUpMutatorContext) {
|
||||||
ctx.AliasVariation(variants[0])
|
ctx.AliasVariation(variants[0])
|
||||||
for i, o := range overrides {
|
for i, o := range overrides {
|
||||||
mods[i+1].(OverridableModule).override(ctx, o)
|
mods[i+1].(OverridableModule).override(ctx, o)
|
||||||
|
if o.getOverriddenByPrebuilt() {
|
||||||
|
// The overriding module itself, too, is overridden by a prebuilt. Skip its installation.
|
||||||
|
mods[i+1].SkipInstall()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if o, ok := ctx.Module().(OverrideModule); ok {
|
} else if o, ok := ctx.Module().(OverrideModule); ok {
|
||||||
// Create a variant of the overriding module with its own name. This matches the above local
|
// Create a variant of the overriding module with its own name. This matches the above local
|
||||||
|
|
Loading…
Reference in New Issue