2024-12-12 19:08:06 +08:00
|
|
|
PROJECT = rabbitmqctl
|
|
|
|
|
|
|
|
define PROJECT_ENV
|
|
|
|
[{scopes, #{
|
|
|
|
rabbitmqctl => ctl,
|
|
|
|
'rabbitmq-diagnostics' => diagnostics,
|
|
|
|
'rabbitmq-plugins' => plugins,
|
|
|
|
'rabbitmq-queues' => queues,
|
|
|
|
'rabbitmq-streams' => streams,
|
|
|
|
'rabbitmq-upgrade' => upgrade,
|
|
|
|
'vmware-rabbitmq' => vmware
|
|
|
|
}}]
|
|
|
|
endef
|
2016-10-27 21:51:02 +08:00
|
|
|
|
2016-12-15 01:27:25 +08:00
|
|
|
BUILD_DEPS = rabbit_common
|
2025-03-12 07:07:04 +08:00
|
|
|
DEPS = csv json stdout_formatter
|
2024-12-12 19:08:06 +08:00
|
|
|
LOCAL_DEPS = elixir
|
|
|
|
|
2023-11-10 22:31:12 +08:00
|
|
|
TEST_DEPS = amqp amqp_client temp x509 rabbit
|
2016-10-27 21:51:02 +08:00
|
|
|
|
2023-11-10 22:31:12 +08:00
|
|
|
dep_amqp = hex 3.3.0
|
2024-10-08 02:27:05 +08:00
|
|
|
dep_csv = hex 3.2.1
|
2023-11-17 20:05:38 +08:00
|
|
|
dep_json = hex 1.4.1
|
2023-04-12 20:27:32 +08:00
|
|
|
dep_temp = hex 0.4.7
|
2023-11-10 22:31:12 +08:00
|
|
|
dep_x509 = hex 0.8.8
|
2023-03-14 21:27:47 +08:00
|
|
|
|
2017-05-17 00:02:10 +08:00
|
|
|
DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk
|
2024-07-25 20:15:31 +08:00
|
|
|
DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk
|
2016-10-27 21:51:02 +08:00
|
|
|
|
2016-12-08 00:08:29 +08:00
|
|
|
VERBOSE_TEST ?= true
|
2020-03-31 18:39:22 +08:00
|
|
|
MAX_CASES ?= 1
|
2020-03-31 01:27:51 +08:00
|
|
|
|
2024-12-12 19:08:06 +08:00
|
|
|
# Force enable Elixir in this project since
|
|
|
|
# this is an Elixir application.
|
|
|
|
ELIXIR = system
|
|
|
|
|
|
|
|
# We are still using Mix for testing.
|
2020-09-07 20:14:10 +08:00
|
|
|
MIX_TEST_OPTS ?= ""
|
2024-12-05 00:19:55 +08:00
|
|
|
MIX_TEST = ERL_COMPILER_OPTIONS=deterministic MIX_ENV=test mix do compile --warnings-as-errors, test --max-cases=$(MAX_CASES) --warnings-as-errors
|
2016-12-08 00:08:29 +08:00
|
|
|
|
2020-09-07 20:14:10 +08:00
|
|
|
ifneq ("",$(MIX_TEST_OPTS))
|
|
|
|
MIX_TEST := $(MIX_TEST) $(MIX_TEST_OPTS)
|
|
|
|
endif
|
|
|
|
|
2016-12-08 00:08:29 +08:00
|
|
|
ifeq ($(VERBOSE_TEST),true)
|
2020-03-31 01:27:51 +08:00
|
|
|
MIX_TEST := $(MIX_TEST) --trace
|
2016-12-08 00:08:29 +08:00
|
|
|
endif
|
|
|
|
|
2024-12-12 19:08:06 +08:00
|
|
|
EUNIT = disable
|
|
|
|
|
2024-11-11 23:47:41 +08:00
|
|
|
export MAKE
|
|
|
|
|
2024-12-12 19:08:06 +08:00
|
|
|
ESCRIPT_NAME = Elixir.RabbitMQCtl
|
|
|
|
ESCRIPT_FILE = escript/rabbitmqctl
|
|
|
|
|
|
|
|
.DEFAULT_GOAL = $(ESCRIPT_FILE)
|
|
|
|
|
|
|
|
escript::
|
|
|
|
$(verbose) mkdir -p escript/
|
|
|
|
|
2021-03-22 17:38:17 +08:00
|
|
|
include ../../rabbitmq-components.mk
|
|
|
|
include ../../erlang.mk
|
2016-10-27 21:51:02 +08:00
|
|
|
|
2024-12-12 19:08:06 +08:00
|
|
|
$(ESCRIPT_FILE): $(EX_FILES)
|
|
|
|
$(verbose) $(MAKE) escript
|
|
|
|
|
|
|
|
ESCRIPT_EMU_ARGS += -hidden
|
|
|
|
|
|
|
|
escript-zip::
|
|
|
|
$(verbose) $(ESCRIPT_ZIP) $(ESCRIPT_ZIP_FILE) $(ELIXIR_LIBS)/*
|
2017-12-07 19:16:44 +08:00
|
|
|
|
2017-02-09 18:47:14 +08:00
|
|
|
LINKED_ESCRIPTS = escript/rabbitmq-plugins \
|
2024-12-12 19:08:06 +08:00
|
|
|
escript/rabbitmq-diagnostics \
|
|
|
|
escript/rabbitmq-queues \
|
|
|
|
escript/rabbitmq-streams \
|
|
|
|
escript/vmware-rabbitmq \
|
|
|
|
escript/rabbitmq-upgrade
|
|
|
|
|
|
|
|
escript:: $(LINKED_ESCRIPTS)
|
2017-02-09 18:47:14 +08:00
|
|
|
|
|
|
|
# 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
|
2019-08-01 02:01:23 +08:00
|
|
|
link_escript = ln -sf "$(notdir $(1))" "$(2)"
|
2017-02-09 18:47:14 +08:00
|
|
|
else
|
2019-08-01 02:01:23 +08:00
|
|
|
link_escript = ln -f "$(dir $(2))$(notdir $(1))" "$(2)"
|
2017-02-09 18:47:14 +08:00
|
|
|
endif
|
2016-11-04 17:31:14 +08:00
|
|
|
|
2024-12-12 19:08:06 +08:00
|
|
|
# Erlang.mk will fetch dependencies as it now has native Elixir support.
|
|
|
|
# However we are still using Mix for tests and this means Mix will fetch
|
|
|
|
# test dependencies.
|
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.
|
2018-04-20 17:26:26 +08:00
|
|
|
#
|
|
|
|
# We also verify if the CLI is built from the RabbitMQ source archive
|
|
|
|
# (by checking if the Hex registry/cache is present). If it is, we use
|
|
|
|
# another alias. This alias does exactly the same thing as `make_all`,
|
|
|
|
# but calls `deps.get --only prod` instead of `deps.get`. This is what
|
|
|
|
# we do to create the source archive, and we must do the same here,
|
|
|
|
# otherwise mix(1) complains about missing dependencies (the non-prod
|
|
|
|
# ones).
|
2024-12-12 19:08:06 +08:00
|
|
|
|
|
|
|
$(LINKED_ESCRIPTS): $(ESCRIPT_FILE)
|
2018-04-05 17:23:18 +08:00
|
|
|
$(verbose) rm -f "$@"
|
2017-02-09 18:47:14 +08:00
|
|
|
$(gen_verbose) $(call link_escript,$<,$@)
|
2016-11-04 17:31:14 +08:00
|
|
|
|
2024-12-12 19:08:06 +08:00
|
|
|
tests:: escript test-deps
|
2024-09-19 19:52:35 +08:00
|
|
|
$(verbose) $(MAKE) -C ../../ install-cli
|
2024-11-12 23:43:13 +08:00
|
|
|
$(verbose) $(MAKE) -C ../../ start-background-broker \
|
2024-12-12 19:08:06 +08:00
|
|
|
PLUGINS="rabbitmq_federation rabbitmq_stomp rabbitmq_stream_management amqp_client" \
|
2024-11-12 23:43:13 +08:00
|
|
|
$(if $(filter khepri,$(RABBITMQ_METADATA_STORE)),,RABBITMQ_FEATURE_FLAGS="-khepri_db")
|
|
|
|
$(gen_verbose) $(MIX_TEST) \
|
|
|
|
$(if $(RABBITMQ_METADATA_STORE),--exclude $(filter-out $(RABBITMQ_METADATA_STORE),khepri mnesia),) \
|
|
|
|
$(TEST_FILE); \
|
2024-09-19 19:52:35 +08:00
|
|
|
RES=$$?; \
|
|
|
|
$(MAKE) -C ../../ stop-node; \
|
|
|
|
exit $$RES
|
2017-03-09 20:57:59 +08:00
|
|
|
|
2019-05-06 21:36:35 +08:00
|
|
|
.PHONY: test
|
|
|
|
|
2024-12-12 19:08:06 +08:00
|
|
|
test:: escript test-deps
|
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
|
2020-03-25 05:22:24 +08:00
|
|
|
$(verbose) echo "TEST_FILE must be set, e.g. TEST_FILE=./test/ctl" 1>&2; false
|
2017-03-09 21:13:20 +08:00
|
|
|
endif
|
2016-10-31 19:21:10 +08:00
|
|
|
|
2024-12-12 19:08:06 +08:00
|
|
|
dialyzer:: escript
|
2017-11-28 02:49:08 +08:00
|
|
|
MIX_ENV=test mix dialyzer
|
2017-08-14 21:36:38 +08:00
|
|
|
|
2017-02-09 18:47:14 +08:00
|
|
|
.PHONY: install
|
|
|
|
|
2024-12-12 19:08:06 +08:00
|
|
|
install: $(ESCRIPT_FILE)
|
2017-02-09 18:47:14 +08:00
|
|
|
ifdef PREFIX
|
|
|
|
$(gen_verbose) mkdir -p "$(DESTDIR)$(PREFIX)"
|
2024-12-12 19:08:06 +08:00
|
|
|
$(verbose) \
|
|
|
|
cmp -s "$(ESCRIPT_FILE)" "$(DESTDIR)$(PREFIX)/$(notdir $(ESCRIPT_FILE))" || \
|
|
|
|
cp "$(ESCRIPT_FILE)" "$(DESTDIR)$(PREFIX)/$(notdir $(ESCRIPT_FILE))"
|
2017-02-09 18:47:14 +08:00
|
|
|
$(verbose) $(foreach script,$(LINKED_ESCRIPTS), \
|
2024-12-12 19:08:06 +08:00
|
|
|
$(call link_escript,$(ESCRIPT_FILE),$(DESTDIR)$(PREFIX)/$(notdir $(script)));)
|
2017-02-09 18:47:14 +08:00
|
|
|
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:
|
2024-12-12 19:08:06 +08:00
|
|
|
$(gen_verbose) rm -f $(ESCRIPT_FILE) $(LINKED_ESCRIPTS)
|
2017-01-16 20:50:02 +08:00
|
|
|
$(verbose) echo y | mix clean
|
2016-10-31 19:21:10 +08:00
|
|
|
|
2019-01-31 03:15:28 +08:00
|
|
|
format:
|
|
|
|
$(verbose) mix format lib/**/*.ex
|
|
|
|
|
2016-10-31 19:21:10 +08:00
|
|
|
repl:
|
2019-01-22 16:35:59 +08:00
|
|
|
$(verbose) iex --sname repl -S mix
|