aboutsummaryrefslogtreecommitdiffstats
path: root/extconf.rb
diff options
context:
space:
mode:
Diffstat (limited to 'extconf.rb')
-rw-r--r--extconf.rb81
1 files changed, 62 insertions, 19 deletions
diff --git a/extconf.rb b/extconf.rb
index 585a9c0..1343539 100644
--- a/extconf.rb
+++ b/extconf.rb
@@ -16,6 +16,17 @@
require "mkmf"
+def have_defined(macro, header=nil)
+ checking_for "#{macro}" do
+ if macro_defined?(macro, cpp_include(header))
+ $defs.push(format("-DHAVE_%s", macro.upcase))
+ true
+ else
+ false
+ end
+ end
+end
+
if RUBY_PLATFORM =~ /mswin32/
CRYPTOLIB="libeay32"
SSLLIB="ssleay32"
@@ -35,10 +46,6 @@ includes, = dir_config("openssl")
includes ||= "/usr/include"
message "=== OpenSSL for Ruby configurator ===\n"
-message "=== Checking for system dependent stuff... ===\n"
-have_header("unistd.h")
-have_header("sys/time.h")
-message "=== Checking for system dependent stuff done. ===\n"
##
@@ -80,32 +87,68 @@ end
def have_openssl_097(inc_dir)
# FIXME:
# checking_for("OpenSSL >= 0.9.7") do
- printf "Checking for OpenSSL >= 0.9.7..."
+ printf "checking for OpenSSL version... "
File.open(inc_dir+"/openssl/opensslv.h") {|f|
txt = f.read
- result = ((txt.grep(/#define SHLIB_VERSION_NUMBER/)[0].split '"')[1] < "0.9.7")
- puts result ? "no" : "yes"
- !result
+ puts (txt.grep(/#define SHLIB_VERSION_NUMBER/)[0].split '"')[1]
+ true
}
end
message "=== Checking for required stuff... ===\n"
result = have_header("openssl/crypto.h")
-result &= have_library(CRYPTOLIB, "OPENSSL_load_builtin_modules")
+result &= have_library(CRYPTOLIB, "OpenSSL_add_all_digests")
result &= have_library(SSLLIB, "SSL_library_init")
-result &= have_openssl_097(includes)
-
-have_func("rb_obj_init_copy", "ruby.h")
-have_func("HMAC_CTX_copy")
-have_func("X509_STORE_set_ex_data")
-if result
- message "=== Checking for required stuff done. ===\n"
- create_makefile("openssl")
- message "Done.\n"
-else
+if !result
message "=== Checking for required stuff failed. ===\n"
message "Makefile wasn't created. Fix the errors above.\n"
+ exit 1
end
+message "=== Checking for system dependent stuff... ===\n"
+have_header("unistd.h")
+have_header("sys/time.h")
+
+message "=== Checking for OpenSSL features... ===\n"
+have_openssl_097(includes)
+have_defined("PEM_read_bio_DSAPublicKey", "openssl/pem.h")
+have_defined("PEM_write_bio_DSAPublicKey", "openssl/pem.h")
+have_defined("DSAPrivateKey_dup", "openssl/dsa.h")
+have_defined("DSAPublicKey_dup", "openssl/dsa.h")
+have_defined("X509_REVOKED_dup", "openssl/x509.h")
+have_defined("PKCS7_SIGNER_INFO_dup", "openssl/pkcs7")
+have_defined("PKCS7_RECIP_INFO_dup", "openssl/pkcs7")
+have_func("HMAC_CTX_copy")
+have_func("X509_STORE_get_ex_data")
+have_func("X509_STORE_set_ex_data")
+have_func("EVP_MD_CTX_create")
+have_func("EVP_MD_CTX_cleanup")
+have_func("EVP_MD_CTX_destroy")
+have_func("PEM_def_callback")
+have_defined("EVP_CIPHER_name", "openssl/evp.h")
+have_defined("EVP_MD_name", "openssl/evp.h")
+have_func("EVP_MD_CTX_init")
+have_func("HMAC_CTX_init")
+have_func("HMAC_CTX_cleanup")
+have_defined("PKCS7_is_detached", "openssl/pkcs7.h")
+have_defined("PKCS7_type_is_encrypted", "openssl/pkcs7.h")
+have_func("X509_CRL_set_version")
+have_func("X509_CRL_set_issuer_name")
+have_func("X509_CRL_sort")
+have_func("X509_CRL_add0_revoked")
+have_struct_member("X509_STORE_CTX", "current_crl", "openssl/x509.h")
+have_struct_member("X509_STORE", "flags", "openssl/x509.h")
+have_struct_member("X509_STORE", "purpose", "openssl/x509.h")
+have_struct_member("X509_STORE", "trust", "openssl/x509.h")
+have_struct_member("EVP_CIPHER_CTX", "flags", "openssl/evp.h")
+have_func("BN_mod_sqr")
+
+message "=== Checking for Ruby features... ===\n"
+have_func("rb_obj_init_copy", "ruby.h")
+
+message "=== Checking done. ===\n"
+create_makefile("openssl")
+message "Done.\n"
+