summaryrefslogtreecommitdiffstats
path: root/third_party/python/pyrsistent/setup.py
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/python/pyrsistent/setup.py')
-rw-r--r--third_party/python/pyrsistent/setup.py81
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']},
+)