1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
from __future__ import annotations
import os
import shutil
import sysconfig
from pathlib import Path
import pytest
from packaging.specifiers import SpecifierSet
from scikit_build_core.cmake import CMake, CMaker
from scikit_build_core.file_api._cattrs_converter import (
load_reply_dir as load_reply_dir_cattrs,
)
from scikit_build_core.file_api.query import stateless_query
from scikit_build_core.file_api.reply import load_reply_dir
DIR = Path(__file__).parent.absolute()
has_make = shutil.which("make") is not None or shutil.which("gmake") is not None
has_ninja = shutil.which("ninja") is not None
def prepare_env_or_skip() -> None:
if (
"CMAKE_GENERATOR" not in os.environ
and not sysconfig.get_platform().startswith("win")
and not has_make
):
if has_ninja:
os.environ["CMAKE_GENERATOR"] = "Ninja"
else:
pytest.skip("No build system found")
@pytest.mark.configure
def test_cattrs_comparison(tmp_path):
build_dir = tmp_path / "build"
cmake = CMake.default_search(version=SpecifierSet(">=3.15"))
config = CMaker(
cmake,
source_dir=DIR / "packages/simple_pure",
build_dir=build_dir,
build_type="Release",
)
reply_dir = stateless_query(config.build_dir)
config.configure()
cattrs_index = load_reply_dir_cattrs(reply_dir)
index = load_reply_dir(reply_dir)
assert index == cattrs_index
# TODO: Why is this an IndexError?
def test_no_index(tmp_path):
with pytest.raises(IndexError):
load_reply_dir(tmp_path)
with pytest.raises(IndexError):
load_reply_dir_cattrs(tmp_path)
@pytest.mark.configure
def test_simple_pure(tmp_path):
build_dir = tmp_path / "build"
cmake = CMake.default_search(version=SpecifierSet(">=3.15"))
config = CMaker(
cmake,
source_dir=DIR / "packages/simple_pure",
build_dir=build_dir,
build_type="Release",
)
reply_dir = stateless_query(config.build_dir)
config.configure()
index = load_reply_dir(reply_dir)
codemodel = index.reply.codemodel_v2
assert codemodel is not None
cache = index.reply.cache_v2
assert cache is not None
cmakefiles = index.reply.cmakefiles_v1
assert cmakefiles is not None
toolchains = index.reply.toolchains_v1
assert toolchains is not None
def test_included_dir():
reply_dir = DIR / "api/simple_pure/.cmake/api/v1/reply"
index = load_reply_dir(reply_dir)
assert index.cmake.version.string == "3.24.1"
assert index.cmake.generator.name == "Ninja"
assert len(index.objects) == 4
codemodel = index.reply.codemodel_v2
assert codemodel is not None
assert codemodel.kind == "codemodel"
assert codemodel.version.major == 2
assert codemodel.version.minor == 4
assert not codemodel.configurations[0].name
cache = index.reply.cache_v2
assert cache is not None
cmakefiles = index.reply.cmakefiles_v1
assert cmakefiles is not None
toolchains = index.reply.toolchains_v1
assert toolchains is not None
|