Don't dynamically generate expando.c
This commit is contained in:
parent
25f750c223
commit
2474bce3db
|
|
@ -0,0 +1,67 @@
|
||||||
|
#include <openssl/opensslv.h>
|
||||||
|
#include <openssl/opensslconf.h>
|
||||||
|
|
||||||
|
#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
|
||||||
|
|
@ -8,8 +8,6 @@ extern crate vcpkg;
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::ffi::OsString;
|
use std::ffi::OsString;
|
||||||
use std::fs::File;
|
|
||||||
use std::io::{BufWriter, Write};
|
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
mod cfgs;
|
mod cfgs;
|
||||||
|
|
@ -18,24 +16,6 @@ mod cfgs;
|
||||||
#[cfg_attr(not(feature = "vendored"), path = "find_normal.rs")]
|
#[cfg_attr(not(feature = "vendored"), path = "find_normal.rs")]
|
||||||
mod find;
|
mod find;
|
||||||
|
|
||||||
// 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",
|
|
||||||
"OPENSSL_NO_STDIO",
|
|
||||||
];
|
|
||||||
|
|
||||||
enum Version {
|
enum Version {
|
||||||
Openssl11x,
|
Openssl11x,
|
||||||
Openssl10x,
|
Openssl10x,
|
||||||
|
|
@ -125,55 +105,17 @@ fn validate_headers(include_dirs: &[PathBuf]) -> Version {
|
||||||
// file of OpenSSL, `opensslconf.h`, and then dump out everything it defines
|
// file of OpenSSL, `opensslconf.h`, and then dump out everything it defines
|
||||||
// as our own #[cfg] directives. That way the `ossl10x.rs` bindings can
|
// as our own #[cfg] directives. That way the `ossl10x.rs` bindings can
|
||||||
// account for compile differences and such.
|
// 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 <openssl/opensslv.h>
|
|
||||||
#include <openssl/opensslconf.h>
|
|
||||||
|
|
||||||
#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();
|
let mut gcc = cc::Build::new();
|
||||||
for include_dir in include_dirs {
|
for include_dir in include_dirs {
|
||||||
gcc.include(include_dir);
|
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,
|
Ok(expanded) => expanded,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
panic!(
|
panic!(
|
||||||
"
|
"
|
||||||
Header expansion error:
|
Header expansion error:
|
||||||
{}
|
{:?}
|
||||||
|
|
||||||
Failed to find OpenSSL development headers.
|
Failed to find OpenSSL development headers.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue