diff options
Diffstat (limited to 'third_party/python/pyrsistent/setup.py')
-rw-r--r-- | third_party/python/pyrsistent/setup.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/third_party/python/pyrsistent/setup.py b/third_party/python/pyrsistent/setup.py new file mode 100644 index 0000000000..931800ff15 --- /dev/null +++ b/third_party/python/pyrsistent/setup.py @@ -0,0 +1,81 @@ +import os +from setuptools import setup, Extension +import sys +import platform +import warnings +import codecs +from distutils.command.build_ext import build_ext +from distutils.errors import CCompilerError +from distutils.errors import DistutilsPlatformError, DistutilsExecError +from _pyrsistent_version import __version__ + +readme_path = os.path.join(os.path.dirname(__file__), 'README.rst') +with codecs.open(readme_path, encoding='utf8') as f: + readme = f.read() + +extensions = [] +if platform.python_implementation() == 'CPython': + extensions = [Extension('pvectorc', sources=['pvectorcmodule.c'])] + +needs_pytest = {'pytest', 'test', 'ptr'}.intersection(sys.argv) +pytest_runner = ['pytest-runner'] if needs_pytest else [] + + +class custom_build_ext(build_ext): + """Allow C extension building to fail.""" + + warning_message = """ +******************************************************************************** +WARNING: Could not build the %s. + Pyrsistent will still work but performance may be degraded. + %s +******************************************************************************** +""" + + def run(self): + try: + build_ext.run(self) + except Exception: + e = sys.exc_info()[1] + sys.stderr.write('%s\n' % str(e)) + sys.stderr.write(self.warning_message % ("extension modules", "There was an issue with your platform configuration - see above.")) + + def build_extension(self, ext): + name = ext.name + try: + build_ext.build_extension(self, ext) + except Exception: + e = sys.exc_info()[1] + sys.stderr.write('%s\n' % str(e)) + sys.stderr.write(self.warning_message % ("%s extension module" % name, "The output above this warning shows how the compilation failed.")) + +setup( + name='pyrsistent', + version=__version__, + description='Persistent/Functional/Immutable data structures', + long_description=readme, + author='Tobias Gustafsson', + author_email='tobias.l.gustafsson@gmail.com', + url='http://github.com/tobgu/pyrsistent/', + license='MIT', + license_files=['LICENCE.mit'], + py_modules=['_pyrsistent_version'], + classifiers=[ + 'Intended Audience :: Developers', + 'License :: OSI Approved :: MIT License', + 'Operating System :: OS Independent', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: Implementation :: PyPy', + ], + test_suite='tests', + tests_require=['pytest<5', 'hypothesis<5'], + scripts=[], + setup_requires=pytest_runner, + ext_modules=extensions, + cmdclass={'build_ext': custom_build_ext}, + install_requires=['six'], + packages=['pyrsistent'], + package_data={'pyrsistent': ['py.typed', '__init__.pyi', 'typing.pyi']}, +) |