| import os | |
| import platform | |
| import sys | |
| from distutils.errors import CCompilerError | |
| from distutils.errors import DistutilsExecError | |
| from distutils.errors import DistutilsPlatformError | |
| from setuptools import Extension | |
| from setuptools import setup | |
| from setuptools.command.build_ext import build_ext | |
| ext_modules = [Extension("markupsafe._speedups", ["src/markupsafe/_speedups.c"])] | |
| class BuildFailed(Exception): | |
| pass | |
| class ve_build_ext(build_ext): | |
| """This class allows C extension building to fail.""" | |
| def run(self): | |
| try: | |
| build_ext.run(self) | |
| except DistutilsPlatformError: | |
| raise BuildFailed() | |
| def build_extension(self, ext): | |
| try: | |
| build_ext.build_extension(self, ext) | |
| except (CCompilerError, DistutilsExecError, DistutilsPlatformError): | |
| raise BuildFailed() | |
| except ValueError: | |
| # this can happen on Windows 64 bit, see Python issue 7511 | |
| if "'path'" in str(sys.exc_info()[1]): # works with Python 2 and 3 | |
| raise BuildFailed() | |
| raise | |
| def run_setup(with_binary): | |
| setup( | |
| name="MarkupSafe", | |
| cmdclass={"build_ext": ve_build_ext}, | |
| ext_modules=ext_modules if with_binary else [], | |
| ) | |
| def show_message(*lines): | |
| print("=" * 74) | |
| for line in lines: | |
| print(line) | |
| print("=" * 74) | |
| if os.environ.get("CIBUILDWHEEL", "0") == "1": | |
| run_setup(True) | |
| elif platform.python_implementation() not in {"PyPy", "Jython"}: | |
| try: | |
| run_setup(True) | |
| except BuildFailed: | |
| show_message( | |
| "WARNING: The C extension could not be compiled, speedups" | |
| " are not enabled.", | |
| "Failure information, if any, is above.", | |
| "Retrying the build without the C extension now.", | |
| ) | |
| run_setup(False) | |
| show_message( | |
| "WARNING: The C extension could not be compiled, speedups" | |
| " are not enabled.", | |
| "Plain-Python build succeeded.", | |
| ) | |
| else: | |
| run_setup(False) | |
| show_message( | |
| "WARNING: C extensions are not supported on this Python" | |
| " platform, speedups are not enabled.", | |
| "Plain-Python build succeeded.", | |
| ) |