From 7c58e789dd752161ec5d2e103c3ab67ea3456ed4 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Fri, 12 Jun 2015 15:11:21 +0530 Subject: [PATCH] Make this compile on windows --- png-sys/build.rs | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/png-sys/build.rs b/png-sys/build.rs index 5c0afef..6a431ba 100644 --- a/png-sys/build.rs +++ b/png-sys/build.rs @@ -6,6 +6,7 @@ use std::process::Stdio; fn main() { let target = env::var("TARGET").unwrap(); + let host = env::var("HOST").unwrap(); let is_target_embedded = target.find("eabi").is_some(); if is_target_embedded { @@ -17,19 +18,31 @@ fn main() { env::set_var("RANLIB", &ranlib); } - let cfg = PathBuf::from(&env::var("CARGO_MANIFEST_DIR").unwrap()).join("libpng-1.6.16/configure"); + let cfg = PathBuf::from(&env::var("CARGO_MANIFEST_DIR") + .unwrap()).join("libpng-1.6.16/configure"); let dst = PathBuf::from(&env::var("OUT_DIR").unwrap()); - env::set_var("CFLAGS", "-fPIC -O3"); - - let mut cmd = Command::new(cfg); - cmd.arg("--with-libpng-prefix=RUST_"); - if is_target_embedded { - cmd.arg(format!("--host={}", target)); + let mut cmd; + if host.find("windows").is_some() { + // Here be windows hacks + + // Windows doesn't know how to handle executables + // with shebangs, so we pass it through `sh` + cmd = Command::new(PathBuf::from("sh")); + + // Windows under mingw also doesn't understand its + // own paths, so we pass the path through cygpath + cmd.arg("-c").arg(&format!("$(cygpath \"{}\") --with-libpng-prefix=RUST_", + cfg.to_str().unwrap())); + } else { + cmd = Command::new(cfg); + cmd.arg("--with-libpng-prefix=RUST_"); + if is_target_embedded { + cmd.arg(format!("--host={}", target)); + } } cmd.current_dir(&dst); run(&mut cmd); - let mut cmd = Command::new("make"); cmd.arg("-j4"); cmd.current_dir(&dst);