-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsetup.py
executable file
·134 lines (113 loc) · 4.4 KB
/
setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Tested with boost 1.59, GCC 4.8.3
import io
import os
import re
import shutil
import sys
from setuptools import setup
from setuptools.command.build_ext import build_ext
from setuptools.extension import Extension
pkg_name = 'batemaneq'
# Cythonize .pyx file if it exists (not in source distribution)
ext_modules = []
def _path_under_setup(*args):
return os.path.join(os.path.dirname(__file__), *args)
USE_CYTHON = os.path.exists(_path_under_setup(
pkg_name, '_bateman_double.pyx'))
if len(sys.argv) > 1 and '--help' not in sys.argv[1:] and sys.argv[1] not in (
'--help-commands', 'egg_info', 'clean', '--version'):
import numpy as np
ext = '.pyx' if USE_CYTHON else '.cpp'
sources = ['src/bateman_double.cpp', 'batemaneq/_bateman_double'+ext]
ext_modules = [
Extension('batemaneq._bateman_double', sources, language='c++',
include_dirs=[np.get_include(), './include'])
]
if USE_CYTHON:
from Cython.Build import cythonize
ext_modules = cythonize(ext_modules, include_path=['./include'])
RELEASE_VERSION = os.environ.get('BATEMANEQ_RELEASE_VERSION', '')
# http://conda.pydata.org/docs/build.html#environment-variables-set-during-the-build-process
CONDA_BUILD = os.environ.get('CONDA_BUILD', '0') == '1'
if CONDA_BUILD:
try:
RELEASE_VERSION = 'v' + io.open('__conda_version__.txt', 'rt',
encoding='utf-8').readline().rstrip()
except IOError:
pass
release_py_path = _path_under_setup(pkg_name, '_release.py')
if len(RELEASE_VERSION) > 1 and RELEASE_VERSION[0] == 'v':
TAGGED_RELEASE = True
__version__ = RELEASE_VERSION[1:]
else:
TAGGED_RELEASE = False
# read __version__ attribute from release.py:
exec(io.open(release_py_path, encoding='utf-8').read())
class BuildExt(build_ext):
"""A custom build extension for adding compiler-specific options."""
c_opts = {
'msvc': ['/EHsc'],
'unix': [],
}
def build_extensions(self):
ct = self.compiler.compiler_type
opts = self.c_opts.get(ct, [])
if ct == 'unix':
opts.append('-DVERSION_INFO="%s"' % self.distribution.get_version())
opts.append('-std=c++11')
if sys.platform == 'darwin' and re.search("clang", self.compiler.compiler[0]) is not None:
opts += ['-stdlib=libc++', '-mmacosx-version-min=10.7']
elif ct == 'msvc':
opts.append('/DVERSION_INFO=\\"%s\\"' % self.distribution.get_version())
for ext in self.extensions:
ext.extra_compile_args = opts
build_ext.build_extensions(self)
classifiers = [
"Development Status :: 4 - Beta",
'License :: OSI Approved :: BSD License',
'Operating System :: OS Independent',
'Topic :: Scientific/Engineering',
'Topic :: Scientific/Engineering :: Mathematics',
]
tests = [
'batemaneq.tests',
]
with io.open(_path_under_setup(pkg_name, '__init__.py'),
'rt', encoding='utf-8') as f:
short_description = f.read().split('"""')[1].split('\n')[1]
assert 10 < len(short_description) < 255
long_description = io.open(_path_under_setup('README.rst'),
encoding='utf-8').read()
assert len(long_description) > 100
setup_kwargs = dict(
name=pkg_name,
version=__version__,
description=short_description,
long_description=long_description,
classifiers=classifiers,
author='Björn Dahlgren',
author_email='bjodah@DELETEMEgmail.com',
license='BSD',
url='https://github.com/bjodah/' + pkg_name,
packages=[pkg_name] + tests,
install_requires=['numpy'] + (['cython'] if USE_CYTHON else []),
setup_requires=['numpy'] + (['cython'] if USE_CYTHON else []),
ext_modules=ext_modules,
cmdclass={'build_ext': BuildExt},
zip_safe=False,
)
if __name__ == '__main__':
try:
if TAGGED_RELEASE:
# Same commit should generate different sdist
# depending on tagged version (set BATEMANEQ_RELEASE_VERSION)
# this will ensure source distributions contain the correct version
shutil.move(release_py_path, release_py_path+'__temp__')
open(release_py_path, 'wt').write(
"__version__ = '{}'\n".format(__version__))
setup(**setup_kwargs)
finally:
if TAGGED_RELEASE:
shutil.move(release_py_path+'__temp__', release_py_path)