-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathsetup.py
executable file
·130 lines (120 loc) · 4.46 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
#!/usr/bin/python
'''FANN Python bindings setup'''
import os
import os.path
import sys
import subprocess
from setuptools import setup, Extension, find_packages
NAME = 'fann2'
VERSION = '1.1.2'
with open("README.rst") as f:
LONG_DESCRIPTION = f.read()
def find_executable(executable, path=None):
'''Try to find 'executable' in the directories listed in 'path' (a
string listing directories separated by 'os.pathsep'; defaults to
os.environ['PATH']).'''
if path is None:
path = os.environ['PATH']
paths = path.split(os.pathsep)
extlist = ['']
if os.name == 'os2':
ext = os.path.splitext(executable)
# executable files on OS/2 can have an arbitrary extension, but
# .exe is automatically appended if no dot is present in the name
if not ext:
executable = executable + ".exe"
elif sys.platform == 'win32':
pathext = os.environ['PATHEXT'].lower().split(os.pathsep)
ext = os.path.splitext(executable)
if ext not in pathext:
extlist = pathext
for ext in extlist:
execname = executable + ext
if os.path.isfile(execname):
return execname
else:
for pth in paths:
fil = os.path.join(pth, execname)
if os.path.isfile(fil):
return fil
break
else:
return None
def find_x(path1):
'''Return true if substring is in string for files
in specified path'''
libs = os.listdir(path1)
for lib_dir in libs:
if "doublefann" in lib_dir:
return True
def find_fann():
'''Find doublefann library'''
# FANN possible libs directories (as $LD_LIBRARY_PATH), also includes
# pkgsrc framework support.
if sys.platform == "win32":
dirs = sys.path
for ver in dirs:
if os.path.isdir(ver):
if find_x(ver):
return True
raise Exception("Couldn't find FANN source libs!")
else:
dirs = [os.environ.get('PREFIX','')+'/lib','/lib', '/usr/lib', '/usr/lib64', '/usr/local/lib', '/usr/pkg/lib']
for path in dirs:
if os.path.isdir(path):
if find_x(path):
return True
raise Exception("Couldn't find FANN source libs!")
def find_swig():
'''Find SWIG executable path'''
for executable in ("swig2.0", "swig"):
if find_executable(executable):
return executable
raise Exception("Couldn't find SWIG binary!")
def build_swig():
'''Run SWIG with specified parameters'''
print("Looking for FANN libs...")
find_fann()
print("running SWIG...")
swig_bin = find_swig()
swig_cmd = [swig_bin, '-c++', '-python', 'fann2/fann2.i']
subprocess.Popen(swig_cmd).wait()
if "sdist" not in sys.argv:
build_swig()
setup(
name=NAME,
description='Fast Artificial Neural Network Library (FANN) Python bindings.',
long_description=LONG_DESCRIPTION,
version=VERSION,
author='Steffen Nissen',
author_email='[email protected]',
maintainer='Gil Megidish, Vincenzo Di Massa and FutureLinkCorporation',
maintainer_email='[email protected] & hawk.it@tiscali,it and [email protected]',
url='https://github.com/FutureLinkCorporation/fann2',
license='GNU LESSER GENERAL PUBLIC LICENSE (LGPL)',
dependency_links=[
"http://sourceforge.net/projects/fann/files/fann/2.2.0/FANN-2.2.0-Source.zip/download",
"http://www.swig.org/download.html"],
classifiers=[
"Development Status :: 4 - Beta",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3.3",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6"
],
keywords="ANN artificial intelligence FANN2.2.0 bindings".split(' '),
zip_safe=False,
include_package_data=True,
packages=find_packages(),
py_modules=['fann2.libfann'],
ext_modules=[Extension('fann2._libfann', ['fann2/fann2_wrap.cxx'],
include_dirs=['./include',
'../include', 'include'],
libraries=['doublefann'],
define_macros=[("SWIG_COMPILE", None)]
),
]
)