File: wheelname.py

package info (click to toggle)
bornagain 23.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 103,936 kB
  • sloc: cpp: 423,131; python: 40,997; javascript: 11,167; awk: 630; sh: 318; ruby: 173; xml: 130; makefile: 51; ansic: 24
file content (66 lines) | stat: -rw-r--r-- 1,994 bytes parent folder | download
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
"""
Determine the wheel name via setuptools

Usage:
$ python3 wheelname.py <package-name> <version-string>
"""

from setuptools import Extension, Distribution
import platform

HEADER = "wheelname.py"

def wheel_tags(**kwargs):
    """ set up a dummy distribution from arguments
    and return a resulting wheel name
    """

    dst = Distribution(attrs=kwargs)
    # finalize bdist_wheel command
    bdist_wheel_cmd = dst.get_command_obj('bdist_wheel')
    bdist_wheel_cmd.ensure_finalized()

    distname = bdist_wheel_cmd.wheel_dist_name  # eg. 'testdist-1.2.3'
    tags = bdist_wheel_cmd.get_tag() # eg. (cp311, cp311, linux_x86_64)

    return (distname, *tags)


def wheel_name(*tags):
    # eg. 'testdist-1.2.3-cp311-cp311-linux_x86_64'
    return '-'.join(*tags)


def get_wheel_names(pkg_name:str, version_str:str):
    # get the name of the pure-Python wheel
    pure_tags = wheel_tags(name=pkg_name, version=version_str)
    pure_whl = wheel_name(pure_tags)

    # get tags for the platform-dependent wheel
    platform_tags = wheel_tags(name=pkg_name, version=version_str,
                               ext_modules=[Extension("dummylib", ["dummy.c"])])
    # fix platform tag to be compatible with conda under MacOS-x64
    platform_whl = wheel_name(platform_tags)

    # NOTE: CMake list separator is semicolon
    return ';'.join((pure_whl, platform_whl))

#----------------------------------------

if __name__ == "__main__":
    import sys

    args = sys.argv
    if len(args) <= 2:
        print("Usage: python3 wheelname.py <package-name> <version-string>")
        raise ValueError(HEADER + ": package name and version string must be non-empty.")

    """ NOTE:
    Python pip currently enforces PEP8 rule that Python packages
    should also have short, all-lowercase names.
    <https://peps.python.org/pep-0008/#package-and-module-names>
    """

    pkg_name = args[1].strip().lower()
    version_str = args[2].strip()
    print(get_wheel_names(pkg_name, version_str))