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:
		
							parent
							
								
									5840834fa8
								
							
						
					
					
						commit
						12d48ff717
					
				|  | @ -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 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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 \
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue