Loading README.md +23 −2 Original line number Diff line number Diff line Loading @@ -70,7 +70,11 @@ automatically detected. ### Windows MSVC On MSVC it's unfortunately not always a trivial process acquiring OpenSSL. On MSVC it's unfortunately not always a trivial process acquiring OpenSSL. A couple of possibilities are downloading precompiled binaries for OpenSSL 1.1.0, or installing OpenSSL 1.0.2 using vcpkg. #### Installing OpenSSL 1.1.0 using precompiiled binaries Perhaps the easiest way to do this right now is to download [precompiled binaries] and install them on your system. Currently it's recommended to install the 1.1.0 (non-light) installation if you're choosing this route. Loading @@ -84,7 +88,24 @@ installation via an environment variable: set OPENSSL_DIR=C:\OpenSSL-Win64 ``` Note that this OpenSSL distribution does not ship with any root certificates. Now you will need to [install root certificates.](#acquiring-root-certificates) #### Installing OpenSSL 1.0.2 using vcpkg Install [vcpkg](https://github.com/Microsoft/vcpkg), and install the OpenSSL port like this: ```Batchfile vcpkg install openssl:x64-windows set VCPKG_ROOT=c:\path\to\vcpkg\installation cargo build ``` For more information see the vcpkg build helper [documentation](http://docs.rs/vcpkg). To finsh setting up OpenSSL you will need to [install root certificates.](#acquiring-root-certificates) #### Acquiring Root Certificates Neither of the above OpenSSL distributions ship with any root certificates. So to make requests to servers on the internet, you have to install them manually. Download the [cacert.pem file from here], copy it somewhere safe (`C:\OpenSSL-Win64\certs` is a good place) and point the `SSL_CERT_FILE` Loading appveyor.yml +9 −2 Original line number Diff line number Diff line Loading @@ -20,10 +20,13 @@ environment: BITS: 32 OPENSSL_VERSION: 1_0_2L OPENSSL_DIR: C:\OpenSSL - TARGET: x86_64-pc-windows-msvc VCPKG_DEFAULT_TRIPLET: x64-windows install: # install OpenSSL - ps: Start-FileDownload "http://slproweb.com/download/Win${env:BITS}OpenSSL-${env:OPENSSL_VERSION}.exe" - Win%BITS%OpenSSL-%OPENSSL_VERSION%.exe /SILENT /VERYSILENT /SP- /DIR="C:\OpenSSL" - mkdir C:\OpenSSL - ps: if (Test-Path env:OPENSSL_VERSION) { Start-FileDownload "http://slproweb.com/download/Win${env:BITS}OpenSSL-${env:OPENSSL_VERSION}.exe" } - if defined OPENSSL_VERSION Win%BITS%OpenSSL-%OPENSSL_VERSION%.exe /SILENT /VERYSILENT /SP- /DIR="C:\OpenSSL" - appveyor DownloadFile https://curl.haxx.se/ca/cacert.pem -FileName C:\OpenSSL\cacert.pem # Install Rust Loading @@ -33,6 +36,10 @@ install: - if defined MSYS2 set PATH=C:\msys64\mingw%BITS%\bin;%PATH% - rustc -V - cargo -V - if defined VCPKG_DEFAULT_TRIPLET git clone https://github.com/Microsoft/vcpkg c:\projects\vcpkg - if defined VCPKG_DEFAULT_TRIPLET c:\projects\vcpkg\bootstrap-vcpkg.bat - if defined VCPKG_DEFAULT_TRIPLET set VCPKG_ROOT=c:\projects\vcpkg - if defined VCPKG_DEFAULT_TRIPLET %VCPKG_ROOT%\vcpkg.exe install openssl build: false Loading openssl-sys/Cargo.toml +3 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,9 @@ libc = "0.2" pkg-config = "0.3.9" gcc = "0.3.42" [target.'cfg(target_env = "msvc")'.build-dependencies] vcpkg = "0.2" # We don't actually use metadeps for annoying reasons but this is still here for tooling [package.metadata.pkg-config] openssl = "1.0.1" openssl-sys/build.rs +47 −0 Original line number Diff line number Diff line extern crate pkg_config; #[cfg(target_env = "msvc")] extern crate vcpkg; extern crate gcc; use std::collections::HashSet; Loading Loading @@ -98,6 +100,7 @@ fn find_openssl_dir(target: &str) -> OsString { } try_pkg_config(); try_vcpkg(); let mut msg = format!(" Loading Loading @@ -213,6 +216,50 @@ fn try_pkg_config() { std::process::exit(0); } /// Attempt to find OpenSSL through vcpkg. /// /// Note that if this succeeds then the function does not return as vcpkg /// should emit all of the cargo metadata that we need. #[cfg(target_env = "msvc")] fn try_vcpkg() { // vcpkg will not emit any metadata if it can not find libraries // appropriate for the target triple with the desired linkage. let mut lib = vcpkg::Config::new() .emit_includes(true) .lib_name("libcrypto") .lib_name("libssl") .probe("openssl"); if let Err(e) = lib { println!("note: vcpkg did not find openssl as libcrypto and libssl : {:?}", e); lib = vcpkg::Config::new() .emit_includes(true) .lib_name("libeay32") .lib_name("ssleay32") .probe("openssl"); } if let Err(e) = lib { println!("note: vcpkg did not find openssl as ssleay32 and libeay32: {:?}", e); return; } let lib = lib.unwrap(); validate_headers(&lib.include_paths); println!("cargo:rustc-link-lib=user32"); println!("cargo:rustc-link-lib=gdi32"); println!("cargo:rustc-link-lib=crypt32"); std::process::exit(0); } #[cfg(not(target_env = "msvc"))] fn try_vcpkg() {} /// Validates the header files found in `include_dir` and then returns the /// version string of OpenSSL. fn validate_headers(include_dirs: &[PathBuf]) -> Version { Loading Loading
README.md +23 −2 Original line number Diff line number Diff line Loading @@ -70,7 +70,11 @@ automatically detected. ### Windows MSVC On MSVC it's unfortunately not always a trivial process acquiring OpenSSL. On MSVC it's unfortunately not always a trivial process acquiring OpenSSL. A couple of possibilities are downloading precompiled binaries for OpenSSL 1.1.0, or installing OpenSSL 1.0.2 using vcpkg. #### Installing OpenSSL 1.1.0 using precompiiled binaries Perhaps the easiest way to do this right now is to download [precompiled binaries] and install them on your system. Currently it's recommended to install the 1.1.0 (non-light) installation if you're choosing this route. Loading @@ -84,7 +88,24 @@ installation via an environment variable: set OPENSSL_DIR=C:\OpenSSL-Win64 ``` Note that this OpenSSL distribution does not ship with any root certificates. Now you will need to [install root certificates.](#acquiring-root-certificates) #### Installing OpenSSL 1.0.2 using vcpkg Install [vcpkg](https://github.com/Microsoft/vcpkg), and install the OpenSSL port like this: ```Batchfile vcpkg install openssl:x64-windows set VCPKG_ROOT=c:\path\to\vcpkg\installation cargo build ``` For more information see the vcpkg build helper [documentation](http://docs.rs/vcpkg). To finsh setting up OpenSSL you will need to [install root certificates.](#acquiring-root-certificates) #### Acquiring Root Certificates Neither of the above OpenSSL distributions ship with any root certificates. So to make requests to servers on the internet, you have to install them manually. Download the [cacert.pem file from here], copy it somewhere safe (`C:\OpenSSL-Win64\certs` is a good place) and point the `SSL_CERT_FILE` Loading
appveyor.yml +9 −2 Original line number Diff line number Diff line Loading @@ -20,10 +20,13 @@ environment: BITS: 32 OPENSSL_VERSION: 1_0_2L OPENSSL_DIR: C:\OpenSSL - TARGET: x86_64-pc-windows-msvc VCPKG_DEFAULT_TRIPLET: x64-windows install: # install OpenSSL - ps: Start-FileDownload "http://slproweb.com/download/Win${env:BITS}OpenSSL-${env:OPENSSL_VERSION}.exe" - Win%BITS%OpenSSL-%OPENSSL_VERSION%.exe /SILENT /VERYSILENT /SP- /DIR="C:\OpenSSL" - mkdir C:\OpenSSL - ps: if (Test-Path env:OPENSSL_VERSION) { Start-FileDownload "http://slproweb.com/download/Win${env:BITS}OpenSSL-${env:OPENSSL_VERSION}.exe" } - if defined OPENSSL_VERSION Win%BITS%OpenSSL-%OPENSSL_VERSION%.exe /SILENT /VERYSILENT /SP- /DIR="C:\OpenSSL" - appveyor DownloadFile https://curl.haxx.se/ca/cacert.pem -FileName C:\OpenSSL\cacert.pem # Install Rust Loading @@ -33,6 +36,10 @@ install: - if defined MSYS2 set PATH=C:\msys64\mingw%BITS%\bin;%PATH% - rustc -V - cargo -V - if defined VCPKG_DEFAULT_TRIPLET git clone https://github.com/Microsoft/vcpkg c:\projects\vcpkg - if defined VCPKG_DEFAULT_TRIPLET c:\projects\vcpkg\bootstrap-vcpkg.bat - if defined VCPKG_DEFAULT_TRIPLET set VCPKG_ROOT=c:\projects\vcpkg - if defined VCPKG_DEFAULT_TRIPLET %VCPKG_ROOT%\vcpkg.exe install openssl build: false Loading
openssl-sys/Cargo.toml +3 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,9 @@ libc = "0.2" pkg-config = "0.3.9" gcc = "0.3.42" [target.'cfg(target_env = "msvc")'.build-dependencies] vcpkg = "0.2" # We don't actually use metadeps for annoying reasons but this is still here for tooling [package.metadata.pkg-config] openssl = "1.0.1"
openssl-sys/build.rs +47 −0 Original line number Diff line number Diff line extern crate pkg_config; #[cfg(target_env = "msvc")] extern crate vcpkg; extern crate gcc; use std::collections::HashSet; Loading Loading @@ -98,6 +100,7 @@ fn find_openssl_dir(target: &str) -> OsString { } try_pkg_config(); try_vcpkg(); let mut msg = format!(" Loading Loading @@ -213,6 +216,50 @@ fn try_pkg_config() { std::process::exit(0); } /// Attempt to find OpenSSL through vcpkg. /// /// Note that if this succeeds then the function does not return as vcpkg /// should emit all of the cargo metadata that we need. #[cfg(target_env = "msvc")] fn try_vcpkg() { // vcpkg will not emit any metadata if it can not find libraries // appropriate for the target triple with the desired linkage. let mut lib = vcpkg::Config::new() .emit_includes(true) .lib_name("libcrypto") .lib_name("libssl") .probe("openssl"); if let Err(e) = lib { println!("note: vcpkg did not find openssl as libcrypto and libssl : {:?}", e); lib = vcpkg::Config::new() .emit_includes(true) .lib_name("libeay32") .lib_name("ssleay32") .probe("openssl"); } if let Err(e) = lib { println!("note: vcpkg did not find openssl as ssleay32 and libeay32: {:?}", e); return; } let lib = lib.unwrap(); validate_headers(&lib.include_paths); println!("cargo:rustc-link-lib=user32"); println!("cargo:rustc-link-lib=gdi32"); println!("cargo:rustc-link-lib=crypt32"); std::process::exit(0); } #[cfg(not(target_env = "msvc"))] fn try_vcpkg() {} /// Validates the header files found in `include_dir` and then returns the /// version string of OpenSSL. fn validate_headers(include_dirs: &[PathBuf]) -> Version { Loading