forked from zeldamods/oead
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup.py
More file actions
114 lines (95 loc) · 4.21 KB
/
Copy pathsetup.py
File metadata and controls
114 lines (95 loc) · 4.21 KB
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
import setuptools
import versioneer
import os
import re
import sys
import platform
import subprocess
from pathlib import Path
from setuptools import setup, Extension
from setuptools.command.build_ext import build_ext
from distutils.version import LooseVersion
# Intended to make building in manylinux images easier.
# CentOS (or the EPEL package?) calls CMake cmake3...
cmake3_path = Path("/usr/bin/cmake3")
cmake_name = "cmake3" if cmake3_path.exists() else "cmake"
class CMakeExtension(Extension):
def __init__(self, name, sourcedir=''):
Extension.__init__(self, name, sources=[str(p) for p in Path(sourcedir).glob('**/*')])
self.sourcedir = os.path.abspath(sourcedir)
class CMakeBuild(build_ext):
def run(self):
for ext in self.extensions:
self.build_extension(ext)
def build_extension(self, ext):
debug = bool(os.getenv('DEBUG', False))
extdir = os.path.abspath(os.path.dirname(self.get_ext_fullpath(ext.name)))
cmake_args = ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=' + extdir,
'-DPYTHON_EXECUTABLE=' + sys.executable,
'-DCMAKE_POLICY_VERSION_MINIMUM=3.5']
cfg = 'Debug' if debug else 'Release'
build_args = [f'-j{os.cpu_count()}', '--config', cfg]
generator = os.getenv('CMAKE_GENERATOR', '')
if not generator and platform.system() == "Windows":
default_gen = ''
try:
out = subprocess.check_output(['cmake', '--help']).decode('utf-8', errors='ignore')
for line in out.splitlines():
line = line.strip()
if line.startswith('*'):
default_gen = line.split('=')[0].replace('*', '').strip()
break
except Exception:
pass
import shutil
if shutil.which("ninja") is not None:
if not default_gen or "Visual Studio" not in default_gen:
os.environ["CMAKE_GENERATOR"] = "Ninja"
generator = "Ninja"
if not generator:
generator = default_gen
is_multi_config = platform.system() == "Windows" and not any(x in generator for x in ["Ninja", "MinGW", "NMake", "Makefiles"])
if platform.system() == "Windows":
cmake_args += ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_{}={}'.format(cfg.upper(), extdir)]
if is_multi_config:
if sys.maxsize > 2**32:
cmake_args += ['-A', 'x64']
build_args += ['--', '/m']
else:
cmake_args += ['-DCMAKE_BUILD_TYPE=' + cfg]
else:
cmake_args += ['-DCMAKE_BUILD_TYPE=' + cfg]
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)
subprocess.check_call([cmake_name, ext.sourcedir] + cmake_args, cwd=self.build_temp, env=env)
subprocess.check_call([cmake_name, '--build', '.'] + build_args, cwd=self.build_temp)
with open("readme.rst", "r") as fh:
long_description = fh.read()
cmdclass = versioneer.get_cmdclass()
cmdclass["build_ext"] = CMakeBuild
setuptools.setup(
name="tkvsc-oead",
version=versioneer.get_version(),
cmdclass=cmdclass,
author="TKVSC Team",
author_email="tkvsc.team@gmail.com",
description="Library for recent Nintendo EAD formats in first-party games",
long_description=long_description,
long_description_content_type="text/x-rst",
url="https://github.com/zeldamods/oead",
packages=setuptools.find_packages(),
classifiers=[
"License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)",
"Topic :: Software Development :: Libraries",
"Operating System :: OS Independent",
"Programming Language :: C++",
"Programming Language :: Python :: 3 :: Only",
],
python_requires=">=3.9",
ext_modules=[CMakeExtension(name="oead", sourcedir="py")],
data_files=[('data', [str(p) for p in Path('data').glob('**/*')])],
zip_safe=False,
)