From de60e9d5829c47f26c6dced63470bec69538dd34 Mon Sep 17 00:00:00 2001 From: Stephen Herbein Date: Wed, 1 Aug 2018 03:58:54 -0700 Subject: lmod: fix use of custom separator in prepend_path etc. (#8737) fixes #8736 --- .../data/modules/lmod/module_path_separator.yaml | 5 +++ lib/spack/spack/test/modules/lmod.py | 14 +++++++ share/spack/templates/modules/modulefile.lua | 6 +-- .../packages/module-path-separator/package.py | 44 ++++++++++++++++++++++ 4 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 lib/spack/spack/test/data/modules/lmod/module_path_separator.yaml create mode 100644 var/spack/repos/builtin.mock/packages/module-path-separator/package.py 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=";") -- cgit v1.2.3-70-g09d2