2016-10-27 21:51:02 +08:00
|
|
|
PROJECT = rabbitmq_cli
|
|
|
|
|
|
2016-12-15 01:27:25 +08:00
|
|
|
BUILD_DEPS = rabbit_common
|
|
|
|
|
TEST_DEPS = amqp_client
|
2016-10-27 21:51:02 +08:00
|
|
|
|
2017-05-17 00:02:10 +08:00
|
|
|
DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk
|
2016-10-27 21:51:02 +08:00
|
|
|
DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk
|
|
|
|
|
|
2016-12-08 00:08:29 +08:00
|
|
|
VERBOSE_TEST ?= true
|
|
|
|
|
|
|
|
|
|
ifeq ($(VERBOSE_TEST),true)
|
|
|
|
|
MIX_TEST = mix test --trace
|
|
|
|
|
else
|
|
|
|
|
MIX_TEST = mix test --max-cases=1
|
|
|
|
|
endif
|
|
|
|
|
|
2016-10-27 21:51:02 +08:00
|
|
|
include rabbitmq-components.mk
|
|
|
|
|
include erlang.mk
|
|
|
|
|
|
|
|
|
|
# FIXME: Use erlang.mk patched for RabbitMQ, while waiting for PRs to be
|
|
|
|
|
# reviewed and merged.
|
|
|
|
|
|
|
|
|
|
ERLANG_MK_REPO = https://github.com/rabbitmq/erlang.mk.git
|
|
|
|
|
ERLANG_MK_COMMIT = rabbitmq-tmp
|
|
|
|
|
|
2017-02-09 18:47:14 +08:00
|
|
|
ACTUAL_ESCRIPTS = escript/rabbitmqctl
|
|
|
|
|
LINKED_ESCRIPTS = escript/rabbitmq-plugins \
|
|
|
|
|
escript/rabbitmq-diagnostics
|
|
|
|
|
ESCRIPTS = $(ACTUAL_ESCRIPTS) $(LINKED_ESCRIPTS)
|
|
|
|
|
|
|
|
|
|
# Record the build and link dependency: the target files are linked to
|
|
|
|
|
# their first dependency.
|
|
|
|
|
rabbitmq-plugins = escript/rabbitmqctl
|
|
|
|
|
rabbitmq-diagnostics = escript/rabbitmqctl
|
|
|
|
|
escript/rabbitmq-plugins escript/rabbitmq-diagnostics: escript/rabbitmqctl
|
|
|
|
|
|
|
|
|
|
# We use hardlinks or symlinks in the `escript` directory and
|
|
|
|
|
# install's PREFIX when a single escript can have several names (eg.
|
|
|
|
|
# rabbitmq-plugins, rabbitmq-plugins and rabbitmq-diagnostics).
|
|
|
|
|
#
|
|
|
|
|
# Hardlinks and symlinks work on Windows. However, symlinks require
|
|
|
|
|
# privileges unlike hardlinks. That's why we default to hardlinks,
|
|
|
|
|
# unless USE_SYMLINKS_IN_ESCRIPTS_DIR is set.
|
|
|
|
|
#
|
|
|
|
|
# The link_escript function is called as:
|
|
|
|
|
# $(call link_escript,source,target)
|
|
|
|
|
#
|
|
|
|
|
# The function assumes all escripts live in the same directory and that
|
|
|
|
|
# the source was previously copied in that directory.
|
|
|
|
|
|
|
|
|
|
ifdef USE_SYMLINKS_IN_ESCRIPTS_DIR
|
|
|
|
|
link_escript = ln -s "$(notdir $(1))" "$(2)"
|
|
|
|
|
else
|
|
|
|
|
link_escript = ln "$(dir $(2))$(notdir $(1))" "$(2)"
|
|
|
|
|
endif
|
2016-11-04 17:31:14 +08:00
|
|
|
|
|
|
|
|
app:: $(ESCRIPTS)
|
|
|
|
|
@:
|
|
|
|
|
|
|
|
|
|
rabbitmqctl_srcs := mix.exs \
|
|
|
|
|
$(shell find config lib -name "*.ex" -o -name "*.exs")
|
|
|
|
|
|
2017-01-10 22:45:15 +08:00
|
|
|
# Elixir dependencies are fetched and compiled as part of the alias
|
|
|
|
|
# `mix make_all`. We do not fetch and build them in `make deps` because
|
|
|
|
|
# mix(1) startup time is quite high. Thus we prefer to run it once, even
|
|
|
|
|
# though it kind of breaks the Erlang.mk model.
|
2017-01-16 20:50:02 +08:00
|
|
|
#
|
|
|
|
|
# We write `y` on mix stdin because it asks approval to install Hex if
|
|
|
|
|
# it's missing. Another way to do it is to use `mix local.hex` but it
|
|
|
|
|
# can't be integrated in an alias and doing it from the Makefile isn't
|
|
|
|
|
# practical.
|
2017-02-09 18:47:14 +08:00
|
|
|
$(ACTUAL_ESCRIPTS): $(rabbitmqctl_srcs) deps
|
2017-01-16 20:50:02 +08:00
|
|
|
$(gen_verbose) echo y | mix make_all
|
2016-10-27 21:51:02 +08:00
|
|
|
|
2017-02-09 18:47:14 +08:00
|
|
|
$(LINKED_ESCRIPTS):
|
|
|
|
|
$(gen_verbose) $(call link_escript,$<,$@)
|
2016-11-04 17:31:14 +08:00
|
|
|
|
|
|
|
|
rel:: $(ESCRIPTS)
|
|
|
|
|
@:
|
|
|
|
|
|
2016-12-23 20:12:33 +08:00
|
|
|
tests:: $(ESCRIPTS)
|
2017-03-09 21:13:20 +08:00
|
|
|
$(gen_verbose) $(MIX_TEST) $(TEST_FILE)
|
2017-03-09 20:57:59 +08:00
|
|
|
|
|
|
|
|
test:: $(ESCRIPTS)
|
2017-03-09 21:13:20 +08:00
|
|
|
ifdef TEST_FILE
|
2016-12-30 00:49:58 +08:00
|
|
|
$(gen_verbose) $(MIX_TEST) $(TEST_FILE)
|
2017-03-09 21:13:20 +08:00
|
|
|
else
|
|
|
|
|
$(verbose) echo "TEST_FILE must be set, e.g. TEST_FILE=./test/close_all_connections_command_test.exs" 1>&2; false
|
|
|
|
|
endif
|
2016-10-31 19:21:10 +08:00
|
|
|
|
2017-02-09 18:47:14 +08:00
|
|
|
.PHONY: install
|
|
|
|
|
|
|
|
|
|
install: $(ESCRIPTS)
|
|
|
|
|
ifdef PREFIX
|
|
|
|
|
$(gen_verbose) mkdir -p "$(DESTDIR)$(PREFIX)"
|
|
|
|
|
$(verbose) $(foreach script,$(ESCRIPTS), \
|
|
|
|
|
rm -f "$(DESTDIR)$(PREFIX)/$(notdir $(script))";)
|
|
|
|
|
$(verbose) $(foreach script,$(ACTUAL_ESCRIPTS), \
|
|
|
|
|
cp "$(script)" "$(DESTDIR)$(PREFIX)";)
|
|
|
|
|
$(verbose) $(foreach script,$(LINKED_ESCRIPTS), \
|
|
|
|
|
$(call link_escript,$($(notdir $(script))),$(DESTDIR)$(PREFIX)/$(notdir $(script)));)
|
|
|
|
|
else
|
|
|
|
|
$(verbose) echo "You must specify a PREFIX" 1>&2; false
|
|
|
|
|
endif
|
|
|
|
|
|
2016-12-30 00:49:58 +08:00
|
|
|
clean:: clean-mix
|
|
|
|
|
|
2017-01-16 20:50:02 +08:00
|
|
|
clean-mix:
|
2016-12-30 00:49:58 +08:00
|
|
|
$(gen_verbose) rm -f $(ESCRIPTS)
|
2017-01-16 20:50:02 +08:00
|
|
|
$(verbose) echo y | mix clean
|
2016-10-31 19:21:10 +08:00
|
|
|
|
|
|
|
|
repl:
|
2016-12-30 00:49:58 +08:00
|
|
|
$(verbose) iex -S mix
|