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
import os
package_dir = os.path.dirname(os.path.realpath(__file__))
target_dir = os.path.join(package_dir, 'bob', 'io', 'base')
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
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()
extra_compile_args = [
'-isystem', 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',
define_macros = define_macros,
extra_compile_args = extra_compile_args,
boost_modules = ['system', 'filesystem'],
"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",
],
package_directory = package_dir,
target_directory = target_dir,
libraries = libraries,
library_dirs = library_dirs,
include_dirs = [hdf5_pkg.include_directory],
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",
libraries = libraries + ['bob_io_base'],
define_macros = define_macros,
extra_compile_args = extra_compile_args,
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',
],
)