blob: a2a755049bb7591df217e9606ebcdb5415845ed9 [file] [log] [blame]
Alex Gaynorbfc06bc2013-08-06 19:36:19 -07001# Licensed under the Apache License, Version 2.0 (the "License");
2# you may not use this file except in compliance with the License.
3# You may obtain a copy of the License at
4#
5# http://www.apache.org/licenses/LICENSE-2.0
6#
7# Unless required by applicable law or agreed to in writing, software
8# distributed under the License is distributed on an "AS IS" BASIS,
9# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
10# implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
Alex Gaynorf51f2c12014-01-03 07:33:01 -080013import os
Alex Gaynor9a00f052014-01-02 13:09:34 -080014from distutils.command.build import build
15
Donald Stufft9ebb8ff2013-08-11 17:05:03 -040016from setuptools import setup, find_packages
Alex Gaynorc62e91f2013-08-06 19:25:52 -070017
Donald Stufft446a4572013-08-11 17:38:13 -040018
Alex Gaynor7630d6c2014-01-03 07:34:43 -080019base_dir = os.path.dirname(__file__)
20
Donald Stufft5f12a1b2013-08-11 16:37:43 -040021about = {}
Alex Gaynor7630d6c2014-01-03 07:34:43 -080022with open(os.path.join(base_dir, "cryptography", "__about__.py")) as f:
23 exec(f.read(), about)
Donald Stufft5f12a1b2013-08-11 16:37:43 -040024
25
Paul Kehrer7fcaa372014-01-10 23:39:58 -060026CFFI_DEPENDENCY = "cffi>=0.8"
Paul Kehrerc0242552013-09-10 18:54:13 -050027SIX_DEPENDENCY = "six>=1.4.1"
Donald Stufft5f12a1b2013-08-11 16:37:43 -040028
Alex Gaynor91f119e2014-01-02 13:12:59 -080029requirements = [
Donald Stufft5f12a1b2013-08-11 16:37:43 -040030 CFFI_DEPENDENCY,
Paul Kehrerc0242552013-09-10 18:54:13 -050031 SIX_DEPENDENCY
Donald Stufft5f12a1b2013-08-11 16:37:43 -040032]
33
Alex Gaynor9a00f052014-01-02 13:09:34 -080034
Paul Kehrer5b6ce2a2014-02-24 20:16:10 -060035class CFFIBuild(build):
Alex Gaynor49697512014-01-03 15:08:45 -080036 """
37 This class exists, instead of just providing ``ext_modules=[...]`` directly
38 in ``setup()`` because importing cryptography requires we have several
39 packages installed first.
40
41 By doing the imports here we ensure that packages listed in
42 ``setup_requires`` are already installed.
43 """
44
Alex Gaynor9a00f052014-01-02 13:09:34 -080045 def finalize_options(self):
Alex Gaynordefc7f02014-01-19 23:44:31 -060046 from cryptography.hazmat.bindings.commoncrypto.binding import (
47 Binding as CommonCryptoBinding
48 )
49 from cryptography.hazmat.bindings.openssl.binding import (
50 Binding as OpenSSLBinding
51 )
Alex Gaynor9a00f052014-01-02 13:09:34 -080052 from cryptography.hazmat.primitives import constant_time, padding
53
54 self.distribution.ext_modules = [
Alex Gaynordefc7f02014-01-19 23:44:31 -060055 OpenSSLBinding().ffi.verifier.get_extension(),
Alex Gaynor9a00f052014-01-02 13:09:34 -080056 constant_time._ffi.verifier.get_extension(),
57 padding._ffi.verifier.get_extension()
58 ]
Alex Gaynordefc7f02014-01-19 23:44:31 -060059 if CommonCryptoBinding.is_available():
60 self.distribution.ext_modules.append(
61 CommonCryptoBinding().ffi.verifier.get_extension()
62 )
Alex Gaynor50f233e2014-01-06 11:10:40 -080063
Alex Gaynor9a00f052014-01-02 13:09:34 -080064 build.finalize_options(self)
65
66
Alex Gaynor7630d6c2014-01-03 07:34:43 -080067with open(os.path.join(base_dir, "README.rst")) as f:
Alex Gaynorf51f2c12014-01-03 07:33:01 -080068 long_description = f.read()
69
70
Alex Gaynorc62e91f2013-08-06 19:25:52 -070071setup(
Donald Stufft5f12a1b2013-08-11 16:37:43 -040072 name=about["__title__"],
73 version=about["__version__"],
74
75 description=about["__summary__"],
Alex Gaynorf51f2c12014-01-03 07:33:01 -080076 long_description=long_description,
Donald Stufft5f12a1b2013-08-11 16:37:43 -040077 license=about["__license__"],
78 url=about["__uri__"],
79
80 author=about["__author__"],
81 author_email=about["__email__"],
82
Christian Heimesf83ed1d2013-08-10 23:28:29 +020083 classifiers=[
Christian Heimesf83ed1d2013-08-10 23:28:29 +020084 "Intended Audience :: Developers",
85 "License :: OSI Approved :: Apache Software License",
86 "Natural Language :: English",
87 "Operating System :: MacOS :: MacOS X",
88 "Operating System :: POSIX",
89 "Operating System :: POSIX :: BSD",
90 "Operating System :: POSIX :: Linux",
91 "Operating System :: Microsoft :: Windows",
Christian Heimesf83ed1d2013-08-10 23:28:29 +020092 "Programming Language :: Python",
93 "Programming Language :: Python :: 2",
94 "Programming Language :: Python :: 2.6",
95 "Programming Language :: Python :: 2.7",
96 "Programming Language :: Python :: 3",
97 "Programming Language :: Python :: 3.2",
98 "Programming Language :: Python :: 3.3",
99 "Programming Language :: Python :: Implementation :: CPython",
100 "Programming Language :: Python :: Implementation :: PyPy",
101 "Topic :: Security :: Cryptography",
102 ],
Donald Stufft5f12a1b2013-08-11 16:37:43 -0400103
Donald Stufft9ebb8ff2013-08-11 17:05:03 -0400104 packages=find_packages(exclude=["tests", "tests.*"]),
105
Alex Gaynor91f119e2014-01-02 13:12:59 -0800106 install_requires=requirements,
107 setup_requires=requirements,
Donald Stufft5f12a1b2013-08-11 16:37:43 -0400108
109 # for cffi
110 zip_safe=False,
Alex Gaynor9a00f052014-01-02 13:09:34 -0800111 ext_package="cryptography",
112 cmdclass={
Paul Kehrer5b6ce2a2014-02-24 20:16:10 -0600113 "build": CFFIBuild,
Alex Gaynor9a00f052014-01-02 13:09:34 -0800114 }
Alex Gaynorc62e91f2013-08-06 19:25:52 -0700115)