File: setup.py

package info (click to toggle)
cbor2 5.7.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 648 kB
  • sloc: ansic: 5,522; python: 3,884; makefile: 19; sh: 8
file content (73 lines) | stat: -rw-r--r-- 2,048 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import os
import platform
import sys

from setuptools import Extension, setup

min_glibc = (2, 9)


def check_libc():
    """Return False if we have glibc < 2.9 and should not build the C extension."""

    # Borrowed from pip internals
    # https://github.com/pypa/pip/blob/20.1.1/src/pip/_internal/utils/glibc.py#L21-L36
    try:
        # os.confstr("CS_GNU_LIBC_VERSION") returns a string like "glibc 2.17":
        libc_name, libc_version = os.confstr("CS_GNU_LIBC_VERSION").split()
    except (AttributeError, OSError, ValueError):
        # os.confstr() or CS_GNU_LIBC_VERSION not available (or a bad value)...
        return True

    if libc_name != "glibc":
        # Attempt to build with musl or other libc
        return True

    libc_version_tuple = tuple(int(x) for x in libc_version.split(".")[:2])
    return libc_version_tuple >= min_glibc


cpython = platform.python_implementation() == "CPython"
windows = sys.platform.startswith("win")
use_c_ext = os.environ.get("CBOR2_BUILD_C_EXTENSION", None)
optional = True
if use_c_ext == "1":
    build_c_ext = True
    optional = False
elif use_c_ext == "0":
    build_c_ext = False
else:
    build_c_ext = cpython and (windows or check_libc())

# Enable GNU features for libc's like musl, should have no effect
# on Apple/BSDs
if build_c_ext and not windows:
    gnu_flag = ["-D_GNU_SOURCE"]
else:
    gnu_flag = []

if build_c_ext:
    _cbor2 = Extension(
        "_cbor2",
        # math.h routines are built-in to MSVCRT
        libraries=["m"] if not windows else [],
        extra_compile_args=["-std=c99"] + gnu_flag,
        sources=[
            "source/module.c",
            "source/encoder.c",
            "source/decoder.c",
            "source/tags.c",
            "source/halffloat.c",
        ],
        optional=optional,
    )
    kwargs = {"ext_modules": [_cbor2]}
else:
    kwargs = {}


setup(
    use_scm_version={"version_scheme": "guess-next-dev", "local_scheme": "dirty-tag"},
    setup_requires=["setuptools >= 61", "setuptools_scm >= 6.4"],
    **kwargs,
)