aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2019-08-17 23:15:56 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2019-08-17 23:15:56 +0000
commitef28eb63cc6c45781413b36c9a016198c620ce95 (patch)
tree7e45239ca47a3572cfd7f120421b736d886555e6
parent12bcfa5e9b104e2fceaf6a5207af0f718b01d96a (diff)
parentba1ea7583953186a1a5519c0cd1087e403ad516f (diff)
downloadblueprint-android10-qpr1-c-release.tar.gz
Change-Id: I2010b45f225a6ad7bdfa12de5b3bc1348995672e
-rw-r--r--context.go15
-rw-r--r--module_ctx.go29
2 files changed, 33 insertions, 11 deletions
diff --git a/context.go b/context.go
index 324d1ec..23d9262 100644
--- a/context.go
+++ b/context.go
@@ -1147,7 +1147,7 @@ func (c *Context) cloneLogicModule(origModule *moduleInfo) (Module, []interface{
}
func (c *Context) createVariations(origModule *moduleInfo, mutatorName string,
- variationNames []string) ([]*moduleInfo, []error) {
+ defaultVariationName *string, variationNames []string) ([]*moduleInfo, []error) {
if len(variationNames) == 0 {
panic(fmt.Errorf("mutator %q passed zero-length variation list for module %q",
@@ -1192,7 +1192,7 @@ func (c *Context) createVariations(origModule *moduleInfo, mutatorName string,
newModules = append(newModules, newModule)
- newErrs := c.convertDepsToVariation(newModule, mutatorName, variationName)
+ newErrs := c.convertDepsToVariation(newModule, mutatorName, variationName, defaultVariationName)
if len(newErrs) > 0 {
errs = append(errs, newErrs...)
}
@@ -1209,7 +1209,7 @@ func (c *Context) createVariations(origModule *moduleInfo, mutatorName string,
}
func (c *Context) convertDepsToVariation(module *moduleInfo,
- mutatorName, variationName string) (errs []error) {
+ mutatorName, variationName string, defaultVariationName *string) (errs []error) {
for i, dep := range module.directDeps {
if dep.module.logicModule == nil {
@@ -1220,6 +1220,15 @@ func (c *Context) convertDepsToVariation(module *moduleInfo,
break
}
}
+ if newDep == nil && defaultVariationName != nil {
+ // give it a second chance; match with defaultVariationName
+ for _, m := range dep.module.splitModules {
+ if m.variant[mutatorName] == *defaultVariationName {
+ newDep = m
+ break
+ }
+ }
+ }
if newDep == nil {
errs = append(errs, &BlueprintError{
Err: fmt.Errorf("failed to find variation %q for module %q needed by %q",
diff --git a/module_ctx.go b/module_ctx.go
index d127c0e..bdb14ad 100644
--- a/module_ctx.go
+++ b/module_ctx.go
@@ -555,12 +555,13 @@ func (m *moduleContext) GetMissingDependencies() []string {
type mutatorContext struct {
baseModuleContext
- name string
- reverseDeps []reverseDep
- rename []rename
- replace []replace
- newVariations []*moduleInfo // new variants of existing modules
- newModules []*moduleInfo // brand new modules
+ name string
+ reverseDeps []reverseDep
+ rename []rename
+ replace []replace
+ newVariations []*moduleInfo // new variants of existing modules
+ newModules []*moduleInfo // brand new modules
+ defaultVariation *string
}
type baseMutatorContext interface {
@@ -607,7 +608,15 @@ type BottomUpMutatorContext interface {
AddReverseDependency(module Module, tag DependencyTag, name string)
CreateVariations(...string) []Module
CreateLocalVariations(...string) []Module
+
+ // SetDependencyVariation sets all dangling dependencies on the current module to point to the variation
+ // with given name. This function ignores the default variation set by SetDefaultDependencyVariation.
SetDependencyVariation(string)
+
+ // SetDefaultDependencyVariation sets the default variation when a dangling reference is detected
+ // during the subsequent calls on Create*Variations* functions. To reset, set it to nil.
+ SetDefaultDependencyVariation(*string)
+
AddVariationDependencies([]Variation, DependencyTag, ...string)
AddFarVariationDependencies([]Variation, DependencyTag, ...string)
AddInterVariantDependency(tag DependencyTag, from, to Module)
@@ -671,7 +680,7 @@ func (mctx *mutatorContext) CreateLocalVariations(variationNames ...string) []Mo
func (mctx *mutatorContext) createVariations(variationNames []string, local bool) []Module {
ret := []Module{}
- modules, errs := mctx.context.createVariations(mctx.module, mctx.name, variationNames)
+ modules, errs := mctx.context.createVariations(mctx.module, mctx.name, mctx.defaultVariation, variationNames)
if len(errs) > 0 {
mctx.errs = append(mctx.errs, errs...)
}
@@ -698,7 +707,11 @@ func (mctx *mutatorContext) createVariations(variationNames []string, local bool
// Set all dangling dependencies on the current module to point to the variation
// with given name.
func (mctx *mutatorContext) SetDependencyVariation(variationName string) {
- mctx.context.convertDepsToVariation(mctx.module, mctx.name, variationName)
+ mctx.context.convertDepsToVariation(mctx.module, mctx.name, variationName, nil)
+}
+
+func (mctx *mutatorContext) SetDefaultDependencyVariation(variationName *string) {
+ mctx.defaultVariation = variationName
}
func (mctx *mutatorContext) Module() Module {