summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile105
-rw-r--r--erlang.mk90
2 files changed, 125 insertions, 70 deletions
diff --git a/Makefile b/Makefile
index 17cc7b86b8..dfdf414f70 100644
--- a/Makefile
+++ b/Makefile
@@ -2,6 +2,14 @@ PROJECT = rabbit
DEPS = rabbit_common
+SRCDIST_DEPS ?= rabbitmq_shovel
+
+ifneq ($(IS_DEP),1)
+ifneq ($(findstring source-dist,$(MAKECMDGOALS)),)
+DEPS += $(SRCDIST_DEPS)
+endif
+endif
+
# For RabbitMQ repositories, we want to checkout branches which match
# the parent porject. For instance, if the parent project is on a
# release tag, dependencies must be on the same release tag. If the
@@ -19,6 +27,7 @@ export base_rmq_ref
endif
dep_rabbit_common = git https://github.com/rabbitmq/rabbitmq-common.git $(current_rmq_ref) $(base_rmq_ref)
+dep_rabbitmq_shovel = git https://github.com/rabbitmq/rabbitmq-shovel.git $(current_rmq_ref) $(base_rmq_ref)
define usage_xml_to_erl
$(subst __,_,$(patsubst $(DOCS_DIR)/rabbitmq%.1.xml, src/rabbit_%_usage.erl, $(subst -,_,$(1))))
@@ -45,8 +54,8 @@ DEP_PLUGINS = rabbit_common/mk/rabbitmq-run.mk
# FIXME: Use erlang.mk patched for RabbitMQ, while waiting for PRs to be
# reviewed and merged.
-ERLANG_MK_GIT_REPOSITORY = https://github.com/rabbitmq/erlang.mk.git
-ERLANG_MK_GIT_REF = rabbitmq-tmp
+ERLANG_MK_REPO = https://github.com/rabbitmq/erlang.mk.git
+ERLANG_MK_COMMIT = rabbitmq-tmp
include erlang.mk
@@ -163,68 +172,72 @@ distclean-manpages::
.PHONY: source-dist
SOURCE_DIST_BASE ?= rabbitmq-server
-SOURCE_DIST_SUFFIXES ?= tar.xz
+SOURCE_DIST_SUFFIXES ?= tar.xz zip
SOURCE_DIST ?= $(SOURCE_DIST_BASE)-$(VERSION)
SOURCE_DIST_FILES = $(addprefix $(SOURCE_DIST).,$(SOURCE_DIST_SUFFIXES))
-SRCDIST_DEPS ?= rabbitmq_shovel
-
-dep_rabbitmq_shovel = git https://github.com/rabbitmq/rabbitmq-shovel.git $(current_rmq_ref) $(base_rmq_ref)
-
-ALL_SRCDIST_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(SRCDIST_DEPS))
-
-$(foreach dep,$(SRCDIST_DEPS),$(eval $(call dep_target,$(dep))))
-
.PHONY: $(SOURCE_DIST_FILES)
source-dist: $(SOURCE_DIST_FILES)
@:
-TAR ?= tar
-TAR_VERSION = $(shell $(TAR) --version)
+RSYNC ?= rsync
+RSYNC_V_0 =
+RSYNC_V_1 = -v
+RSYNC_V = $(RSYNC_V_$(V))
+RSYNC_FLAGS += -a $(RSYNC_V) \
+ --exclude '.sw?' --exclude '.*.sw?' \
+ --exclude '*.beam' \
+ --exclude '*.pyc' \
+ --exclude '.git*' \
+ --exclude '$(notdir $(ERLANG_MK_TMP))' \
+ --exclude '$(SOURCE_DIST_BASE)-*' \
+ --exclude 'ebin' \
+ --exclude 'packaging' \
+ --exclude 'erl_crash.dump' \
+ --exclude 'deps' \
+ --delete \
+ --delete-excluded
+TAR ?= tar
TAR_V_0 =
TAR_V_1 = -v
TAR_V = $(TAR_V_$(V))
-TAR_FLAGS = $(TAR_V) -cf - \
- --exclude '.sw?' --exclude '.*.sw?' \
- --exclude '*.beam' \
- --exclude '.git*' \
- --exclude '$(notdir $(ERLANG_MK_TMP))' \
- --exclude '$(SOURCE_DIST_BASE)-*' \
- --exclude 'packaging'
-
-ifneq (,$(findstring GNU tar,$(TAR_VERSION)))
-define tar_source_dist
-$(TAR) $(TAR_FLAGS) \
- --transform 's/^\./$(SOURCE_DIST)/' \
- --show-transformed \
- .
-endef
-endif
-ifneq (,$(findstring bsdtar,$(TAR_VERSION)))
-define tar_source_dist
-$(TAR) $(TAR_FLAGS) \
- -s '/^\./$(SOURCE_DIST)/' \
- .
-endef
-endif
+GZIP ?= gzip
+BZIP2 ?= bzip2
+XZ ?= xz
+
+ZIP ?= zip
+ZIP_V_0 = -q
+ZIP_V_1 =
+ZIP_V = $(ZIP_V_$(V))
+
+.PHONY: $(SOURCE_DIST)
+
+$(SOURCE_DIST): $(ERLANG_MK_RECURSIVE_DEPS_LIST)
+ $(gen_verbose) $(RSYNC) $(RSYNC_FLAGS) ./ $(SOURCE_DIST)/
+ $(verbose) mkdir -p $(SOURCE_DIST)/deps
+ $(verbose) for dep in $$(cat $(ERLANG_MK_RECURSIVE_DEPS_LIST)); do \
+ $(RSYNC) $(RSYNC_FLAGS) \
+ $$dep \
+ $(SOURCE_DIST)/deps; \
+ done
+
+$(SOURCE_DIST).tar.gz: $(SOURCE_DIST)
+ $(gen_verbose) $(TAR) -cf - $(TAR_V) $(SOURCE_DIST) | $(GZIP) --best > $@
-$(SOURCE_DIST).tar.gz: $(ALL_DEPS_DIRS) $(ALL_SRCDIST_DEPS_DIRS)
- $(gen_verbose) $(call tar_source_dist) \
- | gzip --best > $@
+$(SOURCE_DIST).tar.bz2: $(SOURCE_DIST)
+ $(gen_verbose) $(TAR) -cf - $(TAR_V) $(SOURCE_DIST) | $(BZIP2) > $@
-$(SOURCE_DIST).tar.bz2: $(ALL_DEPS_DIRS) $(ALL_SRCDIST_DEPS_DIRS)
- $(gen_verbose) $(call tar_source_dist) \
- | bzip2 > $@
+$(SOURCE_DIST).tar.xz: $(SOURCE_DIST)
+ $(gen_verbose) $(TAR) -cf - $(TAR_V) $(SOURCE_DIST) | $(XZ) > $@
-$(SOURCE_DIST).tar.xz: $(ALL_DEPS_DIRS) $(ALL_SRCDIST_DEPS_DIRS)
- $(gen_verbose) $(call tar_source_dist) \
- | xz > $@
+$(SOURCE_DIST).zip: $(SOURCE_DIST)
+ $(gen_verbose) $(ZIP) -r $(ZIP_V) $@ $(SOURCE_DIST)
clean:: clean-source-dist
clean-source-dist:
- $(gen_verbose) rm -f $(SOURCE_DIST).*
+ $(gen_verbose) rm -rf -- $(SOURCE_DIST_BASE)-*
diff --git a/erlang.mk b/erlang.mk
index 0c846089a6..9f2ea42502 100644
--- a/erlang.mk
+++ b/erlang.mk
@@ -16,7 +16,7 @@
ERLANG_MK_FILENAME := $(realpath $(lastword $(MAKEFILE_LIST)))
-ERLANG_MK_VERSION = 1.2.0-700-g8140907-dirty
+ERLANG_MK_VERSION = 1.2.0-738-gaac8996-dirty
# Core configuration.
@@ -45,7 +45,6 @@ export ERLANG_MK_TMP
ERL = erl +A0 -noinput -boot start_clean
# Platform detection.
-# @todo Add Windows/Cygwin detection eventually.
ifeq ($(PLATFORM),)
UNAME_S := $(shell uname -s)
@@ -64,6 +63,10 @@ else ifeq ($(UNAME_S),NetBSD)
PLATFORM = netbsd
else ifeq ($(UNAME_S),OpenBSD)
PLATFORM = openbsd
+else ifeq ($(UNAME_S),DragonFly)
+PLATFORM = dragonfly
+else ifeq ($(shell uname -o),Msys)
+PLATFORM = msys2
else
$(error Unable to detect platform. Please open a ticket with the output of uname -a.)
endif
@@ -90,7 +93,10 @@ ifneq ($(wildcard erl_crash.dump),)
$(gen_verbose) rm -f erl_crash.dump
endif
-distclean:: clean
+distclean:: clean distclean-tmp
+
+distclean-tmp:
+ $(gen_verbose) rm -rf $(ERLANG_MK_TMP)
help::
$(verbose) printf "%s\n" \
@@ -103,6 +109,8 @@ help::
" all Run deps, app and rel targets in that order" \
" app Compile the project" \
" deps Fetch dependencies (if needed) and compile them" \
+ " fetch-deps Fetch dependencies (if needed) without compiling them" \
+ " list-deps Fetch dependencies (if needed) and list them" \
" search q=... Search for a package in the built-in index" \
" rel Build a release for this project, if applicable" \
" docs Build the documentation for this project" \
@@ -171,15 +179,15 @@ core_ls = $(filter-out $(1),$(shell echo $(1)))
# Automated update.
-ERLANG_MK_GIT_REPOSITORY ?= https://github.com/ninenines/erlang.mk
-ERLANG_MK_GIT_REF ?=
+ERLANG_MK_REPO ?= https://github.com/ninenines/erlang.mk
+ERLANG_MK_COMMIT ?=
ERLANG_MK_BUILD_CONFIG ?= build.config
ERLANG_MK_BUILD_DIR ?= .erlang.mk.build
erlang-mk:
- git clone $(ERLANG_MK_GIT_REPOSITORY) $(ERLANG_MK_BUILD_DIR)
+ git clone $(ERLANG_MK_REPO) $(ERLANG_MK_BUILD_DIR)
if [ -f $(ERLANG_MK_BUILD_CONFIG) ]; then cp $(ERLANG_MK_BUILD_CONFIG) $(ERLANG_MK_BUILD_DIR)/build.config; fi
- cd $(ERLANG_MK_BUILD_DIR) && $(if $(ERLANG_MK_GIT_REF),git checkout $(ERLANG_MK_GIT_REF) &&) $(MAKE)
+ cd $(ERLANG_MK_BUILD_DIR) && $(if $(ERLANG_MK_COMMIT),git checkout $(ERLANG_MK_COMMIT) &&) $(MAKE)
cp $(ERLANG_MK_BUILD_DIR)/erlang.mk ./erlang.mk
rm -rf $(ERLANG_MK_BUILD_DIR)
@@ -3976,7 +3984,7 @@ endif
# Copyright (c) 2013-2015, Loïc Hoguin <essen@ninenines.eu>
# This file is part of erlang.mk and subject to the terms of the ISC License.
-.PHONY: distclean-deps distclean-pkg
+.PHONY: fetch-deps list-deps distclean-deps distclean-pkg
# Configuration.
@@ -4007,6 +4015,26 @@ dep_verbose = $(dep_verbose_$(V))
# Core targets.
ifneq ($(SKIP_DEPS),)
+fetch-deps:
+else
+fetch-deps: $(ALL_DEPS_DIRS)
+ifneq ($(IS_DEP),1)
+ $(verbose) rm -f $(ERLANG_MK_TMP)/fetch-deps.log
+endif
+ $(verbose) mkdir -p $(ERLANG_MK_TMP)
+ $(verbose) for dep in $(ALL_DEPS_DIRS) ; do \
+ if grep -qs ^$$dep$$ $(ERLANG_MK_TMP)/fetch-deps.log; then \
+ echo -n; \
+ else \
+ echo $$dep >> $(ERLANG_MK_TMP)/fetch-deps.log; \
+ if [ -f $$dep/erlang.mk ]; then \
+ $(MAKE) -C $$dep fetch-deps IS_DEP=1 || exit $$?; \
+ fi \
+ fi \
+ done
+endif
+
+ifneq ($(SKIP_DEPS),)
deps::
else
deps:: $(ALL_DEPS_DIRS)
@@ -4029,6 +4057,29 @@ endif
done
endif
+ERLANG_MK_RECURSIVE_DEPS_LIST = $(ERLANG_MK_TMP)/list-deps.log
+
+$(ERLANG_MK_RECURSIVE_DEPS_LIST): fetch-deps
+ifneq ($(IS_DEP),1)
+ $(verbose) rm -f $(ERLANG_MK_TMP)/list-deps.log.orig
+endif
+ $(verbose) for dep in $(filter-out $(CURDIR),$(ALL_DEPS_DIRS)); do \
+ (test -f "$$dep/erlang.mk" && \
+ $(MAKE) -C "$$dep" --no-print-directory \
+ $(ERLANG_MK_RECURSIVE_DEPS_LIST) IS_DEP=1) || :; \
+ done
+ $(verbose) for dep in $(DEPS); do \
+ echo $(DEPS_DIR)/$$dep; \
+ done >> $(ERLANG_MK_TMP)/list-deps.log.orig
+ifneq ($(IS_DEP),1)
+ $(verbose) sort < $(ERLANG_MK_TMP)/list-deps.log.orig \
+ | uniq > $(ERLANG_MK_TMP)/list-deps.log
+ $(verbose) rm -f $(ERLANG_MK_TMP)/list-deps.log.orig
+endif
+
+list-deps: $(ERLANG_MK_RECURSIVE_DEPS_LIST)
+ $(verbose) cat $(ERLANG_MK_TMP)/list-deps.log
+
distclean:: distclean-deps distclean-pkg
# Deps related targets.
@@ -4648,21 +4699,15 @@ asn1_verbose = $(asn1_verbose_$(V))
mib_verbose_0 = @echo " MIB " $(filter %.bin %.mib,$(?F));
mib_verbose = $(mib_verbose_$(V))
+ifneq ($(wildcard src/),)
+
# Targets.
ifeq ($(wildcard ebin/test),)
-ifneq ($(wildcard src/),)
app:: $(PROJECT).d
-else
-app::
-endif
$(verbose) $(MAKE) --no-print-directory app-build
else
-ifneq ($(wildcard src/),)
app:: clean $(PROJECT).d
-else
-app:: clean
-endif
$(verbose) $(MAKE) --no-print-directory app-build
endif
@@ -4691,15 +4736,11 @@ define app_file
endef
endif
-ifneq ($(wildcard src/),)
app-build: ebin/$(PROJECT).app
-endif
-
-app-build: ; @echo -n
+ $(verbose) echo -n
# Source files.
-ifneq ($(wildcard src/),)
ERL_FILES = $(sort $(call core_find,src/,*.erl))
CORE_FILES = $(sort $(call core_find,src/,*.core))
@@ -4816,7 +4857,8 @@ endef
ebin/$(PROJECT).app:: $(ERL_FILES) $(CORE_FILES)
$(if $(strip $?),$(call compile_erl,$?))
$(eval GITDESCRIBE := $(shell git describe --dirty --abbrev=7 --tags --always --first-parent 2>/dev/null || true))
- $(eval MODULES := $(patsubst %,'%',$(sort $(notdir $(basename $(ERL_FILES) $(CORE_FILES))))))
+ $(eval MODULES := $(patsubst %,'%',$(sort $(notdir $(basename \
+ $(filter-out $(ERLC_EXCLUDE_PATHS),$(ERL_FILES) $(CORE_FILES)))))))
ifeq ($(wildcard src/$(PROJECT).app.src),)
$(app_verbose) echo $(subst $(newline),,$(subst ",\",$(call app_file,$(GITDESCRIBE),$(MODULES)))) \
> ebin/$(PROJECT).app
@@ -4831,8 +4873,6 @@ else
> ebin/$(PROJECT).app
endif
-endif
-
clean:: clean-app
clean-app:
@@ -4842,6 +4882,8 @@ clean-app:
$(addprefix include/,$(patsubst %.asn1,%.asn1db,$(notdir $(ASN1_FILES)))) \
$(addprefix src/,$(patsubst %.asn1,%.erl,$(notdir $(ASN1_FILES))))
+endif
+
# Copyright (c) 2015, Viktor Söderqvist <viktor@zuiderkwast.se>
# This file is part of erlang.mk and subject to the terms of the ISC License.