-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Expand file tree
/
Copy pathsetup.py
More file actions
94 lines (73 loc) · 3.11 KB
/
setup.py
File metadata and controls
94 lines (73 loc) · 3.11 KB
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import sys
from textwrap import dedent
CURRENT_PYTHON = sys.version_info[:2]
REQUIRED_PYTHON = (3, 10)
# This check and everything above must remain compatible with older Python versions
if CURRENT_PYTHON < REQUIRED_PYTHON:
raise SystemExit(
dedent(
"""
========================================================
Unsupported Python version
========================================================
Streamlink requires at least Python {}.{},
but you're trying to install it on Python {}.{}.
This may be because you are using a version of pip that
doesn't understand the python_requires classifier.
Make sure you have pip >= 9.0 and setuptools >= 24.2
""",
)
.strip(" \n")
.format(*REQUIRED_PYTHON, *CURRENT_PYTHON),
)
from pathlib import Path # noqa: E402
from typing import TYPE_CHECKING # noqa: E402
if TYPE_CHECKING:
from collections.abc import Sequence
def is_wheel_for_windows(argv):
if "bdist_wheel" in argv:
names = ["win32", "win-amd64", "cygwin"]
length = len(argv)
for pos in range(argv.index("bdist_wheel") + 1, length):
if argv[pos] == "--plat-name" and pos + 1 < length:
return argv[pos + 1] in names
elif argv[pos][:12] == "--plat-name=":
return argv[pos][12:] in names
return False
entry_points = {
"console_scripts": ["streamlink=streamlink_cli.main:main"],
}
if is_wheel_for_windows(sys.argv):
entry_points["gui_scripts"] = ["streamlinkw=streamlink_cli.main:main"]
# optional data files
data_files: "list[tuple[str, Sequence[str]]]" = [ # noqa: UP037
# shell completions:
# requires pre-built completion files via shtab ("build" dependency group)
# `./script/build-shell-completions.sh`
("share/bash-completion/completions", ["completions/bash/streamlink"]),
("share/zsh/site-functions", ["completions/zsh/_streamlink"]),
# man page:
# requires the pre-built man page file via sphinx ("docs" dependency group)
# `make --directory=docs clean man`
("share/man/man1", ["docs/_build/man/streamlink.1"]),
]
data_files = [
(destdir, [file for file in srcfiles if Path(file).exists()])
for destdir, srcfiles in data_files
] # fmt: skip
if __name__ == "__main__":
sys.path.insert(0, str(Path(__file__).parent))
from build_backend.commands import cmdclass
from setuptools import Command, setup # noqa: TC002
try:
# versioningit is only required when building from git (see pyproject.toml)
from versioningit import get_cmdclasses
except ImportError: # pragma: no cover
def get_cmdclasses(bases: "dict[str, type[Command]] | None" = None) -> "dict[str, type[Command]]": # noqa: UP037
return bases or {}
setup(
cmdclass=get_cmdclasses(cmdclass),
entry_points=entry_points,
data_files=data_files,
# version="", # static version string template, uncommented and substituted by versioningit's onbuild hook
)