fune/third_party/python/aiohttp/setup.py
Mitchell Hentges a1ee478054 Bug 1725708: Move all possible vendored deps to centralized system r=ahal
Note that, as part of adding this packages to the automated vendoring
system, some dependencies were automatically added - most notably,
dependencies of `taskcluster` that become visible with Python 3.6+.

Also, adds `**/.git` to the exclusions because:
* `.git` is part of our `.hgignore`, but
* `.git` is part of the `aiohttp` `tar.gz` file.

Since the file isn't needed for `pip install`-ing `aiohttp`,
and since we want `./mach vendor python` to be a no-op when there's
no requirement changes, we exclude it.

Differential Revision: https://phabricator.services.mozilla.com/D123122
2021-09-09 18:18:51 +00:00

159 lines
4.7 KiB
Python

import pathlib
import re
import sys
from distutils.command.build_ext import build_ext
from distutils.errors import CCompilerError, DistutilsExecError, DistutilsPlatformError
from setuptools import Extension, setup
if sys.version_info < (3, 6):
raise RuntimeError("aiohttp 3.7+ requires Python 3.6+")
here = pathlib.Path(__file__).parent
if (here / ".git").exists() and not (here / "vendor/http-parser/README.md").exists():
print("Install submodules when building from git clone", file=sys.stderr)
print("Hint:", file=sys.stderr)
print(" git submodule update --init", file=sys.stderr)
sys.exit(2)
# NOTE: makefile cythonizes all Cython modules
extensions = [
Extension("aiohttp._websocket", ["aiohttp/_websocket.c"]),
Extension(
"aiohttp._http_parser",
[
"aiohttp/_http_parser.c",
"vendor/http-parser/http_parser.c",
"aiohttp/_find_header.c",
],
define_macros=[("HTTP_PARSER_STRICT", 0)],
),
Extension("aiohttp._frozenlist", ["aiohttp/_frozenlist.c"]),
Extension("aiohttp._helpers", ["aiohttp/_helpers.c"]),
Extension("aiohttp._http_writer", ["aiohttp/_http_writer.c"]),
]
class BuildFailed(Exception):
pass
class ve_build_ext(build_ext):
# This class allows C extension building to fail.
def run(self):
try:
build_ext.run(self)
except (DistutilsPlatformError, FileNotFoundError):
raise BuildFailed()
def build_extension(self, ext):
try:
build_ext.build_extension(self, ext)
except (CCompilerError, DistutilsExecError, DistutilsPlatformError, ValueError):
raise BuildFailed()
txt = (here / "aiohttp" / "__init__.py").read_text("utf-8")
try:
version = re.findall(r'^__version__ = "([^"]+)"\r?$', txt, re.M)[0]
except IndexError:
raise RuntimeError("Unable to determine version.")
install_requires = [
"attrs>=17.3.0",
"chardet>=2.0,<5.0",
"multidict>=4.5,<7.0",
"async_timeout>=3.0,<4.0",
"yarl>=1.0,<2.0",
'idna-ssl>=1.0; python_version<"3.7"',
"typing_extensions>=3.6.5",
]
def read(f):
return (here / f).read_text("utf-8").strip()
NEEDS_PYTEST = {"pytest", "test"}.intersection(sys.argv)
pytest_runner = ["pytest-runner"] if NEEDS_PYTEST else []
tests_require = [
"pytest",
"gunicorn",
"pytest-timeout",
"async-generator",
"pytest-xdist",
]
args = dict(
name="aiohttp",
version=version,
description="Async http client/server framework (asyncio)",
long_description="\n\n".join((read("README.rst"), read("CHANGES.rst"))),
classifiers=[
"License :: OSI Approved :: Apache Software License",
"Intended Audience :: Developers",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Development Status :: 5 - Production/Stable",
"Operating System :: POSIX",
"Operating System :: MacOS :: MacOS X",
"Operating System :: Microsoft :: Windows",
"Topic :: Internet :: WWW/HTTP",
"Framework :: AsyncIO",
],
author="Nikolay Kim",
author_email="fafhrd91@gmail.com",
maintainer=", ".join(
(
"Nikolay Kim <fafhrd91@gmail.com>",
"Andrew Svetlov <andrew.svetlov@gmail.com>",
)
),
maintainer_email="aio-libs@googlegroups.com",
url="https://github.com/aio-libs/aiohttp",
project_urls={
"Chat: Gitter": "https://gitter.im/aio-libs/Lobby",
"CI: Azure Pipelines": "https://dev.azure.com/aio-libs/aiohttp/_build",
"Coverage: codecov": "https://codecov.io/github/aio-libs/aiohttp",
"Docs: RTD": "https://docs.aiohttp.org",
"GitHub: issues": "https://github.com/aio-libs/aiohttp/issues",
"GitHub: repo": "https://github.com/aio-libs/aiohttp",
},
license="Apache 2",
packages=["aiohttp"],
python_requires=">=3.6",
install_requires=install_requires,
extras_require={
"speedups": [
"aiodns",
"brotlipy",
"cchardet",
],
},
tests_require=tests_require,
setup_requires=pytest_runner,
include_package_data=True,
ext_modules=extensions,
cmdclass=dict(build_ext=ve_build_ext),
)
try:
setup(**args)
except BuildFailed:
print("************************************************************")
print("Cannot compile C accelerator module, use pure python version")
print("************************************************************")
del args["ext_modules"]
del args["cmdclass"]
setup(**args)