[build-system] requires = ["scikit-build-core>=0.11", "nanobind>=2.7"] build-backend = "scikit_build_core.build" [project] name = "n3xd-ocp" # .N, so the kernel a wheel wraps is readable from its version # alone and occt_version() keeps reporting the truth. Iteration builds carry a # .devN suffix: the registry never allows republishing a version, and its # cleanup rule collects only the dev ones. CMake asserts the prefix matches # the OCCT it found. version = "7.9.3.1.dev5" description = "nanobind bindings for the OpenCASCADE geometry kernel (drop-in OCP)" readme = "README.md" requires-python = ">=3.12" license = { text = "LGPL-2.1-only" } authors = [{ name = "N3XD" }] classifiers = [ "Private :: Do Not Upload", "Programming Language :: Python :: 3.12", "Programming Language :: C++", ] [project.urls] Repository = "https://git.stroblme.de/N3XD/ocp" [tool.scikit-build] minimum-version = "0.11" build-dir = "build/{wheel_tag}" wheel.packages = ["python/OCP", "python/n3xd_ocp"] # Stubs are generated during the build and gitignored, and file selection is # git-based by default — so they must be re-included by hand or the wheel ships # without the typing surface that retires the backend's ty suppression. sdist.include = ["python/OCP/*.pyi", "python/n3xd_ocp/*.pyi"] # abi3 from day one, matching the forge/assay convention: one wheel spans 3.12 # and 3.13, so the interpreter bump (roadmap 10D) needs no rebuild here. wheel.py-api = "cp312" # No sdist is ever published — it could not build without the OCCT builder # image, and offering one would invite the production host (4 cores) to try. # That is enforced by only ever building wheels (scripts/build_wheel.sh) rather # than by an exclude rule here: scikit-build-core feeds sdist.exclude into the # wheel's package-file mapping too, so excluding "*" silently ships a wheel # with the compiled extension and none of the Python package. [tool.pytest.ini_options] testpaths = ["tests"]