зеркало из https://github.com/mozilla/pjs.git
118 строки
3.4 KiB
Python
118 строки
3.4 KiB
Python
|
#!/usr/bin/env python
|
||
|
|
||
|
import sys
|
||
|
try:
|
||
|
import setuptools
|
||
|
except ImportError:
|
||
|
from ez_setup import use_setuptools
|
||
|
use_setuptools()
|
||
|
|
||
|
from setuptools import setup, find_packages, Extension, Feature
|
||
|
from distutils.command.build_ext import build_ext
|
||
|
from distutils.errors import CCompilerError, DistutilsExecError, \
|
||
|
DistutilsPlatformError
|
||
|
|
||
|
VERSION = '2.1.1'
|
||
|
DESCRIPTION = "Simple, fast, extensible JSON encoder/decoder for Python"
|
||
|
LONG_DESCRIPTION = """
|
||
|
simplejson is a simple, fast, complete, correct and extensible
|
||
|
JSON <http://json.org> encoder and decoder for Python 2.5+. It is
|
||
|
pure Python code with no dependencies, but includes an optional C
|
||
|
extension for a serious speed boost.
|
||
|
|
||
|
simplejson is the externally maintained development version of the
|
||
|
json library included with Python 2.6 and Python 3.0, but maintains
|
||
|
backwards compatibility with Python 2.5.
|
||
|
|
||
|
The encoder may be subclassed to provide serialization in any kind of
|
||
|
situation, without any special support by the objects to be serialized
|
||
|
(somewhat like pickle).
|
||
|
|
||
|
The decoder can handle incoming JSON strings of any specified encoding
|
||
|
(UTF-8 by default).
|
||
|
"""
|
||
|
|
||
|
CLASSIFIERS = filter(None, map(str.strip,
|
||
|
"""
|
||
|
Intended Audience :: Developers
|
||
|
License :: OSI Approved :: MIT License
|
||
|
Programming Language :: Python
|
||
|
Topic :: Software Development :: Libraries :: Python Modules
|
||
|
""".splitlines()))
|
||
|
|
||
|
|
||
|
speedups = Feature(
|
||
|
"optional C speed-enhancement module",
|
||
|
standard=True,
|
||
|
ext_modules = [
|
||
|
Extension("simplejson._speedups", ["simplejson/_speedups.c"]),
|
||
|
],
|
||
|
)
|
||
|
|
||
|
if sys.platform == 'win32' and sys.version_info > (2, 6):
|
||
|
# 2.6's distutils.msvc9compiler can raise an IOError when failing to
|
||
|
# find the compiler
|
||
|
ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError,
|
||
|
IOError)
|
||
|
else:
|
||
|
ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError)
|
||
|
|
||
|
class BuildFailed(Exception):
|
||
|
pass
|
||
|
|
||
|
class ve_build_ext(build_ext):
|
||
|
# This class allows C extension building to fail.
|
||
|
|
||
|
def run(self):
|
||
|
try:
|
||
|
build_ext.run(self)
|
||
|
except DistutilsPlatformError, x:
|
||
|
raise BuildFailed()
|
||
|
|
||
|
def build_extension(self, ext):
|
||
|
try:
|
||
|
build_ext.build_extension(self, ext)
|
||
|
except ext_errors, x:
|
||
|
raise BuildFailed()
|
||
|
|
||
|
def run_setup(with_binary):
|
||
|
if with_binary:
|
||
|
features = {'speedups': speedups}
|
||
|
else:
|
||
|
features = {}
|
||
|
|
||
|
setup(
|
||
|
name="simplejson",
|
||
|
version=VERSION,
|
||
|
description=DESCRIPTION,
|
||
|
long_description=LONG_DESCRIPTION,
|
||
|
classifiers=CLASSIFIERS,
|
||
|
author="Bob Ippolito",
|
||
|
author_email="bob@redivi.com",
|
||
|
url="http://undefined.org/python/#simplejson",
|
||
|
license="MIT License",
|
||
|
packages=find_packages(exclude=['ez_setup']),
|
||
|
platforms=['any'],
|
||
|
test_suite="simplejson.tests.all_tests_suite",
|
||
|
zip_safe=True,
|
||
|
features=features,
|
||
|
cmdclass={'build_ext': ve_build_ext},
|
||
|
)
|
||
|
|
||
|
try:
|
||
|
run_setup(False)
|
||
|
except BuildFailed:
|
||
|
BUILD_EXT_WARNING = "WARNING: The C extension could not be compiled, speedups are not enabled."
|
||
|
print '*' * 75
|
||
|
print BUILD_EXT_WARNING
|
||
|
print "Failure information, if any, is above."
|
||
|
print "I'm retrying the build without the C extension now."
|
||
|
print '*' * 75
|
||
|
|
||
|
run_setup(False)
|
||
|
|
||
|
print '*' * 75
|
||
|
print BUILD_EXT_WARNING
|
||
|
print "Plain-Python installation succeeded."
|
||
|
print '*' * 75
|