rabbitmq-dist.mk: Fix concurrent runs of `make {,test-}dist` and `make install-cli`

The fix depends on the presence of lockf(1) or flock(1).
This commit is contained in:
Jean-Sébastien Pédron 2019-09-03 17:43:33 +02:00
parent 5840834fa8
commit 12d48ff717
2 changed files with 111 additions and 18 deletions

View File

@ -11,12 +11,15 @@
/doc/ /doc/
/ebin/ /ebin/
/escript/ /escript/
/escript.lock
/git-revisions.txt /git-revisions.txt
/logs/ /logs/
/plugins/ /plugins/
/plugins.lock
/rebar.config /rebar.config
/rebar.lock /rebar.lock
/sbin/ /sbin/
/sbin.lock
/test/ct.cover.spec /test/ct.cover.spec
/xrefr /xrefr

View File

@ -199,40 +199,130 @@ $(mix_task_archive_deps):
MAYBE_APPS_LIST = $(if $(shell test -f $(ERLANG_MK_TMP)/apps.log && echo OK), \ MAYBE_APPS_LIST = $(if $(shell test -f $(ERLANG_MK_TMP)/apps.log && echo OK), \
$(ERLANG_MK_TMP)/apps.log) $(ERLANG_MK_TMP)/apps.log)
DIST_LOCK = $(DIST_DIR).lock
dist:: $(ERLANG_MK_RECURSIVE_DEPS_LIST) all dist:: $(ERLANG_MK_RECURSIVE_DEPS_LIST) all install-cli
$(gen_verbose) $(MAKE) do-dist \ $(gen_verbose) \
DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_DEPS_LIST) $(MAYBE_APPS_LIST)" if command -v flock >/dev/null; then \
flock $(DIST_LOCK) \
sh -c '$(MAKE) do-dist \
DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_DEPS_LIST) \
$(MAYBE_APPS_LIST)"'; \
elif command -v lockf >/dev/null; then \
lockf $(DIST_LOCK) \
sh -c '$(MAKE) do-dist \
DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_DEPS_LIST) \
$(MAYBE_APPS_LIST)"'; \
else \
$(MAKE) do-dist \
DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_DEPS_LIST) \
$(MAYBE_APPS_LIST)"; \
fi
test-dist:: export TEST_DIR=NON-EXISTENT test-dist:: export TEST_DIR=NON-EXISTENT
test-dist:: $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) test-build test-dist:: $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) test-build
$(gen_verbose) $(MAKE) do-dist \ $(gen_verbose) \
DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) $(MAYBE_APPS_LIST)" if command -v flock >/dev/null; then \
flock $(DIST_LOCK) \
sh -c '$(MAKE) do-dist \
DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \
$(MAYBE_APPS_LIST)"'; \
elif command -v lockf >/dev/null; then \
lockf $(DIST_LOCK) \
sh -c '$(MAKE) do-dist \
DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \
$(MAYBE_APPS_LIST)"'; \
else \
$(MAKE) do-dist \
DIST_PLUGINS_LIST="$(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) \
$(MAYBE_APPS_LIST)"; \
fi
DIST_EZS = $(ERLANGMK_DIST_EZS) $(MIX_DIST_EZS) DIST_EZS = $(ERLANGMK_DIST_EZS) $(MIX_DIST_EZS)
do-dist:: $(DIST_EZS) cli-scripts cli-escripts do-dist:: $(DIST_EZS)
$(verbose) unwanted='$(filter-out $(DIST_EZS) $(EXTRA_DIST_EZS), \ $(verbose) unwanted='$(filter-out $(DIST_EZS) $(EXTRA_DIST_EZS), \
$(wildcard $(DIST_DIR)/*.ez))'; \ $(wildcard $(DIST_DIR)/*.ez))'; \
test -z "$$unwanted" || (echo " RM $$unwanted" && rm -f $$unwanted) test -z "$$unwanted" || (echo " RM $$unwanted" && rm -f $$unwanted)
test-build:: cli-scripts cli-escripts test-build:: install-cli
CLI_SCRIPTS_LOCK = $(CLI_SCRIPTS_DIR).lock
CLI_ESCRIPTS_LOCK = $(CLI_ESCRIPTS_DIR).lock
install-cli: install-cli-scripts install-cli-escripts
@:
ifeq ($(PROJECT),rabbit) ifeq ($(PROJECT),rabbit)
cli-scripts: install-cli-scripts:
$(gen_verbose) rm -rf "$(CLI_SCRIPTS_DIR)" $(gen_verbose) \
$(verbose) cp -a scripts $(CLI_SCRIPTS_DIR) if command -v flock >/dev/null; then \
flock $(CLI_SCRIPTS_LOCK) \
sh -c 'mkdir -p "$(CLI_SCRIPTS_DIR)" && \
for file in scripts/*; do \
cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \
cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \
done'; \
elif command -v lockf >/dev/null; then \
lockf $(CLI_SCRIPTS_LOCK) \
sh -c 'mkdir -p "$(CLI_SCRIPTS_DIR)" && \
for file in scripts/*; do \
cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \
cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \
done'; \
else \
mkdir -p "$(CLI_SCRIPTS_DIR)" && \
for file in scripts/*; do \
cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \
cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \
done; \
fi
else else
cli-scripts: install-cli-scripts:
$(gen_verbose) rm -rf "$(CLI_SCRIPTS_DIR)" $(gen_verbose) \
$(verbose) cp -a $(DEPS_DIR)/rabbit/scripts $(CLI_SCRIPTS_DIR) if command -v flock >/dev/null; then \
flock $(CLI_SCRIPTS_LOCK) \
sh -c 'mkdir -p "$(CLI_SCRIPTS_DIR)" && \
for file in "$(DEPS_DIR)/rabbit/scripts"/*; do \
cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \
cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \
done'; \
elif command -v lockf >/dev/null; then \
lockf $(CLI_SCRIPTS_LOCK) \
sh -c 'mkdir -p "$(CLI_SCRIPTS_DIR)" && \
for file in "$(DEPS_DIR)/rabbit/scripts"/*; do \
cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \
cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \
done'; \
else \
mkdir -p "$(CLI_SCRIPTS_DIR)" && \
for file in "$(DEPS_DIR)/rabbit/scripts"/*; do \
cmp -s "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")" || \
cp -a "$$file" "$(CLI_SCRIPTS_DIR)/$$(basename "$$file")"; \
done; \
fi
endif endif
cli-escripts: install-cli-escripts:
$(gen_verbose) rm -rf "$(CLI_ESCRIPTS_DIR)" $(gen_verbose) \
$(verbose) $(MAKE) -C $(DEPS_DIR)/rabbitmq_cli install \ if command -v flock >/dev/null; then \
PREFIX="$(abspath $(CLI_ESCRIPTS_DIR))" \ flock $(CLI_ESCRIPTS_LOCK) \
DESTDIR= sh -c 'mkdir -p "$(CLI_ESCRIPTS_DIR)" && \
$(MAKE) -C "$(DEPS_DIR)/rabbitmq_cli" install \
PREFIX="$(abspath $(CLI_ESCRIPTS_DIR))" \
DESTDIR='; \
elif command -v lockf >/dev/null; then \
lockf $(CLI_ESCRIPTS_LOCK) \
sh -c 'mkdir -p "$(CLI_ESCRIPTS_DIR)" && \
$(MAKE) -C "$(DEPS_DIR)/rabbitmq_cli" install \
PREFIX="$(abspath $(CLI_ESCRIPTS_DIR))" \
DESTDIR='; \
else \
mkdir -p "$(CLI_ESCRIPTS_DIR)" && \
$(MAKE) -C "$(DEPS_DIR)/rabbitmq_cli" install \
PREFIX="$(abspath $(CLI_ESCRIPTS_DIR))" \
DESTDIR= ; \
fi
clean-dist:: clean-dist::
$(gen_verbose) rm -rf \ $(gen_verbose) rm -rf \