From e3c0658a243966b264b9a933f831443eb94098bb Mon Sep 17 00:00:00 2001 From: waych Date: Fri, 2 Apr 2021 02:54:55 -0700 Subject: [PATCH] Allow bundled debug build (#1081) sdl2-sys was hardcoding the bundled build as a release build, unconditionally for a long time. This can cause problems however if an upstream link of a binary is mixing C++ libraries that mix debug and non debug builds, or so at least I'm led to believe for static builds. --- changelog.md | 3 +++ sdl2-sys/build.rs | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/changelog.md b/changelog.md index ce4c9d20..5556fcad 100644 --- a/changelog.md +++ b/changelog.md @@ -5,6 +5,9 @@ when upgrading from a version of rust-sdl2 to another. * Add patch to fix metal detection (https://bugzilla.libsdl.org/show_bug.cgi?id=4988) * Changed signature of TimerSubsystem::ticks to accept `&self`. + +[PR #1081](https://github.com/Rust-SDL2/rust-sdl2/pull/1081): Allow bundled build to be built in debug mode. Fixes issue when linking binary with mixed debug+release CRT dependencies. + [PR #1080](https://github.com/Rust-SDL2/rust-sdl2/pull/1080): Fix line endings of patches to lf so patching of sources works on Windows. ### v0.34.4 diff --git a/sdl2-sys/build.rs b/sdl2-sys/build.rs index 3dba6cbd..4cfda7a6 100644 --- a/sdl2-sys/build.rs +++ b/sdl2-sys/build.rs @@ -304,7 +304,6 @@ fn patch_sdl2(sdl2_source_path: &Path) { #[cfg(feature = "bundled")] fn compile_sdl2(sdl2_build_path: &Path, target_os: &str) -> PathBuf { let mut cfg = cmake::Config::new(sdl2_build_path); - cfg.profile("release"); #[cfg(target_os = "linux")] { @@ -416,11 +415,24 @@ fn link_sdl2(target_os: &str) { #[cfg(feature = "static-link")] { + // There's no way to extract this from `cmake::Config` so we have to emulate their + // behaviour here (see the source for `cmake::Config::build`). + let debug_postfix = match ( + &env::var("OPT_LEVEL").unwrap_or_default()[..], + &env::var("PROFILE").unwrap_or_default()[..], + ) { + ("1", _) | ("2", _) | ("3", _) | ("s", _) | ("z", _) => "", + ("0", _) => "d", + (_, "debug") => "d", + // ("0", _) => "", + // (_, "debug") => "", + (_, _) => "", + }; if cfg!(feature = "bundled") || (cfg!(feature = "use-pkgconfig") == false && cfg!(feature = "use-vcpkg") == false) { - println!("cargo:rustc-link-lib=static=SDL2main"); - println!("cargo:rustc-link-lib=static=SDL2"); + println!("cargo:rustc-link-lib=static=SDL2main{}", debug_postfix); + println!("cargo:rustc-link-lib=static=SDL2{}", debug_postfix); } // Also linked to any required libraries for each supported platform