1# -*- coding: us-ascii -*- 2=begin 3= $RCSfile$ -- Generator for Makefile 4 5= Info 6 'OpenSSL for Ruby 2' project 7 Copyright (C) 2002 Michal Rokos <m.rokos@sh.cvut.cz> 8 All rights reserved. 9 10= Licence 11 This program is licenced under the same licence as Ruby. 12 (See the file 'LICENCE'.) 13 14= Version 15 $Id: extconf.rb 38492 2012-12-20 07:42:56Z emboss $ 16=end 17 18require "mkmf" 19require File.expand_path('../deprecation', __FILE__) 20 21dir_config("openssl") 22dir_config("kerberos") 23 24Logging::message "=== OpenSSL for Ruby configurator ===\n" 25 26## 27# Adds -DOSSL_DEBUG for compilation and some more targets when GCC is used 28# To turn it on, use: --with-debug or --enable-debug 29# 30if with_config("debug") or enable_config("debug") 31 $defs.push("-DOSSL_DEBUG") unless $defs.include? "-DOSSL_DEBUG" 32end 33 34Logging::message "=== Checking for system dependent stuff... ===\n" 35have_library("nsl", "t_open") 36have_library("socket", "socket") 37have_header("assert.h") 38 39Logging::message "=== Checking for required stuff... ===\n" 40if $mingw 41 have_library("wsock32") 42 have_library("gdi32") 43end 44 45result = pkg_config("openssl") && have_header("openssl/ssl.h") 46 47unless result 48 result = have_header("openssl/ssl.h") 49 result &&= %w[crypto libeay32].any? {|lib| have_library(lib, "OpenSSL_add_all_digests")} 50 result &&= %w[ssl ssleay32].any? {|lib| have_library(lib, "SSL_library_init")} 51 unless result 52 Logging::message "=== Checking for required stuff failed. ===\n" 53 Logging::message "Makefile wasn't created. Fix the errors above.\n" 54 exit 1 55 end 56end 57 58unless have_header("openssl/conf_api.h") 59 raise "OpenSSL 0.9.6 or later required." 60end 61 62Logging::message "=== Checking for OpenSSL features... ===\n" 63have_func("ERR_peek_last_error") 64have_func("ASN1_put_eoc") 65have_func("BN_mod_add") 66have_func("BN_mod_sqr") 67have_func("BN_mod_sub") 68have_func("BN_pseudo_rand_range") 69have_func("BN_rand_range") 70have_func("CONF_get1_default_config_file") 71have_func("EVP_CIPHER_CTX_copy") 72have_func("EVP_CIPHER_CTX_set_padding") 73have_func("EVP_CipherFinal_ex") 74have_func("EVP_CipherInit_ex") 75have_func("EVP_DigestFinal_ex") 76have_func("EVP_DigestInit_ex") 77have_func("EVP_MD_CTX_cleanup") 78have_func("EVP_MD_CTX_create") 79have_func("EVP_MD_CTX_destroy") 80have_func("EVP_MD_CTX_init") 81have_func("HMAC_CTX_cleanup") 82have_func("HMAC_CTX_copy") 83have_func("HMAC_CTX_init") 84have_func("PEM_def_callback") 85have_func("PKCS5_PBKDF2_HMAC") 86have_func("PKCS5_PBKDF2_HMAC_SHA1") 87have_func("X509V3_set_nconf") 88have_func("X509V3_EXT_nconf_nid") 89have_func("X509_CRL_add0_revoked") 90have_func("X509_CRL_set_issuer_name") 91have_func("X509_CRL_set_version") 92have_func("X509_CRL_sort") 93have_func("X509_NAME_hash_old") 94have_func("X509_STORE_get_ex_data") 95have_func("X509_STORE_set_ex_data") 96have_func("OBJ_NAME_do_all_sorted") 97have_func("SSL_SESSION_get_id") 98have_func("SSL_SESSION_cmp") 99have_func("OPENSSL_cleanse") 100have_func("SSLv2_method") 101have_func("SSLv2_server_method") 102have_func("SSLv2_client_method") 103have_func("TLSv1_1_method") 104have_func("TLSv1_1_server_method") 105have_func("TLSv1_1_client_method") 106have_func("TLSv1_2_method") 107have_func("TLSv1_2_server_method") 108have_func("TLSv1_2_client_method") 109have_macro("OPENSSL_NPN_NEGOTIATED", ['openssl/ssl.h']) && $defs.push("-DHAVE_OPENSSL_NPN_NEGOTIATED") 110unless have_func("SSL_set_tlsext_host_name", ['openssl/ssl.h']) 111 have_macro("SSL_set_tlsext_host_name", ['openssl/ssl.h']) && $defs.push("-DHAVE_SSL_SET_TLSEXT_HOST_NAME") 112end 113if have_header("openssl/engine.h") 114 have_func("ENGINE_add") 115 have_func("ENGINE_load_builtin_engines") 116 have_func("ENGINE_load_openbsd_dev_crypto") 117 have_func("ENGINE_get_digest") 118 have_func("ENGINE_get_cipher") 119 have_func("ENGINE_cleanup") 120 have_func("ENGINE_load_dynamic") 121 have_func("ENGINE_load_4758cca") 122 have_func("ENGINE_load_aep") 123 have_func("ENGINE_load_atalla") 124 have_func("ENGINE_load_chil") 125 have_func("ENGINE_load_cswift") 126 have_func("ENGINE_load_nuron") 127 have_func("ENGINE_load_sureware") 128 have_func("ENGINE_load_ubsec") 129 have_func("ENGINE_load_padlock") 130 have_func("ENGINE_load_capi") 131 have_func("ENGINE_load_gmp") 132 have_func("ENGINE_load_gost") 133 have_func("ENGINE_load_cryptodev") 134 have_func("ENGINE_load_aesni") 135end 136have_func("DH_generate_parameters_ex") 137have_func("DSA_generate_parameters_ex") 138have_func("RSA_generate_key_ex") 139if checking_for('OpenSSL version is 0.9.7 or later') { 140 try_static_assert('OPENSSL_VERSION_NUMBER >= 0x00907000L', 'openssl/opensslv.h') 141 } 142 have_header("openssl/ocsp.h") 143end 144have_struct_member("EVP_CIPHER_CTX", "flags", "openssl/evp.h") 145have_struct_member("EVP_CIPHER_CTX", "engine", "openssl/evp.h") 146have_struct_member("X509_ATTRIBUTE", "single", "openssl/x509.h") 147have_macro("OPENSSL_FIPS", ['openssl/opensslconf.h']) && $defs.push("-DHAVE_OPENSSL_FIPS") 148have_macro("EVP_CTRL_GCM_GET_TAG", ['openssl/evp.h']) && $defs.push("-DHAVE_AUTHENTICATED_ENCRYPTION") 149 150Logging::message "=== Checking done. ===\n" 151 152create_header 153create_makefile("openssl") 154Logging::message "Done.\n" 155