Skip to content

Commit 7ec753d

Browse files
Make link search path based on whether compiler is MSVC, rather than if we are on windows
1 parent faf97de commit 7ec753d

File tree

1 file changed

+36
-11
lines changed

1 file changed

+36
-11
lines changed

build.rs

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,15 @@
11
use std::env;
22

3-
fn static_link_windows(feat_window: bool, feat_audio: bool, feat_graphics: bool) {
4-
let env = match env::var("CARGO_CFG_TARGET_ENV").as_deref() {
5-
Ok("gnu") => "mingw",
6-
Ok("msvc") => "msvc",
7-
_ => {
8-
panic!("Failed to determine windows environment (CARGO_CFG_TARGET_ENV))")
9-
}
10-
};
3+
fn static_link_windows(feat_window: bool, feat_audio: bool, feat_graphics: bool, env: WinEnv) {
114
let arch = match env::var("CARGO_CFG_TARGET_ARCH").as_deref() {
125
Ok("x86") => "x86",
136
Ok("x86_64") => "x64",
147
_ => panic!("Failed to determine cpu arch (CARGO_CFG_TARGET_ARCH))"),
158
};
16-
println!("cargo:rustc-link-search=native=SFML/extlibs/libs-{env}/{arch}");
9+
println!(
10+
"cargo:rustc-link-search=native=SFML/extlibs/libs-{seg}/{arch}",
11+
seg = env.sfml_extlib_name()
12+
);
1713
println!("cargo:rustc-link-lib=dylib=winmm");
1814
println!("cargo:rustc-link-lib=dylib=user32");
1915
if feat_window {
@@ -54,6 +50,27 @@ fn static_link_linux(feat_window: bool, feat_audio: bool, feat_graphics: bool) {
5450
}
5551
}
5652

53+
enum WinEnv {
54+
Gnu,
55+
Msvc,
56+
}
57+
58+
impl WinEnv {
59+
fn get() -> Option<Self> {
60+
match env::var("CARGO_CFG_TARGET_ENV").as_deref() {
61+
Ok("gnu") => Some(Self::Gnu),
62+
Ok("msvc") => Some(Self::Msvc),
63+
_ => None,
64+
}
65+
}
66+
fn sfml_extlib_name(self) -> &'static str {
67+
match self {
68+
WinEnv::Gnu => "mingw",
69+
WinEnv::Msvc => "msvc",
70+
}
71+
}
72+
}
73+
5774
fn main() {
5875
println!("cargo:rerun-if-changed=CSFML");
5976
let feat_audio = env::var("CARGO_FEATURE_AUDIO").is_ok();
@@ -168,7 +185,8 @@ fn main() {
168185
.map(|os| os == "linux")
169186
.unwrap_or(false);
170187
// I have no idea why this is different on Windows and Linux
171-
let link_search = if is_windows {
188+
let win_env = WinEnv::get();
189+
let link_search = if matches!(win_env, Some(WinEnv::Msvc)) {
172190
if cmake_debug {
173191
"build/lib/Debug"
174192
} else {
@@ -186,7 +204,14 @@ fn main() {
186204
if is_unix && is_linux {
187205
static_link_linux(feat_window, feat_audio, feat_graphics);
188206
} else if is_windows {
189-
static_link_windows(feat_window, feat_audio, feat_graphics);
207+
match win_env {
208+
Some(env) => {
209+
static_link_windows(feat_window, feat_audio, feat_graphics, env);
210+
}
211+
None => {
212+
panic!("Failed to determine windows environment (MSVC/Mingw)");
213+
}
214+
}
190215
}
191216
if feat_audio {
192217
link_sfml_subsystem("audio", cmake_debug);

0 commit comments

Comments
 (0)