Add patch to use libssh2 from system
authorVasudev Kamath <vasudev@copyninja.info>
Sat, 28 Jul 2018 16:56:41 +0000 (22:26 +0530)
committerVasudev Kamath <vasudev@copyninja.info>
Sat, 28 Jul 2018 16:56:41 +0000 (22:26 +0530)
debian/patches/2003_force-use-system-libssh2.patch [new file with mode: 0644]
debian/patches/series

diff --git a/debian/patches/2003_force-use-system-libssh2.patch b/debian/patches/2003_force-use-system-libssh2.patch
new file mode 100644 (file)
index 0000000..8294f56
--- /dev/null
@@ -0,0 +1,170 @@
+Description: Use libssh2 from system by default
+Author: Vasudev Kamath <vasudev@copyninja.info>
+Bug: https://github.com/alexcrichton/ssh2-rs/issues/88
+Forwarded: not-needed
+Last-Update: 2018-07-28
+
+--- a/vendor/libssh2-sys-0.2.8/build.rs
++++ b/vendor/libssh2-sys-0.2.8/build.rs
+@@ -1,5 +1,5 @@
+-extern crate pkg_config;
+ extern crate cmake;
++extern crate pkg_config;
+ #[cfg(target_env = "msvc")]
+ extern crate vcpkg;
+@@ -7,7 +7,7 @@
+ use std::env;
+ use std::fs::File;
+ use std::io::prelude::*;
+-use std::path::{PathBuf, Path};
++use std::path::{Path, PathBuf};
+ use std::process::Command;
+ fn main() {
+@@ -21,19 +21,20 @@
+     // The system copy of libssh2 is not used by default because it
+     // can lead to having two copies of libssl loaded at once.
+     // See https://github.com/alexcrichton/ssh2-rs/pull/88
+-    if env::var("LIBSSH2_SYS_USE_PKG_CONFIG").is_ok() {
+-        if let Ok(lib) = pkg_config::find_library("libssh2") {
+-            for path in &lib.include_paths {
+-                println!("cargo:include={}", path.display());
+-            }
+-            return
++    // if env::var("LIBSSH2_SYS_USE_PKG_CONFIG").is_ok() {
++    if let Ok(lib) = pkg_config::find_library("libssh2") {
++        for path in &lib.include_paths {
++            println!("cargo:include={}", path.display());
+         }
++        return;
+     }
++    // }
+-    if !Path::new("libssh2/.git").exists() {
+-        let _ = Command::new("git").args(&["submodule", "update", "--init"])
+-                                   .status();
+-    }
++    // if !Path::new("libssh2/.git").exists() {
++    //     let _ = Command::new("git")
++    //         .args(&["submodule", "update", "--init"])
++    //         .status();
++    // }
+     let mut cfg = cmake::Config::new("libssh2");
+@@ -50,7 +51,9 @@
+     // link to it, and for MinGW targets we just pass a dummy include dir to
+     // ensure it's detected (apparently it isn't otherwise?)
+     match env::var_os("DEP_Z_INCLUDE") {
+-        Some(path) => { cfg.define("ZLIB_INCLUDE_DIR", path); }
++        Some(path) => {
++            cfg.define("ZLIB_INCLUDE_DIR", path);
++        }
+         None if target.contains("windows-gnu") => {
+             cfg.define("ZLIB_INCLUDE_DIR", "/");
+         }
+@@ -68,18 +71,20 @@
+     }
+     // Homebrew deprecated OpenSSL and deliberately hides it from cmake, requiring such opt-in
+-    if target.contains("darwin") && Path::new("/usr/local/opt/openssl/include/openssl/ssl.h").exists() {
++    if target.contains("darwin")
++        && Path::new("/usr/local/opt/openssl/include/openssl/ssl.h").exists()
++    {
+         cfg.define("OPENSSL_ROOT_DIR", "/usr/local/opt/openssl/");
+     }
+     let dst = cfg.define("BUILD_SHARED_LIBS", "OFF")
+-                 .define("ENABLE_ZLIB_COMPRESSION", "ON")
+-                 .define("CMAKE_INSTALL_LIBDIR", "lib")
+-                 .define("BUILD_EXAMPLES", "OFF")
+-                 .define("BUILD_TESTING", "OFF")
+-                 .register_dep("OPENSSL")
+-                 .register_dep("Z")
+-                 .build();
++        .define("ENABLE_ZLIB_COMPRESSION", "ON")
++        .define("CMAKE_INSTALL_LIBDIR", "lib")
++        .define("BUILD_EXAMPLES", "OFF")
++        .define("BUILD_TESTING", "OFF")
++        .register_dep("OPENSSL")
++        .register_dep("Z")
++        .build();
+     // Unfortunately the pkg-config file generated for libssh2 indicates
+     // that it depends on zlib, but most systems don't actually have a
+@@ -115,7 +120,7 @@
+ fn register_dep(dep: &str) {
+     if let Some(s) = env::var_os(&format!("DEP_{}_ROOT", dep)) {
+         prepend("PKG_CONFIG_PATH", Path::new(&s).join("lib/pkgconfig"));
+-        return
++        return;
+     }
+     if let Some(s) = env::var_os(&format!("DEP_{}_INCLUDE", dep)) {
+         let root = Path::new(&s).parent().unwrap();
+@@ -123,7 +128,7 @@
+         let path = root.join("lib/pkgconfig");
+         if path.exists() {
+             prepend("PKG_CONFIG_PATH", path);
+-            return
++            return;
+         }
+     }
+ }
+@@ -136,28 +141,37 @@
+ }
+ #[cfg(not(target_env = "msvc"))]
+-fn try_vcpkg() -> bool { false }
++fn try_vcpkg() -> bool {
++    false
++}
+ #[cfg(target_env = "msvc")]
+ fn try_vcpkg() -> bool {
+     vcpkg::Config::new()
+         .emit_includes(true)
+-        .probe("libssh2").map(|_| {
+-
+-        // found libssh2 which depends on openssl and zlib
+-        vcpkg::Config::new()
+-            .lib_name("libeay32")
+-            .lib_name("ssleay32")
+-            .probe("openssl").expect("configured libssh2 from vcpkg but could not \
+-                                      find openssl libraries that it depends on");
+-
+-        vcpkg::Config::new()
+-            .lib_names("zlib", "zlib1")
+-            .probe("zlib").expect("configured libssh2 from vcpkg but could not \
+-                                   find the zlib library that it depends on");
+-
+-        println!("cargo:rustc-link-lib=crypt32");
+-        println!("cargo:rustc-link-lib=gdi32");
+-        println!("cargo:rustc-link-lib=user32");
+-    }).is_ok()
++        .probe("libssh2")
++        .map(|_| {
++            // found libssh2 which depends on openssl and zlib
++            vcpkg::Config::new()
++                .lib_name("libeay32")
++                .lib_name("ssleay32")
++                .probe("openssl")
++                .expect(
++                    "configured libssh2 from vcpkg but could not \
++                     find openssl libraries that it depends on",
++                );
++
++            vcpkg::Config::new()
++                .lib_names("zlib", "zlib1")
++                .probe("zlib")
++                .expect(
++                    "configured libssh2 from vcpkg but could not \
++                     find the zlib library that it depends on",
++                );
++
++            println!("cargo:rustc-link-lib=crypt32");
++            println!("cargo:rustc-link-lib=gdi32");
++            println!("cargo:rustc-link-lib=user32");
++        })
++        .is_ok()
+ }
index cf49af978a6027b09f227094cb728753e783ca7f..4b77c485c1a39d560a0af1baa2b5bc995928d88b 100644 (file)
@@ -2,3 +2,4 @@
 2004_clean-cargo-deps.patch
 2001_use-system-libgit2.patch
 2002_disable-net-tests.patch
+2003_force-use-system-libssh2.patch