summaryrefslogtreecommitdiff
path: root/packaging/debs/Debian/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'packaging/debs/Debian/Makefile')
-rw-r--r--packaging/debs/Debian/Makefile128
1 files changed, 128 insertions, 0 deletions
diff --git a/packaging/debs/Debian/Makefile b/packaging/debs/Debian/Makefile
new file mode 100644
index 0000000000..010293fc65
--- /dev/null
+++ b/packaging/debs/Debian/Makefile
@@ -0,0 +1,128 @@
+SOURCE_DIST_FILE ?= $(wildcard ../../../rabbitmq-server-*.tar.xz)
+
+ifneq ($(filter-out clean,$(MAKECMDGOALS)),)
+ifeq ($(SOURCE_DIST_FILE),)
+$(error Cannot find source archive; please specify SOURCE_DIST_FILE)
+endif
+ifneq ($(words $(SOURCE_DIST_FILE)),1)
+$(error Multiple source archives found; please specify SOURCE_DIST_FILE)
+endif
+endif
+
+VERSION ?= $(patsubst rabbitmq-server-%.tar.xz,%,$(notdir $(SOURCE_DIST_FILE)))
+ifeq ($(VERSION),)
+$(error Cannot determine version; please specify VERSION)
+endif
+
+# $(DEBIAN_VERSION) doesn't include the package revision: this one is
+# only set in debian/changelog.
+DEBIAN_VERSION = $(subst -,~,$(VERSION))
+DEBIAN_ORIG_TARBALL = rabbitmq-server_$(DEBIAN_VERSION).orig.tar.xz
+UNPACKED_DIR = $(patsubst %.tar.xz,%,$(notdir $(SOURCE_DIST_FILE)))
+
+DEB_HOST_ARCH = $(shell dpkg-architecture -qDEB_HOST_ARCH)
+CHANGES_FILE = rabbitmq-server_$(DEBIAN_VERSION)-*_$(DEB_HOST_ARCH).changes
+
+# Package signing.
+#
+# At least the key ID is mandatory ($(SIGNING_KEY)). If it's set, we
+# enable signing in dpkg-build-package(1), otherwise we ask for an
+# unsigned package.
+#
+# To maintain backward compatibility, the caller can also specify
+# $(KEYSDIR) or $(GNUPG_PATH) and we set GNUPGHOME accordingly.
+
+ifneq ($(SIGNING_KEY),)
+ SIGNING_FLAG = -k$(SIGNING_KEY)
+ifneq ($(KEYSDIR),)
+ GNUPGHOME = $(KEYSDIR)/keyring/.gnupg
+ export GNUPGHOME
+endif
+ifneq ($(GNUPG_PATH),)
+ GNUPGHOME = $(GNUPG_PATH)/.gnupg
+ export GNUPGHOME
+endif
+else
+ SIGNING_FLAG = -us -uc
+endif
+
+unexport DEPS_DIR
+unexport ERL_LIBS
+MAKEOVERRIDES =
+
+.PHONY: all package clean
+
+all: package
+ @:
+
+package: clean
+# If a signing key ID was specified, verify that the key is available
+# before starting a possibly long build. At the same time, display some
+# useful informations on the key so the caller can double-check if he
+# wants.
+ifneq ($(SIGNING_KEY),)
+ @echo
+ @echo '--------------------------------------------------'
+ @echo "The package will be signed with key $(SIGNING_KEY):"
+ @gpg -K "$(SIGNING_KEY)"
+ @echo '--------------------------------------------------'
+ @echo
+endif
+# Because we are creating a source package as well, Debian expects the
+# source archive to have a specially formatted name. Copy the original
+# archive to a correctly named file.
+ cp -a "$(SOURCE_DIST_FILE)" "$(DEBIAN_ORIG_TARBALL)"
+# Prepare the source directory: we extract the source archive and copy
+# the debian/ subdirectory.
+ xzcat "$(DEBIAN_ORIG_TARBALL)" | tar -xf -
+ cp -a debian "$(UNPACKED_DIR)/debian"
+ifeq ($(INSTALL_BUILD_DEPS),yes)
+# Install build dependencies. To help us, we use mk-build-deps(1) from
+# the devscripts package.
+#
+# We ignore errors from the first `dpkg -i` because the command will
+# fail: dependencies are missing and dpkg(8) doesn't install them.
+# That's why we have `apt-get install -f` following. To double-check
+# everything went fine, we have the second `dpkg -i`.
+ apt-get install -y --no-install-recommends devscripts equivs
+ mk-build-deps debian/control
+ -dpkg -i ./rabbitmq-server-build-deps_*_all.deb
+ apt-get install -y -f -V --no-install-recommends
+ dpkg -i ./rabbitmq-server-build-deps_*_all.deb
+endif
+# Log Erlang version.
+ @echo
+ @echo '--------------------------------------------------'
+ @echo "Erlang and Elixir versions used to compile:"
+ @elixir --version
+ @echo '--------------------------------------------------'
+ @echo
+# Possibly update debian/changelog (in the created source directory):
+# - if it contains an entry for the specified version, do nothing;
+# - otherwise, prepend a generated entry using "1" as the package
+# revision.
+ cd "$(UNPACKED_DIR)"; \
+ ../scripts/update-changelog.sh "$(DEBIAN_VERSION)"
+# Finally build the package! We ask for both the source package and one
+# or more binary packages.
+ cd "$(UNPACKED_DIR)"; \
+ dpkg-buildpackage -sa $(SIGNING_FLAG)
+# Before we remove the source directory, copy the possibly updated
+# debian/changelog to the original debian subdirectory, if the caller
+# asks for it. He is then responsible for committing it.
+ifeq ($(SAVE_CHANGELOG),yes)
+ cp -a "$(UNPACKED_DIR)/debian/changelog" debian/changelog
+endif
+ rm -rf "$(UNPACKED_DIR)"
+# If $(PACKAGES_DIR) is specified, move all package files to that
+# location.
+ifneq ($(PACKAGES_DIR),)
+ mkdir -p "$(PACKAGES_DIR)"
+ mv $$(./scripts/get-debian-package-files-list.sh $(CHANGES_FILE)) \
+ "$(PACKAGES_DIR)"
+endif
+
+clean:
+ rm -rf $(UNPACKED_DIR)
+ rm -f $(DEBIAN_ORIG_TARBALL)
+ ./scripts/get-debian-package-files-list.sh $(CHANGES_FILE) | xargs rm -f