diff options
Diffstat (limited to 'extconf.rb')
-rw-r--r-- | extconf.rb | 81 |
1 files changed, 62 insertions, 19 deletions
@@ -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" + |