summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Colomar <alx@kernel.org>2024-02-06 20:38:26 +0100
committerAlejandro Colomar <alx@kernel.org>2024-02-06 20:47:38 +0100
commit00367bc4b7a0ede6fac7b3ae74305d834cf65bde (patch)
tree8a2f4eab0ddde85d0082c33d1909f507d43e7bf4
parentd19e13f546107e2813575e25127a8acad943d04a (diff)
share/mk/: dist: Add target to create distribution tarballs0.1
Signed-off-by: Alejandro Colomar <alx@kernel.org>
-rw-r--r--share/mk/compress.mk42
-rw-r--r--share/mk/dist.mk96
-rw-r--r--share/mk/version.mk3
3 files changed, 140 insertions, 1 deletions
diff --git a/share/mk/compress.mk b/share/mk/compress.mk
new file mode 100644
index 0000000..4ebad5d
--- /dev/null
+++ b/share/mk/compress.mk
@@ -0,0 +1,42 @@
+# Copyright 2023-2024 Alejandro Colomar <alx@kernel.org>
+# SPDX-License-Identifier: LGPL-3.0-only WITH LGPL-3.0-linking-exception
+
+
+ifndef MAKEFILE_COMPRESS_INCLUDED
+MAKEFILE_COMPRESS_INCLUDED := 1
+
+
+Z :=
+ifeq ($(Z),)
+else ifeq ($(Z),.bz2)
+else ifeq ($(Z),.gz)
+else ifeq ($(Z),.lz)
+else ifeq ($(Z),.xz)
+else
+$(warning "Z": "$(Z)")
+$(error Valid values for "Z": ["", ".bz2", ".gz", ".lz", ".xz"])
+endif
+
+
+DEFAULT_BZIP2FLAGS :=
+EXTRA_BZIP2FLAGS :=
+BZIP2FLAGS := $(DEFAULT_BZIP2FLAGS) $(EXTRA_BZIP2FLAGS)
+BZIP2 := bzip2
+
+DEFAULT_GZIPFLAGS := -n
+EXTRA_GZIPFLAGS :=
+GZIPFLAGS := $(DEFAULT_GZIPFLAGS) $(EXTRA_GZIPFLAGS)
+GZIP := gzip
+
+DEFAULT_LZIPFLAGS :=
+EXTRA_LZIPFLAGS :=
+LZIPFLAGS := $(DEFAULT_LZIPFLAGS) $(EXTRA_LZIPFLAGS)
+LZIP := lzip
+
+DEFAULT_XZFLAGS :=
+EXTRA_XZFLAGS :=
+XZFLAGS := $(DEFAULT_XZFLAGS) $(EXTRA_XZFLAGS)
+XZ := xz
+
+
+endif # include guard
diff --git a/share/mk/dist.mk b/share/mk/dist.mk
new file mode 100644
index 0000000..0d9325f
--- /dev/null
+++ b/share/mk/dist.mk
@@ -0,0 +1,96 @@
+# Copyright 2021-2024 Alejandro Colomar <alx@kernel.org>
+# SPDX-License-Identifier: LGPL-3.0-only WITH LGPL-3.0-linking-exception
+
+
+ifndef MAKEFILE_DIST_INCLUDED
+MAKEFILE_DIST_INCLUDED := 1
+
+
+include $(MAKEFILEDIR)/build.mk
+include $(MAKEFILEDIR)/cmd.mk
+include $(MAKEFILEDIR)/compress.mk
+include $(MAKEFILEDIR)/install.mk
+include $(MAKEFILEDIR)/version.mk
+include $(MAKEFILEDIR)/verbose.mk
+
+
+_DISTDIR := $(builddir)/dist
+
+
+DEFAULT_TARFLAGS := \
+ --sort=name \
+ --owner=root:0 \
+ --group=root:0 \
+ --mtime='$(DISTDATE)'
+EXTRA_TARFLAGS :=
+TARFLAGS := $(DEFAULT_TARFLAGS) $(EXTRA_TARFLAGS)
+TAR := tar
+
+
+DISTFILES := $(shell $(GIT) ls-files $(HIDE_ERR) \
+ | $(SED) 's,^,$(srcdir)/,' \
+ | $(SED) 's,:,\\:,g')
+_DISTFILES := $(patsubst $(srcdir)/%,$(_DISTDIR)/%,$(DISTFILES))
+_DISTPAGES := $(filter $(_DISTDIR)/share/man/man%,$(_DISTFILES))
+_DISTOTHERS := $(filter-out $(_DISTDIR)/share/man/man%,$(_DISTFILES))
+
+DISTFILE := $(builddir)/$(DISTNAME).tar
+compression := bz2 gz lz xz
+
+
+$(builddir)/dist/:
+ +$(info INSTALL $@)
+ +$(INSTALL_DIR) $@
+
+
+$(builddir)/dist/%/: | $(builddir)/dist/
+ +$(info INSTALL $@)
+ +$(INSTALL_DIR) $@
+
+
+$(_DISTPAGES): $(_DISTDIR)/share/man/man%: $(srcdir)/share/man/man% $(MK) | $$(@D)/
+ $(info INSTALL $@)
+ <$< \
+ $(SED) "/^.TH/s/(date)/$$(git log --format=%cs -1 -- $< $(HIDE_ERR))/" \
+ | $(SED) '/^.TH/s/(unreleased)/$(DISTVERSION)/' \
+ | $(INSTALL_DATA) -T /dev/stdin $@
+
+$(_DISTOTHERS): $(_DISTDIR)/%: $(srcdir)/% $(MK) | $$(@D)/
+ $(info CP $@)
+ $(CP) -dT $< $@
+
+
+$(DISTFILE): $(_DISTFILES) $(MK) | $$(@D)/
+ $(info TAR $@)
+ $(TAR) $(TARFLAGS) -cf $@ -T /dev/null
+ $(GIT) ls-files \
+ | $(SED) 's,^,$(_DISTDIR)/,' \
+ | $(XARGS) $(TAR) $(TARFLAGS) -rf $@ -C $(srcdir) \
+ --transform 's,^$(_DISTDIR),$(DISTNAME),'
+
+define DISTFILE_z_rule
+$(DISTFILE).$(2): %.$(2): % $(MK) | $$$$(@D)/
+ $$(info $(1) $$@)
+ $($(1)) $($(1)FLAGS) -kf $$<
+ touch $$@
+endef
+
+$(eval $(call DISTFILE_z_rule,BZIP2,bz2))
+$(eval $(call DISTFILE_z_rule,GZIP,gz))
+$(eval $(call DISTFILE_z_rule,LZIP,lz))
+$(eval $(call DISTFILE_z_rule,XZ,xz))
+
+
+.PHONY: dist-tar
+dist-tar: $(DISTFILE);
+
+
+$(foreach z, $(compression), \
+ $(eval .PHONY: dist-$(z)))
+$(foreach z, $(compression), \
+ $(eval dist-$(z): $(DISTFILE).$(z);))
+.PHONY: dist
+dist: $(foreach z, $(compression), dist-$(z));
+
+
+endif # include guard
diff --git a/share/mk/version.mk b/share/mk/version.mk
index ea26a57..f32265a 100644
--- a/share/mk/version.mk
+++ b/share/mk/version.mk
@@ -11,8 +11,9 @@ include $(MAKEFILEDIR)/verbose.mk
libname := liba2i
-DISTVERSION := $(patsubst v%,%,$(shell $(GIT) describe $(HIDE_ERR) || $(ECHO) unreleased))
+DISTVERSION := $(shell $(GIT) describe $(HIDE_ERR))
DISTNAME := $(libname)-$(DISTVERSION)
+DISTDATE := $(shell $(GIT) log -1 --format='%aD')
MAJOR_VERSION := $(shell $(ECHO) $(DISTVERSION) | $(CUT) -f1 -d. )