summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn W. Parent <45471568+johnwparent@users.noreply.github.com>2023-05-25 20:08:15 -0400
committerGitHub <noreply@github.com>2023-05-25 17:08:15 -0700
commitd147ef231f40445b5815f1e3c434f70cfb37bc7a (patch)
tree29127e122113f16e9979b0e79eb011da902eee90
parent1c7af83d32bd744fe8ad49e0a4d500f857375501 (diff)
downloadspack-d147ef231f40445b5815f1e3c434f70cfb37bc7a.tar.gz
spack-d147ef231f40445b5815f1e3c434f70cfb37bc7a.tar.bz2
spack-d147ef231f40445b5815f1e3c434f70cfb37bc7a.tar.xz
spack-d147ef231f40445b5815f1e3c434f70cfb37bc7a.zip
Windows: fix "spack build-env" (#37923)
"spack build-env" was not generating proper environment variable definitions on Windows; this commit updates the generated commands to succeed with batch/PowerShell.
-rw-r--r--lib/spack/spack/test/cmd/build_env.py6
-rw-r--r--lib/spack/spack/test/util/environment.py5
-rw-r--r--lib/spack/spack/util/environment.py13
3 files changed, 21 insertions, 3 deletions
diff --git a/lib/spack/spack/test/cmd/build_env.py b/lib/spack/spack/test/cmd/build_env.py
index 0e10a629ed..a03d9760bf 100644
--- a/lib/spack/spack/test/cmd/build_env.py
+++ b/lib/spack/spack/test/cmd/build_env.py
@@ -3,6 +3,7 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import pickle
+import sys
import pytest
@@ -39,7 +40,10 @@ def test_dump(tmpdir):
with tmpdir.as_cwd():
build_env("--dump", _out_file, "zlib")
with open(_out_file) as f:
- assert any(line.startswith("PATH=") for line in f.readlines())
+ if sys.platform == "win32":
+ assert any(line.startswith('set "PATH=') for line in f.readlines())
+ else:
+ assert any(line.startswith("PATH=") for line in f.readlines())
@pytest.mark.usefixtures("config", "mock_packages", "working_env")
diff --git a/lib/spack/spack/test/util/environment.py b/lib/spack/spack/test/util/environment.py
index eff07cbee9..801c2d19f4 100644
--- a/lib/spack/spack/test/util/environment.py
+++ b/lib/spack/spack/test/util/environment.py
@@ -119,7 +119,10 @@ def test_dump_environment(prepare_environment_for_tests, tmpdir):
dumpfile_path = str(tmpdir.join("envdump.txt"))
envutil.dump_environment(dumpfile_path)
with open(dumpfile_path, "r") as dumpfile:
- assert "TEST_ENV_VAR={0}; export TEST_ENV_VAR\n".format(test_paths) in list(dumpfile)
+ if sys.platform == "win32":
+ assert 'set "TEST_ENV_VAR={}"\n'.format(test_paths) in list(dumpfile)
+ else:
+ assert "TEST_ENV_VAR={0}; export TEST_ENV_VAR\n".format(test_paths) in list(dumpfile)
def test_reverse_environment_modifications(working_env):
diff --git a/lib/spack/spack/util/environment.py b/lib/spack/spack/util/environment.py
index 0eed2726b4..ded31dcf39 100644
--- a/lib/spack/spack/util/environment.py
+++ b/lib/spack/spack/util/environment.py
@@ -171,7 +171,11 @@ def path_put_first(var_name: str, directories: List[Path]):
BASH_FUNCTION_FINDER = re.compile(r"BASH_FUNC_(.*?)\(\)")
-def _env_var_to_source_line(var: str, val: str) -> str:
+def _win_env_var_to_set_line(var: str, val: str) -> str:
+ return f'set "{var}={val}"'
+
+
+def _nix_env_var_to_source_line(var: str, val: str) -> str:
if var.startswith("BASH_FUNC"):
source_line = "function {fname}{decl}; export -f {fname}".format(
fname=BASH_FUNCTION_FINDER.sub(r"\1", var), decl=val
@@ -181,6 +185,13 @@ def _env_var_to_source_line(var: str, val: str) -> str:
return source_line
+def _env_var_to_source_line(var: str, val: str) -> str:
+ if sys.platform == "win32":
+ return _win_env_var_to_set_line(var, val)
+ else:
+ return _nix_env_var_to_source_line(var, val)
+
+
@system_path_filter(arg_slice=slice(1))
def dump_environment(path: Path, environment: Optional[MutableMapping[str, str]] = None):
"""Dump an environment dictionary to a source-able file.