Merge remote-tracking branch 'aosp/upstream' into master
* aosp/upstream:
Add SetDefaultDependencyVariation
Bug: 138103882
Test: m checkbuild
Change-Id: I2c79c3c9e0437fd785b06ca20f43da2963d50b68
diff --git a/context.go b/context.go
index 6a61861..42b2df1 100644
--- a/context.go
+++ b/context.go
@@ -1153,7 +1153,7 @@
}
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",
@@ -1198,7 +1198,7 @@
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...)
}
@@ -1215,7 +1215,7 @@
}
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 {
@@ -1226,6 +1226,15 @@
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 37079ad..bc05787 100644
--- a/module_ctx.go
+++ b/module_ctx.go
@@ -661,12 +661,13 @@
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 {
@@ -752,9 +753,13 @@
CreateLocalVariations(...string) []Module
// SetDependencyVariation sets all dangling dependencies on the current module to point to the variation
- // with given name.
+ // 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 adds deps as dependencies of the current module, but uses the variations
// argument to select which variant of the dependency to use. A variant of the dependency must
// exist that matches the all of the non-local variations of the current module, plus the variations
@@ -825,7 +830,7 @@
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...)
}
@@ -850,7 +855,11 @@
}
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 {