Newer
Older
#!/usr/bin/env python
# vim: set fileencoding=utf-8 :
# Andre Anjos <andre.anjos@idiap.ch>
# Mon 16 Apr 08:18:08 2012 CEST
dist.Distribution(dict(setup_requires=['bob.blitz', 'bob.core']))
from bob.extension.utils import egrep, find_header, find_library
from bob.blitz.extension import Extension, Library, build_ext
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
def libhdf5_version(header):
version = egrep(header, r"#\s*define\s+H5_VERSION\s+\"([\d\.]+)\"")
if not len(version): return None
return version[0].group(1)
class hdf5:
def __init__ (self, requirement='', only_static=False):
"""
Searches for libhdf5 in stock locations. Allows user to override.
If the user sets the environment variable BOB_PREFIX_PATH, that prefixes
the standard path locations.
Parameters:
requirement, str
A string, indicating a version requirement for this library. For example,
``'>= 8.2'``.
only_static, boolean
A flag, that indicates if we intend to link against the static library
only. This will trigger our library search to disconsider shared
libraries when searching.
"""
self.name = 'hdf5'
header = 'hdf5.h'
candidates = find_header(header)
if not candidates:
raise RuntimeError("could not find %s's `%s' - have you installed %s on this machine?" % (self.name, header, self.name))
found = False
if not requirement:
self.include_directory = os.path.dirname(candidates[0])
directory = os.path.dirname(candidates[0])
version_header = os.path.join(directory, 'H5pubconf.h')
self.version = libhdf5_version(version_header)
found = True
else:
# requirement is 'operator' 'version'
operator, required = [k.strip() for k in requirement.split(' ', 1)]
# now check for user requirements
for candidate in candidates:
directory = os.path.dirname(candidate)
version_header = os.path.join(directory, 'H5pubconf.h')
version = libhdf5_version(version_header)
available = LooseVersion(version)
if (operator == '<' and available < required) or \
(operator == '<=' and available <= required) or \
(operator == '>' and available > required) or \
(operator == '>=' and available >= required) or \
(operator == '==' and available == required):
self.include_directory = os.path.dirname(candidate)
self.version = version
found = True
break
if not found:
raise RuntimeError("could not find the required (%s) version of %s on the file system (looked at: %s)" % (requirement, self.name, ', '.join(candidates)))
# normalize
self.include_directory = os.path.normpath(self.include_directory)
# find library
prefix = os.path.dirname(os.path.dirname(self.include_directory))
module = 'hdf5'
candidates = find_library(module, version=self.version, prefixes=[prefix], only_static=only_static)
if not candidates:
raise RuntimeError("cannot find required %s binary module `%s' - make sure libsvm is installed on `%s'" % (self.name, module, prefix))
# libraries
self.libraries = []
name, ext = os.path.splitext(os.path.basename(candidates[0]))
if ext in ['.so', '.a', '.dylib', '.dll']:
self.libraries.append(name[3:]) #strip 'lib' from the name
else: #link against the whole thing
self.libraries.append(':' + os.path.basename(candidates[0]))
# library path
self.library_directory = os.path.dirname(candidates[0])
def macros(self):
return [
('HAVE_%s' % self.name.upper(), '1'),
('%s_VERSION' % self.name.upper(), '"%s"' % self.version),
]
hdf5_pkg = hdf5()
system_include_dirs = [hdf5_pkg.include_directory]
library_dirs = [hdf5_pkg.library_directory]
libraries = hdf5_pkg.libraries
define_macros = hdf5_pkg.macros()
license='BSD',
author='Andre Anjos',
author_email='andre.anjos@idiap.ch',
long_description=open('README.rst').read(),
packages=find_packages(),
include_package_data=True,
install_requires=[
'setuptools',
system_include_dirs = system_include_dirs,
boost_modules = ['system', 'filesystem'],
Library("bob.io.base.bob_io_base",
"bob/io/base/cpp/CSVFile.cpp",
"bob/io/base/cpp/File.cpp",
"bob/io/base/cpp/HDF5ArrayFile.cpp",
"bob/io/base/cpp/HDF5Attribute.cpp",
"bob/io/base/cpp/HDF5Dataset.cpp",
"bob/io/base/cpp/HDF5File.cpp",
"bob/io/base/cpp/HDF5Group.cpp",
"bob/io/base/cpp/HDF5Types.cpp",
"bob/io/base/cpp/HDF5Utils.cpp",
"bob/io/base/cpp/reorder.cpp",
"bob/io/base/cpp/T3File.cpp",
"bob/io/base/cpp/TensorArrayFile.cpp",
"bob/io/base/cpp/TensorFileHeader.cpp",
"bob/io/base/cpp/utils.cpp",
"bob/io/base/cpp/TensorFile.cpp",
"bob/io/base/cpp/array.cpp",
"bob/io/base/cpp/array_type.cpp",
"bob/io/base/cpp/blitz_array.cpp",
],
libraries = libraries,
library_dirs = library_dirs,
system_include_dirs = system_include_dirs,
define_macros = define_macros,
version = version,
bob_packages = ['bob.core', 'bob.blitz'],
packages = ['boost'],
boost_modules = ['system', 'filesystem'],
Extension("bob.io.base._library",
[
"bob/io/base/file.cpp",
system_include_dirs = system_include_dirs,
bob_packages = ['bob.core'],
packages = ['boost'],
boost_modules = ['system', 'filesystem'],
cmdclass = {
'build_ext': build_ext
},
classifiers = [
'Development Status :: 3 - Alpha',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Natural Language :: English',
'Programming Language :: Python',
'Programming Language :: Python :: 3',
'Topic :: Software Development :: Libraries :: Python Modules',