-
Notifications
You must be signed in to change notification settings - Fork 88
/
setup.py
137 lines (119 loc) · 4.6 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
131
132
133
134
135
136
137
# -----------------------------------------------------------------------------
# FreeType high-level python API - copyright 2011 Nicolas P. Rougier
# Distributed under the terms of the new BSD license.
# -----------------------------------------------------------------------------
import distutils
import distutils.dir_util
import distutils.file_util
import os
import subprocess
import sys
from io import open
from os import path
from setuptools import setup
if os.environ.get("FREETYPEPY_BUNDLE_FT"):
print("# Will build and bundle FreeType.")
from setuptools import Extension
from setuptools.command.build_ext import build_ext
from wheel.bdist_wheel import bdist_wheel
class BdistWheel(bdist_wheel):
def get_tag(self):
return ('py3', 'none') + bdist_wheel.get_tag(self)[2:]
class SharedLibrary(Extension):
"""Object that describes the library (filename) and how to make it."""
if sys.platform == "darwin":
suffix = ".dylib"
elif sys.platform == "win32":
suffix = ".dll"
else:
suffix = ".so"
def __init__(self, name, cmd, cwd=".", output_dir=".", env=None):
Extension.__init__(self, name, sources=[])
self.cmd = cmd
self.cwd = path.normpath(cwd)
self.output_dir = path.normpath(output_dir)
self.env = env or dict(os.environ)
class SharedLibBuildExt(build_ext):
"""Object representing command to produce and install a shared
library."""
# Needed to make setuptools and wheel believe they're looking at an
# extension instead of a shared library.
def get_ext_filename(self, ext_name):
for ext in self.extensions:
if isinstance(ext, SharedLibrary):
return os.path.join(*ext_name.split('.')) + ext.suffix
return build_ext.get_ext_filename(self, ext_name)
def build_extension(self, ext):
if not isinstance(ext, SharedLibrary):
build_ext.build_extension(self, ext)
return
distutils.log.info("running '{}'".format(ext.cmd))
if not self.dry_run:
rv = subprocess.Popen(
ext.cmd, cwd=ext.cwd, env=ext.env, shell=True).wait()
if rv != 0:
sys.exit(rv)
lib_name = ext.name.split(".")[-1] + ext.suffix
lib_fullpath = path.join(ext.output_dir, lib_name)
dest_path = self.get_ext_fullpath(ext.name)
distutils.dir_util.mkpath(
path.dirname(dest_path),
verbose=self.verbose,
dry_run=self.dry_run)
distutils.file_util.copy_file(
lib_fullpath,
dest_path,
verbose=self.verbose,
dry_run=self.dry_run)
ext_modules = [
SharedLibrary(
"freetype.libfreetype", # package.shared_lib_name
cmd='"{}" ./setup-build-freetype.py'.format(sys.executable),
output_dir="build/local/lib")
]
cmdclass = {
'bdist_wheel': BdistWheel,
'build_ext': SharedLibBuildExt
}
else:
print("# Will use the system-provided FreeType.")
ext_modules = []
cmdclass = {}
description = open(
path.join(path.abspath(path.dirname(__file__)), 'README.rst'),
encoding='utf-8').read()
setup(
name='freetype-py',
use_scm_version=True,
description='Freetype python bindings',
long_description=description,
author='Nicolas P. Rougier',
author_email='[email protected]',
url='https://github.com/rougier/freetype-py',
python_requires=">=3.7",
packages=['freetype', 'freetype.ft_enums', 'freetype.__pyinstaller', 'freetype.__pyinstaller.tests'],
ext_modules=ext_modules,
zip_safe=False if ext_modules else True,
cmdclass=cmdclass,
classifiers=[
'Development Status :: 5 - Production/Stable',
'Environment :: X11 Applications',
'Environment :: MacOS X',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Operating System :: MacOS',
'Operating System :: Microsoft :: Windows',
'Operating System :: POSIX',
'Operating System :: Unix',
'Programming Language :: Python :: 3',
'Topic :: Multimedia :: Graphics',
],
keywords=['freetype', 'font'],
setup_requires=['setuptools_scm'],
entry_points={
"pyinstaller40": [
"hook-dirs = freetype.__pyinstaller:get_hook_dirs",
"tests = freetype.__pyinstaller:get_test_dirs",
],
},
)