#!/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", "Programming Language :: Python :: 3.8", ], keywords="zstandard zstd compression", packages=["zstandard"], ext_modules=extensions, test_suite="tests", install_requires=install_requires, tests_require=["hypothesis"], )