mirror of
				https://github.com/msgpack/msgpack-python.git
				synced 2025-11-04 03:20:56 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			122 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env python
 | 
						|
# coding: utf-8
 | 
						|
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
 | 
						|
 | 
						|
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, emit_linenums=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]
 | 
						|
 | 
						|
# take care of extension modules.
 | 
						|
if have_cython:
 | 
						|
    class Sdist(sdist):
 | 
						|
        def __init__(self, *args, **kwargs):
 | 
						|
            for src in glob('msgpack/*.pyx'):
 | 
						|
                cythonize(src)
 | 
						|
            sdist.__init__(self, *args, **kwargs)
 | 
						|
else:
 | 
						|
    Sdist = sdist
 | 
						|
 | 
						|
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 hasattr(sys, 'pypy_version_info'):
 | 
						|
    ext_modules.append(Extension('msgpack._packer',
 | 
						|
                                 sources=['msgpack/_packer.cpp'],
 | 
						|
                                 libraries=libraries,
 | 
						|
                                 include_dirs=['.'],
 | 
						|
                                 define_macros=macros,
 | 
						|
                                 ))
 | 
						|
    ext_modules.append(Extension('msgpack._unpacker',
 | 
						|
                                 sources=['msgpack/_unpacker.cpp'],
 | 
						|
                                 libraries=libraries,
 | 
						|
                                 include_dirs=['.'],
 | 
						|
                                 define_macros=macros,
 | 
						|
                                 ))
 | 
						|
del libraries, macros
 | 
						|
 | 
						|
 | 
						|
desc = 'MessagePack (de)serializer.'
 | 
						|
f = open('README.rst')
 | 
						|
long_desc = f.read()
 | 
						|
f.close()
 | 
						|
del f
 | 
						|
 | 
						|
setup(name='msgpack-python',
 | 
						|
      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,
 | 
						|
      url='http://msgpack.org/',
 | 
						|
      download_url='http://pypi.python.org/pypi/msgpack/',
 | 
						|
      classifiers=[
 | 
						|
          'Programming Language :: Python :: 2',
 | 
						|
          'Programming Language :: Python :: 3',
 | 
						|
          'Intended Audience :: Developers',
 | 
						|
          'License :: OSI Approved :: Apache Software License',
 | 
						|
          ]
 | 
						|
      )
 |