chore: use scikit-build-core for the build (#5598)

* chore: use scikit-build-core for the build

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* fix: support tests job

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* refactor: use tomlkit instead of manual parsing

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* tests: add tests for output

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* chore: remove more unused files

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* fix: restore global pin

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* fix: test and fix pinning

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
This commit is contained in:
Henry Schreiner
2025-05-15 14:39:23 -04:00
committed by GitHub
parent 6aa3b335f4
commit af231a6054
17 changed files with 371 additions and 469 deletions

33
tools/make_global.py Executable file
View File

@@ -0,0 +1,33 @@
#!/usr/bin/env -S uv run -q
# /// script
# dependencies = ["tomlkit"]
# ///
from __future__ import annotations
from pathlib import Path
import tomlkit
DIR = Path(__file__).parent.resolve()
PYPROJECT = DIR.parent / "pyproject.toml"
def get_global() -> str:
pyproject = tomlkit.parse(PYPROJECT.read_text())
del pyproject["tool"]["scikit-build"]["generate"]
del pyproject["project"]["entry-points"]
del pyproject["project"]["scripts"]
del pyproject["tool"]["scikit-build"]["metadata"]["optional-dependencies"]
pyproject["project"]["name"] = "pybind11-global"
pyproject["tool"]["scikit-build"]["experimental"] = True
pyproject["tool"]["scikit-build"]["wheel"]["install-dir"] = "/data"
pyproject["tool"]["scikit-build"]["wheel"]["packages"] = []
result = tomlkit.dumps(pyproject)
assert isinstance(result, str)
return result
if __name__ == "__main__":
print(get_global())

View File

@@ -1,3 +0,0 @@
[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"

View File

@@ -1,66 +0,0 @@
#!/usr/bin/env python3
# Setup script for pybind11-global (in the sdist or in tools/setup_global.py in the repository)
# This package is targeted for easy use from CMake.
import glob
import os
import re
# Setuptools has to be before distutils
from setuptools import setup
from distutils.command.install_headers import install_headers
class InstallHeadersNested(install_headers):
def run(self):
headers = self.distribution.headers or []
for header in headers:
# Remove pybind11/include/
short_header = header.split("/", 2)[-1]
dst = os.path.join(self.install_dir, os.path.dirname(short_header))
self.mkpath(dst)
(out, _) = self.copy_file(header, dst)
self.outfiles.append(out)
main_headers = glob.glob("pybind11/include/pybind11/*.h")
conduit_headers = sum([glob.glob(f"pybind11/include/pybind11/conduit/*.{ext}")
for ext in ("h", "txt")], [])
detail_headers = glob.glob("pybind11/include/pybind11/detail/*.h")
eigen_headers = glob.glob("pybind11/include/pybind11/eigen/*.h")
stl_headers = glob.glob("pybind11/include/pybind11/stl/*.h")
cmake_files = glob.glob("pybind11/share/cmake/pybind11/*.cmake")
pkgconfig_files = glob.glob("pybind11/share/pkgconfig/*.pc")
headers = main_headers + conduit_headers + detail_headers + eigen_headers + stl_headers
cmdclass = {"install_headers": InstallHeadersNested}
$extra_cmd
# This will _not_ affect installing from wheels,
# only building wheels or installing from SDist.
# Primarily intended on Windows, where this is sometimes
# customized (for example, conda-forge uses Library/)
base = os.environ.get("PYBIND11_GLOBAL_PREFIX", "")
# Must have a separator
if base and not base.endswith("/"):
base += "/"
setup(
name="pybind11_global",
version="$version",
packages=[],
headers=headers,
data_files=[
(base + "share/cmake/pybind11", cmake_files),
(base + "share/pkgconfig", pkgconfig_files),
(base + "include/pybind11", main_headers),
(base + "include/pybind11/conduit", conduit_headers),
(base + "include/pybind11/detail", detail_headers),
(base + "include/pybind11/eigen", eigen_headers),
(base + "include/pybind11/stl", stl_headers),
],
cmdclass=cmdclass,
)

View File

@@ -1,50 +0,0 @@
#!/usr/bin/env python3
# Setup script (in the sdist or in tools/setup_main.py in the repository)
from setuptools import setup
cmdclass = {}
$extra_cmd
setup(
name="pybind11",
version="$version",
download_url='https://github.com/pybind/pybind11/tarball/v$version',
packages=[
"pybind11",
"pybind11.include.pybind11",
"pybind11.include.pybind11.conduit",
"pybind11.include.pybind11.detail",
"pybind11.include.pybind11.eigen",
"pybind11.include.pybind11.stl",
"pybind11.share",
"pybind11.share.cmake.pybind11",
"pybind11.share.pkgconfig",
],
package_data={
"pybind11": ["py.typed"],
"pybind11.include.pybind11": ["*.h"],
"pybind11.include.pybind11.conduit": ["*.h", "*.txt"],
"pybind11.include.pybind11.detail": ["*.h"],
"pybind11.include.pybind11.eigen": ["*.h"],
"pybind11.include.pybind11.stl": ["*.h"],
"pybind11.share.cmake.pybind11": ["*.cmake"],
"pybind11.share.pkgconfig": ["*.pc"],
},
extras_require={
"global": ["pybind11_global==$version"]
},
entry_points={
"console_scripts": [
"pybind11-config = pybind11.__main__:main",
],
"pipx.run": [
"pybind11 = pybind11.__main__:main",
],
"pkg_config": [
"pybind11 = pybind11.share.pkgconfig",
],
},
cmdclass=cmdclass
)