Browse Source

Don't try to link C from rust doctests for nss detection

This is really annoying, since we can't use cfg(test) for doctests.
Nick Mathewson 5 years ago
parent
commit
a8ac21fbb5

+ 6 - 0
src/rust/Cargo.toml

@@ -23,3 +23,9 @@ default = []
 test-c-from-rust = [
     "crypto/test-c-from-rust",
 ]
+
+# We have to define a feature here because doctests don't get cfg(test),
+# and we need to disable some C dependencies when running the doctests
+# because of the various linker issues.  See
+# https://github.com/rust-lang/rust/issues/45599
+test_linking_hack = []

+ 6 - 0
src/rust/crypto/Cargo.toml

@@ -30,3 +30,9 @@ rand_core = { version = "=0.2.0-pre.0", default-features = false }
 # execute with `cargo test`.  Due to numerous linker issues (#25386), this is
 # currently disabled by default.
 test-c-from-rust = []
+
+# We have to define a feature here because doctests don't get cfg(test),
+# and we need to disable some C dependencies when running the doctests
+# because of the various linker issues.  See
+# https://github.com/rust-lang/rust/issues/45599
+test_linking_hack = []

+ 6 - 0
src/rust/external/Cargo.toml

@@ -14,3 +14,9 @@ name = "external"
 path = "lib.rs"
 crate_type = ["rlib", "staticlib"]
 
+[features]
+# We have to define a feature here because doctests don't get cfg(test),
+# and we need to disable some C dependencies when running the doctests
+# because of the various linker issues.  See
+# https://github.com/rust-lang/rust/issues/45599
+test_linking_hack = []

+ 5 - 1
src/rust/protover/Cargo.toml

@@ -4,6 +4,11 @@ version = "0.0.1"
 name = "protover"
 
 [features]
+# We have to define a feature here because doctests don't get cfg(test),
+# and we need to disable some C dependencies when running the doctests
+# because of the various linker issues.  See
+# https://github.com/rust-lang/rust/issues/45599
+test_linking_hack = []
 
 [dependencies]
 libc = "=0.2.39"
@@ -27,4 +32,3 @@ path = "../tor_log"
 name = "protover"
 path = "lib.rs"
 crate_type = ["rlib", "staticlib"]
-

+ 12 - 2
src/rust/protover/protover.rs

@@ -10,7 +10,6 @@ use std::str::FromStr;
 use std::string::String;
 
 use external::c_tor_version_as_new_as;
-use external::c_tor_is_using_nss;
 
 use errors::ProtoverError;
 use protoset::ProtoSet;
@@ -125,6 +124,17 @@ impl From<Protocol> for UnknownProtocol {
     }
 }
 
+#[cfg(feature="test_linking_hack")]
+fn have_linkauth_v1() -> bool {
+    true
+}
+
+#[cfg(not(feature="test_linking_hack"))]
+fn have_linkauth_v1() -> bool {
+    use external::c_tor_is_using_nss;
+    ! c_tor_is_using_nss()
+}
+
 /// Get a CStr representation of current supported protocols, for
 /// passing to C, or for converting to a `&str` for Rust.
 ///
@@ -142,7 +152,7 @@ impl From<Protocol> for UnknownProtocol {
 ///
 //  C_RUST_COUPLED: protover.c `protover_get_supported_protocols`
 pub(crate) fn get_supported_protocols_cstr() -> &'static CStr {
-    if c_tor_is_using_nss() {
+    if ! have_linkauth_v1() {
         cstr!("Cons=1-2 \
                Desc=1-2 \
                DirCache=1-2 \

+ 6 - 0
src/rust/smartlist/Cargo.toml

@@ -11,3 +11,9 @@ name = "smartlist"
 path = "lib.rs"
 crate_type = ["rlib", "staticlib"]
 
+[features]
+# We have to define a feature here because doctests don't get cfg(test),
+# and we need to disable some C dependencies when running the doctests
+# because of the various linker issues.  See
+# https://github.com/rust-lang/rust/issues/45599
+test_linking_hack = []

+ 6 - 0
src/rust/tor_allocate/Cargo.toml

@@ -11,3 +11,9 @@ name = "tor_allocate"
 path = "lib.rs"
 crate_type = ["rlib", "staticlib"]
 
+[features]
+# We have to define a feature here because doctests don't get cfg(test),
+# and we need to disable some C dependencies when running the doctests
+# because of the various linker issues.  See
+# https://github.com/rust-lang/rust/issues/45599
+test_linking_hack = []

+ 5 - 0
src/rust/tor_log/Cargo.toml

@@ -9,6 +9,11 @@ path = "lib.rs"
 crate_type = ["rlib", "staticlib"]
 
 [features]
+# We have to define a feature here because doctests don't get cfg(test),
+# and we need to disable some C dependencies when running the doctests
+# because of the various linker issues.  See
+# https://github.com/rust-lang/rust/issues/45599
+test_linking_hack = []
 
 [dependencies]
 libc = "0.2.39"

+ 6 - 0
src/rust/tor_rust/Cargo.toml

@@ -14,3 +14,9 @@ path = "../tor_util"
 [dependencies.protover]
 path = "../protover"
 
+[features]
+# We have to define a feature here because doctests don't get cfg(test),
+# and we need to disable some C dependencies when running the doctests
+# because of the various linker issues.  See
+# https://github.com/rust-lang/rust/issues/45599
+test_linking_hack = []

+ 6 - 0
src/rust/tor_util/Cargo.toml

@@ -17,3 +17,9 @@ path = "../tor_log"
 [dependencies]
 libc = "=0.2.39"
 
+[features]
+# We have to define a feature here because doctests don't get cfg(test),
+# and we need to disable some C dependencies when running the doctests
+# because of the various linker issues.  See
+# https://github.com/rust-lang/rust/issues/45599
+test_linking_hack = []

+ 1 - 0
src/test/test_rust.sh

@@ -10,6 +10,7 @@ for cargo_toml_dir in "${abs_top_srcdir:-../../..}"/src/rust/*; do
 	cd "${abs_top_builddir:-../../..}/src/rust" && \
 	    CARGO_TARGET_DIR="${abs_top_builddir:-../../..}/src/rust/target" \
 	    "${CARGO:-cargo}" test ${CARGO_ONLINE-"--frozen"} \
+	    --features "test_linking_hack" \
 	    ${EXTRA_CARGO_OPTIONS} \
 	    --manifest-path "${cargo_toml_dir}/Cargo.toml" || exitcode=1
     fi