setup.py
113 lines
| 3.3 KiB
| text/x-python
|
PythonLexer
|
r30435 | #!/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. | ||||
|
r42237 | from __future__ import print_function | ||
from distutils.version import LooseVersion | ||||
|
r37513 | import os | ||
|
r30822 | import sys | ||
|
r30435 | from setuptools import setup | ||
|
r42237 | # 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' | ||||
|
r30435 | try: | ||
import cffi | ||||
|
r42237 | |||
# 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 | ||||
|
r30435 | except ImportError: | ||
cffi = None | ||||
import setup_zstd | ||||
|
r30822 | SUPPORT_LEGACY = False | ||
|
r37513 | SYSTEM_ZSTD = False | ||
WARNINGS_AS_ERRORS = False | ||||
|
r30822 | |||
|
r37513 | if os.environ.get('ZSTD_WARNINGS_AS_ERRORS', ''): | ||
WARNINGS_AS_ERRORS = True | ||||
if '--legacy' in sys.argv: | ||||
|
r30822 | SUPPORT_LEGACY = True | ||
|
r37513 | 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 | ||||
|
r38244 | sys.argv.remove('--warning-as-errors') | ||
|
r30822 | |||
|
r30435 | # Code for obtaining the Extension instance is in its own module to | ||
# facilitate reuse in other projects. | ||||
|
r37513 | extensions = [ | ||
setup_zstd.get_c_extension(name='zstd', | ||||
support_legacy=SUPPORT_LEGACY, | ||||
system_zstd=SYSTEM_ZSTD, | ||||
warnings_as_errors=WARNINGS_AS_ERRORS), | ||||
] | ||||
|
r30435 | |||
|
r31796 | install_requires = [] | ||
|
r30435 | if cffi: | ||
import make_cffi | ||||
extensions.append(make_cffi.ffi.distutils_extension()) | ||||
|
r42237 | install_requires.append('cffi>=%s' % MINIMUM_CFFI_VERSION) | ||
|
r31796 | |||
|
r30435 | 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.4', | ||||
'Programming Language :: Python :: 3.5', | ||||
|
r30895 | 'Programming Language :: Python :: 3.6', | ||
|
r42237 | 'Programming Language :: Python :: 3.7', | ||
|
r30435 | ], | ||
keywords='zstandard zstd compression', | ||||
|
r37513 | packages=['zstandard'], | ||
|
r30435 | ext_modules=extensions, | ||
test_suite='tests', | ||||
|
r31796 | install_requires=install_requires, | ||
|
r30435 | ) | ||