mirror of
https://github.com/borgbackup/borg.git
synced 2024-12-23 16:26:29 +00:00
refactor openssl related code in setup.py
- removed hardcoded lib search pathes - to find system libs/headers, one must point these env vars to them: BORG_OPENSSL_PREFIX - moved some code from setup.py to setup_*.py
This commit is contained in:
parent
d6635da654
commit
2dfc6bb43f
2 changed files with 47 additions and 26 deletions
33
setup.py
33
setup.py
|
@ -24,6 +24,7 @@
|
||||||
import setup_lz4
|
import setup_lz4
|
||||||
import setup_zstd
|
import setup_zstd
|
||||||
import setup_b2
|
import setup_b2
|
||||||
|
import setup_crypto
|
||||||
import setup_docs
|
import setup_docs
|
||||||
|
|
||||||
# True: use the shared liblz4 (>= 1.7.0 / r129) from the system, False: use the bundled lz4 code
|
# True: use the shared liblz4 (>= 1.7.0 / r129) from the system, False: use the bundled lz4 code
|
||||||
|
@ -100,30 +101,6 @@ def __init__(self, *args, **kwargs):
|
||||||
raise ImportError('The GIT version of Borg needs Cython. Install Cython or use a released version.')
|
raise ImportError('The GIT version of Borg needs Cython. Install Cython or use a released version.')
|
||||||
|
|
||||||
|
|
||||||
def detect_openssl(prefixes):
|
|
||||||
for prefix in prefixes:
|
|
||||||
filename = os.path.join(prefix, 'include', 'openssl', 'evp.h')
|
|
||||||
if os.path.exists(filename):
|
|
||||||
with open(filename, 'rb') as fd:
|
|
||||||
if b'PKCS5_PBKDF2_HMAC(' in fd.read():
|
|
||||||
return prefix
|
|
||||||
|
|
||||||
|
|
||||||
include_dirs = []
|
|
||||||
library_dirs = []
|
|
||||||
define_macros = []
|
|
||||||
|
|
||||||
possible_openssl_prefixes = ['/usr', '/usr/local', '/usr/local/opt/openssl', '/usr/local/ssl', '/usr/local/openssl',
|
|
||||||
'/usr/local/borg', '/opt/local', '/opt/pkg', ]
|
|
||||||
if os.environ.get('BORG_OPENSSL_PREFIX'):
|
|
||||||
possible_openssl_prefixes.insert(0, os.environ.get('BORG_OPENSSL_PREFIX'))
|
|
||||||
ssl_prefix = detect_openssl(possible_openssl_prefixes)
|
|
||||||
if not ssl_prefix:
|
|
||||||
raise Exception('Unable to find OpenSSL >= 1.0 headers. (Looked here: {})'.format(', '.join(possible_openssl_prefixes)))
|
|
||||||
include_dirs.append(os.path.join(ssl_prefix, 'include'))
|
|
||||||
library_dirs.append(os.path.join(ssl_prefix, 'lib'))
|
|
||||||
|
|
||||||
|
|
||||||
with open('README.rst', 'r') as fd:
|
with open('README.rst', 'r') as fd:
|
||||||
long_description = fd.read()
|
long_description = fd.read()
|
||||||
# remove header, but have one \n before first headline
|
# remove header, but have one \n before first headline
|
||||||
|
@ -165,6 +142,9 @@ def run(self):
|
||||||
|
|
||||||
ext_modules = []
|
ext_modules = []
|
||||||
if not on_rtd:
|
if not on_rtd:
|
||||||
|
include_dirs = []
|
||||||
|
library_dirs = []
|
||||||
|
define_macros = []
|
||||||
compress_ext_kwargs = dict(sources=[compress_source], include_dirs=include_dirs, library_dirs=library_dirs,
|
compress_ext_kwargs = dict(sources=[compress_source], include_dirs=include_dirs, library_dirs=library_dirs,
|
||||||
define_macros=define_macros)
|
define_macros=define_macros)
|
||||||
compress_ext_kwargs = setup_lz4.lz4_ext_kwargs(bundled_path='src/borg/algorithms/lz4',
|
compress_ext_kwargs = setup_lz4.lz4_ext_kwargs(bundled_path='src/borg/algorithms/lz4',
|
||||||
|
@ -173,8 +153,9 @@ def run(self):
|
||||||
compress_ext_kwargs = setup_zstd.zstd_ext_kwargs(bundled_path='src/borg/algorithms/zstd',
|
compress_ext_kwargs = setup_zstd.zstd_ext_kwargs(bundled_path='src/borg/algorithms/zstd',
|
||||||
prefer_system=prefer_system_libzstd,
|
prefer_system=prefer_system_libzstd,
|
||||||
multithreaded=False, legacy=False, **compress_ext_kwargs)
|
multithreaded=False, legacy=False, **compress_ext_kwargs)
|
||||||
crypto_ext_kwargs = dict(sources=[crypto_ll_source, crypto_helpers], libraries=['crypto'],
|
crypto_ext_kwargs = dict(sources=[crypto_ll_source, crypto_helpers], include_dirs=include_dirs,
|
||||||
include_dirs=include_dirs, library_dirs=library_dirs, define_macros=define_macros)
|
library_dirs=library_dirs, define_macros=define_macros)
|
||||||
|
crypto_ext_kwargs = setup_crypto.crypto_ext_kwargs(**crypto_ext_kwargs)
|
||||||
crypto_ext_kwargs = setup_b2.b2_ext_kwargs(bundled_path='src/borg/algorithms/blake2',
|
crypto_ext_kwargs = setup_b2.b2_ext_kwargs(bundled_path='src/borg/algorithms/blake2',
|
||||||
prefer_system=prefer_system_libb2,
|
prefer_system=prefer_system_libb2,
|
||||||
**crypto_ext_kwargs)
|
**crypto_ext_kwargs)
|
||||||
|
|
40
setup_crypto.py
Normal file
40
setup_crypto.py
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
# Support code for building a C extension with crypto from OpenSSL
|
||||||
|
#
|
||||||
|
# Copyright (c) 2016-present, Gregory Szorc (original code for zstd)
|
||||||
|
# 2017-present, Thomas Waldmann (mods to make it more generic, code for openssl)
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This software may be modified and distributed under the terms
|
||||||
|
# of the BSD license. See the LICENSE file for details.
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
def crypto_ext_kwargs(**kwargs):
|
||||||
|
"""amend kwargs with crypto stuff for a distutils.extension.Extension initialization.
|
||||||
|
|
||||||
|
kwargs: distutils.extension.Extension kwargs that should be amended
|
||||||
|
returns: amended kwargs
|
||||||
|
"""
|
||||||
|
def multi_join(paths, *path_segments):
|
||||||
|
"""apply os.path.join on a list of paths"""
|
||||||
|
return [os.path.join(*(path_segments + (path, ))) for path in paths]
|
||||||
|
|
||||||
|
system_prefix = os.environ.get('BORG_OPENSSL_PREFIX')
|
||||||
|
if system_prefix:
|
||||||
|
print('Detected system OpenSSL')
|
||||||
|
else:
|
||||||
|
raise Exception('Could not find OpenSSL lib/headers, please set BORG_OPENSSL_PREFIX')
|
||||||
|
|
||||||
|
include_dirs = kwargs.get('include_dirs', [])
|
||||||
|
include_dirs += multi_join(['include'], system_prefix)
|
||||||
|
|
||||||
|
library_dirs = kwargs.get('library_dirs', [])
|
||||||
|
library_dirs += multi_join(['lib'], system_prefix)
|
||||||
|
|
||||||
|
libraries = kwargs.get('libraries', [])
|
||||||
|
libraries += ['crypto', ]
|
||||||
|
|
||||||
|
ret = dict(**kwargs)
|
||||||
|
ret.update(dict(include_dirs=include_dirs, library_dirs=library_dirs, libraries=libraries))
|
||||||
|
return ret
|
Loading…
Reference in a new issue