Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions easybuild/tools/module_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,8 @@ class ModuleGenerator:
REGEX_QUOTE_SHELL_VAR = re.compile(rf'[\"\']\$({REGEX_SHELL_VAR_PATTERN})[\"\']')

# default options for modextravars
DEFAULT_MODEXTRAVARS_PUSHENV = False
DEFAULT_MODEXTRAVARS_SHELL_VARS = True
DEFAULT_MODEXTRAVARS_USE_PUSHENV = False
DEFAULT_MODEXTRAVARS_RESOLVE_ENV_VARS = True

def __init__(self, application, fake=False):
"""ModuleGenerator constructor."""
Expand Down Expand Up @@ -443,15 +443,15 @@ def _unpack_setenv_value(self, env_var_name, env_var_val):
"""
Unpack value that specifies how to define an environment variable with specified name.
"""
use_pushenv = self.DEFAULT_MODEXTRAVARS_PUSHENV
resolve_shell_vars = self.DEFAULT_MODEXTRAVARS_SHELL_VARS
use_pushenv = self.DEFAULT_MODEXTRAVARS_USE_PUSHENV
resolve_env_vars = self.DEFAULT_MODEXTRAVARS_RESOLVE_ENV_VARS

# value may be specified as a string, or as a dict for special cases
if isinstance(env_var_val, str):
value = env_var_val
elif isinstance(env_var_val, dict):
use_pushenv = env_var_val.get('pushenv', self.DEFAULT_MODEXTRAVARS_PUSHENV)
resolve_shell_vars = env_var_val.get('shell_vars', self.DEFAULT_MODEXTRAVARS_SHELL_VARS)
use_pushenv = env_var_val.get('pushenv', self.DEFAULT_MODEXTRAVARS_USE_PUSHENV)
resolve_env_vars = env_var_val.get('resolve_env_vars', self.DEFAULT_MODEXTRAVARS_RESOLVE_ENV_VARS)
try:
value = env_var_val['value']
except KeyError as err:
Expand All @@ -461,7 +461,7 @@ def _unpack_setenv_value(self, env_var_name, env_var_val):
raise EasyBuildError("Incorrect value type for setting $%s environment variable (%s): %s",
env_var_name, type(env_var_val), env_var_val)

return value, use_pushenv, resolve_shell_vars
return value, use_pushenv, resolve_env_vars

# From this point on just not implemented methods

Expand Down Expand Up @@ -1074,12 +1074,12 @@ def set_environment(self, key, value, relpath=False):
self.log.info("Not including statement to define environment variable $%s, as specified", key)
return ''

set_value, use_pushenv, resolve_shell_vars = self._unpack_setenv_value(key, value)
set_value, use_pushenv, resolve_env_vars = self._unpack_setenv_value(key, value)

if relpath:
set_value = os.path.join('$root', set_value) if set_value else '$root'

if resolve_shell_vars:
if resolve_env_vars:
set_value = self.REGEX_SHELL_VAR.sub(r'$::env(\1)', set_value)

# quotes are needed, to ensure smooth working of EBDEVEL* modulefiles
Expand Down Expand Up @@ -1546,16 +1546,16 @@ def set_environment(self, key, value, relpath=False):
self.log.info("Not including statement to define environment variable $%s, as specified", key)
return ''

set_value, use_pushenv, resolve_shell_vars = self._unpack_setenv_value(key, value)
set_value, use_pushenv, resolve_env_vars = self._unpack_setenv_value(key, value)

if relpath:
set_value = self._path_join_cmd(set_value)
if resolve_shell_vars:
if resolve_env_vars:
# replace quoted substring with env var with os.getenv statement
# example: pathJoin(root, "$HOME") -> pathJoin(root, os.getenv("HOME"))
set_value = self.REGEX_QUOTE_SHELL_VAR.sub(self.OS_GETENV_TEMPLATE % r"\1", set_value)
else:
if resolve_shell_vars:
if resolve_env_vars:
# replace env var with os.getenv statement
# example: $HOME -> os.getenv("HOME")
concat_getenv = self.CONCAT_STR + self.OS_GETENV_TEMPLATE % r"\1" + self.CONCAT_STR
Expand Down
16 changes: 8 additions & 8 deletions test/framework/module_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -990,21 +990,21 @@ def test_env(self):
({'value': 'value',
'pushenv': False}, False, 'setenv\tkey\t\t"value"\n', 'setenv("key", "value")\n'), # noqa
({'value': "$VAR",
'shell_vars': True}, False, 'setenv\tkey\t\t"$::env(VAR)"\n', 'setenv("key", os.getenv("VAR"))\n'), # noqa
'resolve_env_vars': True}, False, 'setenv\tkey\t\t"$::env(VAR)"\n', 'setenv("key", os.getenv("VAR"))\n'), # noqa
({'value': "$VAR",
'shell_vars': True}, True, 'setenv\tkey\t\t"$root/$::env(VAR)"\n', 'setenv("key", pathJoin(root, os.getenv("VAR")))\n'), # noqa
'resolve_env_vars': True}, True, 'setenv\tkey\t\t"$root/$::env(VAR)"\n', 'setenv("key", pathJoin(root, os.getenv("VAR")))\n'), # noqa
({'value': "$VAR",
'shell_vars': False}, False, 'setenv\tkey\t\t"$VAR"\n', 'setenv("key", "$VAR")\n'), # noqa
'resolve_env_vars': False}, False, 'setenv\tkey\t\t"$VAR"\n', 'setenv("key", "$VAR")\n'), # noqa
({'value': "$VAR",
'shell_vars': False}, True, 'setenv\tkey\t\t"$root/$VAR"\n', 'setenv("key", pathJoin(root, "$VAR"))\n'), # noqa
'resolve_env_vars': False}, True, 'setenv\tkey\t\t"$root/$VAR"\n', 'setenv("key", pathJoin(root, "$VAR"))\n'), # noqa
({'value': "path/$VAR/dir",
'shell_vars': True}, False, 'setenv\tkey\t\t"path/$::env(VAR)/dir"\n', 'setenv("key", "path/" .. os.getenv("VAR") .. "/dir")\n'), # noqa
'resolve_env_vars': True}, False, 'setenv\tkey\t\t"path/$::env(VAR)/dir"\n', 'setenv("key", "path/" .. os.getenv("VAR") .. "/dir")\n'), # noqa
({'value': "path/$VAR/dir",
'shell_vars': True}, True, 'setenv\tkey\t\t"$root/path/$::env(VAR)/dir"\n', 'setenv("key", pathJoin(root, "path", os.getenv("VAR"), "dir"))\n'), # noqa
'resolve_env_vars': True}, True, 'setenv\tkey\t\t"$root/path/$::env(VAR)/dir"\n', 'setenv("key", pathJoin(root, "path", os.getenv("VAR"), "dir"))\n'), # noqa
({'value': "path/$VAR/dir",
'shell_vars': False}, False, 'setenv\tkey\t\t"path/$VAR/dir"\n', 'setenv("key", "path/$VAR/dir")\n'), # noqa
'resolve_env_vars': False}, False, 'setenv\tkey\t\t"path/$VAR/dir"\n', 'setenv("key", "path/$VAR/dir")\n'), # noqa
({'value': "path/$VAR/dir",
'shell_vars': False}, True, 'setenv\tkey\t\t"$root/path/$VAR/dir"\n', 'setenv("key", pathJoin(root, "path", "$VAR", "dir"))\n'), # noqa
'resolve_env_vars': False}, True, 'setenv\tkey\t\t"$root/path/$VAR/dir"\n', 'setenv("key", pathJoin(root, "path", "$VAR", "dir"))\n'), # noqa
)
# test set_environment
for test_value, test_relpath, ref_tcl, ref_lua in collection:
Expand Down