forked from ultrajson/ultrajson
-
Notifications
You must be signed in to change notification settings - Fork 1
/
setup.py
102 lines (87 loc) · 2.74 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
try:
from setuptools import setup, Extension
except ImportError:
from distutils.core import setup, Extension
import os.path
import re
from distutils.command.build_clib import build_clib
from distutils.command.build_ext import build_ext
from distutils.sysconfig import customize_compiler
from glob import glob
CLASSIFIERS = """
Development Status :: 5 - Production/Stable
Intended Audience :: Developers
License :: OSI Approved :: BSD License
Programming Language :: C
Programming Language :: Python :: 2
Programming Language :: Python :: 2.7
Programming Language :: Python :: 3
Programming Language :: Python :: 3.5
Programming Language :: Python :: 3.6
Programming Language :: Python :: 3.7
Programming Language :: Python :: 3.8
"""
source_files = glob("./deps/double-conversion/double-conversion/*.cc")
source_files.append("./lib/dconv_wrapper.cc")
libdoubleconversion = (
"double-conversion",
dict(
sources=source_files,
include_dirs=["./deps/double-conversion/double-conversion"],
language="c++",
),
)
class build_clib_without_warnings(build_clib):
def build_libraries(self, libraries):
customize_compiler(self.compiler)
try:
self.compiler.compiler_so.remove("-Wstrict-prototypes")
except (AttributeError, ValueError):
pass
build_clib.build_libraries(self, libraries)
module1 = Extension(
"ujson",
sources=[
"./python/ujson.c",
"./python/objToJSON.c",
"./python/JSONtoObj.c",
"./lib/ultrajsonenc.c",
"./lib/ultrajsondec.c",
],
include_dirs=["./python", "./lib"],
extra_compile_args=["-D_GNU_SOURCE"],
extra_link_args=["-lstdc++", "-lm"],
)
def get_version():
filename = os.path.join(os.path.dirname(__file__), "./python/version.h")
file = None
try:
file = open(filename)
header = file.read()
finally:
if file:
file.close()
m = re.search(r'#define\s+UJSON_VERSION\s+"(\d+\.\d+(?:\.\d+)?)"', header)
assert m, "version.h must contain UJSON_VERSION macro"
return m.group(1)
f = open("README.rst")
try:
README = f.read()
finally:
f.close()
setup(
name="ujson",
version=get_version(),
description="Ultra fast JSON encoder and decoder for Python",
long_description=README,
libraries=[libdoubleconversion],
ext_modules=[module1],
author="Jonas Tarnstrom",
author_email="jonas.tarnstrom@esn.me",
download_url="https://github.com/esnme/ultrajson",
platforms=["any"],
url="http://www.esn.me",
cmdclass={"build_ext": build_ext, "build_clib": build_clib_without_warnings},
python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*",
classifiers=[x for x in CLASSIFIERS.split("\n") if x],
)