diff options
-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: |