From 2655e21bd00ff10ea20b447eb067c6411e52b3e8 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Sun, 11 Apr 2021 09:01:09 +0200 Subject: [PATCH] ASP-based solver: assign OS correctly with inheritance from parent (#22896) fixes #22871 When in presence of multiple choices for the operating system we were lacking a rule to derive the node OS if it was inherited. --- lib/spack/spack/solver/concretize.lp | 2 ++ lib/spack/spack/test/concretize.py | 16 ++++++++++++++++ lib/spack/spack/test/data/config/compilers.yaml | 10 ++++++++++ 3 files changed, 28 insertions(+) diff --git a/lib/spack/spack/solver/concretize.lp b/lib/spack/spack/solver/concretize.lp index ee69e9798f..3d250ac821 100644 --- a/lib/spack/spack/solver/concretize.lp +++ b/lib/spack/spack/solver/concretize.lp @@ -472,6 +472,8 @@ node_os_inherit(Dependency, OS) not node_os_set(Dependency). node_os_inherit(Package) :- node_os_inherit(Package, _). +node_os(Package, OS) :- node_os_inherit(Package, OS). + % fall back to default if not set or inherited node_os(Package, OS) :- node(Package), diff --git a/lib/spack/spack/test/concretize.py b/lib/spack/spack/test/concretize.py index 437edcb99f..56e111e220 100644 --- a/lib/spack/spack/test/concretize.py +++ b/lib/spack/spack/test/concretize.py @@ -1155,3 +1155,19 @@ def test_external_with_non_default_variant_as_dependency(self): assert '~foo' in s['external-non-default-variant'] assert '~bar' in s['external-non-default-variant'] assert s['external-non-default-variant'].external + + @pytest.mark.regression('22871') + @pytest.mark.parametrize('spec_str,expected_os', [ + ('mpileaks', 'os=debian6'), + # To trigger the bug in 22871 we need to have the same compiler + # spec available on both operating systems + ('mpileaks%gcc@4.5.0 platform=test os=debian6', 'os=debian6'), + ('mpileaks%gcc@4.5.0 platform=test os=redhat6', 'os=redhat6') + ]) + def test_os_selection_when_multiple_choices_are_possible( + self, spec_str, expected_os + ): + s = Spec(spec_str).concretized() + + for node in s.traverse(): + assert node.satisfies(expected_os) diff --git a/lib/spack/spack/test/data/config/compilers.yaml b/lib/spack/spack/test/data/config/compilers.yaml index 641331dc9f..e0b0464976 100644 --- a/lib/spack/spack/test/data/config/compilers.yaml +++ b/lib/spack/spack/test/data/config/compilers.yaml @@ -19,6 +19,16 @@ compilers: fc: None modules: 'None' target: x86_64 +- compiler: + spec: gcc@4.5.0 + operating_system: redhat6 + paths: + cc: /path/to/gcc + cxx: /path/to/g++ + f77: None + fc: None + modules: 'None' + target: x86_64 - compiler: spec: clang@3.3 operating_system: CNL