diff --git a/README.md b/README.md index 579a6872..365d57b1 100644 --- a/README.md +++ b/README.md @@ -133,6 +133,8 @@ The build script can be configured via environment variables: (if specified). * `OPENSSL_STATIC` - If specified, OpenSSL libraries will be statically rather than dynamically linked. +* `OPENSSL_LIBS` - If specified, the names of the OpenSSL libraries that will be + linked, e.g. `ssl:crypto`. If `OPENSSL_DIR` is specified, then the build script will skip the pkg-config step. diff --git a/openssl-sys/build.rs b/openssl-sys/build.rs index fc0f4680..969c5983 100644 --- a/openssl-sys/build.rs +++ b/openssl-sys/build.rs @@ -65,16 +65,23 @@ fn main() { let version = validate_headers(&[include_dir.clone().into()]); - let libs = match version { - Version::Openssl101 | Version::Openssl102 if target.contains("windows") => { - ["ssleay32", "libeay32"] + let libs_env = env::var("OPENSSL_LIBS").ok(); + let libs = match libs_env { + Some(ref v) => v.split(":").collect(), + None => { + match version { + Version::Openssl101 | Version::Openssl102 if target.contains("windows") => { + vec!["ssleay32", "libeay32"] + } + Version::Openssl110 if target.contains("windows") => vec!["libssl", "libcrypto"], + _ => vec!["ssl", "crypto"], + } } - Version::Openssl110 if target.contains("windows") => ["libssl", "libcrypto"], - _ => ["ssl", "crypto"], }; + let kind = determine_mode(Path::new(&lib_dir), &libs); - for lib in libs.iter() { + for lib in libs.into_iter() { println!("cargo:rustc-link-lib={}={}", kind, lib); } }