blob: 6cf59ef1da89ca20ea1d0e7cc7bb5b3c45aff4c0 [file] [log] [blame]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import io
import re
import sys
from collections import OrderedDict
from distutils.errors import (
CCompilerError, DistutilsExecError,
DistutilsPlatformError
)
from setuptools import Extension, 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('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', ['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://www.palletsprojects.com/p/markupsafe/',
project_urls=OrderedDict((
('Code', 'https://github.com/pallets/markupsafe'),
('Issue tracker', 'https://github.com/pallets/markupsafe/issues'),
)),
license='BSD',
author='Armin Ronacher',
author_email='armin.ronacher@active-4.com',
maintainer='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',
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
'Topic :: Software Development :: Libraries :: Python Modules',
'Topic :: Text Processing :: Markup :: HTML',
],
python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*',
extras_require={
'dev': [
'pytest',
'coverage',
'tox',
'sphinx',
'pallets-sphinx-themes',
],
'docs': [
'sphinx',
'pallets-sphinx-themes',
],
},
packages=['markupsafe'],
include_package_data=True,
zip_safe=False,
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.'
)