diff options
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | .pre-commit-config.yaml | 19 | ||||
| -rw-r--r-- | Makefile | 120 | ||||
| -rw-r--r-- | python-nanobind.conf | 11 | ||||
| -rw-r--r-- | python-nanobind.spec | 54 | ||||
| -rw-r--r-- | sources | 2 |
6 files changed, 208 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b96494c --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/nanobind-2.4.0.tar.gz +/*.src.rpm diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..f26de03 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,19 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: check-ast + - id: check-case-conflict + - id: check-docstring-first + - id: check-executables-have-shebangs + - id: check-merge-conflict + - id: check-symlinks + - id: trailing-whitespace + - id: end-of-file-fixer + - id: mixed-line-ending + - id: fix-byte-order-marker + - id: detect-private-key + +exclude: ".*\\.patch" diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..8c97ac7 --- /dev/null +++ b/Makefile @@ -0,0 +1,120 @@ +.DEFAULT_GOAL=help + +# See ~/.config/mock/<CONFIG>.cfg or /etc/mock/<CONFIG>.cfg +# Tweak this to centos-stream-9-x86_64 to build for CentOS +MOCK_CHROOT?=fedora-rawhide-x86_64 +MOCK_OPTS?= +MOCK_OPTS_DEFAULT?=--no-clean --no-cleanup-after $(MOCK_OPTS) +YYYYMMDD=$(shell date +%Y%m%d) +SOURCEDIR=$(shell pwd) +SPEC=python-nanobind.spec +# When nothing is given, this will be automatically determined +SRPM_PATH?= + +######### Get sources + +.PHONY: get-sources +## Downloads all sources we need for a build. +get-sources: + spectool -g --define "_sourcedir $(SOURCEDIR)" $(SPEC) + +######### Build SRPM + +.PHONY: srpm +## Builds an SRPM that can be used for a build. +srpm: get-sources + rpmbuild \ + --define "_rpmdir $(SOURCEDIR)" \ + --define "_sourcedir $(SOURCEDIR)" \ + --define "_specdir $(SOURCEDIR)" \ + --define "_srcrpmdir $(SOURCEDIR)" \ + --define "_builddir $(SOURCEDIR)" \ + -bs $(SPEC) + +######### Scrub mock chroot and cache + +.PHONY: scrub-chroot +## Completely remove the fedora chroot and cache. +scrub-chroot: + mock -r $(MOCK_CHROOT) --scrub all + +######### Do a mock build + +.PHONY: mockbuild +## Start a mock build of the SRPM. +mockbuild: srpm get-srpm + mock -r $(MOCK_CHROOT) $(MOCK_OPTS_DEFAULT) $(srpm_path) + +######### Edit-last-failing-script + +.PHONY: get-last-run-script +## Get the file that was last modified in /var/tmp/ within the chroot. +get-last-run-script: + $(eval last_run_script:=/var/tmp/$(shell ls -t1 /var/lib/mock/$(MOCK_CHROOT)/root/var/tmp | head -n1)) + $(info last_run_script=$(last_run_script)) + @echo > /dev/null + +.PHONY: edit-last-failing-script +## Opens the last failing or running script from mock in your editor +## of choice for you to edit it and later re-run it in mock with: +## "make mockbuild-rerun-last-script". +edit-last-failing-script: get-last-run-script + $$EDITOR /var/lib/mock/$(MOCK_CHROOT)/root$(last_run_script) + +######### Re-run the last failing script from mock + +.PHONY: mockbuild-rerun-last-script +## Re-runs the last failing or running script of your mock mockbuild. +mockbuild-rerun-last-script: get-last-run-script + mock --root=$(MOCK_CHROOT) --shell 'sh -e $(last_run_script)' + +.PHONY: help +# Based on https://gist.github.com/rcmachado/af3db315e31383502660 +## Display this help text. +help:/ + $(info Available targets) + $(info -----------------) + @awk '/^[a-zA-Z\-0-9]+:/ { \ + helpMessage = match(lastLine, /^## (.*)/); \ + helpCommand = substr($$1, 0, index($$1, ":")-1); \ + if (helpMessage) { \ + helpMessage = substr(lastLine, RSTART + 3, RLENGTH); \ + gsub(/##/, "\n ", helpMessage); \ + } else { \ + helpMessage = "(No documentation)"; \ + } \ + printf "%-37s - %s\n", helpCommand, helpMessage; \ + lastLine = "" \ + } \ + { hasComment = match(lastLine, /^## (.*)/); \ + if(hasComment) { \ + lastLine=lastLine$$0; \ + } \ + else { \ + lastLine = $$0 \ + } \ + }' $(MAKEFILE_LIST) + +######### Version/Release helper targets to build name of SRPM + +.PHONY: get-version +## Determines the LLVM version given in the llvm.spec file. +get-version: + $(eval version:=$(shell grep -ioP 'Version:\s*\K[^\s]+' $(SPEC))) + $(info Version: $(version)) + @echo > /dev/null + +.PHONY: get-release +## Parses the spec file for the Release: tag +get-release: + $(eval release:=$(shell rpmautospec calculate-release $(SPEC) | grep -Po '[0-9]+')) + $(info Release: $(release)) + @echo > /dev/null + +.PHONY: get-srpm +## Determines the name of the SRPM used for release builds +## Can be overriden by giving "make ... SRPM_PATH=foo.src.rpm". +get-srpm: get-version get-release + $(eval srpm_path:=python-nanobind-${version}-${release}.*.src.rpm) + $(info SRPM Release: $(srpm_path)) + @echo > /dev/null
\ No newline at end of file diff --git a/python-nanobind.conf b/python-nanobind.conf new file mode 100644 index 0000000..8e5c4f4 --- /dev/null +++ b/python-nanobind.conf @@ -0,0 +1,11 @@ +automode = true +archful = false +summary = "nanobind: tiny and efficient C++/Python bindings" +pypi_version = "2.4.0" +pypi_name = "nanobind" +python_name = "python-nanobind" +url = "https://github.com/wjakob/nanobind" +source = "PyPI" +archive_name = "nanobind-2.4.0.tar.gz" +extras = [] +license_files_present = false diff --git a/python-nanobind.spec b/python-nanobind.spec new file mode 100644 index 0000000..a4fa552 --- /dev/null +++ b/python-nanobind.spec @@ -0,0 +1,54 @@ +Name: python-nanobind +Version: 2.4.0 +Release: %autorelease +Summary: nanobind: tiny and efficient C++/Python bindings + +License: BSD +URL: https://github.com/wjakob/nanobind +Source: %{pypi_source nanobind} + +BuildArch: noarch +BuildRequires: python3-devel + +%global _description %{expand: +nanobind is a small binding library that exposes C++ types +in Python and vice versa. It is reminiscent of Boost.Python +and pybind11 and uses near-identical syntax. +In contrast to these existing tools, nanobind is more +efficient: bindings compile in a shorter amount of time, +produce smaller binaries, and have better runtime performance.} + +%description %_description + +%package -n python3-nanobind +Summary: %{summary} + +%description -n python3-nanobind %_description + +%prep +%autosetup -p1 -n nanobind-%{version} + +%generate_buildrequires +%pyproject_buildrequires -t + + +%build +%pyproject_wheel + + +%install +%pyproject_install +%pyproject_save_files 'nanobind' + + +%check +%_pyproject_check_import_allow_no_modules -t +%tox -- --parallel 0 -- --verbose + + +%files -n python3-nanobind -f %{pyproject_files} +%license LICENSE + + +%changelog +%autochangelog
\ No newline at end of file @@ -0,0 +1,2 @@ +SHA512 (nanobind-2.4.0.tar.gz) = a380254d58b3fda540b6b58a25207f7022d66de51a6622cca9eb02b206658e5fc4dafb6e569877c5810a7ecd374a86e8b84ffe5c810414e131b40b5266c91a52 + |
