diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..ca54b9b
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,113 @@
+# Progress Linux: dokuwiki-templates-extra
+
+# Copyright (C) 2024 Daniel Baumann <daniel.baumann@progress-linux.org>
+#
+# SPDX-License-Identifier: GPL-3.0+
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+SHELL := sh -e
+
+SOFTWARE = dokuwiki-templates-extra
+VERSION := $(shell cat VERSION.txt)
+
+TEMPLATES_VERSION := current
+
+templates-%:
+	@cd templates/$(TEMPLATES_VERSION); \
+	for TEMPLATE in *.mk;  \
+	do \
+		echo "################################################################################"; \
+		echo "$${TEMPLATE}: $$(echo ${@} | cut -d- -f2-)"; \
+		echo "################################################################################"; \
+		$(MAKE) -f $${TEMPLATE} $$(echo ${@} | cut -d- -f2-); \
+	done
+
+package-test:
+
+package-build: share/man/*.rst
+	$(MAKE) -C share/man
+
+	sed -n '/^===/,$$p' share/man/$(SOFTWARE).7.rst > README.txt
+
+package-install: package-build
+	mkdir -p $(DESTDIR)/usr/share/doc/$(SOFTWARE)
+	cp -r CHANGELOG.txt LICENSE.txt README.txt share/doc/* $(DESTDIR)/usr/share/doc/$(SOFTWARE)
+
+	for SECTION in $$(seq 1 8); \
+	do \
+		if ls share/man/*.$${SECTION} > /dev/null 2>&1; \
+		then \
+			mkdir -p $(DESTDIR)/usr/share/man/man$${SECTION}; \
+			cp share/man/*.$${SECTION} $(DESTDIR)/usr/share/man/man$${SECTION}; \
+		fi; \
+	done
+
+package-uninstall:
+	for SECTION in $$(seq 1 8); \
+	do \
+		for FILE in share/man/*.$${SECTION}; \
+		do \
+			rm -f $(DESTDIR)/usr/share/man/man$${SECTION}/$$(basename $${FILE}); \
+		done; \
+		rmdir --ignore-fail-on-non-empty --parents $(DESTDIR)/usr/share/man/man$${SECTION} || true; \
+	done
+
+	rm -rf $(DESTDIR)/usr/share/doc/$(SOFTWARE)
+	rmdir --ignore-fail-on-non-empty --parents $(DESTDIR)/usr/share/doc || true
+
+	rmdir --ignore-fail-on-non-empty --parents $(DESTDIR) || true
+
+package-clean:
+	$(MAKE) -C share/man clean
+
+	rm -f README.txt
+
+all: build
+
+test: templates-test package-test
+
+build: templates-build package-build
+
+install: templates-install package-install
+
+uninstall: templates-uninstall package-uninstall
+
+clean: templates-clean package-clean
+
+distclean: clean
+	rm -rf $(SOFTWARE)-$(VERSION)
+
+reinstall: uninstall install
+
+release: distclean
+	git commit -a -s -S -m 'Releasing version $(VERSION).' || true
+	git tag -s -m 'Tagging version $(VERSION).' v$(VERSION) || true
+
+	mkdir -p $(SOFTWARE)-$(VERSION)
+	find . -mindepth 1 -maxdepth 1 -and -not -name ".git*" -and -not -name debian -and -not -name $(SOFTWARE)-$(VERSION) -exec cp \-a {} $(SOFTWARE)-$(VERSION) \;
+
+	for FORMAT in xz lzip; \
+	do \
+		TEMPLATE=$$(echo $${FORMAT} | cut -b-2); \
+		tar --$${FORMAT} -cf ../$(SOFTWARE)-$(VERSION).tar.$${TEMPLATE} $(SOFTWARE)-$(VERSION); \
+		sha512sum ../$(SOFTWARE)-$(VERSION).tar.$${TEMPLATE} > ../$(SOFTWARE)-$(VERSION).tar.$${TEMPLATE}.sha512; \
+		gpg --default-key 0x3E6CA28DAAF8DD14 --armor -b ../$(SOFTWARE)-$(VERSION).tar.$${TEMPLATE}; \
+		mv ../$(SOFTWARE)-$(VERSION).tar.$${TEMPLATE}.asc ../$(SOFTWARE)-$(VERSION).tar.$${TEMPLATE}.sig; \
+	done
+
+	rm -rf $(SOFTWARE)-$(VERSION)
+
+upload:
+	scp ../$(SOFTWARE)-$(VERSION).* get.progress-linux.org:/srv/get.progress-linux.org/packages/$(SOFTWARE)/upstream