diff --git a/conda_build/build.py b/conda_build/build.py index 4be112f57b..f6da01e4c9 100644 --- a/conda_build/build.py +++ b/conda_build/build.py @@ -1762,15 +1762,14 @@ def bundle_conda( if "=" in var: val = var.split("=", 1)[1] var = var.split("=", 1)[0] + env_output[var] = val elif var not in os.environ: warnings.warn( f"The environment variable '{var}' specified in script_env is undefined.", UserWarning, ) - val = "" else: - val = os.environ[var] - env_output[var] = val + env_output[var] = os.environ[var] dest_file = os.path.join(metadata.config.work_dir, output["script"]) utils.copy_into(os.path.join(metadata.path, output["script"]), dest_file) from os import stat diff --git a/news/5322-undefine-build-vars b/news/5322-undefine-build-vars new file mode 100644 index 0000000000..67c47373b5 --- /dev/null +++ b/news/5322-undefine-build-vars @@ -0,0 +1,20 @@ +### Enhancements + +* + +### Bug fixes + +* Ensures that variables mentioned in `script_env` are undefined in multi-output build environment + if undefined in the environment `conda-build` is invoked from. + +### Deprecations + +* + +### Docs + +* + +### Other + +* diff --git a/tests/test-recipes/split-packages/_build_script_relying_on_missing_var/meta.yaml b/tests/test-recipes/split-packages/_build_script_relying_on_missing_var/meta.yaml new file mode 100644 index 0000000000..55ce0b9d0d --- /dev/null +++ b/tests/test-recipes/split-packages/_build_script_relying_on_missing_var/meta.yaml @@ -0,0 +1,14 @@ +package: + name: test_build_script_relying_on_missing_var + version: 1.0 + +outputs: + - name: test_1 + build: + script_env: + - TEST_FN_DOESNT_EXIST + script: + - python -c "import os; print('val...' + os.environ['TEST_FN_DOESNT_EXIST'])" + requirements: + host: + - python diff --git a/tests/test_subpackages.py b/tests/test_subpackages.py index 4307eb0f5b..881a4eb4cb 100644 --- a/tests/test_subpackages.py +++ b/tests/test_subpackages.py @@ -11,7 +11,7 @@ from conda.base.context import context from conda_build import api, utils -from conda_build.exceptions import CondaBuildUserError +from conda_build.exceptions import BuildScriptException, CondaBuildUserError from conda_build.metadata import MetaDataTuple from conda_build.render import finalize_metadata @@ -354,6 +354,18 @@ def test_build_script_and_script_env_warn_empty_script_env(testing_config): api.build(recipe, config=testing_config) +@pytest.mark.sanity +def test_build_script_does_not_set_env_from_script_env_if_missing( + testing_config, capfd, monkeypatch +): + monkeypatch.delenv("TEST_FN_DOESNT_EXIST", raising=False) + recipe = os.path.join(subpackage_dir, "_build_script_relying_on_missing_var") + with pytest.raises(BuildScriptException): + api.build(recipe, config=testing_config) + captured = capfd.readouterr() + assert "KeyError: 'TEST_FN_DOESNT_EXIST'" in captured.err + + @pytest.mark.sanity @pytest.mark.skipif(sys.platform != "darwin", reason="only implemented for mac") def test_strong_run_exports_from_build_applies_to_host(testing_config):