Allow users to supply preferred variants via packages.yaml
This commit is contained in:
parent
07d4c6cf0b
commit
bd91dd9d6d
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
@ -257,7 +257,13 @@
|
|||||||
'paths': {
|
'paths': {
|
||||||
'type' : 'object',
|
'type' : 'object',
|
||||||
'default' : {},
|
'default' : {},
|
||||||
}
|
},
|
||||||
|
'variants': {
|
||||||
|
'oneOf' : [
|
||||||
|
{ 'type' : 'string' },
|
||||||
|
{ 'type' : 'array',
|
||||||
|
'items' : { 'type' : 'string' } },
|
||||||
|
], },
|
||||||
},},},},},},
|
},},},},},},
|
||||||
|
|
||||||
'modules': {
|
'modules': {
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user