Allow users to supply preferred variants via packages.yaml

This commit is contained in:
Paul Hopkins 2016-07-11 11:44:15 +01:00
parent 07d4c6cf0b
commit bd91dd9d6d
3 changed files with 21 additions and 3 deletions

View File

@ -254,13 +254,18 @@ def concretize_architecture(self, spec):
def concretize_variants(self, spec):
"""If the spec already has variants filled in, return. Otherwise, add
the default variants from the package specification.
the user preferences from packages.yaml or the default variants from
the package specification.
"""
changed = False
preferred_variants = spack.pkgsort.spec_preferred_variants(spec.package_class.name)
for name, variant in spec.package_class.variants.items():
if name not in spec.variants:
spec.variants[name] = spack.spec.VariantSpec(name, variant.default)
changed = True
if name in preferred_variants:
spec.variants[name] = preferred_variants.get(name)
else:
spec.variants[name] = spack.spec.VariantSpec(name, variant.default)
return changed

View File

@ -257,7 +257,13 @@
'paths': {
'type' : 'object',
'default' : {},
}
},
'variants': {
'oneOf' : [
{ 'type' : 'string' },
{ 'type' : 'array',
'items' : { 'type' : 'string' } },
], },
},},},},},},
'modules': {

View File

@ -158,6 +158,13 @@ def spec_has_preferred_provider(self, pkgname, provider_str):
return bool(self._order_for_package(pkgname, 'providers',
provider_str, False))
def spec_preferred_variants(self, pkgname):
"""Return a VariantMap of preferred variants and their values"""
variants = self.preferred.get(pkgname, {}).get('variants', '')
if not isinstance(variants, basestring):
variants = "".join(variants)
return spack.spec.Spec(pkgname + variants).variants
def version_compare(self, pkgname, a, b):
"""Return less-than-0, 0, or greater than 0 if version a of pkgname is
respectively less-than, equal-to, or greater-than version b of