aboutsummaryrefslogtreecommitdiffstats
path: root/3rdparty/pybind11/tests/extra_setuptools/test_setuphelper.py
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/pybind11/tests/extra_setuptools/test_setuphelper.py')
-rw-r--r--3rdparty/pybind11/tests/extra_setuptools/test_setuphelper.py101
1 files changed, 101 insertions, 0 deletions
diff --git a/3rdparty/pybind11/tests/extra_setuptools/test_setuphelper.py b/3rdparty/pybind11/tests/extra_setuptools/test_setuphelper.py
new file mode 100644
index 00000000..0d8bd0e4
--- /dev/null
+++ b/3rdparty/pybind11/tests/extra_setuptools/test_setuphelper.py
@@ -0,0 +1,101 @@
+# -*- coding: utf-8 -*-
+import os
+import sys
+import subprocess
+from textwrap import dedent
+
+import pytest
+
+DIR = os.path.abspath(os.path.dirname(__file__))
+MAIN_DIR = os.path.dirname(os.path.dirname(DIR))
+
+
+@pytest.mark.parametrize("parallel", [False, True])
+@pytest.mark.parametrize("std", [11, 0])
+def test_simple_setup_py(monkeypatch, tmpdir, parallel, std):
+ monkeypatch.chdir(tmpdir)
+ monkeypatch.syspath_prepend(MAIN_DIR)
+
+ (tmpdir / "setup.py").write_text(
+ dedent(
+ u"""\
+ import sys
+ sys.path.append({MAIN_DIR!r})
+
+ from setuptools import setup, Extension
+ from pybind11.setup_helpers import build_ext, Pybind11Extension
+
+ std = {std}
+
+ ext_modules = [
+ Pybind11Extension(
+ "simple_setup",
+ sorted(["main.cpp"]),
+ cxx_std=std,
+ ),
+ ]
+
+ cmdclass = dict()
+ if std == 0:
+ cmdclass["build_ext"] = build_ext
+
+
+ parallel = {parallel}
+ if parallel:
+ from pybind11.setup_helpers import ParallelCompile
+ ParallelCompile().install()
+
+ setup(
+ name="simple_setup_package",
+ cmdclass=cmdclass,
+ ext_modules=ext_modules,
+ )
+ """
+ ).format(MAIN_DIR=MAIN_DIR, std=std, parallel=parallel),
+ encoding="ascii",
+ )
+
+ (tmpdir / "main.cpp").write_text(
+ dedent(
+ u"""\
+ #include <pybind11/pybind11.h>
+
+ int f(int x) {
+ return x * 3;
+ }
+ PYBIND11_MODULE(simple_setup, m) {
+ m.def("f", &f);
+ }
+ """
+ ),
+ encoding="ascii",
+ )
+
+ subprocess.check_call(
+ [sys.executable, "setup.py", "build_ext", "--inplace"],
+ stdout=sys.stdout,
+ stderr=sys.stderr,
+ )
+
+ # Debug helper printout, normally hidden
+ for item in tmpdir.listdir():
+ print(item.basename)
+
+ assert (
+ len([f for f in tmpdir.listdir() if f.basename.startswith("simple_setup")]) == 1
+ )
+ assert len(list(tmpdir.listdir())) == 4 # two files + output + build_dir
+
+ (tmpdir / "test.py").write_text(
+ dedent(
+ u"""\
+ import simple_setup
+ assert simple_setup.f(3) == 9
+ """
+ ),
+ encoding="ascii",
+ )
+
+ subprocess.check_call(
+ [sys.executable, "test.py"], stdout=sys.stdout, stderr=sys.stderr
+ )