[前][次][番号順一覧][スレッド一覧]

ruby-changes:47247

From: hsbt <ko1@a...>
Date: Tue, 18 Jul 2017 20:28:53 +0900 (JST)
Subject: [ruby-changes:47247] hsbt:r59362 (trunk): Copy openssl library finder for ext/digest from OpenSSL extention.

hsbt	2017-07-18 20:28:49 +0900 (Tue, 18 Jul 2017)

  New Revision: 59362

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=59362

  Log:
    Copy openssl library finder for ext/digest from OpenSSL extention.
    
      * ext/digest/digest_conf.rb: Support to search variaous filenames of
        OpenSSL/LibreSSL libraries.

  Modified files:
    trunk/ext/digest/digest_conf.rb
Index: ext/digest/digest_conf.rb
===================================================================
--- ext/digest/digest_conf.rb	(revision 59361)
+++ ext/digest/digest_conf.rb	(revision 59362)
@@ -1,4 +1,56 @@ https://github.com/ruby/ruby/blob/trunk/ext/digest/digest_conf.rb#L1
 # frozen_string_literal: false
+
+# Copy from ext/openssl/extconf.rb
+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
+
+  return false unless have_header("openssl/ssl.h")
+
+  ret = have_library("crypto", "CRYPTO_malloc") &&
+    have_library("ssl", "SSL_new")
+  return ret if ret
+
+  if $mswin
+    # OpenSSL >= 1.1.0: libcrypto.lib and libssl.lib.
+    if have_library("libcrypto", "CRYPTO_malloc") &&
+        have_library("libssl", "SSL_new")
+      return true
+    end
+
+    # OpenSSL <= 1.0.2: libeay32.lib and ssleay32.lib.
+    if have_library("libeay32", "CRYPTO_malloc") &&
+        have_library("ssleay32", "SSL_new")
+      return true
+    end
+
+    # LibreSSL: libcrypto-##.lib and libssl-##.lib, where ## is the ABI version
+    # number. We have to find the version number out by scanning libpath.
+    libpath = $LIBPATH.dup
+    libpath |= ENV["LIB"].split(File::PATH_SEPARATOR)
+    libpath.map! { |d| d.tr(File::ALT_SEPARATOR, File::SEPARATOR) }
+
+    ret = [
+      ["crypto", "CRYPTO_malloc"],
+      ["ssl", "SSL_new"]
+    ].all? do |base, func|
+      result = false
+      libs = ["lib#{base}-[0-9][0-9]", "lib#{base}-[0-9][0-9][0-9]"]
+      libs = Dir.glob(libs.map{|l| libpath.map{|d| File.join(d, l + ".*")}}.flatten).map{|path| File.basename(path, ".*")}.uniq
+      libs.each do |lib|
+        result = have_library(lib, func)
+        break if result
+      end
+      result
+    end
+    return ret if ret
+  end
+  return false
+end
+
 def digest_conf(name, hdr = name, funcs = nil, types = nil)
   unless with_config("bundled-#{name}")
     cc = with_config("common-digest")
@@ -14,7 +66,7 @@ def digest_conf(name, hdr = name, funcs https://github.com/ruby/ruby/blob/trunk/ext/digest/digest_conf.rb#L66
     dir_config("openssl")
     pkg_config("openssl")
     require File.expand_path('../../openssl/deprecation', __FILE__)
-    if have_library("crypto")
+    if find_openssl_library
       funcs ||= name.upcase
       funcs = Array(funcs)
       types ||= funcs

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]