-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
extconf.rb
80 lines (64 loc) · 2.79 KB
/
extconf.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
require 'mkmf'
dir_config("puma_http11")
if $mingw
append_cflags '-fstack-protector-strong -D_FORTIFY_SOURCE=2'
append_ldflags '-fstack-protector-strong -l:libssp.a'
have_library 'ssp'
end
unless ENV["PUMA_DISABLE_SSL"]
# don't use pkg_config('openssl') if '--with-openssl-dir' is used
has_openssl_dir = dir_config('openssl').any? ||
RbConfig::CONFIG['configure_args']&.include?('openssl')
found_pkg_config = !has_openssl_dir && pkg_config('openssl')
found_ssl = if !$mingw && found_pkg_config
puts '──── Using OpenSSL pkgconfig (openssl.pc) ────'
true
elsif have_library('libcrypto', 'BIO_read') && have_library('libssl', 'SSL_CTX_new')
true
elsif %w'crypto libeay32'.find {|crypto| have_library(crypto, 'BIO_read')} &&
%w'ssl ssleay32'.find {|ssl| have_library(ssl, 'SSL_CTX_new')}
true
else
puts '** Puma will be compiled without SSL support'
false
end
if found_ssl
have_header "openssl/bio.h"
ssl_h = "openssl/ssl.h".freeze
puts "\n──── Below are yes for 1.0.2 & later ────"
have_func "DTLS_method" , ssl_h
have_func "SSL_CTX_set_session_cache_mode(NULL, 0)", ssl_h
puts "\n──── Below are yes for 1.1.0 & later ────"
have_func "TLS_server_method" , ssl_h
have_func "SSL_CTX_set_min_proto_version(NULL, 0)" , ssl_h
puts "\n──── Below is yes for 1.1.0 and later, but isn't documented until 3.0.0 ────"
# https://github.com/openssl/openssl/blob/OpenSSL_1_1_0/include/openssl/ssl.h#L1159
have_func "SSL_CTX_set_dh_auto(NULL, 0)" , ssl_h
puts "\n──── Below is yes for 1.1.1 & later ────"
have_func "SSL_CTX_set_ciphersuites(NULL, \"\")" , ssl_h
puts "\n──── Below is yes for 3.0.0 & later ────"
have_func "SSL_get1_peer_certificate" , ssl_h
puts ''
# Random.bytes available in Ruby 2.5 and later, Random::DEFAULT deprecated in 3.0
if Random.respond_to?(:bytes)
$defs.push "-DHAVE_RANDOM_BYTES"
puts "checking for Random.bytes... yes"
else
puts "checking for Random.bytes... no"
end
end
end
if ENV["PUMA_MAKE_WARNINGS_INTO_ERRORS"]
# Make all warnings into errors
# Except `implicit-fallthrough` since most failures comes from ragel state machine generated code
if respond_to?(:append_cflags, true) # Ruby 2.5 and later
append_cflags(config_string('WERRORFLAG') || '-Werror')
append_cflags '-Wno-implicit-fallthrough'
else
# flag may not exist on some platforms, -Werror may not be defined on some platforms, but
# works with all in current CI
$CFLAGS << " #{config_string('WERRORFLAG') || '-Werror'}"
$CFLAGS << ' -Wno-implicit-fallthrough'
end
end
create_makefile("puma/puma_http11")