From 00367bc4b7a0ede6fac7b3ae74305d834cf65bde Mon Sep 17 00:00:00 2001 From: Alejandro Colomar Date: Tue, 6 Feb 2024 20:38:26 +0100 Subject: share/mk/: dist: Add target to create distribution tarballs Signed-off-by: Alejandro Colomar --- share/mk/compress.mk | 42 +++++++++++++++++++++++ share/mk/dist.mk | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++ share/mk/version.mk | 3 +- 3 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 share/mk/compress.mk create mode 100644 share/mk/dist.mk 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 +# 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 +# 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. ) -- cgit v1.2.3