示例#1
0
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
示例#2
0
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