blob: 2dd2a77aa32e2fc060fdbfe228efe2c6c207c401 [file] [log] [blame]
Mark Sleefb40c192007-03-01 00:35:54 +00001#!/usr/bin/env python
David Reissea2cba82009-03-30 21:35:00 +00002
Mark Sleefb40c192007-03-01 00:35:54 +00003#
David Reissea2cba82009-03-30 21:35:00 +00004# Licensed to the Apache Software Foundation (ASF) under one
5# or more contributor license agreements. See the NOTICE file
6# distributed with this work for additional information
7# regarding copyright ownership. The ASF licenses this file
8# to you under the Apache License, Version 2.0 (the
9# "License"); you may not use this file except in compliance
10# with the License. You may obtain a copy of the License at
Mark Sleefb40c192007-03-01 00:35:54 +000011#
Nobuaki Sukegawa10308cb2016-02-03 01:57:03 +090012# http://www.apache.org/licenses/LICENSE-2.0
David Reissea2cba82009-03-30 21:35:00 +000013#
14# Unless required by applicable law or agreed to in writing,
15# software distributed under the License is distributed on an
16# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17# KIND, either express or implied. See the License for the
18# specific language governing permissions and limitations
19# under the License.
20#
Mark Sleefb40c192007-03-01 00:35:54 +000021
Jake Farrella0dd75d2011-11-26 05:23:09 +000022import sys
Jake Farrella0dd75d2011-11-26 05:23:09 +000023
Gregg Donovan62ec9292026-01-29 16:51:37 -050024from setuptools import Extension, setup
25from setuptools.command.build_ext import build_ext
26from setuptools.errors import CompileError, ExecError, PlatformError
David Reiss382fc302007-08-25 18:01:30 +000027
jfarrell750df2e2014-07-10 09:18:42 -040028# Fix to build sdist under vagrant
29import os
30if 'vagrant' in str(os.environ):
Eduardo Arada9e0c9272018-03-01 15:42:33 +010031 try:
32 del os.link
33 except AttributeError:
34 pass
jfarrell750df2e2014-07-10 09:18:42 -040035
Nobuaki Sukegawa6525f6a2016-02-11 13:58:39 +090036include_dirs = ['src']
Roger Meierc3f033f2011-09-13 13:54:05 +000037if sys.platform == 'win32':
38 include_dirs.append('compat/win32')
Gregg Donovan62ec9292026-01-29 16:51:37 -050039 ext_errors = (CompileError, ExecError, PlatformError, IOError)
Jake Farrella0dd75d2011-11-26 05:23:09 +000040else:
Gregg Donovan62ec9292026-01-29 16:51:37 -050041 ext_errors = (CompileError, ExecError, PlatformError)
Jake Farrella0dd75d2011-11-26 05:23:09 +000042
Nobuaki Sukegawa10308cb2016-02-03 01:57:03 +090043
Jake Farrella0dd75d2011-11-26 05:23:09 +000044class BuildFailed(Exception):
45 pass
46
Nobuaki Sukegawa10308cb2016-02-03 01:57:03 +090047
Jake Farrella0dd75d2011-11-26 05:23:09 +000048class ve_build_ext(build_ext):
49 def run(self):
50 try:
51 build_ext.run(self)
Gregg Donovan62ec9292026-01-29 16:51:37 -050052 except PlatformError:
Jake Farrella0dd75d2011-11-26 05:23:09 +000053 raise BuildFailed()
54
55 def build_extension(self, ext):
56 try:
57 build_ext.build_extension(self, ext)
Nobuaki Sukegawa10308cb2016-02-03 01:57:03 +090058 except ext_errors:
Jake Farrella0dd75d2011-11-26 05:23:09 +000059 raise BuildFailed()
60
Nobuaki Sukegawa10308cb2016-02-03 01:57:03 +090061
James E. King III7ecc9ef2021-09-25 16:47:05 -040062def read_file(path):
63 """
64 Return the contents of a file
65
66 Arguments:
67 - path: path to the file
68
69 Returns:
70 - contents of the file
71 """
72 with open(path, "r") as desc_file:
73 return desc_file.read().rstrip()
74
75
Jake Farrella0dd75d2011-11-26 05:23:09 +000076def run_setup(with_binary):
77 if with_binary:
78 extensions = dict(
Nobuaki Sukegawa10308cb2016-02-03 01:57:03 +090079 ext_modules=[
80 Extension('thrift.protocol.fastbinary',
zeshuai007e6d97c02020-08-25 09:53:39 +080081 extra_compile_args=['-std=c++11'],
Nobuaki Sukegawa6525f6a2016-02-11 13:58:39 +090082 sources=[
83 'src/ext/module.cpp',
84 'src/ext/types.cpp',
85 'src/ext/binary.cpp',
86 'src/ext/compact.cpp',
87 ],
Nobuaki Sukegawa10308cb2016-02-03 01:57:03 +090088 include_dirs=include_dirs,
89 )
Jake Farrella0dd75d2011-11-26 05:23:09 +000090 ],
91 cmdclass=dict(build_ext=ve_build_ext)
92 )
93 else:
94 extensions = dict()
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +090095
Nobuaki Sukegawabf9fa902016-09-04 18:49:21 +090096 ssl_deps = []
Nobuaki Sukegawabf9fa902016-09-04 18:49:21 +090097 if sys.hexversion < 0x03050000:
98 ssl_deps.append('backports.ssl_match_hostname>=3.5')
Gregg Donovan62ec9292026-01-29 16:51:37 -050099 tornado_deps = ['tornado>=6.3.0']
100 twisted_deps = ['twisted>=24.3.0', 'zope.interface>=6.1']
Nobuaki Sukegawabf9fa902016-09-04 18:49:21 +0900101
Nobuaki Sukegawa10308cb2016-02-03 01:57:03 +0900102 setup(name='thrift',
Jens Geyerc79d1cc2025-05-14 22:08:35 +0200103 version='0.23.0',
Nobuaki Sukegawa10308cb2016-02-03 01:57:03 +0900104 description='Python bindings for the Apache Thrift RPC system',
James E. King III7ecc9ef2021-09-25 16:47:05 -0400105 long_description=read_file("README.md"),
106 long_description_content_type="text/markdown",
James E. King IIIc3375d92018-12-30 11:06:00 -0500107 author='Apache Thrift Developers',
Nobuaki Sukegawa10308cb2016-02-03 01:57:03 +0900108 author_email='dev@thrift.apache.org',
109 url='http://thrift.apache.org',
110 license='Apache License 2.0',
Nobuaki Sukegawabf9fa902016-09-04 18:49:21 +0900111 extras_require={
112 'ssl': ssl_deps,
113 'tornado': tornado_deps,
114 'twisted': twisted_deps,
115 'all': ssl_deps + tornado_deps + twisted_deps,
116 },
Nobuaki Sukegawa10308cb2016-02-03 01:57:03 +0900117 packages=[
118 'thrift',
119 'thrift.protocol',
120 'thrift.transport',
121 'thrift.server',
122 ],
123 package_dir={'thrift': 'src'},
124 classifiers=[
125 'Development Status :: 5 - Production/Stable',
126 'Environment :: Console',
127 'Intended Audience :: Developers',
128 'Programming Language :: Python',
Nobuaki Sukegawa10308cb2016-02-03 01:57:03 +0900129 'Programming Language :: Python :: 3',
130 'Topic :: Software Development :: Libraries',
131 'Topic :: System :: Networking'
132 ],
Chandler May988b3e92017-01-27 16:21:40 -0500133 zip_safe=False,
Nobuaki Sukegawa10308cb2016-02-03 01:57:03 +0900134 **extensions
135 )
Mark Sleecde2b612006-09-03 21:13:07 +0000136
James E. King, III0ad20bd2017-09-30 15:44:16 -0700137
Jake Farrella0dd75d2011-11-26 05:23:09 +0000138try:
Nobuaki Sukegawa7af189a2016-02-11 16:21:01 +0900139 with_binary = True
Nobuaki Sukegawa760511f2015-11-06 21:24:16 +0900140 run_setup(with_binary)
Jake Farrella0dd75d2011-11-26 05:23:09 +0000141except BuildFailed:
jfarrell1823b592014-03-27 13:56:04 -0400142 print()
143 print('*' * 80)
Konrad Grochowski3b5dacb2014-11-24 10:55:31 +0100144 print("An error occurred while trying to compile with the C extension enabled")
jfarrell1823b592014-03-27 13:56:04 -0400145 print("Attempting to build without the extension now")
146 print('*' * 80)
147 print()
Mark Sleecde2b612006-09-03 21:13:07 +0000148
Jake Farrella0dd75d2011-11-26 05:23:09 +0000149 run_setup(False)