diff --git a/lzma-sys/build.rs b/lzma-sys/build.rs index c7019a5e..b7409498 100644 --- a/lzma-sys/build.rs +++ b/lzma-sys/build.rs @@ -29,8 +29,6 @@ fn main() { .unwrap_or(String::new()); if target.contains("msvc") { println!("cargo:rustc-link-lib=static=liblzma"); - let mut msbuild = gcc::windows_registry::find(&target, "msbuild") - .expect("needs msbuild installed"); let build = dst.join("build"); let _ = fs::remove_dir_all(&build); let _ = fs::remove_dir_all(dst.join("lib")); @@ -43,9 +41,20 @@ fn main() { "Release" }; - run(msbuild.current_dir(build.join("windows")) - .arg("liblzma.vcxproj") - .arg(&format!("/p:Configuration={}", profile))); + let mut build_succeeded = false; + for platform_toolset in &["v150", "v140", "v120", "v110"] { + let mut msbuild = gcc::windows_registry::find(&target, "msbuild") + .expect("needs msbuild installed"); + if try_run(msbuild.current_dir(build.join("windows")) + .arg("liblzma.vcxproj") + .arg(&format!("/p:Configuration={}", profile)) + .arg(&format!("/p:PlatformToolset={}", platform_toolset))) { + build_succeeded = true; + break; + } + } + assert!(build_succeeded); + t!(fs::create_dir(dst.join("lib"))); t!(fs::create_dir(dst.join("include"))); let platform = if target.contains("x86_64") {"X64"} else {"Win32"}; @@ -135,9 +144,13 @@ fn main() { } } -fn run(cmd: &mut Command) { +fn try_run(cmd: &mut Command) -> bool { println!("running: {:?}", cmd); - assert!(t!(cmd.status()).success()); + t!(cmd.status()).success() +} + +fn run(cmd: &mut Command) { + assert!(try_run(cmd)); } fn cp_r(src: &Path, dst: &Path) {