aiohttp
/
setup.py
54 строки · 1.6 Кб
1import os
2import pathlib
3import sys
4
5from setuptools import Extension, setup
6
7if sys.version_info < (3, 9):
8raise RuntimeError("aiohttp 4.x requires Python 3.9+")
9
10
11NO_EXTENSIONS: bool = bool(os.environ.get("AIOHTTP_NO_EXTENSIONS"))
12HERE = pathlib.Path(__file__).parent
13IS_GIT_REPO = (HERE / ".git").exists()
14
15
16if sys.implementation.name != "cpython":
17NO_EXTENSIONS = True
18
19
20if IS_GIT_REPO and not (HERE / "vendor/llhttp/README.md").exists():
21print("Install submodules when building from git clone", file=sys.stderr)
22print("Hint:", file=sys.stderr)
23print(" git submodule update --init", file=sys.stderr)
24sys.exit(2)
25
26
27# NOTE: makefile cythonizes all Cython modules
28
29extensions = [
30Extension("aiohttp._websocket", ["aiohttp/_websocket.c"]),
31Extension(
32"aiohttp._http_parser",
33[
34"aiohttp/_http_parser.c",
35"aiohttp/_find_header.c",
36"vendor/llhttp/build/c/llhttp.c",
37"vendor/llhttp/src/native/api.c",
38"vendor/llhttp/src/native/http.c",
39],
40define_macros=[("LLHTTP_STRICT_MODE", 0)],
41include_dirs=["vendor/llhttp/build"],
42),
43Extension("aiohttp._helpers", ["aiohttp/_helpers.c"]),
44Extension("aiohttp._http_writer", ["aiohttp/_http_writer.c"]),
45]
46
47
48build_type = "Pure" if NO_EXTENSIONS else "Accelerated"
49setup_kwargs = {} if NO_EXTENSIONS else {"ext_modules": extensions}
50
51print("*********************", file=sys.stderr)
52print("* {build_type} build *".format_map(locals()), file=sys.stderr)
53print("*********************", file=sys.stderr)
54setup(**setup_kwargs)
55