blob: 1faacc8fc136b1e686ee7ed06c4c68b6c481d5ed [file] [log] [blame] [edit]
"""Build script for mypyc C runtime library unit tests.
The tests are written in C++ and use the Google Test framework.
"""
from __future__ import annotations
import os
import subprocess
import sys
from distutils.command.build_ext import build_ext
from distutils.core import Extension, setup
from typing import Any
kwargs: dict[str, Any]
if sys.platform == "darwin":
kwargs = {"language": "c++"}
compile_args = []
else:
kwargs = {}
compile_args = ["--std=c++11"]
class build_ext_custom(build_ext): # noqa: N801
def get_library_names(self):
return ["gtest"]
def run(self):
gtest_dir = os.path.abspath(
os.path.join(os.path.dirname(__file__), "..", "external", "googletest")
)
os.makedirs(self.build_temp, exist_ok=True)
# Build Google Test, the C++ framework we use for testing C code.
# The source code for Google Test is copied to this repository.
subprocess.check_call(
["make", "-f", os.path.join(gtest_dir, "make", "Makefile"), f"GTEST_DIR={gtest_dir}"],
cwd=self.build_temp,
)
self.library_dirs = [self.build_temp]
return build_ext.run(self)
setup(
name="test_capi",
version="0.1",
ext_modules=[
Extension(
"test_capi",
[
"test_capi.cc",
"init.c",
"int_ops.c",
"float_ops.c",
"list_ops.c",
"exc_ops.c",
"generic_ops.c",
"pythonsupport.c",
],
depends=["CPy.h", "mypyc_util.h", "pythonsupport.h"],
extra_compile_args=["-Wno-unused-function", "-Wno-sign-compare"] + compile_args,
libraries=["gtest"],
include_dirs=["../external/googletest", "../external/googletest/include"],
**kwargs,
)
],
cmdclass={"build_ext": build_ext_custom},
)