Source code for scikit_build_core.setuptools.wrapper

from __future__ import annotations

__lazy_modules__ = {
    f"{(__spec__.parent or '').rsplit('.', 1)[0]}._compat.setuptools.errors",
    f"{__spec__.parent}.build_cmake",
    "pathlib",
    "typing",
    "warnings",
}

import warnings
from pathlib import Path
from typing import Any, cast

import setuptools

from .._compat.setuptools.errors import SetupError
from .._compat.typing import TypeVar
from .build_cmake import WRAPPER_COMPAT

TYPE_CHECKING = False
if TYPE_CHECKING:
    from collections.abc import Callable, Sequence

__all__ = ["setup"]


def __dir__() -> list[str]:
    return __all__


_DistributionT = TypeVar(
    "_DistributionT",
    bound="setuptools._distutils.dist.Distribution",
    default=setuptools.Distribution,
)


[docs] def setup( *, cmake_args: Sequence[str] = (), cmake_install_dir: str = "", cmake_source_dir: str = "", cmake_with_sdist: bool = False, cmake_languages: Sequence[str] | None = None, cmake_minimum_required_version: str | None = None, cmake_process_manifest_hook: Callable[[list[str]], list[str]] | None = None, cmake_install_target: str = "install", distclass: type[_DistributionT] = setuptools.Distribution, # type: ignore[assignment] **kw: Any, ) -> _DistributionT: if cmake_with_sdist: msg = "cmake_with_sdist not supported yet" raise SetupError(msg) if cmake_languages is not None: warnings.warn("cmake_languages no longer has any effect", stacklevel=2) if cmake_minimum_required_version is not None: warnings.warn("Set via pyproject.toml", stacklevel=2) # Classic scikit-build builds projects without a CMakeLists.txt as plain # setuptools projects. A nonexistent cmake_source_dir still errors via the # cmake_source_dir keyword validator below. source_dir = Path(cmake_source_dir or ".") if source_dir.is_dir() and not source_dir.joinpath("CMakeLists.txt").is_file(): print("skipping skbuild (no CMakeLists.txt found)", flush=True) # noqa: T201 return setuptools.setup(distclass=distclass, **kw) distribution_class = cast( "type[_DistributionT]", type( "DistributionClass", (distclass,), {WRAPPER_COMPAT: True}, ), ) if isinstance(cmake_args, str): msg = "cmake_args must be a list, not a string" raise TypeError(msg) return setuptools.setup( cmake_source_dir=cmake_source_dir, cmake_with_sdist=cmake_with_sdist, cmake_args=list(cmake_args), cmake_install_dir=cmake_install_dir, cmake_install_target=cmake_install_target, cmake_process_manifest_hook=cmake_process_manifest_hook, distclass=distribution_class, **kw, )