diff --git a/openssl-sys/build/expando.c b/openssl-sys/build/expando.c new file mode 100644 index 00000000..c8bfac87 --- /dev/null +++ b/openssl-sys/build/expando.c @@ -0,0 +1,67 @@ +#include +#include + +#define VERSION2(n, v) RUST_VERSION_##n##_##v +#define VERSION(n, v) VERSION2(n, v) + +#ifdef LIBRESSL_VERSION_NUMBER +VERSION(LIBRESSL, LIBRESSL_VERSION_NUMBER) +#else +VERSION(OPENSSL, OPENSSL_VERSION_NUMBER) +#endif + +#ifdef OPENSSL_NO_BUF_FREELISTS +RUST_CONF_OPENSSL_NO_BUF_FREELISTS +#endif + +#ifdef OPENSSL_NO_COMP +RUST_CONF_OPENSSL_NO_COMP +#endif + +#ifdef OPENSSL_NO_EC +RUST_CONF_OPENSSL_NO_EC +#endif + +#ifdef OPENSSL_NO_EC2M +RUST_CONF_OPENSSL_NO_EC2M +#endif + +#ifdef OPENSSL_NO_ENGINE +RUST_CONF_OPENSSL_NO_ENGINE +#endif + +#ifdef OPENSSL_NO_KRB5 +RUST_CONF_OPENSSL_NO_KRB5 +#endif + +#ifdef OPENSSL_NO_NEXTPROTONEG +RUST_CONF_OPENSSL_NO_NEXTPROTONEG +#endif + +#ifdef OPENSSL_NO_PSK +RUST_CONF_OPENSSL_NO_PSK +#endif + +#ifdef OPENSSL_NO_RFC3779 +RUST_CONF_OPENSSL_NO_RFC3779 +#endif + +#ifdef OPENSSL_NO_SHA +RUST_CONF_OPENSSL_NO_SHA +#endif + +#ifdef OPENSSL_NO_SRP +RUST_CONF_OPENSSL_NO_SRP +#endif + +#ifdef OPENSSL_NO_SSL3_METHOD +RUST_CONF_OPENSSL_NO_SSL3_METHOD +#endif + +#ifdef OPENSSL_NO_TLSEXT +RUST_CONF_OPENSSL_NO_TLSEXT +#endif + +#ifdef OPENSSL_NO_STDIO +RUST_CONF_OPENSSL_NO_STDIO +#endif diff --git a/openssl-sys/build/main.rs b/openssl-sys/build/main.rs index 391450d6..4c8b33e7 100644 --- a/openssl-sys/build/main.rs +++ b/openssl-sys/build/main.rs @@ -8,8 +8,6 @@ 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}; mod cfgs; @@ -18,24 +16,6 @@ mod cfgs; #[cfg_attr(not(feature = "vendored"), path = "find_normal.rs")] mod find; -// The set of `OPENSSL_NO_`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", - "OPENSSL_NO_STDIO", -]; - enum Version { Openssl11x, Openssl10x, @@ -125,55 +105,17 @@ fn validate_headers(include_dirs: &[PathBuf]) -> Version { // file of OpenSSL, `opensslconf.h`, and then dump out everything it defines // as our own #[cfg] directives. That way the `ossl10x.rs` bindings can // account for compile differences and such. - let mut path = PathBuf::from(env::var_os("OUT_DIR").unwrap()); - path.push("expando.c"); - let mut file = BufWriter::new(File::create(&path).unwrap()); - - write!( - file, - "\ -#include -#include - -#define VERSION2(n, v) RUST_VERSION_ ## n ## _ ## v -#define VERSION(n, v) VERSION2(n, v) - -VERSION(OPENSSL, OPENSSL_VERSION_NUMBER) - -#ifdef LIBRESSL_VERSION_NUMBER -VERSION(LIBRESSL, LIBRESSL_VERSION_NUMBER) -#endif -" - ) - .unwrap(); - - for define in DEFINES { - write!( - file, - "\ -#ifdef {define} -RUST_CONF_{define} -#endif -", - define = define - ) - .unwrap(); - } - - file.flush().unwrap(); - drop(file); - let mut gcc = cc::Build::new(); for include_dir in include_dirs { gcc.include(include_dir); } - let expanded = match gcc.file(&path).try_expand() { + let expanded = match gcc.file("build/expando.c").try_expand() { Ok(expanded) => expanded, Err(e) => { panic!( " Header expansion error: -{} +{:?} Failed to find OpenSSL development headers.