summaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile122
1 files changed, 122 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..5a8b51d
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,122 @@
+.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
+ fedpkg --release f40 srpm
+
+# 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