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): def concretize_variants(self, spec):
"""If the spec already has variants filled in, return. Otherwise, add """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 changed = False
preferred_variants = spack.pkgsort.spec_preferred_variants(spec.package_class.name)
for name, variant in spec.package_class.variants.items(): for name, variant in spec.package_class.variants.items():
if name not in spec.variants: if name not in spec.variants:
spec.variants[name] = spack.spec.VariantSpec(name, variant.default)
changed = True 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 return changed

View File

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

View File

@ -158,6 +158,13 @@ def spec_has_preferred_provider(self, pkgname, provider_str):
return bool(self._order_for_package(pkgname, 'providers', return bool(self._order_for_package(pkgname, 'providers',
provider_str, False)) 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): def version_compare(self, pkgname, a, b):
"""Return less-than-0, 0, or greater than 0 if version a of pkgname is """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 respectively less-than, equal-to, or greater-than version b of