aboutsummaryrefslogtreecommitdiff
path: root/systest
diff options
context:
space:
mode:
authorSteven Fackler <[email protected]>2016-11-05 20:06:50 -0700
committerSteven Fackler <[email protected]>2016-11-05 20:06:50 -0700
commita0b56c437803a08413755928040a0970a93a7b83 (patch)
tree0f21848301b62d6078eafaee10e513df4163087b /systest
parentMerge branch 'release-v0.8.3' into release (diff)
parentRelease v0.9.0 (diff)
downloadrust-openssl-0.9.0.tar.xz
rust-openssl-0.9.0.zip
Merge branch 'release-v0.9.0' into releasev0.9.0
Diffstat (limited to 'systest')
-rw-r--r--systest/Cargo.toml12
-rw-r--r--systest/build.rs101
-rw-r--r--systest/src/main.rs9
3 files changed, 122 insertions, 0 deletions
diff --git a/systest/Cargo.toml b/systest/Cargo.toml
new file mode 100644
index 00000000..3997bf35
--- /dev/null
+++ b/systest/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "systest"
+version = "0.1.0"
+authors = ["Alex Crichton <[email protected]>"]
+build = "build.rs"
+
+[dependencies]
+libc = "0.2"
+openssl-sys = { path = "../openssl-sys" }
+
+[build-dependencies]
+ctest = "0.1"
diff --git a/systest/build.rs b/systest/build.rs
new file mode 100644
index 00000000..81907a57
--- /dev/null
+++ b/systest/build.rs
@@ -0,0 +1,101 @@
+extern crate ctest;
+
+use std::env;
+
+fn main() {
+ let mut cfg = ctest::TestGenerator::new();
+ let target = env::var("TARGET").unwrap();
+
+ if let Ok(out) = env::var("DEP_OPENSSL_INCLUDE") {
+ cfg.include(&out);
+ }
+
+ // Needed to get OpenSSL to correctly undef symbols that are already on
+ // Windows like X509_NAME
+ if target.contains("windows") {
+ cfg.header("windows.h");
+
+ // weird "different 'const' qualifiers" error on Windows, maybe a cl.exe
+ // thing?
+ if target.contains("msvc") {
+ cfg.flag("/wd4090");
+ }
+ }
+
+ cfg.cfg(&format!("ossl{}", env::var("DEP_OPENSSL_VERSION").unwrap()), None);
+ if let Ok(vars) = env::var("DEP_OPENSSL_CONF") {
+ for var in vars.split(",") {
+ cfg.cfg("osslconf", Some(var));
+ }
+ }
+
+ cfg.header("openssl/comp.h")
+ .header("openssl/dh.h")
+ .header("openssl/ossl_typ.h")
+ .header("openssl/stack.h")
+ .header("openssl/x509.h")
+ .header("openssl/bio.h")
+ .header("openssl/x509v3.h")
+ .header("openssl/safestack.h")
+ .header("openssl/hmac.h")
+ .header("openssl/ssl.h")
+ .header("openssl/err.h")
+ .header("openssl/rand.h")
+ .header("openssl/pkcs12.h")
+ .header("openssl/bn.h");
+ cfg.type_name(|s, is_struct| {
+ // Add some `*` on some callback parameters to get function pointer to
+ // typecheck in C, especially on MSVC.
+ if s == "PasswordCallback" {
+ format!("pem_password_cb*")
+ } else if s == "bio_info_cb" {
+ format!("bio_info_cb*")
+ } else if s == "_STACK" {
+ format!("struct stack_st")
+ } else if is_struct && s.chars().next().unwrap().is_lowercase() {
+ format!("struct {}", s)
+ } else {
+ format!("{}", s)
+ }
+ });
+ cfg.skip_type(|s| {
+ // function pointers are declared without a `*` in openssl so their
+ // sizeof is 1 which isn't what we want.
+ s == "PasswordCallback" ||
+ s == "bio_info_cb" ||
+ s.starts_with("CRYPTO_EX_")
+ });
+ cfg.skip_struct(|s| {
+ s == "ProbeResult"
+ });
+ cfg.skip_fn(move |s| {
+ s == "CRYPTO_memcmp" || // uses volatile
+
+ // Skip some functions with function pointers on windows, not entirely
+ // sure how to get them to work out...
+ (target.contains("windows") && {
+ s == "SSL_get_ex_new_index" ||
+ s == "SSL_CTX_get_ex_new_index" ||
+ s == "CRYPTO_get_ex_new_index"
+ })
+ });
+ cfg.skip_field_type(|s, field| {
+ (s == "EVP_PKEY" && field == "pkey") || // union
+ (s == "GENERAL_NAME" && field == "d") // union
+ });
+ cfg.skip_signededness(|s| {
+ s.ends_with("_cb") ||
+ s.starts_with("CRYPTO_") ||
+ s == "PasswordCallback"
+ });
+ cfg.field_name(|_s, field| {
+ if field == "type_" {
+ format!("type")
+ } else {
+ format!("{}", field)
+ }
+ });
+ cfg.fn_cname(|rust, link_name| link_name.unwrap_or(rust).to_string());
+ cfg.generate("../openssl-sys/src/lib.rs", "all.rs");
+}
+
diff --git a/systest/src/main.rs b/systest/src/main.rs
new file mode 100644
index 00000000..39d31b2f
--- /dev/null
+++ b/systest/src/main.rs
@@ -0,0 +1,9 @@
+#![allow(bad_style)]
+
+extern crate openssl_sys;
+extern crate libc;
+
+use libc::*;
+use openssl_sys::*;
+
+include!(concat!(env!("OUT_DIR"), "/all.rs"));