From e742dc2a32765a2faa2836cc51c3d18fd1097df6 Mon Sep 17 00:00:00 2001 From: mayeut Date: Tue, 26 Nov 2024 14:02:31 +0100 Subject: [PATCH 1/3] fix: build from sources when forcing build from source --- .github/workflows/build.yml | 5 ++++- _build_backend/backend.py | 28 ++++++++++++++++++++++++++++ pyproject.toml | 17 ++++++++++++----- 3 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 _build_backend/backend.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 40f8b3a..920298d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -128,8 +128,11 @@ jobs: name: cibw-sdist path: sdist + - name: Ensure Ninja not present on the system + run: if which ninja; then false; fi + - name: Install SDist - run: pip install $(ls sdist/*.tar.gz)[test] -Ccmake.define.BUILD_CMAKE_FROM_SOURCE=OFF + run: pip install --no-binary=ninja $(ls sdist/*.tar.gz)[test] -Ccmake.define.BUILD_CMAKE_FROM_SOURCE=OFF - name: Test installed SDist run: pip check && pytest ./tests diff --git a/_build_backend/backend.py b/_build_backend/backend.py new file mode 100644 index 0000000..0b28ac4 --- /dev/null +++ b/_build_backend/backend.py @@ -0,0 +1,28 @@ +from __future__ import annotations + +import os + +from scikit_build_core import build as _orig + +if hasattr(_orig, "prepare_metadata_for_build_editable"): + prepare_metadata_for_build_editable = _orig.prepare_metadata_for_build_editable +if hasattr(_orig, "prepare_metadata_for_build_wheel"): + prepare_metadata_for_build_wheel = _orig.prepare_metadata_for_build_wheel +build_editable = _orig.build_editable +build_wheel = _orig.build_wheel +build_sdist = _orig.build_sdist +get_requires_for_build_editable = _orig.get_requires_for_build_editable +get_requires_for_build_sdist = _orig.get_requires_for_build_sdist + +def get_requires_for_build_wheel(config_settings=None): + packages_orig = _orig.get_requires_for_build_wheel(config_settings) + if os.environ.get("NINJA_PYTHON_DIST_ALLOW_NINJA_DEP", "0") != "0": + return packages_orig + packages = [] + for package in packages_orig: + package_name = package.lower().split(">")[0].strip() + if package_name == "ninja": + # never request ninja from the ninja build + continue + packages.append(package) + return packages diff --git a/pyproject.toml b/pyproject.toml index cee25bc..e73e9a5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,7 @@ [build-system] -requires = ["scikit-build-core"] -build-backend = "scikit_build_core.build" +requires = ["scikit-build-core>=0.10"] +build-backend = "backend" +backend-path = ["_build_backend"] [project] name = "ninja" @@ -50,7 +51,8 @@ Homepage = "http://ninja-build.org/" "Source Code" = "https://github.com/scikit-build/ninja-python-distributions" [tool.scikit-build] -minimum-version = "0.9" +minimum-version = "build-system.requires" +ninja.make-fallback = true build-dir = "build/{wheel_tag}" wheel.py-api = "py3" wheel.expand-macos-universal-tags = true @@ -88,6 +90,7 @@ build-verbosity = 1 test-extras = "test" test-command = "pytest {project}/tests" test-skip = ["*-win_arm64", "*-macosx_universal2:arm64"] +environment = { NINJA_PYTHON_DIST_ALLOW_NINJA_DEP = "1" } environment-pass = ["SETUPTOOLS_SCM_PRETEND_VERSION"] musllinux-x86_64-image = "musllinux_1_1" musllinux-i686-image = "musllinux_1_1" @@ -96,20 +99,24 @@ musllinux-ppc64le-image = "musllinux_1_1" musllinux-s390x-image = "musllinux_1_1" musllinux-armv7l-image = "musllinux_1_2" -[tool.cibuildwheel.macos.environment] -MACOSX_DEPLOYMENT_TARGET = "10.9" +[[tool.cibuildwheel.overrides]] +select = "*-macos*" +inherit.environment = "append" +environment = { MACOSX_DEPLOYMENT_TARGET = "10.9" } [[tool.cibuildwheel.overrides]] select = "*-manylinux_{x86_64,i686}" manylinux-x86_64-image = "manylinux2010" manylinux-i686-image = "manylinux2010" build-frontend = "pip" +inherit.environment = "append" environment = { LDFLAGS = "-static-libstdc++" } inherit.test-command = "prepend" test-command = "pip check" [[tool.cibuildwheel.overrides]] select = "*-musllinux_*" +inherit.environment = "append" environment = { LDFLAGS = "-static-libstdc++ -static-libgcc" } [[tool.cibuildwheel.overrides]] From aa70fba71d41439d215fffaec3408e38917930f4 Mon Sep 17 00:00:00 2001 From: mayeut Date: Sun, 1 Dec 2024 18:53:26 +0100 Subject: [PATCH 2/3] chore: remove unused config setting --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 920298d..301a605 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -132,7 +132,7 @@ jobs: run: if which ninja; then false; fi - name: Install SDist - run: pip install --no-binary=ninja $(ls sdist/*.tar.gz)[test] -Ccmake.define.BUILD_CMAKE_FROM_SOURCE=OFF + run: pip install --no-binary=ninja $(ls sdist/*.tar.gz)[test] - name: Test installed SDist run: pip check && pytest ./tests From 05ecd617b31e9553e1f6bd7e0253a93f11dc8eab Mon Sep 17 00:00:00 2001 From: mayeut Date: Sun, 1 Dec 2024 19:24:43 +0100 Subject: [PATCH 3/3] chore: force reading CMake minimum version from CMakeLists.txt This disables the fallback to `>=3.15` if CMakeLists.txt can't be parsed properly. --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index e73e9a5..8880d90 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -52,6 +52,7 @@ Homepage = "http://ninja-build.org/" [tool.scikit-build] minimum-version = "build-system.requires" +cmake.version = "CMakeLists.txt" # Force parsing version from CMakeLists.txt and disable fallback to '>=3.15' ninja.make-fallback = true build-dir = "build/{wheel_tag}" wheel.py-api = "py3"