summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/spack/spack/test/data/modules/lmod/module_path_separator.yaml5
-rw-r--r--lib/spack/spack/test/modules/lmod.py14
-rw-r--r--share/spack/templates/modules/modulefile.lua6
-rw-r--r--var/spack/repos/builtin.mock/packages/module-path-separator/package.py44
4 files changed, 66 insertions, 3 deletions
diff --git a/lib/spack/spack/test/data/modules/lmod/module_path_separator.yaml b/lib/spack/spack/test/data/modules/lmod/module_path_separator.yaml
new file mode 100644
index 0000000000..208554968f
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/lmod/module_path_separator.yaml
@@ -0,0 +1,5 @@
+enable:
+ - lmod
+lmod:
+ core_compilers:
+ - 'clang@3.3'
diff --git a/lib/spack/spack/test/modules/lmod.py b/lib/spack/spack/test/modules/lmod.py
index b615619a92..2b3949621d 100644
--- a/lib/spack/spack/test/modules/lmod.py
+++ b/lib/spack/spack/test/modules/lmod.py
@@ -23,6 +23,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
+import re
import pytest
import spack.modules.lmod
@@ -151,6 +152,19 @@ class TestLmod(object):
assert len([x for x in content if 'setenv("FOO", "foo")' in x]) == 0
assert len([x for x in content if 'unsetenv("BAR")' in x]) == 0
+ def test_prepend_path_separator(self, modulefile_content,
+ module_configuration):
+ """Tests modifications to run-time environment."""
+
+ module_configuration('module_path_separator')
+ content = modulefile_content('module-path-separator')
+
+ for line in content:
+ if re.match(r'[a-z]+_path\("COLON"', line):
+ assert line.endswith('"foo", ":")')
+ elif re.match(r'[a-z]+_path\("SEMICOLON"', line):
+ assert line.endswith('"bar", ";")')
+
def test_blacklist(self, modulefile_content, module_configuration):
"""Tests blacklisting the generation of selected modules."""
diff --git a/share/spack/templates/modules/modulefile.lua b/share/spack/templates/modules/modulefile.lua
index cf37595228..a8eae9bef1 100644
--- a/share/spack/templates/modules/modulefile.lua
+++ b/share/spack/templates/modules/modulefile.lua
@@ -73,11 +73,11 @@ end
{% block environment %}
{% for command_name, cmd in environment_modifications %}
{% if command_name == 'PrependPath' %}
-prepend_path("{{ cmd.name }}", "{{ cmd.value }}")
+prepend_path("{{ cmd.name }}", "{{ cmd.value }}", "{{ cmd.separator }}")
{% elif command_name == 'AppendPath' %}
-append_path("{{ cmd.name }}", "{{ cmd.value }}")
+append_path("{{ cmd.name }}", "{{ cmd.value }}", "{{ cmd.separator }}")
{% elif command_name == 'RemovePath' %}
-remove_path("{{ cmd.name }}", "{{ cmd.value }}")
+remove_path("{{ cmd.name }}", "{{ cmd.value }}", "{{ cmd.separator }}")
{% elif command_name == 'SetEnv' %}
setenv("{{ cmd.name }}", "{{ cmd.value }}")
{% elif command_name == 'UnsetEnv' %}
diff --git a/var/spack/repos/builtin.mock/packages/module-path-separator/package.py b/var/spack/repos/builtin.mock/packages/module-path-separator/package.py
new file mode 100644
index 0000000000..c29a538588
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/module-path-separator/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# Copyright (c) 2013-2018, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/spack/spack
+# Please also see the NOTICE and LICENSE files for our notice and the LGPL.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License (as
+# published by the Free Software Foundation) version 2.1, February 1999.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
+# conditions of the GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##############################################################################
+from spack import *
+
+
+class ModulePathSeparator(Package):
+ homepage = "http://www.llnl.gov"
+ url = "http://www.llnl.gov/module-path-separator-1.0.tar.gz"
+
+ version(1.0, 'foobarbaz')
+
+ def install(self, spec, prefix):
+ pass
+
+ def setup_environment(self, senv, renv):
+ renv.append_path("COLON", "foo")
+ renv.prepend_path("COLON", "foo")
+ renv.remove_path("COLON", "foo")
+
+ renv.append_path("SEMICOLON", "bar", separator=";")
+ renv.prepend_path("SEMICOLON", "bar", separator=";")
+ renv.remove_path("SEMICOLON", "bar", separator=";")