Setuptools

A setuptools plugin is being developed for scikit-build-core, primarily to enable scikit-build-core to be the build backend for scikit-build (classic).

Warning

This plugin is experimental, and will probably be moved to a separate package. If using it, it is probably best to upper-cap scikit-build-core until it moves.

Basic usage

To use the plugin, make sure you have both setuptools and scikit-build-core in your build-system.requires table. You can use either setuptools.build_meta or scikit-build-core.setuptools.build_meta as build-system.build-backend, but the latter will give you the auto-inclusion of cmake and ninja as needed, so it is recommended.

[build-system]
requires = ["scikit-build-core", "setuptools"]
build-backend = "scikit_build_core.setuptools.build_meta"

Depending on how you like configuring setuptools, you can specify a project table, or use setup.cfg, or setup.py. However, you need at least this minimal setup.py present:

from setuptools import setup

setup(cmake_source_dir=".")

The presence of the cmake_source_dir option will tell the scikit-build setuptools plugin that it can activate for this package.

Options

These are the currently supported setup.py options:

  • cmake_source_dir: The location of your CMakeLists.txt. Required.

  • cmake_args: Arguments to include when configuring.

These options from scikit-build (classic) are not currently supported: cmake_install_dir, cmake_with_sdist, cmake_process_manifest_hook, and cmake_install_target. cmake_languages has no effect. And cmake_minimum_requires_version is now specified via pyproject.toml config, so has no effect here.

A compatibility shim, scikit_build_core.setuptools.wrapper.setup is provided; it will eventually behave as close to scikit-build (classic)’s skbuild.setup as possible.

Configuration

All other configuration is available as normal tool.scikit-build in pyproject.toml or environment variables as applicable. Config-settings is not supported, as setuptools has very poor support for config-settings. Eventually, the build hook might pre-process options, but it’s tricky to pass them through, so it will probably require use cases to be presented.