diff options
| author | Steven Fackler <[email protected]> | 2017-09-15 20:05:26 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-09-15 20:05:26 -0400 |
| commit | 7f96c772ec97fc46af1e07bfb9bdc822d88878ee (patch) | |
| tree | 1abdb8fd9c29c863ff52080ff703a4bb1ba67795 | |
| parent | Merge pull request #697 from alexcrichton/release-buffers (diff) | |
| parent | Extract prefixed environment variables into helper function. (diff) | |
| download | rust-openssl-7f96c772ec97fc46af1e07bfb9bdc822d88878ee.tar.xz rust-openssl-7f96c772ec97fc46af1e07bfb9bdc822d88878ee.zip | |
Merge pull request #692 from jessicah/haiku-support
Allow overriding lib/include dirs when cross-compiling.
| -rw-r--r-- | openssl-sys/build.rs | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/openssl-sys/build.rs b/openssl-sys/build.rs index df530032..eb6979b0 100644 --- a/openssl-sys/build.rs +++ b/openssl-sys/build.rs @@ -36,17 +36,27 @@ enum Version { Libressl, } +fn env(name: &str) -> Option<OsString> { + let prefix = env::var("TARGET").unwrap().to_uppercase().replace("-", "_"); + let prefixed = format!("{}_{}", prefix, name); + println!("cargo:rerun-if-changed={}", prefixed); + + if let Some(var) = env::var_os(&prefixed) { + return Some(var); + } + + println!("cargo:rerun-if-changed={}", name); + env::var_os(name) +} + fn main() { let target = env::var("TARGET").unwrap(); - println!("cargo:rerun-if-env-changed=OPENSSL_LIB_DIR"); - let lib_dir = env::var_os("OPENSSL_LIB_DIR").map(PathBuf::from); - println!("cargo:rerun-if-env-changed=OPENSSL_INCLUDE_DIR"); - let include_dir = env::var_os("OPENSSL_INCLUDE_DIR").map(PathBuf::from); + let lib_dir = env("OPENSSL_LIB_DIR").map(PathBuf::from); + let include_dir = env("OPENSSL_INCLUDE_DIR").map(PathBuf::from); let (lib_dir, include_dir) = if lib_dir.is_none() || include_dir.is_none() { - println!("cargo:rerun-if-env-changed=OPENSSL_DIR"); - let openssl_dir = env::var_os("OPENSSL_DIR").unwrap_or_else(|| find_openssl_dir(&target)); + let openssl_dir = env("OPENSSL_DIR").unwrap_or_else(|| find_openssl_dir(&target)); let openssl_dir = Path::new(&openssl_dir); let lib_dir = lib_dir.unwrap_or_else(|| openssl_dir.join("lib")); let include_dir = include_dir.unwrap_or_else(|| openssl_dir.join("include")); @@ -76,9 +86,8 @@ fn main() { let version = validate_headers(&[include_dir.clone().into()]); - println!("cargo:rerun-if-env-changed=OPENSSL_LIBS"); - let libs_env = env::var("OPENSSL_LIBS").ok(); - let libs = match libs_env { + let libs_env = env("OPENSSL_LIBS"); + let libs = match libs_env.as_ref().and_then(|s| s.to_str()) { Some(ref v) => v.split(":").collect(), None => { match version { @@ -477,9 +486,8 @@ aborting due to this version mismatch. /// statically or dynamically. fn determine_mode(libdir: &Path, libs: &[&str]) -> &'static str { // First see if a mode was explicitly requested - println!("cargo:rerun-if-env-changed=OPENSSL_STATIC"); - let kind = env::var("OPENSSL_STATIC").ok(); - match kind.as_ref().map(|s| &s[..]) { + let kind = env("OPENSSL_STATIC"); + match kind.as_ref().and_then(|s| s.to_str()).map(|s| &s[..]) { Some("0") => return "dylib", Some(_) => return "static", None => {} |