| from __future__ import print_function |
| |
| import io |
| import re |
| import sys |
| from distutils.errors import CCompilerError |
| from distutils.errors import DistutilsExecError |
| from distutils.errors import DistutilsPlatformError |
| |
| from setuptools import Extension |
| from setuptools import find_packages |
| from setuptools import setup |
| from setuptools.command.build_ext import build_ext |
| |
| with io.open("README.rst", "rt", encoding="utf8") as f: |
| readme = f.read() |
| |
| with io.open("src/markupsafe/__init__.py", "rt", encoding="utf8") as f: |
| version = re.search(r'__version__ = "(.*?)"', f.read()).group(1) |
| |
| is_jython = "java" in sys.platform |
| is_pypy = hasattr(sys, "pypy_version_info") |
| |
| 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", |
| version=version, |
| url="https://palletsprojects.com/p/markupsafe/", |
| project_urls={ |
| "Documentation": "https://markupsafe.palletsprojects.com/", |
| "Code": "https://github.com/pallets/markupsafe", |
| "Issue tracker": "https://github.com/pallets/markupsafe/issues", |
| }, |
| license="BSD-3-Clause", |
| author="Armin Ronacher", |
| author_email="armin.ronacher@active-4.com", |
| maintainer="The Pallets Team", |
| maintainer_email="contact@palletsprojects.com", |
| description="Safely add untrusted strings to HTML/XML markup.", |
| long_description=readme, |
| classifiers=[ |
| "Development Status :: 5 - Production/Stable", |
| "Environment :: Web Environment", |
| "Intended Audience :: Developers", |
| "License :: OSI Approved :: BSD License", |
| "Operating System :: OS Independent", |
| "Programming Language :: Python", |
| "Programming Language :: Python :: 2", |
| "Programming Language :: Python :: 2.7", |
| "Programming Language :: Python :: 3", |
| "Programming Language :: Python :: 3.4", |
| "Programming Language :: Python :: 3.5", |
| "Programming Language :: Python :: 3.6", |
| "Programming Language :: Python :: 3.7", |
| "Topic :: Internet :: WWW/HTTP :: Dynamic Content", |
| "Topic :: Software Development :: Libraries :: Python Modules", |
| "Topic :: Text Processing :: Markup :: HTML", |
| ], |
| packages=find_packages("src"), |
| package_dir={"": "src"}, |
| include_package_data=True, |
| python_requires=">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*", |
| 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 not (is_pypy or is_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.", |
| ) |