From 50c08318240c747ce4c9355ba90a1cf466abadb1 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 4 Dec 2017 23:59:35 +0100 Subject: [PATCH] add setup_zstd.py from python-zstandard project, as is --- setup_zstd.py | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 setup_zstd.py diff --git a/setup_zstd.py b/setup_zstd.py new file mode 100644 index 000000000..8e1f86c51 --- /dev/null +++ b/setup_zstd.py @@ -0,0 +1,125 @@ +# Copyright (c) 2016-present, Gregory Szorc +# 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 +from distutils.extension import Extension + + +zstd_sources = ['zstd/%s' % p for p in ( + 'common/entropy_common.c', + 'common/error_private.c', + 'common/fse_decompress.c', + 'common/pool.c', + 'common/threading.c', + 'common/xxhash.c', + 'common/zstd_common.c', + 'compress/fse_compress.c', + 'compress/huf_compress.c', + 'compress/zstd_compress.c', + 'compress/zstdmt_compress.c', + 'decompress/huf_decompress.c', + 'decompress/zstd_decompress.c', + 'dictBuilder/cover.c', + 'dictBuilder/divsufsort.c', + 'dictBuilder/zdict.c', +)] + +zstd_sources_legacy = ['zstd/%s' % p for p in ( + 'deprecated/zbuff_common.c', + 'deprecated/zbuff_compress.c', + 'deprecated/zbuff_decompress.c', + 'legacy/zstd_v01.c', + 'legacy/zstd_v02.c', + 'legacy/zstd_v03.c', + 'legacy/zstd_v04.c', + 'legacy/zstd_v05.c', + 'legacy/zstd_v06.c', + 'legacy/zstd_v07.c' +)] + +zstd_includes = [ + 'zstd', + 'zstd/common', + 'zstd/compress', + 'zstd/decompress', + 'zstd/dictBuilder', +] + +zstd_includes_legacy = [ + 'zstd/deprecated', + 'zstd/legacy', +] + +ext_includes = [ + 'c-ext', + 'zstd/common', +] + +ext_sources = [ + 'zstd/common/pool.c', + 'zstd/common/threading.c', + 'zstd.c', + 'c-ext/bufferutil.c', + 'c-ext/compressiondict.c', + 'c-ext/compressobj.c', + 'c-ext/compressor.c', + 'c-ext/compressoriterator.c', + 'c-ext/compressionparams.c', + 'c-ext/compressionreader.c', + 'c-ext/compressionwriter.c', + 'c-ext/constants.c', + 'c-ext/decompressobj.c', + 'c-ext/decompressor.c', + 'c-ext/decompressoriterator.c', + 'c-ext/decompressionreader.c', + 'c-ext/decompressionwriter.c', + 'c-ext/frameparams.c', +] + +zstd_depends = [ + 'c-ext/python-zstandard.h', +] + + +def get_c_extension(support_legacy=False, system_zstd=False, name='zstd'): + """Obtain a distutils.extension.Extension for the C extension.""" + root = os.path.abspath(os.path.dirname(__file__)) + + sources = set([os.path.join(root, p) for p in ext_sources]) + if not system_zstd: + sources.update([os.path.join(root, p) for p in zstd_sources]) + if support_legacy: + sources.update([os.path.join(root, p) for p in zstd_sources_legacy]) + sources = list(sources) + + include_dirs = set([os.path.join(root, d) for d in ext_includes]) + if not system_zstd: + include_dirs.update([os.path.join(root, d) for d in zstd_includes]) + if support_legacy: + include_dirs.update([os.path.join(root, d) for d in zstd_includes_legacy]) + include_dirs = list(include_dirs) + + depends = [os.path.join(root, p) for p in zstd_depends] + + extra_args = ['-DZSTD_MULTITHREAD'] + + if not system_zstd: + extra_args.append('-DZSTDLIB_VISIBILITY=') + extra_args.append('-DZDICTLIB_VISIBILITY=') + extra_args.append('-DZSTDERRORLIB_VISIBILITY=') + extra_args.append('-fvisibility=hidden') + + if not system_zstd and support_legacy: + extra_args.append('-DZSTD_LEGACY_SUPPORT=1') + + libraries = ['zstd'] if system_zstd else [] + + # TODO compile with optimizations. + return Extension(name, sources, + include_dirs=include_dirs, + depends=depends, + extra_compile_args=extra_args, + libraries=libraries)