示例#1
0
def _is_manylinux_compatible(name, arch, glibc_version):
    # type: (str, str, GlibcVersion) -> bool
    sys_glibc = _get_glibc_version()
    if sys_glibc < glibc_version:
        return False
    # Check for presence of _manylinux module.
    try:
        import _manylinux  # noqa
    except ImportError:
        pass
    else:
        if hasattr(_manylinux, "manylinux_compatible"):
            result = _manylinux.manylinux_compatible(
                glibc_version[0], glibc_version[1], arch
            )
            if result is not None:
                return bool(result)
        else:
            if glibc_version == (2, 5):
                if hasattr(_manylinux, "manylinux1_compatible"):
                    return bool(_manylinux.manylinux1_compatible)
            if glibc_version == (2, 12):
                if hasattr(_manylinux, "manylinux2010_compatible"):
                    return bool(_manylinux.manylinux2010_compatible)
            if glibc_version == (2, 17):
                if hasattr(_manylinux, "manylinux2014_compatible"):
                    return bool(_manylinux.manylinux2014_compatible)
    return True
示例#2
0
def manylinux_tag_is_compatible_with_this_system(tag):
    # Pulled from PEP 600
    # Normalize and parse the tag
    glibc_version = get_glibc_version()
    if glibc_version is None:
        return False

    tag = LEGACY_ALIASES.get(tag, tag)
    manylinux_match = re.match(MANYLINUX_REGEX, tag)
    if not manylinux_match:
        return False
    tag_major_str, tag_minor_str, tag_arch = manylinux_match.groups()
    tag_major = int(tag_major_str)
    tag_minor = int(tag_minor_str)

    sys_major, sys_minor = glibc_version
    if (sys_major, sys_minor) < (tag_major, tag_minor):
        return False
    sys_arch = get_system_arch()
    if sys_arch != tag_arch:
        return False

    # Check for manual override
    try:
        import _manylinux  # type: ignore  # pylint: disable=bad-option-value,import-outside-toplevel
    except ImportError:
        pass
    else:
        if hasattr(_manylinux, "manylinux_compatible"):
            result = _manylinux.manylinux_compatible(
                tag_major,
                tag_minor,
                tag_arch,
            )
            if result is not None:
                return bool(result)
        else:
            if (tag_major, tag_minor) == (2, 5):
                if hasattr(_manylinux, "manylinux1_compatible"):
                    return bool(_manylinux.manylinux1_compatible)
            if (tag_major, tag_minor) == (2, 12):
                if hasattr(_manylinux, "manylinux2010_compatible"):
                    return bool(_manylinux.manylinux2010_compatible)

    return True
示例#3
0
def _is_compatible(name: str, arch: str, version: _GLibCVersion) -> bool:
    sys_glibc = _get_glibc_version()
    if sys_glibc < version:
        return False
    # Check for presence of _manylinux module.
    try:
        import _manylinux  # noqa
    except ImportError:
        return True
    if hasattr(_manylinux, "manylinux_compatible"):
        result = _manylinux.manylinux_compatible(version[0], version[1], arch)
        if result is not None:
            return bool(result)
        return True
    if version == _GLibCVersion(2, 5):
        if hasattr(_manylinux, "manylinux1_compatible"):
            return bool(_manylinux.manylinux1_compatible)
    if version == _GLibCVersion(2, 12):
        if hasattr(_manylinux, "manylinux2010_compatible"):
            return bool(_manylinux.manylinux2010_compatible)
    if version == _GLibCVersion(2, 17):
        if hasattr(_manylinux, "manylinux2014_compatible"):
            return bool(_manylinux.manylinux2014_compatible)
    return True