mirror of
				https://github.com/msgpack/msgpack-python.git
				synced 2025-11-03 19:10:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			150 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env python
 | 
						|
# coding: utf-8
 | 
						|
import io
 | 
						|
import os
 | 
						|
import sys
 | 
						|
from glob import glob
 | 
						|
from distutils.command.sdist import sdist
 | 
						|
from setuptools import setup, Extension
 | 
						|
 | 
						|
from distutils.command.build_ext import build_ext
 | 
						|
 | 
						|
 | 
						|
PYPY = hasattr(sys, "pypy_version_info")
 | 
						|
PY2 = sys.version_info[0] == 2
 | 
						|
 | 
						|
 | 
						|
# for building transitional package.
 | 
						|
TRANSITIONAL = False
 | 
						|
 | 
						|
 | 
						|
class NoCython(Exception):
 | 
						|
    pass
 | 
						|
 | 
						|
 | 
						|
try:
 | 
						|
    import Cython.Compiler.Main as cython_compiler
 | 
						|
 | 
						|
    have_cython = True
 | 
						|
except ImportError:
 | 
						|
    have_cython = False
 | 
						|
 | 
						|
 | 
						|
def cythonize(src):
 | 
						|
    sys.stderr.write("cythonize: %r\n" % (src,))
 | 
						|
    cython_compiler.compile([src], cplus=True)
 | 
						|
 | 
						|
 | 
						|
def ensure_source(src):
 | 
						|
    pyx = os.path.splitext(src)[0] + ".pyx"
 | 
						|
 | 
						|
    if not os.path.exists(src):
 | 
						|
        if not have_cython:
 | 
						|
            raise NoCython
 | 
						|
        cythonize(pyx)
 | 
						|
    elif (
 | 
						|
        os.path.exists(pyx)
 | 
						|
        and os.stat(src).st_mtime < os.stat(pyx).st_mtime
 | 
						|
        and have_cython
 | 
						|
    ):
 | 
						|
        cythonize(pyx)
 | 
						|
    return src
 | 
						|
 | 
						|
 | 
						|
class BuildExt(build_ext):
 | 
						|
    def build_extension(self, ext):
 | 
						|
        try:
 | 
						|
            ext.sources = list(map(ensure_source, ext.sources))
 | 
						|
        except NoCython:
 | 
						|
            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:
 | 
						|
            print("WARNING: Failed to compile extension modules.")
 | 
						|
            print("msgpack uses fallback pure python implementation.")
 | 
						|
            print(e)
 | 
						|
 | 
						|
 | 
						|
exec(open("msgpack/_version.py").read())
 | 
						|
 | 
						|
version_str = ".".join(str(x) for x in version[:3])
 | 
						|
if len(version) > 3 and version[3] != "final":
 | 
						|
    version_str += version[3]
 | 
						|
 | 
						|
# Cython is required for sdist
 | 
						|
class Sdist(sdist):
 | 
						|
    def __init__(self, *args, **kwargs):
 | 
						|
        cythonize("msgpack/_cmsgpack.pyx")
 | 
						|
        sdist.__init__(self, *args, **kwargs)
 | 
						|
 | 
						|
 | 
						|
libraries = []
 | 
						|
if sys.platform == "win32":
 | 
						|
    libraries.append("ws2_32")
 | 
						|
 | 
						|
if sys.byteorder == "big":
 | 
						|
    macros = [("__BIG_ENDIAN__", "1")]
 | 
						|
else:
 | 
						|
    macros = [("__LITTLE_ENDIAN__", "1")]
 | 
						|
 | 
						|
ext_modules = []
 | 
						|
if not PYPY and not PY2:
 | 
						|
    ext_modules.append(
 | 
						|
        Extension(
 | 
						|
            "msgpack._cmsgpack",
 | 
						|
            sources=["msgpack/_cmsgpack.cpp"],
 | 
						|
            libraries=libraries,
 | 
						|
            include_dirs=["."],
 | 
						|
            define_macros=macros,
 | 
						|
        )
 | 
						|
    )
 | 
						|
del libraries, macros
 | 
						|
 | 
						|
 | 
						|
desc = "MessagePack (de)serializer."
 | 
						|
with io.open("README.rst", encoding="utf-8") as f:
 | 
						|
    long_desc = f.read()
 | 
						|
del f
 | 
						|
 | 
						|
name = "msgpack"
 | 
						|
 | 
						|
if TRANSITIONAL:
 | 
						|
    name = "msgpack-python"
 | 
						|
    long_desc = "This package is deprecated.  Install msgpack instead."
 | 
						|
 | 
						|
setup(
 | 
						|
    name=name,
 | 
						|
    author="INADA Naoki",
 | 
						|
    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,
 | 
						|
    long_description_content_type="text/x-rst",
 | 
						|
    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",
 | 
						|
        "Programming Language :: Python :: Implementation :: CPython",
 | 
						|
        "Programming Language :: Python :: Implementation :: PyPy",
 | 
						|
        "Intended Audience :: Developers",
 | 
						|
        "License :: OSI Approved :: Apache Software License",
 | 
						|
    ],
 | 
						|
)
 |