Skip to content
Open
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
2 changes: 1 addition & 1 deletion conda_build/windows.py
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,7 @@ def write_build_scripts(m, env, bld_bat):
fo.write("@echo on\n")
fo.write('set "INCLUDE={};%INCLUDE%"\n'.format(env["LIBRARY_INC"]))
fo.write('set "LIB={};%LIB%"\n'.format(env["LIBRARY_LIB"]))
if m.config.activate and m.name() != "conda":
if m.activate_build_script:
write_bat_activation_text(fo, m)
# bld_bat may have been generated elsewhere with contents of build/script
work_script = join(m.config.work_dir, "conda_build.bat")
Expand Down
20 changes: 20 additions & 0 deletions news/6069-windows-activation-when-packaging-conda.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
### Enhancements

* <news item>

### Bug fixes

* Activate the host and build environments in Windows build scripts when packaging a recipe named `conda`, matching Unix. Previously `build_env_setup.bat` omitted activation entirely for such recipes, so host `etc/conda/activate.d` scripts never ran. (#6069)
* Honor `build/activate_in_script: false` in Windows build scripts, matching Unix build scripts and Windows output scripts, which already respected it. (#6069)

### Deprecations

* <news item>

### Docs

* <news item>

### Other

* <news item>
52 changes: 52 additions & 0 deletions tests/test_build.py
Original file line number Diff line number Diff line change
Expand Up @@ -515,3 +515,55 @@ def test_win_arm64_build_on_emulated_win_64(
print(*sorted(os.listdir(testing_metadata.config.work_dir)), sep="\n")
assert "PROCESSOR_ARCHITECTURE=ARM64" in out
assert "ProcessArchitecture=Arm64" in out


@pytest.mark.parametrize("name", ["conda", "ordinary-pkg"])
@pytest.mark.parametrize(
("activate", "activate_in_script", "expect_activation"),
[
(True, None, True),
(True, False, False),
(False, None, False),
],
)
def test_write_build_scripts_activation_follows_activate_build_script(
testing_metadata: MetaData,
mocker: MockerFixture,
name: str,
activate: bool,
activate_in_script: bool | None,
expect_activation: bool,
):
"""Windows build scripts activate iff activate_build_script is true.

Package name must not matter — including when packaging conda itself.
"""
testing_metadata.meta["package"]["name"] = name
testing_metadata.meta["requirements"]["host"] = ["python"]
testing_metadata.config.activate = activate
if activate_in_script is not None:
testing_metadata.meta["build"]["activate_in_script"] = activate_in_script

mocker.patch.object(
type(testing_metadata),
"uses_new_style_compiler_activation",
new_callable=mocker.PropertyMock,
return_value=True,
)

env = {
"LIBRARY_INC": "inc",
"LIBRARY_LIB": "lib",
}
_, env_script = windows.write_build_scripts(
testing_metadata, env, bld_bat="nonexistent.bat"
)
content = Path(env_script).read_text(encoding="utf-8")

assert ("conda_hook.bat" in content) is expect_activation
assert (
f'activate "{testing_metadata.config.host_prefix}"' in content
) is expect_activation
assert (
f'activate --stack "{testing_metadata.config.build_prefix}"' in content
) is expect_activation
Loading