diff options
author | Massimiliano Culpo <massimiliano.culpo@gmail.com> | 2021-04-11 09:01:09 +0200 |
---|---|---|
committer | Todd Gamblin <tgamblin@llnl.gov> | 2021-05-22 11:51:20 -0700 |
commit | 2655e21bd00ff10ea20b447eb067c6411e52b3e8 (patch) | |
tree | 5f7deaa41d8c6cd951faa5b0bf1fcb13d43848c1 | |
parent | 5546b22c70585c956ad9fd88f68d8139ff966ded (diff) | |
download | spack-2655e21bd00ff10ea20b447eb067c6411e52b3e8.tar.gz spack-2655e21bd00ff10ea20b447eb067c6411e52b3e8.tar.bz2 spack-2655e21bd00ff10ea20b447eb067c6411e52b3e8.tar.xz spack-2655e21bd00ff10ea20b447eb067c6411e52b3e8.zip |
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.
-rw-r--r-- | lib/spack/spack/solver/concretize.lp | 2 | ||||
-rw-r--r-- | lib/spack/spack/test/concretize.py | 16 | ||||
-rw-r--r-- | lib/spack/spack/test/data/config/compilers.yaml | 10 |
3 files changed, 28 insertions, 0 deletions
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 @@ class TestConcretize(object): 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 @@ -20,6 +20,16 @@ compilers: 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 paths: |