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
|
import os.path
from .utils import *
from .builder import *
class OpensslBuilder(StandardBuilder):
def build(self):
# another openssl gem:
# nasm output is redirected to NUL which ends up creating a file named NUL.
# however being a reserved file name this file is not deletable by
# ordinary tools.
nul_file = "openssl-%s-%s\\NUL" % (self.bconf.openssl_version, self.bconf.vc_tag)
check_call(['rm', '-f', nul_file])
openssl_dir = self.standard_fetch_extract(
'https://www.openssl.org/source/openssl-%(my_version)s.tar.gz')
with in_dir(openssl_dir):
with self.execute_batch() as b:
if self.bconf.openssl_version_tuple < (1, 1):
# openssl 1.0.2
b.add("patch -p0 < %s" %
require_file_exists(os.path.join(config.winbuild_patch_root, 'openssl-fix-crt-1.0.2.patch')))
elif self.bconf.openssl_version_tuple < (1, 1, 1):
# openssl 1.1.0
b.add("patch -p0 < %s" %
require_file_exists(os.path.join(config.winbuild_patch_root, 'openssl-fix-crt-1.1.0.patch')))
else:
# openssl 1.1.1
b.add("patch -p0 < %s" %
require_file_exists(os.path.join(config.winbuild_patch_root, 'openssl-fix-crt-1.1.1.patch')))
if self.bconf.bitness == 64:
target = 'VC-WIN64A'
batch_file = 'do_win64a'
else:
target = 'VC-WIN32'
batch_file = 'do_nasm'
# msysgit perl has trouble with backslashes used in
# win64 assembly things in openssl 1.0.2
# and in x86 assembly as well in openssl 1.1.0;
# use ActiveState Perl
if not os.path.exists(config.activestate_perl_bin_path):
raise ValueError('activestate_perl_bin_path refers to a nonexisting path')
if not os.path.exists(os.path.join(config.activestate_perl_bin_path, 'perl.exe')):
raise ValueError('No perl binary in activestate_perl_bin_path')
b.add("set path=%s;%%path%%" % config.activestate_perl_bin_path)
b.add("perl -v")
openssl_prefix = os.path.join(os.path.realpath('.'), 'build')
# Do not want compression:
# https://en.wikipedia.org/wiki/CRIME
extras = ['no-comp', 'no-unit-test', 'no-tests', 'no-external-tests']
if config.openssl_version_tuple >= (1, 1):
# openssl 1.1.0
# in 1.1.0 the static/shared selection is handled by
# invoking the right makefile
extras += ['no-shared']
# looks like openssl 1.1.0c does not derive
# --openssldir from --prefix, like its Configure claims,
# and like 1.0.2 does; provide a relative openssl dir
# manually
extras += ['--openssldir=ssl']
b.add("perl Configure %s %s --prefix=%s" % (target, ' '.join(extras), openssl_prefix))
if config.openssl_version_tuple < (1, 1):
# openssl 1.0.2
b.add("call ms\\%s" % batch_file)
b.add("nmake -f ms\\nt.mak")
b.add("nmake -f ms\\nt.mak install")
else:
# openssl 1.1.0
b.add("nmake")
b.add("nmake install")
# assemble dist
b.add('mkdir dist')
b.add('cp -r build/include build/lib dist')
|