summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/spack/spack/modules/common.py6
-rw-r--r--lib/spack/spack/test/data/modules/tcl/override_config.yaml13
-rw-r--r--lib/spack/spack/test/modules/tcl.py14
3 files changed, 28 insertions, 5 deletions
diff --git a/lib/spack/spack/modules/common.py b/lib/spack/spack/modules/common.py
index 42fc398e47..cbc064520c 100644
--- a/lib/spack/spack/modules/common.py
+++ b/lib/spack/spack/modules/common.py
@@ -174,12 +174,8 @@ def merge_config_rules(configuration, spec):
# evaluated in order of appearance in the module file
spec_configuration = module_specific_configuration.pop('all', {})
for constraint, action in module_specific_configuration.items():
- override = False
- if constraint.endswith(':'):
- constraint = constraint.strip(':')
- override = True
if spec.satisfies(constraint, strict=True):
- if override:
+ if hasattr(constraint, 'override') and constraint.override:
spec_configuration = {}
update_dictionary_extending_lists(spec_configuration, action)
diff --git a/lib/spack/spack/test/data/modules/tcl/override_config.yaml b/lib/spack/spack/test/data/modules/tcl/override_config.yaml
new file mode 100644
index 0000000000..4d3aaea7ae
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/tcl/override_config.yaml
@@ -0,0 +1,13 @@
+enable:
+ - tcl
+tcl:
+ all:
+ suffixes:
+ '^mpich': mpich
+ mpileaks:
+ suffixes:
+ '+static': static
+ mpileaks+opt::
+ suffixes:
+ '~debug': over
+ '^mpich': ridden
diff --git a/lib/spack/spack/test/modules/tcl.py b/lib/spack/spack/test/modules/tcl.py
index 68f9af13c6..ec0b47c484 100644
--- a/lib/spack/spack/test/modules/tcl.py
+++ b/lib/spack/spack/test/modules/tcl.py
@@ -298,6 +298,20 @@ class TestTcl(object):
[x for x in content if 'setenv FOOBAR "callpath"' in x]
) == 1
+ def test_override_config(self, module_configuration, factory):
+ """Tests overriding some sections of the configuration file."""
+ module_configuration('override_config')
+
+ writer, spec = factory('mpileaks~opt arch=x86-linux')
+ assert 'mpich-static' in writer.layout.use_name
+ assert 'over' not in writer.layout.use_name
+ assert 'ridden' not in writer.layout.use_name
+
+ writer, spec = factory('mpileaks+opt arch=x86-linux')
+ assert 'over-ridden' in writer.layout.use_name
+ assert 'mpich' not in writer.layout.use_name
+ assert 'static' not in writer.layout.use_name
+
def test_override_template_in_package(
self, modulefile_content, module_configuration
):