From 84893608b2f34f79e59e9c68bdc4a2a3d663b1c4 Mon Sep 17 00:00:00 2001 From: Jeffery To Date: Mon, 2 Oct 2023 16:13:51 +0800 Subject: [PATCH] Allow profile to be set by SETUPTOOLS_RUST_CARGO_PROFILE env variable This allows the profile to be set dynamically, without having to edit pyproject.toml/setup.py. --- CHANGELOG.md | 3 +++ setuptools_rust/build.py | 20 ++++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1663cb5..371b916e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ - Drop support for Python 3.7. [#357](https://github.com/PyO3/setuptools-rust/pull/357) - Remove direct imports from `pkg_resources`. [#359](https://github.com/PyO3/setuptools-rust/pull/359) +### Added +- Add support for setting a custom cargo profile with the `SETUPTOOLS_RUST_CARGO_PROFILE` environment variable. [#364](https://github.com/PyO3/setuptools-rust/pull/364) + ## 1.7.0 (2023-08-22) ### Packaging - Remove direct imports from `distutils`. [#336](https://github.com/PyO3/setuptools-rust/pull/336) diff --git a/setuptools_rust/build.py b/setuptools_rust/build.py index 859c3ad0..b5d20859 100644 --- a/setuptools_rust/build.py +++ b/setuptools_rust/build.py @@ -517,10 +517,10 @@ def _cargo_args( if target_triple is not None: args.extend(["--target", target_triple]) - if release: - profile = ext.get_cargo_profile() - if not profile: - args.append("--release") + ext_profile = ext.get_cargo_profile() + env_profile = os.getenv("SETUPTOOLS_RUST_CARGO_PROFILE") + if release and not ext_profile and not env_profile: + args.append("--release") if quiet: args.append("-q") @@ -541,6 +541,18 @@ def _cargo_args( if ext.args is not None: args.extend(ext.args) + if env_profile: + if ext_profile: + args = [p for p in args if not p.startswith("--profile=")] + while True: + try: + index = args.index("--profile") + del args[index : index + 2] + except ValueError: + break + + args.extend(["--profile", env_profile]) + if ext.cargo_manifest_args is not None: args.extend(ext.cargo_manifest_args)