#!/usr/bin/env python # 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. from __future__ import print_function from distutils.version import LooseVersion import os import sys from setuptools import setup # Need change in 1.10 for ffi.from_buffer() to handle all buffer types # (like memoryview). # Need feature in 1.11 for ffi.gc() to declare size of objects so we avoid # garbage collection pitfalls. MINIMUM_CFFI_VERSION = '1.11' try: import cffi # PyPy (and possibly other distros) have CFFI distributed as part of # them. The install_requires for CFFI below won't work. We need to sniff # out the CFFI version here and reject CFFI if it is too old. cffi_version = LooseVersion(cffi.__version__) if cffi_version < LooseVersion(MINIMUM_CFFI_VERSION): print('CFFI 1.11 or newer required (%s found); ' 'not building CFFI backend' % cffi_version, file=sys.stderr) cffi = None except ImportError: cffi = None import setup_zstd SUPPORT_LEGACY = False SYSTEM_ZSTD = False WARNINGS_AS_ERRORS = False if os.environ.get('ZSTD_WARNINGS_AS_ERRORS', ''): WARNINGS_AS_ERRORS = True if '--legacy' in sys.argv: SUPPORT_LEGACY = True sys.argv.remove('--legacy') if '--system-zstd' in sys.argv: SYSTEM_ZSTD = True sys.argv.remove('--system-zstd') if '--warnings-as-errors' in sys.argv: WARNINGS_AS_ERRORS = True sys.argv.remove('--warning-as-errors') # Code for obtaining the Extension instance is in its own module to # facilitate reuse in other projects. extensions = [ setup_zstd.get_c_extension(name='zstd', support_legacy=SUPPORT_LEGACY, system_zstd=SYSTEM_ZSTD, warnings_as_errors=WARNINGS_AS_ERRORS), ] install_requires = [] if cffi: import make_cffi extensions.append(make_cffi.ffi.distutils_extension()) install_requires.append('cffi>=%s' % MINIMUM_CFFI_VERSION) version = None with open('c-ext/python-zstandard.h', 'r') as fh: for line in fh: if not line.startswith('#define PYTHON_ZSTANDARD_VERSION'): continue version = line.split()[2][1:-1] break if not version: raise Exception('could not resolve package version; ' 'this should never happen') setup( name='zstandard', version=version, description='Zstandard bindings for Python', long_description=open('README.rst', 'r').read(), url='https://github.com/indygreg/python-zstandard', author='Gregory Szorc', author_email='gregory.szorc@gmail.com', license='BSD', classifiers=[ 'Development Status :: 4 - Beta', 'Intended Audience :: Developers', 'License :: OSI Approved :: BSD License', 'Programming Language :: C', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', ], keywords='zstandard zstd compression', packages=['zstandard'], ext_modules=extensions, test_suite='tests', install_requires=install_requires, )