-
Notifications
You must be signed in to change notification settings - Fork 48
/
setup.py
174 lines (147 loc) · 5.28 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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Setup script for aggdraw
#
# Usage:
#
# To build in current directory:
# $ python setup.py build_ext -i
#
# To build and install:
# $ python setup.py install
#
from __future__ import print_function
import os
import sys
import subprocess
import platform
from sysconfig import get_config_var
from packaging.version import Version
from setuptools import setup, Extension
VERSION = "1.3.13"
SUMMARY = "High quality drawing interface for PIL."
DESCRIPTION = """\
The aggdraw module implements the basic WCK 2D Drawing Interface on
top of the AGG library. This library provides high-quality drawing,
with anti-aliasing and alpha compositing, while being fully compatible
with the WCK renderer.
"""
def is_platform_mac():
return sys.platform == 'darwin'
# For mac, ensure extensions are built for macos 10.9 when compiling on a
# 10.9 system or above, overriding distuitls behaviour which is to target
# the version that python was built for. This may be overridden by setting
# MACOSX_DEPLOYMENT_TARGET before calling setup.py
if is_platform_mac():
if 'MACOSX_DEPLOYMENT_TARGET' not in os.environ:
current_system = Version(platform.mac_ver()[0])
python_target = Version(get_config_var('MACOSX_DEPLOYMENT_TARGET'))
if (
python_target < Version('10.9') and
current_system >= Version('10.9')
):
os.environ['MACOSX_DEPLOYMENT_TARGET'] = '10.9'
def _get_freetype_config():
print("Trying freetype-config to find freetype library...")
try:
# pointer to freetype build directory (tweak as necessary)
return subprocess.check_output(
['freetype-config', '--prefix']).strip().replace(
b'"', b'').decode()
except (OSError, subprocess.CalledProcessError):
return None
def _get_freetype_with_ctypes():
print("Using ctypes to find freetype library...")
from ctypes.util import find_library
ft_lib_path = find_library('freetype')
if ft_lib_path is None:
return None
if not sys.platform.startswith('linux') and \
not os.path.isfile(ft_lib_path):
return None
elif not os.path.isfile(ft_lib_path):
# try prefix since find_library doesn't give a full path on linux
for bdir in (sys.prefix, '/usr', '/usr/local'):
lib_path = os.path.join(bdir, 'lib', ft_lib_path)
if os.path.isfile(lib_path):
return bdir
else:
# freetype is somewhere on the system, but we don't know where
return None
ft_lib_path = os.path.dirname(ft_lib_path)
lib_path = os.path.realpath(os.path.join(ft_lib_path, '..'))
return lib_path
def _get_freetype_with_pkgconfig():
print("Trying 'pkgconfig' to find freetype library...")
try:
import pkgconfig
return pkgconfig.variables('freetype2')['prefix']
except (ImportError, KeyError, ValueError):
return None
FREETYPE_ROOT = os.getenv('AGGDRAW_FREETYPE_ROOT')
for func in (_get_freetype_config, _get_freetype_with_ctypes,
_get_freetype_with_pkgconfig):
if FREETYPE_ROOT is None:
FREETYPE_ROOT = func()
if FREETYPE_ROOT is None:
print("=== freetype not available")
else:
print("=== freetype found: '{}'".format(FREETYPE_ROOT))
sources = [
# source code currently used by aggdraw
# FIXME: link against AGG library instead?
"agg/src/agg_arc.cpp",
"agg/src/agg_bezier_arc.cpp",
"agg/src/agg_curves.cpp",
"agg/src/agg_rounded_rect.cpp",
"agg/src/agg_trans_affine.cpp",
"agg/src/agg_vcgen_contour.cpp",
# "agg2/src/agg_vcgen_dash.cpp",
"agg/src/agg_vcgen_stroke.cpp",
]
# define VERSION macro in C++ code, need to quote it
defines = [('VERSION', VERSION)]
include_dirs = ["agg/include"]
library_dirs = []
libraries = []
if FREETYPE_ROOT:
defines.append(("HAVE_FREETYPE2", None))
sources.extend([
"agg/font_freetype/agg_font_freetype.cpp",
])
include_dirs.append("agg/font_freetype")
include_dirs.append(os.path.join(FREETYPE_ROOT, "include"))
include_dirs.append(os.path.join(FREETYPE_ROOT, "include/freetype"))
include_dirs.append(os.path.join(FREETYPE_ROOT, "include/freetype2"))
library_dirs.append(os.path.join(FREETYPE_ROOT, "lib"))
libraries.append("freetype")
if sys.platform == "win32":
libraries.extend(["kernel32", "user32", "gdi32"])
defines.append(("NOMINMAX", None))
setup(
name="aggdraw",
version=VERSION,
author="Fredrik Lundh",
author_email="fredrik@pythonware.com",
classifiers=[
"Development Status :: 4 - Beta",
# "Development Status :: 5 - Production/Stable",
"Topic :: Multimedia :: Graphics",
],
description=SUMMARY,
download_url="http://www.effbot.org/downloads#aggdraw",
license="Python (MIT style)",
long_description=DESCRIPTION.strip(),
platforms="Python 2.7 and later.",
url="https://github.com/pytroll/aggdraw",
ext_modules=[
Extension("aggdraw", ["aggdraw.cxx"] + sources,
define_macros=defines,
include_dirs=include_dirs,
library_dirs=library_dirs, libraries=libraries
)
],
python_requires='>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*',
tests_require=['pillow', 'pytest'],
)