mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-30 08:57:11 +00:00
f1a2e03d19
* Change Python version guard: PYTHON < 3.7 IS UNSUPPORTED.
* Replace or remove Python 3.6 jobs.
* Move appveyor to Python 3.8
* Change `[tool.pylint]` `master.py-version` from `3.6` to `3.8`
* Change `[tool.pylint]` `master.py-version` to `3.7`
* Remove `centos:7` job; Change almalinux:8 job to use Python 3.8
* Try 🐍 3.8 • ubuntu-20.04 • x64 without `-DCMAKE_CXX_FLAGS="-D_=1"`
* Update setup.cfg as suggested by @henryiii
* Try running `cmake --build . --target cpptest` on all platforms (`standard` job).
* Disable deadsnakes jobs entirely.
* Apply PR #5179: Add Python 3.10, 3.11, 3.12 to win32 job matrix.
* Add back `-DCMAKE_CXX_FLAGS="-D_=1"` but do not install boost in that case.
* PY_VERSION_HEX < 3.7 cleanup pass: include/pybind11
* WITH_THREAD cleanup pass: include/pybind11
* Undo incorrect change.
* Revert "Disable deadsnakes jobs entirely."
This reverts commit bbcd0087b2
.
* WITH_THREAD cleanup pass: tests/
* Change Python version guard in pybind11/__init__.py: pybind11 does not support Python < 3.7.
* Misc cleanup pass
* chore: use future imports
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* Update tests/test_numpy_array.py
* Update test_numpy_array.py
---------
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>
154 lines
4.1 KiB
Python
154 lines
4.1 KiB
Python
from __future__ import annotations
|
|
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
from textwrap import dedent
|
|
|
|
import pytest
|
|
|
|
DIR = os.path.abspath(os.path.dirname(__file__))
|
|
MAIN_DIR = os.path.dirname(os.path.dirname(DIR))
|
|
WIN = sys.platform.startswith("win32") or sys.platform.startswith("cygwin")
|
|
|
|
|
|
@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(
|
|
f"""\
|
|
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,
|
|
)
|
|
"""
|
|
),
|
|
encoding="ascii",
|
|
)
|
|
|
|
(tmpdir / "main.cpp").write_text(
|
|
dedent(
|
|
"""\
|
|
#include <pybind11/pybind11.h>
|
|
|
|
int f(int x) {
|
|
return x * 3;
|
|
}
|
|
PYBIND11_MODULE(simple_setup, m) {
|
|
m.def("f", &f);
|
|
}
|
|
"""
|
|
),
|
|
encoding="ascii",
|
|
)
|
|
|
|
out = subprocess.check_output(
|
|
[sys.executable, "setup.py", "build_ext", "--inplace"],
|
|
)
|
|
if not WIN:
|
|
assert b"-g0" in out
|
|
out = subprocess.check_output(
|
|
[sys.executable, "setup.py", "build_ext", "--inplace", "--force"],
|
|
env=dict(os.environ, CFLAGS="-g"),
|
|
)
|
|
if not WIN:
|
|
assert b"-g0" not in out
|
|
|
|
# Debug helper printout, normally hidden
|
|
print(out)
|
|
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(
|
|
"""\
|
|
import simple_setup
|
|
assert simple_setup.f(3) == 9
|
|
"""
|
|
),
|
|
encoding="ascii",
|
|
)
|
|
|
|
subprocess.check_call(
|
|
[sys.executable, "test.py"], stdout=sys.stdout, stderr=sys.stderr
|
|
)
|
|
|
|
|
|
def test_intree_extensions(monkeypatch, tmpdir):
|
|
monkeypatch.syspath_prepend(MAIN_DIR)
|
|
|
|
from pybind11.setup_helpers import intree_extensions
|
|
|
|
monkeypatch.chdir(tmpdir)
|
|
root = tmpdir
|
|
root.ensure_dir()
|
|
subdir = root / "dir"
|
|
subdir.ensure_dir()
|
|
src = subdir / "ext.cpp"
|
|
src.ensure()
|
|
relpath = src.relto(tmpdir)
|
|
(ext,) = intree_extensions([relpath])
|
|
assert ext.name == "ext"
|
|
subdir.ensure("__init__.py")
|
|
(ext,) = intree_extensions([relpath])
|
|
assert ext.name == "dir.ext"
|
|
|
|
|
|
def test_intree_extensions_package_dir(monkeypatch, tmpdir):
|
|
monkeypatch.syspath_prepend(MAIN_DIR)
|
|
|
|
from pybind11.setup_helpers import intree_extensions
|
|
|
|
monkeypatch.chdir(tmpdir)
|
|
root = tmpdir / "src"
|
|
root.ensure_dir()
|
|
subdir = root / "dir"
|
|
subdir.ensure_dir()
|
|
src = subdir / "ext.cpp"
|
|
src.ensure()
|
|
(ext,) = intree_extensions([src.relto(tmpdir)], package_dir={"": "src"})
|
|
assert ext.name == "dir.ext"
|
|
(ext,) = intree_extensions([src.relto(tmpdir)], package_dir={"foo": "src"})
|
|
assert ext.name == "foo.dir.ext"
|
|
subdir.ensure("__init__.py")
|
|
(ext,) = intree_extensions([src.relto(tmpdir)], package_dir={"": "src"})
|
|
assert ext.name == "dir.ext"
|
|
(ext,) = intree_extensions([src.relto(tmpdir)], package_dir={"foo": "src"})
|
|
assert ext.name == "foo.dir.ext"
|