msgpack-python/setup.py

142 lines
3.8 KiB
Python
Raw Normal View History

2009-06-24 14:33:36 +09:00
#!/usr/bin/env python
# coding: utf-8
import io
2009-06-10 10:45:07 +09:00
import os
import sys
2010-01-25 20:52:48 +09:00
from glob import glob
from distutils.command.sdist import sdist
2012-06-27 18:16:59 +09:00
from setuptools import setup, Extension
2010-01-25 20:52:48 +09:00
2012-08-19 02:53:16 +09:00
from distutils.command.build_ext import build_ext
PYPY = hasattr(sys, "pypy_version_info")
PY2 = sys.version_info[0] == 2
class NoCython(Exception):
pass
2019-12-05 18:53:49 +09:00
2010-01-25 20:52:48 +09:00
try:
import Cython.Compiler.Main as cython_compiler
2019-12-05 18:53:49 +09:00
2010-01-25 20:52:48 +09:00
have_cython = True
except ImportError:
have_cython = False
2009-06-08 01:43:50 +09:00
2012-08-19 02:53:16 +09:00
def cythonize(src):
sys.stderr.write("cythonize: %r\n" % (src,))
2016-07-21 19:32:00 +09:00
cython_compiler.compile([src], cplus=True)
2012-08-19 02:53:16 +09:00
2019-12-05 18:53:49 +09:00
2012-08-19 02:53:16 +09:00
def ensure_source(src):
2019-12-05 18:53:49 +09:00
pyx = os.path.splitext(src)[0] + ".pyx"
2012-08-19 02:53:16 +09:00
if not os.path.exists(src):
if not have_cython:
raise NoCython
2012-08-21 14:56:32 +09:00
cythonize(pyx)
2019-12-05 18:53:49 +09:00
elif (
os.path.exists(pyx)
and os.stat(src).st_mtime < os.stat(pyx).st_mtime
and have_cython
):
2012-08-21 14:56:32 +09:00
cythonize(pyx)
2012-11-06 09:37:55 +09:00
return src
2012-08-19 02:53:16 +09:00
class BuildExt(build_ext):
def build_extension(self, ext):
try:
ext.sources = list(map(ensure_source, ext.sources))
except NoCython:
2013-01-28 14:32:01 +01:00
print("WARNING")
print("Cython is required for building extension from checkout.")
print("Install Cython >= 0.16 or install msgpack from PyPI.")
print("Falling back to pure Python implementation.")
return
try:
return build_ext.build_extension(self, ext)
except Exception as e:
2015-10-30 00:36:12 +01:00
print("WARNING: Failed to compile extension modules.")
print("msgpack uses fallback pure python implementation.")
print(e)
2012-08-19 02:53:16 +09:00
2019-12-05 18:53:49 +09:00
exec(open("msgpack/_version.py").read())
2011-01-09 23:58:26 +09:00
2019-12-05 18:53:49 +09:00
version_str = ".".join(str(x) for x in version[:3])
if len(version) > 3 and version[3] != "final":
version_str += version[3]
2009-06-08 01:43:50 +09:00
# Cython is required for sdist
class Sdist(sdist):
def __init__(self, *args, **kwargs):
2019-12-05 18:53:49 +09:00
cythonize("msgpack/_cmsgpack.pyx")
sdist.__init__(self, *args, **kwargs)
2010-01-25 20:52:48 +09:00
2019-12-05 18:53:49 +09:00
libraries = []
2019-12-05 18:53:49 +09:00
if sys.platform == "win32":
libraries.append("ws2_32")
2019-12-05 18:53:49 +09:00
if sys.byteorder == "big":
macros = [("__BIG_ENDIAN__", "1")]
else:
2019-12-05 18:53:49 +09:00
macros = [("__LITTLE_ENDIAN__", "1")]
2012-12-11 22:15:21 +09:00
ext_modules = []
if not PYPY and not PY2 and not os.environ.get("MSGPACK_PUREPYTHON"):
2019-12-05 18:53:49 +09:00
ext_modules.append(
Extension(
"msgpack._cmsgpack",
sources=["msgpack/_cmsgpack.cpp"],
libraries=libraries,
include_dirs=["."],
define_macros=macros,
)
)
2012-12-11 22:15:21 +09:00
del libraries, macros
2010-01-25 20:52:48 +09:00
2009-06-08 01:43:50 +09:00
2019-12-05 18:53:49 +09:00
desc = "MessagePack (de)serializer."
2019-12-12 18:25:38 +09:00
with io.open("README.md", encoding="utf-8") as f:
long_desc = f.read()
2012-06-27 18:05:35 +09:00
del f
2009-06-08 01:43:50 +09:00
2019-12-05 18:53:49 +09:00
setup(
2019-12-12 18:48:16 +09:00
name="msgpack",
2019-12-12 18:25:38 +09:00
author="Inada Naoki",
2019-12-05 18:53:49 +09:00
author_email="songofacandy@gmail.com",
version=version_str,
cmdclass={"build_ext": BuildExt, "sdist": Sdist},
ext_modules=ext_modules,
packages=["msgpack"],
description=desc,
long_description=long_desc,
2019-12-12 18:25:38 +09:00
long_description_content_type="text/markdown",
2019-12-05 18:53:49 +09:00
url="https://msgpack.org/",
project_urls={
"Documentation": "https://msgpack-python.readthedocs.io/",
"Source": "https://github.com/msgpack/msgpack-python",
"Tracker": "https://github.com/msgpack/msgpack-python/issues",
},
license="Apache 2.0",
classifiers=[
"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",
2020-12-11 19:16:14 +09:00
"Programming Language :: Python :: 3.9",
2019-12-05 18:53:49 +09:00
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: Implementation :: PyPy",
"Intended Audience :: Developers",
"License :: OSI Approved :: Apache Software License",
],
2018-01-07 01:57:47 +09:00
)