67 lines
1.6 KiB
Python
67 lines
1.6 KiB
Python
"""Build optional cython modules."""
|
|
|
|
import logging
|
|
import os
|
|
from distutils.command.build_ext import build_ext
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
try:
|
|
from setuptools import Extension
|
|
except ImportError:
|
|
from distutils.core import Extension
|
|
|
|
|
|
TO_CYTHONIZE = [
|
|
"src/dbus_fast/aio/message_reader.py",
|
|
"src/dbus_fast/message.py",
|
|
"src/dbus_fast/message_bus.py",
|
|
"src/dbus_fast/service.py",
|
|
"src/dbus_fast/signature.py",
|
|
"src/dbus_fast/unpack.py",
|
|
"src/dbus_fast/_private/address.py",
|
|
"src/dbus_fast/_private/marshaller.py",
|
|
"src/dbus_fast/_private/unmarshaller.py",
|
|
]
|
|
|
|
EXTENSIONS = [
|
|
Extension(
|
|
ext.removeprefix("src/").removesuffix(".py").replace("/", "."),
|
|
[ext],
|
|
language="c",
|
|
extra_compile_args=["-O3", "-g0"],
|
|
)
|
|
for ext in TO_CYTHONIZE
|
|
]
|
|
|
|
|
|
class BuildExt(build_ext):
|
|
def build_extensions(self):
|
|
try:
|
|
super().build_extensions()
|
|
except Exception:
|
|
_LOGGER.debug("Failed to build extensions", exc_info=True)
|
|
|
|
|
|
def build(setup_kwargs):
|
|
if os.environ.get("SKIP_CYTHON", False):
|
|
return
|
|
try:
|
|
from Cython.Build import cythonize
|
|
|
|
setup_kwargs.update(
|
|
{
|
|
"ext_modules": cythonize(
|
|
EXTENSIONS,
|
|
compiler_directives={"language_level": "3"}, # Python 3
|
|
),
|
|
"cmdclass": {"build_ext": BuildExt},
|
|
}
|
|
)
|
|
setup_kwargs["exclude_package_data"] = {
|
|
pkg: ["*.c"] for pkg in setup_kwargs["packages"]
|
|
}
|
|
except Exception:
|
|
if os.environ.get("REQUIRE_CYTHON"):
|
|
raise
|