text: #!/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.4',
          '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,
  )
  