-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathsetup.py
130 lines (111 loc) · 5.18 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
# This is essentially lifted from https://raw.githubusercontent.com/nmwsharp/polyscope-py/master/setup.py
# Thanks, Nick, Silvia and Oded!
import os
import re
import sys
import platform
import subprocess
import setuptools
from setuptools import setup, Extension
from setuptools.command.build_ext import build_ext
from distutils.version import LooseVersion
__version__ = '0.0.8'
class CMakeExtension(Extension):
# Boilerplate that I don't fully understand
def __init__(self, name, sourcedir='', exclude_arch=False):
Extension.__init__(self, name, sources=[])
# Directory where my python package is
self.sourcedir = os.path.abspath(sourcedir)
self.exclude_arch = exclude_arch
class CMakeBuild(build_ext):
def run(self):
# Check that cmake is installed
try:
out = subprocess.check_output(['cmake', '--version'])
except OSError:
raise RuntimeError("CMake must be installed to build the following extensions: " +
", ".join(e.name for e in self.extensions))
# If you're Windows, you need a good enough version of Cmake
if platform.system() == "Windows":
cmake_version = LooseVersion(re.search(r'version\s*([\d.]+)', out.decode()).group(1))
if cmake_version < '3.1.0':
raise RuntimeError("CMake >= 3.1.0 is required on Windows")
# Call to build (see below)
for ext in self.extensions:
self.build_extension(ext)
def build_extension(self, ext):
extdir = os.path.abspath(os.path.dirname(self.get_ext_fullpath(ext.name)))
cmake_args = ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=' + extdir,
'-DPYTHON_EXECUTABLE=' + sys.executable]
# This is horrible, I don't know other way of installing dependencies on the wheel dependencies
# os.system("python -m pip install numpy")
# if platform.system() == "Linux":
# os.system("apt-get install \
# libmpfr-dev \
# libgmp-dev")
# print("=----------------------------=")
# print(platform.system())
# cfg = 'Debug' if self.debug else 'Release'
cfg = 'Release'
build_args = ['--config', cfg]
# Setting up call to cmake, platform-dependent
if platform.system() == "Windows":
cmake_args += ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_{}={}'.format(cfg.upper(), extdir)]
if not ext.exclude_arch:
if sys.maxsize > 2 ** 32:
cmake_args += ['-A', 'x64']
else:
cmake_args += ['-A', 'Win32']
build_args += ['--', '/m']
else:
cmake_args += ['-DCMAKE_BUILD_TYPE=' + cfg]
build_args += ['--', '-j2']
if self.distribution.verbose > 0:
cmake_args += ['-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON']
env = os.environ.copy()
env['CXXFLAGS'] = '{} -DVERSION_INFO=\\"{}\\"'.format(env.get('CXXFLAGS', ''), self.distribution.get_version())
if not os.path.exists(self.build_temp):
os.makedirs(self.build_temp)
if (self.distribution.verbose > 0):
print("Running cmake configure command: " + " ".join(['cmake', ext.sourcedir] + cmake_args))
subprocess.check_call(['cmake', ext.sourcedir] + cmake_args, cwd=self.build_temp, env=env)
if (self.distribution.verbose > 0):
print("Running cmake build command: " + " ".join(['cmake', '--build', '.'] + build_args))
subprocess.check_call(['cmake', '--build', '.'] + build_args, cwd=self.build_temp)
def main():
with open('README.md') as f:
long_description = f.read()
# Applies to windows only.
# Normally, we set cmake's -A option to specify 64 bit platform when need (and /m for build),
# but these are errors with non-visual-studio generators. CMake does not seem to have an idiomatic
# way to disable, so we expose an option here. A more robust solution would auto-detect based on the
# generator. Really, this option might be better titled "exclude visual-studio-settings-on-windows"
if "--exclude-arch" in sys.argv:
exclude_arch = True
sys.argv.remove('--exclude-arch')
else:
exclude_arch = False
setup(
name='fast-cody',
version=__version__,
author='Otman Benchekroun',
author_email='[email protected]',
url='https://github.com/otmanon/fast-cody/',
description='',
long_description=long_description,
long_description_content_type='text/markdown',
license="MIT",
package_dir={'': 'src'},
packages=setuptools.find_packages(where="src"),
install_requires=[ 'packaging', 'numpy', 'scipy', 'mediapipe', 'opencv-python', 'cvxopt', 'polyscope', 'libigl', 'scikit-learn'],
include_package_data=True,
# data_files=[('', ['./src/shaders/*'])],
package_data={'fast_cody': ['shaders/*.glsl', 'data/*']},
ext_modules=[CMakeExtension('.', exclude_arch=exclude_arch)],
# setup_requires=['pybind11>=2.4'],
cmdclass=dict(build_ext=CMakeBuild),
zip_safe=False,
test_suite='test'
)
if __name__ == "__main__":
main()