diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-16 08:03:53 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-16 08:03:53 +0000 |
commit | 59faac613f896e9f4287738c96805c96588d78c1 (patch) | |
tree | 308ca9bc90861379708e0ee9df9eefb02100f06a /ext | |
parent | 66b54b1a4ae9f3d38c47e23ecec6a40c07a80c21 (diff) | |
download | ruby-59faac613f896e9f4287738c96805c96588d78c1.tar.gz |
Search SSL libraries by testing various filename patterns
* ext/openssl/extconf.rb (find_openssl_library): should search by more flexible
method, especially for LibreSSL on Windows.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58742 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r-- | ext/openssl/extconf.rb | 50 |
1 files changed, 45 insertions, 5 deletions
diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb index 96982309c3..250aabe478 100644 --- a/ext/openssl/extconf.rb +++ b/ext/openssl/extconf.rb @@ -36,17 +36,57 @@ have_library("socket", "socket") Logging::message "=== Checking for required stuff... ===\n" result = pkg_config("openssl") && have_header("openssl/ssl.h") -unless result + +def find_openssl_library if $mswin || $mingw # required for static OpenSSL libraries have_library("gdi32") # OpenSSL <= 1.0.2 (for RAND_screen()) have_library("crypt32") end - result = have_header("openssl/ssl.h") - result &&= %w[crypto libeay32].any? {|lib| have_library(lib, "CRYPTO_malloc")} - result &&= %w[ssl ssleay32].any? {|lib| have_library(lib, "SSL_new")} - unless result + return false unless have_header("openssl/ssl.h") + + libpath = $LIBPATH.dup + libpath |= ENV["LIB"].split(File::PATH_SEPARATOR).map{|d| d.tr(File::ALT_SEPARATOR, File::SEPARATOR)} if $mswin + + result = false + %w[crypto eay32].each do |base| + libs = [base] + if $mswin || $mingw + libs << "lib" + libs.first + if base == "crypto" + libs << libs.first + "-[0-9][0-9]" + libs << "lib" + libs.last + end + libs = Dir.glob(libs.map{|l| libpath.map{|d| File.join(d, l + ".*")}}.flatten).map{|path| File.basename(path, ".*")}.uniq + end + libs.each do |lib| + result = have_library(lib, "CRYPTO_malloc") + break if result + end + break if result + end + return false unless result + + %w[ssl ssleay32].each do |base| + libs = [base] + if $mswin || $mingw + libs << "lib" + libs.first + if base == "ssl" + libs << libs.first + "-[0-9][0-9]" + libs << "lib" + libs.last + end + libs = Dir.glob(libs.map{|l| libpath.map{|d| File.join(d, l + ".*")}}.flatten).map{|path| File.basename(path, ".*")}.uniq + end + libs.each do |lib| + return true if have_library(lib, "SSL_new") + end + end + return false +end + +unless result + unless find_openssl_library Logging::message "=== Checking for required stuff failed. ===\n" Logging::message "Makefile wasn't created. Fix the errors above.\n" exit 1 |