diff options
Diffstat (limited to '3rdparty/pybind11/tests/extra_python_package')
| -rw-r--r-- | 3rdparty/pybind11/tests/extra_python_package/test_files.py | 164 | 
1 files changed, 93 insertions, 71 deletions
diff --git a/3rdparty/pybind11/tests/extra_python_package/test_files.py b/3rdparty/pybind11/tests/extra_python_package/test_files.py index cbd4bff1..8e1ddd85 100644 --- a/3rdparty/pybind11/tests/extra_python_package/test_files.py +++ b/3rdparty/pybind11/tests/extra_python_package/test_files.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*-  import contextlib  import os  import string @@ -13,6 +12,16 @@ import zipfile  DIR = os.path.abspath(os.path.dirname(__file__))  MAIN_DIR = os.path.dirname(os.path.dirname(DIR)) +PKGCONFIG = """\ +prefix=${{pcfiledir}}/../../ +includedir=${{prefix}}/include + +Name: pybind11 +Description: Seamless operability between C++11 and Python +Version: {VERSION} +Cflags: -I${{includedir}} +""" +  main_headers = {      "include/pybind11/attr.h", @@ -25,6 +34,7 @@ main_headers = {      "include/pybind11/embed.h",      "include/pybind11/eval.h",      "include/pybind11/functional.h", +    "include/pybind11/gil.h",      "include/pybind11/iostream.h",      "include/pybind11/numpy.h",      "include/pybind11/operators.h", @@ -41,9 +51,14 @@ detail_headers = {      "include/pybind11/detail/descr.h",      "include/pybind11/detail/init.h",      "include/pybind11/detail/internals.h", +    "include/pybind11/detail/type_caster_base.h",      "include/pybind11/detail/typeid.h",  } +stl_headers = { +    "include/pybind11/stl/filesystem.h", +} +  cmake_files = {      "share/cmake/pybind11/FindPythonLibsNew.cmake",      "share/cmake/pybind11/pybind11Common.cmake", @@ -54,19 +69,21 @@ cmake_files = {      "share/cmake/pybind11/pybind11Tools.cmake",  } +pkgconfig_files = { +    "share/pkgconfig/pybind11.pc", +} +  py_files = {      "__init__.py",      "__main__.py",      "_version.py", -    "_version.pyi",      "commands.py",      "py.typed",      "setup_helpers.py", -    "setup_helpers.pyi",  } -headers = main_headers | detail_headers -src_files = headers | cmake_files +headers = main_headers | detail_headers | stl_headers +src_files = headers | cmake_files | pkgconfig_files  all_files = src_files | py_files @@ -75,9 +92,11 @@ sdist_files = {      "pybind11/include",      "pybind11/include/pybind11",      "pybind11/include/pybind11/detail", +    "pybind11/include/pybind11/stl",      "pybind11/share",      "pybind11/share/cmake",      "pybind11/share/cmake/pybind11", +    "pybind11/share/pkgconfig",      "pyproject.toml",      "setup.cfg",      "setup.py", @@ -97,105 +116,106 @@ local_sdist_files = {  } +def read_tz_file(tar: tarfile.TarFile, name: str) -> bytes: +    start = tar.getnames()[0] + "/" +    inner_file = tar.extractfile(tar.getmember(f"{start}{name}")) +    assert inner_file +    with contextlib.closing(inner_file) as f: +        return f.read() + + +def normalize_line_endings(value: bytes) -> bytes: +    return value.replace(os.linesep.encode("utf-8"), b"\n") + +  def test_build_sdist(monkeypatch, tmpdir):      monkeypatch.chdir(MAIN_DIR) -    out = subprocess.check_output( -        [ -            sys.executable, -            "setup.py", -            "sdist", -            "--formats=tar", -            "--dist-dir", -            str(tmpdir), -        ] +    subprocess.run( +        [sys.executable, "-m", "build", "--sdist", f"--outdir={tmpdir}"], check=True      ) -    if hasattr(out, "decode"): -        out = out.decode() -    (sdist,) = tmpdir.visit("*.tar") +    (sdist,) = tmpdir.visit("*.tar.gz") -    with tarfile.open(str(sdist)) as tar: +    with tarfile.open(str(sdist), "r:gz") as tar:          start = tar.getnames()[0] + "/"          version = start[9:-1] -        simpler = set(n.split("/", 1)[-1] for n in tar.getnames()[1:]) +        simpler = {n.split("/", 1)[-1] for n in tar.getnames()[1:]} -        with contextlib.closing( -            tar.extractfile(tar.getmember(start + "setup.py")) -        ) as f: -            setup_py = f.read() +        setup_py = read_tz_file(tar, "setup.py") +        pyproject_toml = read_tz_file(tar, "pyproject.toml") +        pkgconfig = read_tz_file(tar, "pybind11/share/pkgconfig/pybind11.pc") +        cmake_cfg = read_tz_file( +            tar, "pybind11/share/cmake/pybind11/pybind11Config.cmake" +        ) -        with contextlib.closing( -            tar.extractfile(tar.getmember(start + "pyproject.toml")) -        ) as f: -            pyproject_toml = f.read() +    assert ( +        'set(pybind11_INCLUDE_DIR "${PACKAGE_PREFIX_DIR}/include")' +        in cmake_cfg.decode("utf-8") +    ) -    files = set("pybind11/{}".format(n) for n in all_files) +    files = {f"pybind11/{n}" for n in all_files}      files |= sdist_files -    files |= set("pybind11{}".format(n) for n in local_sdist_files) +    files |= {f"pybind11{n}" for n in local_sdist_files}      files.add("pybind11.egg-info/entry_points.txt")      files.add("pybind11.egg-info/requires.txt")      assert simpler == files      with open(os.path.join(MAIN_DIR, "tools", "setup_main.py.in"), "rb") as f:          contents = ( -            string.Template(f.read().decode()) +            string.Template(f.read().decode("utf-8"))              .substitute(version=version, extra_cmd="") -            .encode() +            .encode("utf-8")          ) -        assert setup_py == contents +    assert setup_py == contents      with open(os.path.join(MAIN_DIR, "tools", "pyproject.toml"), "rb") as f:          contents = f.read() -        assert pyproject_toml == contents +    assert pyproject_toml == contents + +    simple_version = ".".join(version.split(".")[:3]) +    pkgconfig_expected = PKGCONFIG.format(VERSION=simple_version).encode("utf-8") +    assert normalize_line_endings(pkgconfig) == pkgconfig_expected  def test_build_global_dist(monkeypatch, tmpdir):      monkeypatch.chdir(MAIN_DIR)      monkeypatch.setenv("PYBIND11_GLOBAL_SDIST", "1") - -    out = subprocess.check_output( -        [ -            sys.executable, -            "setup.py", -            "sdist", -            "--formats=tar", -            "--dist-dir", -            str(tmpdir), -        ] +    subprocess.run( +        [sys.executable, "-m", "build", "--sdist", "--outdir", str(tmpdir)], check=True      ) -    if hasattr(out, "decode"): -        out = out.decode() -    (sdist,) = tmpdir.visit("*.tar") +    (sdist,) = tmpdir.visit("*.tar.gz") -    with tarfile.open(str(sdist)) as tar: +    with tarfile.open(str(sdist), "r:gz") as tar:          start = tar.getnames()[0] + "/"          version = start[16:-1] -        simpler = set(n.split("/", 1)[-1] for n in tar.getnames()[1:]) +        simpler = {n.split("/", 1)[-1] for n in tar.getnames()[1:]} -        with contextlib.closing( -            tar.extractfile(tar.getmember(start + "setup.py")) -        ) as f: -            setup_py = f.read() +        setup_py = read_tz_file(tar, "setup.py") +        pyproject_toml = read_tz_file(tar, "pyproject.toml") +        pkgconfig = read_tz_file(tar, "pybind11/share/pkgconfig/pybind11.pc") +        cmake_cfg = read_tz_file( +            tar, "pybind11/share/cmake/pybind11/pybind11Config.cmake" +        ) -        with contextlib.closing( -            tar.extractfile(tar.getmember(start + "pyproject.toml")) -        ) as f: -            pyproject_toml = f.read() +    assert ( +        'set(pybind11_INCLUDE_DIR "${PACKAGE_PREFIX_DIR}/include")' +        in cmake_cfg.decode("utf-8") +    ) -    files = set("pybind11/{}".format(n) for n in all_files) +    files = {f"pybind11/{n}" for n in all_files}      files |= sdist_files -    files |= set("pybind11_global{}".format(n) for n in local_sdist_files) +    files |= {f"pybind11_global{n}" for n in local_sdist_files}      assert simpler == files      with open(os.path.join(MAIN_DIR, "tools", "setup_global.py.in"), "rb") as f:          contents = (              string.Template(f.read().decode())              .substitute(version=version, extra_cmd="") -            .encode() +            .encode("utf-8")          )          assert setup_py == contents @@ -203,17 +223,21 @@ def test_build_global_dist(monkeypatch, tmpdir):          contents = f.read()          assert pyproject_toml == contents +    simple_version = ".".join(version.split(".")[:3]) +    pkgconfig_expected = PKGCONFIG.format(VERSION=simple_version).encode("utf-8") +    assert normalize_line_endings(pkgconfig) == pkgconfig_expected +  def tests_build_wheel(monkeypatch, tmpdir):      monkeypatch.chdir(MAIN_DIR) -    subprocess.check_output( -        [sys.executable, "-m", "pip", "wheel", ".", "-w", str(tmpdir)] +    subprocess.run( +        [sys.executable, "-m", "pip", "wheel", ".", "-w", str(tmpdir)], check=True      )      (wheel,) = tmpdir.visit("*.whl") -    files = set("pybind11/{}".format(n) for n in all_files) +    files = {f"pybind11/{n}" for n in all_files}      files |= {          "dist-info/LICENSE",          "dist-info/METADATA", @@ -226,10 +250,8 @@ def tests_build_wheel(monkeypatch, tmpdir):      with zipfile.ZipFile(str(wheel)) as z:          names = z.namelist() -    trimmed = set(n for n in names if "dist-info" not in n) -    trimmed |= set( -        "dist-info/{}".format(n.split("/", 1)[-1]) for n in names if "dist-info" in n -    ) +    trimmed = {n for n in names if "dist-info" not in n} +    trimmed |= {f"dist-info/{n.split('/', 1)[-1]}" for n in names if "dist-info" in n}      assert files == trimmed @@ -237,14 +259,14 @@ def tests_build_global_wheel(monkeypatch, tmpdir):      monkeypatch.chdir(MAIN_DIR)      monkeypatch.setenv("PYBIND11_GLOBAL_SDIST", "1") -    subprocess.check_output( -        [sys.executable, "-m", "pip", "wheel", ".", "-w", str(tmpdir)] +    subprocess.run( +        [sys.executable, "-m", "pip", "wheel", ".", "-w", str(tmpdir)], check=True      )      (wheel,) = tmpdir.visit("*.whl") -    files = set("data/data/{}".format(n) for n in src_files) -    files |= set("data/headers/{}".format(n[8:]) for n in headers) +    files = {f"data/data/{n}" for n in src_files} +    files |= {f"data/headers/{n[8:]}" for n in headers}      files |= {          "dist-info/LICENSE",          "dist-info/METADATA", @@ -257,6 +279,6 @@ def tests_build_global_wheel(monkeypatch, tmpdir):          names = z.namelist()      beginning = names[0].split("/", 1)[0].rsplit(".", 1)[0] -    trimmed = set(n[len(beginning) + 1 :] for n in names) +    trimmed = {n[len(beginning) + 1 :] for n in names}      assert files == trimmed  | 
