aboutsummaryrefslogtreecommitdiff
path: root/setup.py
blob: cdf1f550c0510dfd9f6629c51e4060cc21423413 (plain)
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
import subprocess
import sys

from setuptools import setup


def _get_ouroboros_version():
    try:
        out = subprocess.check_output(
            ['pkg-config', '--modversion', 'ouroboros-dev'],
            stderr=subprocess.DEVNULL
        )
        return out.decode().strip()
    except (subprocess.CalledProcessError, FileNotFoundError):
        sys.exit("ERROR: ouroboros-dev not found via pkg-config. "
                 "Is Ouroboros installed?")


def _check_build_version_compat():
    try:
        from setuptools_scm import get_version
        pyouro_ver = get_version(root='.', relative_to=__file__)
    except Exception:
        return  # no SCM info, skip check

    ouro_ver = _get_ouroboros_version()

    # setuptools_scm: '0.23.1.dev3+g<hash>' or '0.23.0'
    # pkg-config:     '0.23.0'
    # Compare major.minor only.
    ouro_parts   = ouro_ver.split('.')
    pyouro_parts = pyouro_ver.split('.')

    if ouro_parts[0] != pyouro_parts[0] or ouro_parts[1] != pyouro_parts[1]:
        sys.exit(
            f"ERROR: Version mismatch: ouroboros {ouro_ver} "
            f"vs pyouroboros {pyouro_ver} "
            f"(major.minor must match)"
        )


_check_build_version_compat()

setup(
    cffi_modules=[
        "ffi/pyouroboros_build_dev.py:ffibuilder",
        "ffi/pyouroboros_build_irm.py:ffibuilder"
    ],
)