blob: efce17d6bb149c10b1517566f536bdeb8e9f1b9e [file] [log] [blame]
#!/usr/bin/env python
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
import sys
try:
from setuptools import setup, Extension
except Exception:
from distutils.core import setup, Extension
from distutils.command.build_ext import build_ext
from distutils.errors import CCompilerError, DistutilsExecError, DistutilsPlatformError
# Fix to build sdist under vagrant
import os
if 'vagrant' in str(os.environ):
try:
del os.link
except AttributeError:
pass
include_dirs = ['src']
if sys.platform == 'win32':
include_dirs.append('compat/win32')
ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError, IOError)
else:
ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError)
class BuildFailed(Exception):
pass
class ve_build_ext(build_ext):
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 ext_errors:
raise BuildFailed()
def run_setup(with_binary):
if with_binary:
extensions = dict(
ext_modules=[
Extension('thrift.protocol.fastbinary',
extra_compile_args=['-std=c++11'],
sources=[
'src/ext/module.cpp',
'src/ext/types.cpp',
'src/ext/binary.cpp',
'src/ext/compact.cpp',
],
include_dirs=include_dirs,
)
],
cmdclass=dict(build_ext=ve_build_ext)
)
else:
extensions = dict()
ssl_deps = []
if sys.version_info[0] == 2:
ssl_deps.append('ipaddress')
if sys.hexversion < 0x03050000:
ssl_deps.append('backports.ssl_match_hostname>=3.5')
tornado_deps = ['tornado>=4.0']
twisted_deps = ['twisted']
setup(name='thrift',
version='0.14.2',
description='Python bindings for the Apache Thrift RPC system',
author='Apache Thrift Developers',
author_email='dev@thrift.apache.org',
url='http://thrift.apache.org',
license='Apache License 2.0',
install_requires=['six>=1.7.2'],
extras_require={
'ssl': ssl_deps,
'tornado': tornado_deps,
'twisted': twisted_deps,
'all': ssl_deps + tornado_deps + twisted_deps,
},
packages=[
'thrift',
'thrift.protocol',
'thrift.transport',
'thrift.server',
],
package_dir={'thrift': 'src'},
classifiers=[
'Development Status :: 5 - Production/Stable',
'Environment :: Console',
'Intended Audience :: Developers',
'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 3',
'Topic :: Software Development :: Libraries',
'Topic :: System :: Networking'
],
zip_safe=False,
**extensions
)
try:
with_binary = True
run_setup(with_binary)
except BuildFailed:
print()
print('*' * 80)
print("An error occurred while trying to compile with the C extension enabled")
print("Attempting to build without the extension now")
print('*' * 80)
print()
run_setup(False)