github.com/kaydxh/golang@v0.0.131/pkg/gocv/cgo/third_path/pybind11/tests/extra_setuptools/test_setuphelper.py (about) 1 import os 2 import subprocess 3 import sys 4 from textwrap import dedent 5 6 import pytest 7 8 DIR = os.path.abspath(os.path.dirname(__file__)) 9 MAIN_DIR = os.path.dirname(os.path.dirname(DIR)) 10 WIN = sys.platform.startswith("win32") or sys.platform.startswith("cygwin") 11 12 13 @pytest.mark.parametrize("parallel", [False, True]) 14 @pytest.mark.parametrize("std", [11, 0]) 15 def test_simple_setup_py(monkeypatch, tmpdir, parallel, std): 16 monkeypatch.chdir(tmpdir) 17 monkeypatch.syspath_prepend(MAIN_DIR) 18 19 (tmpdir / "setup.py").write_text( 20 dedent( 21 f"""\ 22 import sys 23 sys.path.append({MAIN_DIR!r}) 24 25 from setuptools import setup, Extension 26 from pybind11.setup_helpers import build_ext, Pybind11Extension 27 28 std = {std} 29 30 ext_modules = [ 31 Pybind11Extension( 32 "simple_setup", 33 sorted(["main.cpp"]), 34 cxx_std=std, 35 ), 36 ] 37 38 cmdclass = dict() 39 if std == 0: 40 cmdclass["build_ext"] = build_ext 41 42 43 parallel = {parallel} 44 if parallel: 45 from pybind11.setup_helpers import ParallelCompile 46 ParallelCompile().install() 47 48 setup( 49 name="simple_setup_package", 50 cmdclass=cmdclass, 51 ext_modules=ext_modules, 52 ) 53 """ 54 ), 55 encoding="ascii", 56 ) 57 58 (tmpdir / "main.cpp").write_text( 59 dedent( 60 """\ 61 #include <pybind11/pybind11.h> 62 63 int f(int x) { 64 return x * 3; 65 } 66 PYBIND11_MODULE(simple_setup, m) { 67 m.def("f", &f); 68 } 69 """ 70 ), 71 encoding="ascii", 72 ) 73 74 out = subprocess.check_output( 75 [sys.executable, "setup.py", "build_ext", "--inplace"], 76 ) 77 if not WIN: 78 assert b"-g0" in out 79 out = subprocess.check_output( 80 [sys.executable, "setup.py", "build_ext", "--inplace", "--force"], 81 env=dict(os.environ, CFLAGS="-g"), 82 ) 83 if not WIN: 84 assert b"-g0" not in out 85 86 # Debug helper printout, normally hidden 87 print(out) 88 for item in tmpdir.listdir(): 89 print(item.basename) 90 91 assert ( 92 len([f for f in tmpdir.listdir() if f.basename.startswith("simple_setup")]) == 1 93 ) 94 assert len(list(tmpdir.listdir())) == 4 # two files + output + build_dir 95 96 (tmpdir / "test.py").write_text( 97 dedent( 98 """\ 99 import simple_setup 100 assert simple_setup.f(3) == 9 101 """ 102 ), 103 encoding="ascii", 104 ) 105 106 subprocess.check_call( 107 [sys.executable, "test.py"], stdout=sys.stdout, stderr=sys.stderr 108 ) 109 110 111 def test_intree_extensions(monkeypatch, tmpdir): 112 monkeypatch.syspath_prepend(MAIN_DIR) 113 114 from pybind11.setup_helpers import intree_extensions 115 116 monkeypatch.chdir(tmpdir) 117 root = tmpdir 118 root.ensure_dir() 119 subdir = root / "dir" 120 subdir.ensure_dir() 121 src = subdir / "ext.cpp" 122 src.ensure() 123 relpath = src.relto(tmpdir) 124 (ext,) = intree_extensions([relpath]) 125 assert ext.name == "ext" 126 subdir.ensure("__init__.py") 127 (ext,) = intree_extensions([relpath]) 128 assert ext.name == "dir.ext" 129 130 131 def test_intree_extensions_package_dir(monkeypatch, tmpdir): 132 monkeypatch.syspath_prepend(MAIN_DIR) 133 134 from pybind11.setup_helpers import intree_extensions 135 136 monkeypatch.chdir(tmpdir) 137 root = tmpdir / "src" 138 root.ensure_dir() 139 subdir = root / "dir" 140 subdir.ensure_dir() 141 src = subdir / "ext.cpp" 142 src.ensure() 143 (ext,) = intree_extensions([src.relto(tmpdir)], package_dir={"": "src"}) 144 assert ext.name == "dir.ext" 145 (ext,) = intree_extensions([src.relto(tmpdir)], package_dir={"foo": "src"}) 146 assert ext.name == "foo.dir.ext" 147 subdir.ensure("__init__.py") 148 (ext,) = intree_extensions([src.relto(tmpdir)], package_dir={"": "src"}) 149 assert ext.name == "dir.ext" 150 (ext,) = intree_extensions([src.relto(tmpdir)], package_dir={"foo": "src"}) 151 assert ext.name == "foo.dir.ext"