Skip to content
Snippets Groups Projects
Select Git revision
  • bbaec65b73e1e72ca648b51c8f0a1be8de6f5c2e
  • master default
  • sbuttgereit/upstream-sbgp-extension
  • auto-lib-type
  • 0.9.x
  • gh-pages
  • openssl-v0.10.50
  • openssl-sys-v0.9.85
  • openssl-v0.10.49
  • openssl-sys-v0.9.84
  • openssl-macros-v0.1.1
  • openssl-sys-v0.9.83
  • openssl-v0.10.48
  • openssl-v0.10.47
  • openssl-sys-v0.9.82
  • openssl-v0.10.46
  • openssl-sys-v0.9.81
  • openssl-v0.10.45
  • openssl-sys-v0.9.80
  • openssl-v0.10.44
  • openssl-sys-v0.9.79
  • openssl-v0.10.43
  • openssl-sys-v0.9.78
  • openssl-sys-v0.9.77
  • openssl-v0.10.42
  • openssl-sys-v0.9.76
26 results

build.rs

Blame
  • build.rs 17.99 KiB
    extern crate cc;
    extern crate pkg_config;
    #[cfg(target_env = "msvc")]
    extern crate vcpkg;
    
    use std::collections::HashSet;
    use std::env;
    use std::ffi::OsString;
    use std::fs::File;
    use std::io::{BufWriter, Write};
    use std::path::{Path, PathBuf};
    use std::panic::{self, AssertUnwindSafe};
    use std::process::Command;
    
    // The set of `OPENSSL_NO_<FOO>`s that we care about.
    const DEFINES: &'static [&'static str] = &[
        "OPENSSL_NO_BUF_FREELISTS",
        "OPENSSL_NO_COMP",
        "OPENSSL_NO_EC",
        "OPENSSL_NO_EC2M",
        "OPENSSL_NO_ENGINE",
        "OPENSSL_NO_KRB5",
        "OPENSSL_NO_NEXTPROTONEG",
        "OPENSSL_NO_PSK",
        "OPENSSL_NO_RFC3779",
        "OPENSSL_NO_SHA",
        "OPENSSL_NO_SRP",
        "OPENSSL_NO_SSL3_METHOD",
        "OPENSSL_NO_TLSEXT",
    ];
    
    enum Version {
        Openssl110,
        Openssl102,
        Openssl101,
        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-env-changed={}", prefixed);
    
        if let Some(var) = env::var_os(&prefixed) {
            return Some(var);
        }
    
        println!("cargo:rerun-if-env-changed={}", name);
        env::var_os(name)
    }
    
    fn main() {
        let target = env::var("TARGET").unwrap();
    
        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() {
            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"));
            (lib_dir, include_dir)
        } else {
            (lib_dir.unwrap(), include_dir.unwrap())
        };
    
        if !Path::new(&lib_dir).exists() {
            panic!(
                "OpenSSL library directory does not exist: {}",