diff --git a/Cargo.toml b/Cargo.toml index b1d54ec2251..36a1851decc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -433,3 +433,8 @@ required-features = ["macros"] [[test]] name = "test_various" required-features = ["macros"] + +[patch.crates-io] +# target-lexicon 0.13.5 does not yet include OperatingSystem::Zos; +# use the main branch until the next release. +target-lexicon = { git = "https://github.com/bytecodealliance/target-lexicon", branch = "main" } diff --git a/pyo3-build-config/src/impl_.rs b/pyo3-build-config/src/impl_.rs index 78299cdde44..bf900850d71 100644 --- a/pyo3-build-config/src/impl_.rs +++ b/pyo3-build-config/src/impl_.rs @@ -1593,6 +1593,8 @@ pub fn is_linking_libpython_for_target(target: &Triple) -> bool { target.operating_system == OperatingSystem::Windows // See https://github.com/PyO3/pyo3/issues/4068#issuecomment-2051159852 || target.operating_system == OperatingSystem::Aix + // z/OS uses XPLINK linkage; extension modules must link libpython explicitly + || target.operating_system == OperatingSystem::Zos || target.environment == Environment::Android || target.environment == Environment::Androideabi || target.operating_system == OperatingSystem::Cygwin diff --git a/pyo3-build-config/src/lib.rs b/pyo3-build-config/src/lib.rs index 85ce1120275..b610f59664b 100644 --- a/pyo3-build-config/src/lib.rs +++ b/pyo3-build-config/src/lib.rs @@ -299,9 +299,11 @@ pub mod pyo3_build_script_impl { let is_emscripten = target.operating_system == OperatingSystem::Emscripten; let is_cygwin = target.operating_system == OperatingSystem::Cygwin; let is_windows = target.operating_system == OperatingSystem::Windows; + // z/OS uses LIBPATH for runtime library discovery, not ELF rpath + let is_zos = target.operating_system == OperatingSystem::Zos; // webassembly targets generally don't support rpath, emscripten is the only exception currently aware of: // https://github.com/emscripten-core/emscripten/issues/22126 - if is_linking_libpython && !is_windows && !is_cygwin && (!is_wasm || is_emscripten) { + if is_linking_libpython && !is_windows && !is_cygwin && !is_zos && (!is_wasm || is_emscripten) { if let Some(lib_dir) = interpreter_config.lib_dir() { println!("cargo:rustc-link-arg=-Wl,-rpath,{lib_dir}"); }