From a0ad02c2471b5697cb3a2c123c3305d16447a2e3 Mon Sep 17 00:00:00 2001 From: Harmen Stoppels Date: Wed, 19 Mar 2025 19:44:45 +0100 Subject: [PATCH] solver: improve error message when single-valued variant cannot be satisfied (#49583) --- lib/spack/spack/solver/concretize.lp | 8 +++++--- lib/spack/spack/solver/error_messages.lp | 2 +- lib/spack/spack/test/concretization/errors.py | 3 +-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/spack/spack/solver/concretize.lp b/lib/spack/spack/solver/concretize.lp index 510800af6ed..287128206ac 100644 --- a/lib/spack/spack/solver/concretize.lp +++ b/lib/spack/spack/solver/concretize.lp @@ -960,12 +960,14 @@ error(100, "Cannot set variant '{0}' for package '{1}' because the variant condi build(node(ID, Package)). % at most one variant value for single-valued variants. -error(100, "'{0}' required multiple values for single-valued variant '{1}'", Package, Variant) +error(100, "'{0}' requires conflicting variant values 'Spec({1}={2})' and 'Spec({1}={3})'", Package, Variant, Value1, Value2) :- attr("node", node(ID, Package)), node_has_variant(node(ID, Package), Variant, _), variant_single_value(node(ID, Package), Variant), - build(node(ID, Package)), - 2 { attr("variant_value", node(ID, Package), Variant, Value) }. + attr("variant_value", node(ID, Package), Variant, Value1), + attr("variant_value", node(ID, Package), Variant, Value2), + Value1 < Value2, + build(node(ID, Package)). error(100, "No valid value for variant '{1}' of package '{0}'", Package, Variant) :- attr("node", node(ID, Package)), diff --git a/lib/spack/spack/solver/error_messages.lp b/lib/spack/spack/solver/error_messages.lp index 4fa523eb076..00276696486 100644 --- a/lib/spack/spack/solver/error_messages.lp +++ b/lib/spack/spack/solver/error_messages.lp @@ -117,7 +117,7 @@ error(0, "Cannot find a valid provider for virtual {0}", Virtual, startcauses, C condition_holds(Cause, node(CID, TriggerPkg)). % At most one variant value for single-valued variants -error(0, "'{0}' required multiple values for single-valued variant '{1}'\n Requested 'Spec({1}={2})' and 'Spec({1}={3})'", Package, Variant, Value1, Value2, startcauses, Cause1, X, Cause2, X) +error(0, "'{0}' requires conflicting variant values 'Spec({1}={2})' and 'Spec({1}={3})'", Package, Variant, Value1, Value2, startcauses, Cause1, X, Cause2, X) :- attr("node", node(X, Package)), node_has_variant(node(X, Package), Variant, VariantID), variant_single_value(node(X, Package), Variant), diff --git a/lib/spack/spack/test/concretization/errors.py b/lib/spack/spack/test/concretization/errors.py index f86ed6d187e..b05895c520a 100644 --- a/lib/spack/spack/test/concretization/errors.py +++ b/lib/spack/spack/test/concretization/errors.py @@ -29,8 +29,7 @@ ] variant_error_messages = [ - "'fftw' required multiple values for single-valued variant 'mpi'", - " Requested '~mpi' and '+mpi'", + "'fftw' requires conflicting variant values '~mpi' and '+mpi'", " required because quantum-espresso depends on fftw+mpi when +invino", " required because quantum-espresso+invino ^fftw~mpi requested explicitly", " required because quantum-espresso+invino ^fftw~mpi requested explicitly",