瀏覽代碼

simplify code by merging kwargs dicts at caller

Thomas Waldmann 6 年之前
父節點
當前提交
80ade7093d
共有 5 個文件被更改,包括 76 次插入103 次删除
  1. 22 7
      setup.py
  2. 15 27
      setup_b2.py
  3. 7 15
      setup_crypto.py
  4. 15 27
      setup_lz4.py
  5. 17 27
      setup_zstd.py

+ 22 - 7
setup.py

@@ -2,6 +2,7 @@ import os
 import io
 import re
 import sys
+from collections import defaultdict
 from collections import OrderedDict
 from datetime import datetime
 from glob import glob
@@ -142,13 +143,27 @@ cmdclass = {
 
 ext_modules = []
 if not on_rtd:
-    compress_ext_kwargs = dict(sources=[compress_source])
-    compress_ext_kwargs = setup_lz4.lz4_ext_kwargs(prefer_system_liblz4, **compress_ext_kwargs)
-    compress_ext_kwargs = setup_zstd.zstd_ext_kwargs(prefer_system_libzstd,
-                                                     multithreaded=False, legacy=False, **compress_ext_kwargs)
-    crypto_ext_kwargs = dict(sources=[crypto_ll_source, crypto_helpers])
-    crypto_ext_kwargs = setup_crypto.crypto_ext_kwargs(**crypto_ext_kwargs)
-    crypto_ext_kwargs = setup_b2.b2_ext_kwargs(prefer_system_libb2, **crypto_ext_kwargs)
+
+    def members_appended(*ds):
+        result = defaultdict(list)
+        for d in ds:
+            for k, v in d.items():
+                assert isinstance(v, list)
+                result[k].extend(v)
+        return result
+
+    compress_ext_kwargs = members_appended(
+        dict(sources=[compress_source]),
+        setup_lz4.lz4_ext_kwargs(prefer_system_liblz4),
+        setup_zstd.zstd_ext_kwargs(prefer_system_libzstd, multithreaded=False, legacy=False),
+    )
+
+    crypto_ext_kwargs = members_appended(
+        dict(sources=[crypto_ll_source, crypto_helpers]),
+        setup_crypto.crypto_ext_kwargs(),
+        setup_b2.b2_ext_kwargs(prefer_system_libb2),
+    )
+
     ext_modules += [
         Extension('borg.compress', **compress_ext_kwargs),
         Extension('borg.crypto.low_level', **crypto_ext_kwargs),

+ 15 - 27
setup_b2.py

@@ -23,18 +23,17 @@ b2_includes = [
 ]
 
 
-def b2_ext_kwargs(prefer_system, **kwargs):
-    """amend kwargs with b2 stuff for a distutils.extension.Extension initialization.
+def b2_ext_kwargs(prefer_system):
+    """return kwargs with b2 stuff for a distutils.extension.Extension initialization.
 
     prefer_system: prefer the system-installed library (if found) over the bundled C code
-    kwargs: distutils.extension.Extension kwargs that should be amended
-    returns: amended kwargs
+    returns: kwargs for this lib
     """
     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]
 
-    define_macros = kwargs.get('define_macros', [])
+    define_macros = []
 
     system_prefix = os.environ.get('BORG_LIBB2_PREFIX')
     if prefer_system and system_prefix:
@@ -47,29 +46,18 @@ def b2_ext_kwargs(prefer_system, **kwargs):
 
     use_system = system and system_prefix is not None
 
-    sources = kwargs.get('sources', [])
-    if not use_system:
-        sources += multi_join(b2_sources, bundled_path)
-
-    include_dirs = kwargs.get('include_dirs', [])
     if use_system:
-        include_dirs += multi_join(['include'], system_prefix)
+        sources = []
+        include_dirs = multi_join(['include'], system_prefix)
+        library_dirs = multi_join(['lib'], system_prefix)
+        libraries = ['b2', ]
     else:
-        include_dirs += multi_join(b2_includes, bundled_path)
-
-    library_dirs = kwargs.get('library_dirs', [])
-    if use_system:
-        library_dirs += multi_join(['lib'], system_prefix)
-
-    libraries = kwargs.get('libraries', [])
-    if use_system:
-        libraries += ['b2', ]
+        sources = multi_join(b2_sources, bundled_path)
+        include_dirs = multi_join(b2_includes, bundled_path)
+        library_dirs = []
+        libraries = []
 
-    extra_compile_args = kwargs.get('extra_compile_args', [])
-    if not use_system:
-        extra_compile_args += []  # not used yet
+    extra_compile_args = []
 
-    ret = dict(**kwargs)
-    ret.update(dict(sources=sources, define_macros=define_macros, extra_compile_args=extra_compile_args,
-                    include_dirs=include_dirs, library_dirs=library_dirs, libraries=libraries))
-    return ret
+    return dict(sources=sources, define_macros=define_macros, extra_compile_args=extra_compile_args,
+                include_dirs=include_dirs, library_dirs=library_dirs, libraries=libraries)

+ 7 - 15
setup_crypto.py

@@ -10,11 +10,10 @@
 import os
 
 
-def crypto_ext_kwargs(**kwargs):
-    """amend kwargs with crypto stuff for a distutils.extension.Extension initialization.
+def crypto_ext_kwargs():
+    """return kwargs with crypto stuff for a distutils.extension.Extension initialization.
 
-    kwargs: distutils.extension.Extension kwargs that should be amended
-    returns: amended kwargs
+    returns: kwargs for this lib
     """
     def multi_join(paths, *path_segments):
         """apply os.path.join on a list of paths"""
@@ -26,15 +25,8 @@ def crypto_ext_kwargs(**kwargs):
     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)
+    include_dirs = multi_join(['include'], system_prefix)
+    library_dirs = multi_join(['lib'], system_prefix)
+    libraries = ['crypto', ]
 
-    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
+    return dict(include_dirs=include_dirs, library_dirs=library_dirs, libraries=libraries)

+ 15 - 27
setup_lz4.py

@@ -23,18 +23,17 @@ lz4_includes = [
 ]
 
 
-def lz4_ext_kwargs(prefer_system, **kwargs):
-    """amend kwargs with lz4 stuff for a distutils.extension.Extension initialization.
+def lz4_ext_kwargs(prefer_system):
+    """return kwargs with lz4 stuff for a distutils.extension.Extension initialization.
 
     prefer_system: prefer the system-installed library (if found) over the bundled C code
-    kwargs: distutils.extension.Extension kwargs that should be amended
-    returns: amended kwargs
+    returns: kwargs for this lib
     """
     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]
 
-    define_macros = kwargs.get('define_macros', [])
+    define_macros = []
 
     system_prefix = os.environ.get('BORG_LIBLZ4_PREFIX')
     if prefer_system and system_prefix:
@@ -47,29 +46,18 @@ def lz4_ext_kwargs(prefer_system, **kwargs):
 
     use_system = system and system_prefix is not None
 
-    sources = kwargs.get('sources', [])
-    if not use_system:
-        sources += multi_join(lz4_sources, bundled_path)
-
-    include_dirs = kwargs.get('include_dirs', [])
     if use_system:
-        include_dirs += multi_join(['include'], system_prefix)
+        sources = []
+        include_dirs = multi_join(['include'], system_prefix)
+        library_dirs = multi_join(['lib'], system_prefix)
+        libraries = ['lz4', ]
     else:
-        include_dirs += multi_join(lz4_includes, bundled_path)
-
-    library_dirs = kwargs.get('library_dirs', [])
-    if use_system:
-        library_dirs += multi_join(['lib'], system_prefix)
-
-    libraries = kwargs.get('libraries', [])
-    if use_system:
-        libraries += ['lz4', ]
+        sources = multi_join(lz4_sources, bundled_path)
+        include_dirs = multi_join(lz4_includes, bundled_path)
+        library_dirs = []
+        libraries = []
 
-    extra_compile_args = kwargs.get('extra_compile_args', [])
-    if not use_system:
-        extra_compile_args += []  # not used yet
+    extra_compile_args = []
 
-    ret = dict(**kwargs)
-    ret.update(dict(sources=sources, define_macros=define_macros, extra_compile_args=extra_compile_args,
-                    include_dirs=include_dirs, library_dirs=library_dirs, libraries=libraries))
-    return ret
+    return dict(sources=sources, define_macros=define_macros, extra_compile_args=extra_compile_args,
+               include_dirs=include_dirs, library_dirs=library_dirs, libraries=libraries)

+ 17 - 27
setup_zstd.py

@@ -70,20 +70,19 @@ zstd_includes_legacy = [
 ]
 
 
-def zstd_ext_kwargs(prefer_system, multithreaded=False, legacy=False, **kwargs):
-    """amend kwargs with zstd suff for a distutils.extension.Extension initialization.
+def zstd_ext_kwargs(prefer_system, multithreaded=False, legacy=False):
+    """return kwargs with zstd suff for a distutils.extension.Extension initialization.
 
     prefer_system: prefer the system-installed library (if found) over the bundled C code
     multithreaded: True: define ZSTD_MULTITHREAD
     legacy: include legacy API support
-    kwargs: distutils.extension.Extension kwargs that should be amended
-    returns: amended kwargs
+    returns: kwargs for this lib
     """
     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]
 
-    define_macros = kwargs.get('define_macros', [])
+    define_macros = []
 
     system_prefix = os.environ.get('BORG_LIBZSTD_PREFIX')
     if prefer_system and system_prefix:
@@ -96,29 +95,22 @@ def zstd_ext_kwargs(prefer_system, multithreaded=False, legacy=False, **kwargs):
 
     use_system = system and system_prefix is not None
 
-    sources = kwargs.get('sources', [])
-    if not use_system:
-        sources += multi_join(zstd_sources, bundled_path)
-        if legacy:
-            sources += multi_join(zstd_sources_legacy, bundled_path)
-
-    include_dirs = kwargs.get('include_dirs', [])
     if use_system:
-        include_dirs += multi_join(['include'], system_prefix)
+        sources = []
+        include_dirs = multi_join(['include'], system_prefix)
+        library_dirs = multi_join(['lib'], system_prefix)
+        libraries = ['zstd', ]
     else:
-        include_dirs += multi_join(zstd_includes, bundled_path)
+        sources = multi_join(zstd_sources, bundled_path)
+        if legacy:
+            sources += multi_join(zstd_sources_legacy, bundled_path)
+        include_dirs = multi_join(zstd_includes, bundled_path)
         if legacy:
             include_dirs += multi_join(zstd_includes_legacy, bundled_path)
+        library_dirs = []
+        libraries = []
 
-    library_dirs = kwargs.get('library_dirs', [])
-    if use_system:
-        library_dirs += multi_join(['lib'], system_prefix)
-
-    libraries = kwargs.get('libraries', [])
-    if use_system:
-        libraries += ['zstd', ]
-
-    extra_compile_args = kwargs.get('extra_compile_args', [])
+    extra_compile_args = []
     if multithreaded:
         extra_compile_args += ['-DZSTD_MULTITHREAD', ]
     if not use_system:
@@ -127,7 +119,5 @@ def zstd_ext_kwargs(prefer_system, multithreaded=False, legacy=False, **kwargs):
         if legacy:
             extra_compile_args += ['-DZSTD_LEGACY_SUPPORT=1', ]
 
-    ret = dict(**kwargs)
-    ret.update(dict(sources=sources, define_macros=define_macros, extra_compile_args=extra_compile_args,
-                    include_dirs=include_dirs, library_dirs=library_dirs, libraries=libraries))
-    return ret
+    return dict(sources=sources, define_macros=define_macros, extra_compile_args=extra_compile_args,
+                include_dirs=include_dirs, library_dirs=library_dirs, libraries=libraries)