def _analyze_variants_in_directive(pkg, constraint, directive, error_cls): import spack.variant variant_exceptions = (spack.variant.InconsistentValidationError, spack.variant.MultipleValuesInExclusiveVariantError, spack.variant.InvalidVariantValueError, KeyError) errors = [] for name, v in constraint.variants.items(): try: variant, _ = pkg.variants[name] variant.validate_or_raise(v, pkg=pkg) except variant_exceptions as e: summary = pkg.name + ': wrong variant in "{0}" directive' summary = summary.format(directive) filename = spack.repo.path.filename_for_package_name(pkg.name) error_msg = str(e).strip() if isinstance(e, KeyError): error_msg = 'the variant {0} does not exist'.format(error_msg) err = error_cls(summary=summary, details=[error_msg, 'in ' + filename]) errors.append(err) return errors
def test_variant_defaults_listed_explicitly_in_values(): failing = [] for pkg in spack.repo.path.all_packages(): for variant_name, variant in pkg.variants.items(): vspec = variant.make_default() try: variant.validate_or_raise(vspec, pkg=pkg) except spack.variant.InvalidVariantValueError: failing.append((pkg.name, variant.name)) assert not failing