diff --git a/setup.py b/setup.py index 48f5c583f..dc5cb248b 100644 --- a/setup.py +++ b/setup.py @@ -24,19 +24,37 @@ import setup_crypto import setup_docs -# BORG_USE_BUNDLED_XXX=YES --> use the bundled code -# BORG_USE_BUNDLED_XXX undefined --> try using system lib -# Note: do not use =NO, that is not supported! +# How the build process finds the system libs / uses the bundled code: +# +# 1. it will try to use (system) libs (see 1.1. and 1.2.), +# except if you use these env vars to force using the bundled code: +# BORG_USE_BUNDLED_XXX undefined --> try using system lib +# BORG_USE_BUNDLED_XXX=YES --> use the bundled code +# Note: do not use =NO, that is not supported! +# 1.1. if BORG_LIBXXX_PREFIX is set, it will use headers and libs from there. +# 1.2. if not and pkg-config can locate the lib, the lib located by +# pkg-config will be used. We use the pkg-config tool via the pkgconfig +# python package, which must be installed before invoking setup.py. +# if pkgconfig is not installed, this step is skipped. +# 2. if no system lib could be located via 1.1. or 1.2., it will fall back +# to using the bundled code. -# needed: lz4 (>= 1.7.0 / r129) -prefer_system_liblz4 = not bool(os.environ.get('BORG_USE_BUNDLED_LZ4')) - -# needed: zstd (>= 1.3.0) -prefer_system_libzstd = not bool(os.environ.get('BORG_USE_BUNDLED_ZSTD')) +# OpenSSL is required as a (system) lib in any case as we do not bundle it. +# Thus, only step 1.1. and 1.2. apply to openssl (but not 1. and 2.). +# needed: openssl >=1.0.2 or >=1.1.0 (or compatible) +system_prefix_openssl = os.environ.get('BORG_OPENSSL_PREFIX') # needed: blake2 (>= 0.98.1) prefer_system_libb2 = not bool(os.environ.get('BORG_USE_BUNDLED_B2')) +system_prefix_libb2 = os.environ.get('BORG_LIBB2_PREFIX') +# needed: lz4 (>= 1.7.0 / r129) +prefer_system_liblz4 = not bool(os.environ.get('BORG_USE_BUNDLED_LZ4')) +system_prefix_liblz4 = os.environ.get('BORG_LIBLZ4_PREFIX') + +# needed: zstd (>= 1.3.0) +prefer_system_libzstd = not bool(os.environ.get('BORG_USE_BUNDLED_ZSTD')) +system_prefix_libzstd = os.environ.get('BORG_LIBZSTD_PREFIX') cpu_threads = multiprocessing.cpu_count() if multiprocessing else 1 @@ -149,14 +167,15 @@ def members_appended(*ds): crypto_ext_kwargs = members_appended( dict(sources=[crypto_ll_source, crypto_helpers]), - setup_crypto.crypto_ext_kwargs(pc), - setup_crypto.b2_ext_kwargs(pc, prefer_system_libb2), + setup_crypto.crypto_ext_kwargs(pc, system_prefix_openssl), + setup_crypto.b2_ext_kwargs(pc, prefer_system_libb2, system_prefix_libb2), ) compress_ext_kwargs = members_appended( dict(sources=[compress_source]), - setup_compress.lz4_ext_kwargs(pc, prefer_system_liblz4), - setup_compress.zstd_ext_kwargs(pc, prefer_system_libzstd, multithreaded=False, legacy=False), + setup_compress.lz4_ext_kwargs(pc, prefer_system_liblz4, system_prefix_liblz4), + setup_compress.zstd_ext_kwargs(pc, prefer_system_libzstd, system_prefix_libzstd, + multithreaded=False, legacy=False), ) ext_modules += [ diff --git a/setup_compress.py b/setup_compress.py index b5c8195ce..fd7f129c6 100644 --- a/setup_compress.py +++ b/setup_compress.py @@ -69,9 +69,8 @@ def multi_join(paths, *path_segments): ] -def zstd_ext_kwargs(pc, prefer_system, multithreaded=False, legacy=False): +def zstd_ext_kwargs(pc, prefer_system, system_prefix, multithreaded=False, legacy=False): if prefer_system: - system_prefix = os.environ.get('BORG_LIBZSTD_PREFIX') if system_prefix: print('Detected and preferring libzstd [via BORG_LIBZSTD_PREFIX]') return dict(include_dirs=[os.path.join(system_prefix, 'include')], @@ -114,9 +113,8 @@ def zstd_ext_kwargs(pc, prefer_system, multithreaded=False, legacy=False): ] -def lz4_ext_kwargs(pc, prefer_system): +def lz4_ext_kwargs(pc, prefer_system, system_prefix): if prefer_system: - system_prefix = os.environ.get('BORG_LIBLZ4_PREFIX') if system_prefix: print('Detected and preferring liblz4 [via BORG_LIBLZ4_PREFIX]') return dict(include_dirs=[os.path.join(system_prefix, 'include')], diff --git a/setup_crypto.py b/setup_crypto.py index 600310b18..e533f40a1 100644 --- a/setup_crypto.py +++ b/setup_crypto.py @@ -8,8 +8,7 @@ def multi_join(paths, *path_segments): return [os.path.join(*(path_segments + (path,))) for path in paths] -def crypto_ext_kwargs(pc): - system_prefix = os.environ.get('BORG_OPENSSL_PREFIX') +def crypto_ext_kwargs(pc, system_prefix): if system_prefix: print('Detected OpenSSL [via BORG_OPENSSL_PREFIX]') return dict(include_dirs=[os.path.join(system_prefix, 'include')], @@ -37,9 +36,8 @@ def crypto_ext_kwargs(pc): ] -def b2_ext_kwargs(pc, prefer_system): +def b2_ext_kwargs(pc, prefer_system, system_prefix): if prefer_system: - system_prefix = os.environ.get('BORG_LIBB2_PREFIX') if system_prefix: print('Detected and preferring libb2 [via BORG_LIBB2_PREFIX]') return dict(include_dirs=[os.path.join(system_prefix, 'include')],