blob: c5c02473bb6dd4c95856bbcf30a7e4bdf118d499 [file] [log] [blame]
Jean-Paul Calderonecf20dd62008-06-12 16:38:38 -04001#!/usr/bin/env python
Jean-Paul Calderone0db6cdb2008-04-11 11:52:15 -04002# -*- coding: utf-8 -*-
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05003#
4# Copyright (C) AB Strakt 2001, All rights reserved
Jean-Paul Calderonee53ccf72008-04-11 11:40:39 -04005# Copyright (C) Jean-Paul Calderone 2008, All rights reserved
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05006#
7# @(#) $Id: setup.py,v 1.28 2004/08/10 10:59:01 martin Exp $
8#
Jean-Paul Calderonee53ccf72008-04-11 11:40:39 -04009
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050010"""
11Installation script for the OpenSSL module
12"""
13
zookoa4be22a2008-12-01 09:22:02 -070014try:
15 from ez_setup import use_setuptools
16except ImportError:
17 pass
18else:
19 use_setuptools(download_delay=0)
20
U-YOUR-FA38FA253F\Zooko Brillnonywonx3594e212008-11-11 15:51:03 -070021import os, sys
22
23def pylibdir(prefixdir):
24 pyver = "python%d.%d" % (sys.version_info[:2])
25 if sys.platform == "win32":
26 return os.path.join(prefixdir, "Lib", "site-packages")
27 else:
28 return os.path.join(prefixdir, "lib", pyver, "site-packages")
29
30for i in range(len(sys.argv)):
31 arg = sys.argv[i]
32 prefixdir = None
33 if arg.startswith("--prefix="):
34 prefixdir = arg[len("--prefix="):]
35 if arg == "--prefix":
36 if len(sys.argv) > i+1:
37 prefixdir = sys.argv[i+1]
38
39 if prefixdir:
40 libdir = pylibdir(prefixdir)
41 try:
42 os.makedirs(libdir)
43 except EnvironmentError, le:
44 # Okay, maybe the dir was already there.
45 pass
46 sys.path.append(libdir)
47 print "os.environ.get('PYTHONPATH') is now ", os.environ.get('PYTHONPATH')
48 pp = os.environ.get('PYTHONPATH','').split(':')
49 pp.append(libdir)
50 os.environ['PYTHONPATH'] = ':'.join(pp)
51 print "os.environ.get('PYTHONPATH') is now ", os.environ.get('PYTHONPATH')
52
53
54
55
56
57
U-YOUR-FA38FA253F\Zooko Brillnonywonxd78922f2008-11-10 06:19:16 -070058# Use setuptools if it's available.
59from setuptools import Extension, setup
60from glob import glob
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050061
62from version import __version__
63
64# A hack to determine if Extension objects support the depends keyword arg.
65try:
66 init_func = Extension.__init__.func_code
67 has_dep = 'depends' in init_func.co_varnames
68except:
69 has_dep = 0
70if not has_dep:
71 # If it doesn't, create a local replacement that removes depends
72 # from the kwargs before calling the regular constructor.
73 _Extension = Extension
74 class Extension(_Extension):
75 def __init__(self, name, sources, **kwargs):
Jean-Paul Calderonee79705c2008-03-04 22:20:06 -050076 kwargs.pop('depends', None)
Jean-Paul Calderonee9404372008-03-04 22:19:18 -050077 _Extension.__init__(self, name, sources, **kwargs)
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050078
79
80crypto_src = ['src/crypto/crypto.c', 'src/crypto/x509.c',
81 'src/crypto/x509name.c', 'src/crypto/pkey.c',
82 'src/crypto/x509store.c', 'src/crypto/x509req.c',
83 'src/crypto/x509ext.c', 'src/crypto/pkcs7.c',
84 'src/crypto/pkcs12.c', 'src/crypto/netscape_spki.c',
85 'src/util.c']
86crypto_dep = ['src/crypto/crypto.h', 'src/crypto/x509.h',
87 'src/crypto/x509name.h', 'src/crypto/pkey.h',
88 'src/crypto/x509store.h', 'src/crypto/x509req.h',
89 'src/crypto/x509ext.h', 'src/crypto/pkcs7.h',
90 'src/crypto/pkcs12.h', 'src/crypto/netscape_spki.h',
91 'src/util.h']
92rand_src = ['src/rand/rand.c', 'src/util.c']
93rand_dep = ['src/util.h']
94ssl_src = ['src/ssl/connection.c', 'src/ssl/context.c', 'src/ssl/ssl.c',
95 'src/util.c']
96ssl_dep = ['src/ssl/connection.h', 'src/ssl/context.h', 'src/ssl/ssl.h',
97 'src/util.h']
98
99IncludeDirs = None
100LibraryDirs = None
101
102# Add more platforms here when needed
103if os.name == 'nt' or sys.platform == 'win32':
Jean-Paul Calderonecc8a54a2008-03-08 20:13:01 -0500104 Libraries = ['eay32', 'Ws2_32']
105 ExtraObjects = [r"c:\Python25\libs\ssleay32.a"]
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500106else:
107 Libraries = ['ssl', 'crypto']
Jean-Paul Calderonecc8a54a2008-03-08 20:13:01 -0500108 ExtraObjects = []
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500109
110if sys.platform == 'darwin':
111 IncludeDirs = ['/sw/include']
112 LibraryDirs = ['/sw/lib']
113
U-YOUR-FA38FA253F\Zooko Brillnonywonxd78922f2008-11-10 06:19:16 -0700114# Use the SSL_LIB and SSL_INC environment variables to extend
115# the library and header directories we pass to the extensions.
116ssl_lib = os.environ.get('SSL_LIB', [])
117if ssl_lib:
118 if LibraryDirs:
119 LibraryDirs += [ssl_lib]
120 else:
121 LibraryDirs = [ssl_lib]
122ssl_inc = os.environ.get('SSL_INC', [])
123if ssl_inc:
124 if IncludeDirs:
125 IncludeDirs += [ssl_inc]
126 else:
127 IncludeDirs = [ssl_inc]
128
129# On Windows, make sure the necessary .dll's get added to the egg.
130data_files = []
131if sys.platform == 'win32':
132 data_files = [("OpenSSL", glob(os.path.join(ssl_lib, '*.dll')))]
133
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500134def mkExtension(name):
Jean-Paul Calderonee9404372008-03-04 22:19:18 -0500135 modname = 'OpenSSL.' + name
136 src = globals()[name.lower() + '_src']
137 dep = globals()[name.lower() + '_dep']
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500138 return Extension(modname, src, libraries=Libraries, depends=dep,
Jean-Paul Calderonecc8a54a2008-03-08 20:13:01 -0500139 include_dirs=IncludeDirs, library_dirs=LibraryDirs,
140 extra_objects=ExtraObjects)
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500141
142setup(name='pyOpenSSL', version=__version__,
Jean-Paul Calderone525ef802008-03-09 20:39:42 -0400143 package_dir = {'OpenSSL': '.'},
144 ext_modules = [mkExtension('crypto'), mkExtension('rand'),
145 mkExtension('SSL')],
146 py_modules = ['OpenSSL.__init__', 'OpenSSL.tsafe',
147 'OpenSSL.version', 'OpenSSL.test.__init__',
Jean-Paul Calderone30c09ea2008-03-21 17:04:05 -0400148 'OpenSSL.test.test_crypto',
149 'OpenSSL.test.test_ssl'],
U-YOUR-FA38FA253F\Zooko Brillnonywonxd78922f2008-11-10 06:19:16 -0700150 data_files = data_files,
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500151 description = 'Python wrapper module around the OpenSSL library',
Jean-Paul Calderonee53ccf72008-04-11 11:40:39 -0400152 author = 'Martin Sjögren, AB Strakt',
153 author_email = 'msjogren@gmail.com',
154 maintainer = 'Jean-Paul Calderone',
155 maintainer_email = 'exarkun@twistedmatrix.com',
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500156 url = 'http://pyopenssl.sourceforge.net/',
157 license = 'LGPL',
158 long_description = """\
159High-level wrapper around a subset of the OpenSSL library, includes
160 * SSL.Connection objects, wrapping the methods of Python's portable
161 sockets
162 * Callbacks written in Python
163 * Extensive error-handling mechanism, mirroring OpenSSL's error codes
164... and much more ;)"""
165 )