forked from symengine/symengine
-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup.py
97 lines (83 loc) · 3.16 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
from __future__ import print_function
from distutils.core import setup
from distutils.command.build import build as _build
from distutils.command.install import install as _install
import subprocess
cmake_opts = [("WITH_PYTHON","yes")]
def process_opts(opts):
return ['-D'+'='.join(o) for o in opts]
def cmake_build():
cmake_cmd = ["cmake", "."]
cmake_cmd.extend(process_opts(cmake_opts))
if subprocess.call(cmake_cmd) != 0:
raise EnvironmentError("error calling cmake")
if subprocess.call("make") != 0:
raise EnvironmentError("error calling make")
class BuildWithCmake(_build):
_build_opts = _build.user_options
user_options = [
('define=', 'D',
'cmake <var>:<type>=<value>'),
]
user_options.extend(_build_opts)
def initialize_options(self):
_build.initialize_options(self)
self.define = None
def finalize_options(self):
_build.finalize_options(self)
# The argument parsing will result in self.define being a string, but
# it has to be a list of 2-tuples.
# Multiple symbols can be separated with semi-colons.
if self.define:
defines = self.define.split(';')
self.define = [(s.strip(), None) if '=' not in s else
tuple(ss.strip() for ss in s.split('='))
for s in defines]
cmake_opts.extend(self.define)
def run(self):
cmake_build()
# can't use super() here because _build is an old style class in 2.7
_build.run(self)
class InstallWithCmake(_install):
_install_opts = _install.user_options
user_options = [
('define=', 'D',
'cmake <var>:<type>=<value>'),
]
user_options.extend(_install_opts)
def initialize_options(self):
_install.initialize_options(self)
self.define = None
def finalize_options(self):
_install.finalize_options(self)
# The argument parsing will result in self.define being a string, but
# it has to be a list of 2-tuples.
# Multiple symbols can be separated with semi-colons.
if self.define:
defines = self.define.split(';')
self.define = [(s.strip(), None) if '=' not in s else
tuple(ss.strip() for ss in s.split('='))
for s in defines]
cmake_opts.extend(self.define)
def run(self):
# can't use super() here because _install is an old style class in 2.7
_install.run(self)
long_description = '''
CSymPy is a standalone fast C++ symbolic manipulation library.
Optional thin Python wrappers allow easy usage from Python and
integration with SymPy.'''
setup(name = "csympy",
version = "git",
description = "CSymPy is a standalone fast C++ symbolic manipulation library",
long_description = "",
author = "",
author_email = "",
license = "MIT",
url = "https://github.com/sympy/csympy",
packages = ["csympy", "csympy.lib", "csympy.tests"],
package_data= {'' : ['lib/csympy_wrapper.so']},
cmdclass={
'build' : BuildWithCmake,
'install' : InstallWithCmake,
}
)