forked from ddemidov/amgcl
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsetup.py
151 lines (116 loc) · 4.08 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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
from setuptools import setup, Extension
from subprocess import Popen, PIPE
import os, sys
import numpy
pyver = sys.version_info
#----------------------------------------------------------------------------
# Get version string from git
#
# Author: Douglas Creager <[email protected]>
# http://dcreager.net/2010/02/10/setuptools-git-version-numbers/
#
# PEP 386 adaptation from
# https://gist.github.com/ilogue/2567778/f6661ea2c12c070851b2dfb4da8840a6641914bc
#----------------------------------------------------------------------------
def call_git_describe(abbrev=4):
try:
p = Popen(['git', 'describe', '--abbrev=%d' % abbrev],
stdout=PIPE, stderr=PIPE)
p.stderr.close()
line = p.stdout.readlines()[0]
return line.strip().decode('utf8')
except:
return None
def read_release_version():
try:
f = open("RELEASE-VERSION", "r")
try:
version = f.readlines()[0]
return version.strip()
finally:
f.close()
except:
return None
def write_release_version(version):
f = open("RELEASE-VERSION", "w")
f.write("%s\n" % version)
f.close()
def pep386adapt(version):
# adapt git-describe version to be in line with PEP 386
parts = version.split('-')
if len(parts) > 1:
parts[-2] = 'post'+parts[-2]
version = '.'.join(parts[:-1])
return version
def get_git_version(abbrev=4):
# Read in the version that's currently in RELEASE-VERSION.
release_version = read_release_version()
# First try to get the current version using "git describe".
version = call_git_describe(abbrev)
# If that doesn't work, fall back on the value that's in
# RELEASE-VERSION.
if version is None:
version = release_version
else:
#adapt to PEP 386 compatible versioning scheme
version = pep386adapt(version)
# If we still don't have anything, that's an error.
if version is None:
raise ValueError("Cannot find the version number!")
# If the current version is different from what's in the
# RELEASE-VERSION file, update the file to be current.
if version != release_version:
write_release_version(version)
# Finally, return the current version.
return version
#----------------------------------------------------------------------------
def find_file(filename, search_dirs):
for dirname in search_dirs:
for root, dirs, files in os.walk(dirname):
for f in files:
if filename in f:
return dirname
for d in dirs:
if filename in d:
return dirname
if filename in root:
return dirname
return False
def boost_python_lib():
library_dirs = [
'/usr/local/lib64/',
'/usr/lib64/',
'/usr/local/lib/',
'/usr/lib/',
'/opt/local/lib/'
]
boost_python = "boost_python-%s.%s" % (pyver[0], pyver[1])
if find_file("lib" + boost_python, library_dirs):
return boost_python
if pyver >= (3, ):
boost_python = "boost_python-py%s%s" % (pyver[0], pyver[1])
if find_file("lib" + boost_python, library_dirs):
return boost_python
boost_python = "boost_python%s" % pyver[0]
if find_file("lib" + boost_python, library_dirs):
return boost_python
return "boost_python"
setup(
name='pyamgcl',
version=get_git_version(),
description='Solution of large sparse linear systems with Algebraic Multigrid Method',
author='Denis Demidov',
author_email='[email protected]',
license='MIT',
url='https://github.com/ddemidov/amgcl',
include_package_data=True,
zip_safe=False,
packages=['pyamgcl'],
ext_modules=[
Extension('pyamgcl_ext', ['pyamgcl/pyamgcl.cpp'],
include_dirs=['.', numpy.get_include()],
libraries=[boost_python_lib()],
extra_compile_args=['-O3']
)
]
)