view setup.py @ 549:84657447ab39

FIX: Properly raise a UnicodeEncodeError from C
author Franz Glasner <fzglas.hg@dom66.de>
date Sun, 02 Jan 2022 01:00:10 +0100
parents adf65c31f8fc
children 059260191371
line wrap: on
line source

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re
import os
import platform
import sys
try:
    from setuptools import setup
except ImportError:
    from distutils.core import setup


if (sys.version_info[0] < 2) or \
        ((sys.version_info[0] == 2) and (sys.version_info[1] < 6)):
    raise ValueError("Need at least Python 2.6")


pkg_root = os.path.dirname(__file__)

_version_re = re.compile(br"^\s*__version__\s*=\s*(\"|')(.*)\1\s*(#.*)?$",
                         re.MULTILINE)

with open(os.path.join(pkg_root, "configmix", "__init__.py"), "rb") as vf:
    version = _version_re.search(vf.read()).group(2).decode("utf-8")

with open(os.path.join(pkg_root, "README.txt"), "rt") as rf:
    long_description = rf.read()

aws_requirements = [
    "requests",
]

yaml_requirements = [
    "PyYAML>=3.0,<6",
]

toml_requirements = [
    "toml>=0.10",
]

all_requirements = []
all_requirements.extend(aws_requirements)
all_requirements.extend(yaml_requirements)
all_requirements.extend(toml_requirements)


cmdclass = {}
ext_modules = []

#
# Handle the optinal C-extension for Python3.7+ and CPython only.
# PyPy does not need this.
#

# The C-extension uses multi-phase module initialization (PEP 489, PY 3.5+)
if (platform.python_implementation() == "CPython"
    and (sys.version_info[0] > 3
         or (sys.version_info[0] == 3 and sys.version_info[1] >= 5))):

    # The stable API for Python 3.7+ is used
    if sys.version_info[0] == 3 and sys.version_info[1] < 7:
        py_limited_api = False
    else:
        py_limited_api = True

    if py_limited_api:
        define_macros = [("Py_LIMITED_API", "0x03070000")]
    else:
        define_macros = []

    try:
        from setuptools import Extension
    except ImportError:
        from distutils.core import Extension

    ext_modules = [
        Extension(
            name="configmix._speedups",
            sources=["configmix/_speedups.c"],
            define_macros=define_macros,
            py_limited_api=py_limited_api,
            optional=True
        ),
    ]

    if py_limited_api:
        #
        # Build a wheel that is properly named using the stable API
        #
        try:
            import wheel.bdist_wheel
        except ImportError:
            cmdclass = {}
        else:
            class BDistWheel(wheel.bdist_wheel.bdist_wheel):
                def finalize_options(self):
                    # Synchronize this with Py_LIMITED_API
                    self.py_limited_api = 'cp37'
                    super().finalize_options()

            cmdclass = {'bdist_wheel': BDistWheel}

setup(
    name="ConfigMix",
    version=version,
    author="Franz Glasner",
    license='BSD 3-Clause "New" or "Revised" License',
    url="https://pypi.dom66.de/simple/configmix/",
    description="Library for extended configuration files",
    long_description=long_description,
    packages=["configmix",
              "configmix.extras"],
    include_package_data=False,
    zip_safe=True,
    platforms="any",
    classifiers=[
        "Development Status :: 5 - Production/Stable",
        "Environment :: Console",
        "Intended Audience :: Developers",
        "License :: OSI Approved :: BSD License",
        "Operating System :: OS Independent",
        "Programming Language :: Python",
        "Programming Language :: Python :: 2.6",
        "Programming Language :: Python :: 2.7",
        "Programming Language :: Python :: 3",
        "Topic :: Software Development :: Libraries :: Python Modules"
    ],
    python_requires=">=2.6",
    ext_modules=ext_modules,
    cmdclass=cmdclass,
    extras_require={
        "aws" : aws_requirements,
        "toml": toml_requirements,
        "yaml": yaml_requirements,
        "all" : all_requirements,
    },
    tests_require=all_requirements,
)