From 2c3e8b1c503b1996f108ec356c2c71d0b241f0a1 Mon Sep 17 00:00:00 2001 From: James Hilliard Date: Mon, 22 Mar 2021 07:38:03 -0600 Subject: [PATCH] Ensure we are cross compiling when any cross env variables are set. --- CHANGELOG.md | 1 + build.rs | 62 +++++++++++++++++++++++++++++----------------------- 2 files changed, 36 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 980a75c4d28..5099c9a5c84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Fix inability to use a named lifetime for `&PyTuple` of `*args` in `#[pyfunction]`. [#1440](https://github.com/PyO3/pyo3/pull/1440) - Fix inability to add `#[text_signature]` to some `#[pyproto]` methods. [#1483](https://github.com/PyO3/pyo3/pull/1483) - Fix use of Python argument for #[pymethods] inside macro expansions. [#1505](https://github.com/PyO3/pyo3/pull/1505) +- Always use cross-compiling configuration if any of the environment variables are set. [#1514](https://github.com/PyO3/pyo3/pull/1514) ## [0.13.2] - 2021-02-12 ### Packaging diff --git a/build.rs b/build.rs index 2222b1d4485..3c2195a38af 100644 --- a/build.rs +++ b/build.rs @@ -151,36 +151,44 @@ impl CrossCompileConfig { } fn cross_compiling() -> Result> { - let target = env::var("TARGET")?; - let host = env::var("HOST")?; - if target == host { - // Not cross-compiling - return Ok(None); - } + if env::var_os("PYO3_CROSS").is_none() + && env::var_os("PYO3_CROSS_LIB_DIR").is_none() + && env::var_os("PYO3_CROSS_INCLUDE_DIR").is_none() + && env::var_os("PYO3_CROSS_VERSION").is_none() + && env::var_os("PYO3_CROSS_PYTHON_VERSION").is_none() + { + let target = env::var("TARGET")?; + let host = env::var("HOST")?; + if target == host { + // Not cross-compiling + return Ok(None); + } - if target == "i686-pc-windows-msvc" && host == "x86_64-pc-windows-msvc" { - // Not cross-compiling to compile for 32-bit Python from windows 64-bit - return Ok(None); - } + if target == "i686-pc-windows-msvc" && host == "x86_64-pc-windows-msvc" { + // Not cross-compiling to compile for 32-bit Python from windows 64-bit + return Ok(None); + } - if target == "x86_64-apple-darwin" && host == "aarch64-apple-darwin" { - // Not cross-compiling to compile for x86-64 Python from macOS arm64 - return Ok(None); - } - if target == "aarch64-apple-darwin" && host == "x86_64-apple-darwin" { - // Not cross-compiling to compile for arm64 Python from macOS x86_64 - return Ok(None); - } + if target == "x86_64-apple-darwin" && host == "aarch64-apple-darwin" { + // Not cross-compiling to compile for x86-64 Python from macOS arm64 + return Ok(None); + } - if host.starts_with(&format!( - "{}-{}-{}", - env::var("CARGO_CFG_TARGET_ARCH")?, - env::var("CARGO_CFG_TARGET_VENDOR")?, - env::var("CARGO_CFG_TARGET_OS")? - )) { - // Not cross-compiling if arch-vendor-os is all the same - // e.g. x86_64-unknown-linux-musl on x86_64-unknown-linux-gnu host - return Ok(None); + if target == "aarch64-apple-darwin" && host == "x86_64-apple-darwin" { + // Not cross-compiling to compile for arm64 Python from macOS x86_64 + return Ok(None); + } + + if host.starts_with(&format!( + "{}-{}-{}", + env::var("CARGO_CFG_TARGET_ARCH")?, + env::var("CARGO_CFG_TARGET_VENDOR")?, + env::var("CARGO_CFG_TARGET_OS")? + )) { + // Not cross-compiling if arch-vendor-os is all the same + // e.g. x86_64-unknown-linux-musl on x86_64-unknown-linux-gnu host + return Ok(None); + } } if env::var("CARGO_CFG_TARGET_FAMILY")? == "windows" {