Skip to content

Commit b4c56c5

Browse files
merge branch 'stable'
1 parent 3944d66 commit b4c56c5

File tree

1 file changed

+324
-0
lines changed

1 file changed

+324
-0
lines changed

rabbitmq-components.mk

Lines changed: 324 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,324 @@
1+
ifeq ($(.DEFAULT_GOAL),)
2+
# Define default goal to `all` because this file defines some targets
3+
# before the inclusion of erlang.mk leading to the wrong target becoming
4+
# the default.
5+
.DEFAULT_GOAL = all
6+
endif
7+
8+
# PROJECT_VERSION defaults to:
9+
# 1. the version exported by rabbitmq-server-release;
10+
# 2. the version stored in `git-revisions.txt`, if it exists;
11+
# 3. a version based on git-describe(1), if it is a Git clone;
12+
# 4. 0.0.0
13+
14+
PROJECT_VERSION := $(RABBITMQ_VERSION)
15+
16+
ifeq ($(PROJECT_VERSION),)
17+
PROJECT_VERSION := $(shell \
18+
if test -f git-revisions.txt; then \
19+
head -n1 git-revisions.txt | \
20+
awk '{print $$$(words $(PROJECT_DESCRIPTION) version);}'; \
21+
else \
22+
(git describe --dirty --abbrev=7 --tags --always --first-parent \
23+
2>/dev/null || echo rabbitmq_v0_0_0) | \
24+
sed -e 's/^rabbitmq_v//' -e 's/^v//' -e 's/_/./g' -e 's/-/+/' \
25+
-e 's/-/./g'; \
26+
fi)
27+
endif
28+
29+
# --------------------------------------------------------------------
30+
# RabbitMQ components.
31+
# --------------------------------------------------------------------
32+
33+
# For RabbitMQ repositories, we want to checkout branches which match
34+
# the parent project. For instance, if the parent project is on a
35+
# release tag, dependencies must be on the same release tag. If the
36+
# parent project is on a topic branch, dependencies must be on the same
37+
# topic branch or fallback to `stable` or `master` whichever was the
38+
# base of the topic branch.
39+
40+
dep_amqp_client = git_rmq rabbitmq-erlang-client $(current_rmq_ref) $(base_rmq_ref) master
41+
dep_rabbit = git_rmq rabbitmq-server $(current_rmq_ref) $(base_rmq_ref) master
42+
dep_rabbit_common = git_rmq rabbitmq-common $(current_rmq_ref) $(base_rmq_ref) master
43+
dep_rabbitmq_amqp1_0 = git_rmq rabbitmq-amqp1.0 $(current_rmq_ref) $(base_rmq_ref) master
44+
dep_rabbitmq_auth_backend_amqp = git_rmq rabbitmq-auth-backend-amqp $(current_rmq_ref) $(base_rmq_ref) master
45+
dep_rabbitmq_auth_backend_cache = git_rmq rabbitmq-auth-backend-cache $(current_rmq_ref) $(base_rmq_ref) master
46+
dep_rabbitmq_auth_backend_http = git_rmq rabbitmq-auth-backend-http $(current_rmq_ref) $(base_rmq_ref) master
47+
dep_rabbitmq_auth_backend_ldap = git_rmq rabbitmq-auth-backend-ldap $(current_rmq_ref) $(base_rmq_ref) master
48+
dep_rabbitmq_auth_mechanism_ssl = git_rmq rabbitmq-auth-mechanism-ssl $(current_rmq_ref) $(base_rmq_ref) master
49+
dep_rabbitmq_boot_steps_visualiser = git_rmq rabbitmq-boot-steps-visualiser $(current_rmq_ref) $(base_rmq_ref) master
50+
dep_rabbitmq_clusterer = git_rmq rabbitmq-clusterer $(current_rmq_ref) $(base_rmq_ref) master
51+
dep_rabbitmq_cli = git_rmq rabbitmq-cli $(current_rmq_ref) $(base_rmq_ref) master
52+
dep_rabbitmq_codegen = git_rmq rabbitmq-codegen $(current_rmq_ref) $(base_rmq_ref) master
53+
dep_rabbitmq_consistent_hash_exchange = git_rmq rabbitmq-consistent-hash-exchange $(current_rmq_ref) $(base_rmq_ref) master
54+
dep_rabbitmq_ct_client_helpers = git_rmq rabbitmq-ct-client-helpers $(current_rmq_ref) $(base_rmq_ref) master
55+
dep_rabbitmq_ct_helpers = git_rmq rabbitmq-ct-helpers $(current_rmq_ref) $(base_rmq_ref) master
56+
dep_rabbitmq_delayed_message_exchange = git_rmq rabbitmq-delayed-message-exchange $(current_rmq_ref) $(base_rmq_ref) master
57+
dep_rabbitmq_dotnet_client = git_rmq rabbitmq-dotnet-client $(current_rmq_ref) $(base_rmq_ref) master
58+
dep_rabbitmq_event_exchange = git_rmq rabbitmq-event-exchange $(current_rmq_ref) $(base_rmq_ref) master
59+
dep_rabbitmq_federation = git_rmq rabbitmq-federation $(current_rmq_ref) $(base_rmq_ref) master
60+
dep_rabbitmq_federation_management = git_rmq rabbitmq-federation-management $(current_rmq_ref) $(base_rmq_ref) master
61+
dep_rabbitmq_java_client = git_rmq rabbitmq-java-client $(current_rmq_ref) $(base_rmq_ref) master
62+
dep_rabbitmq_jms_client = git_rmq rabbitmq-jms-client $(current_rmq_ref) $(base_rmq_ref) master
63+
dep_rabbitmq_jms_cts = git_rmq rabbitmq-jms-cts $(current_rmq_ref) $(base_rmq_ref) master
64+
dep_rabbitmq_jms_topic_exchange = git_rmq rabbitmq-jms-topic-exchange $(current_rmq_ref) $(base_rmq_ref) master
65+
dep_rabbitmq_lvc = git_rmq rabbitmq-lvc-plugin $(current_rmq_ref) $(base_rmq_ref) master
66+
dep_rabbitmq_management = git_rmq rabbitmq-management $(current_rmq_ref) $(base_rmq_ref) master
67+
dep_rabbitmq_management_agent = git_rmq rabbitmq-management-agent $(current_rmq_ref) $(base_rmq_ref) master
68+
dep_rabbitmq_management_exchange = git_rmq rabbitmq-management-exchange $(current_rmq_ref) $(base_rmq_ref) master
69+
dep_rabbitmq_management_themes = git_rmq rabbitmq-management-themes $(current_rmq_ref) $(base_rmq_ref) master
70+
dep_rabbitmq_management_visualiser = git_rmq rabbitmq-management-visualiser $(current_rmq_ref) $(base_rmq_ref) master
71+
dep_rabbitmq_message_timestamp = git_rmq rabbitmq-message-timestamp $(current_rmq_ref) $(base_rmq_ref) master
72+
dep_rabbitmq_metronome = git_rmq rabbitmq-metronome $(current_rmq_ref) $(base_rmq_ref) master
73+
dep_rabbitmq_mqtt = git_rmq rabbitmq-mqtt $(current_rmq_ref) $(base_rmq_ref) master
74+
dep_rabbitmq_objc_client = git_rmq rabbitmq-objc-client $(current_rmq_ref) $(base_rmq_ref) master
75+
dep_rabbitmq_peer_discovery_aws = git_rmq rabbitmq-peer-discovery-aws $(current_rmq_ref) $(base_rmq_ref) master
76+
dep_rabbitmq_peer_discovery_common = git_rmq rabbitmq-peer-discovery-common $(current_rmq_ref) $(base_rmq_ref) master
77+
dep_rabbitmq_peer_discovery_consul = git_rmq rabbitmq-peer-discovery-consul $(current_rmq_ref) $(base_rmq_ref) master
78+
dep_rabbitmq_recent_history_exchange = git_rmq rabbitmq-recent-history-exchange $(current_rmq_ref) $(base_rmq_ref) master
79+
dep_rabbitmq_routing_node_stamp = git_rmq rabbitmq-routing-node-stamp $(current_rmq_ref) $(base_rmq_ref) master
80+
dep_rabbitmq_rtopic_exchange = git_rmq rabbitmq-rtopic-exchange $(current_rmq_ref) $(base_rmq_ref) master
81+
dep_rabbitmq_server_release = git_rmq rabbitmq-server-release $(current_rmq_ref) $(base_rmq_ref) master
82+
dep_rabbitmq_sharding = git_rmq rabbitmq-sharding $(current_rmq_ref) $(base_rmq_ref) master
83+
dep_rabbitmq_shovel = git_rmq rabbitmq-shovel $(current_rmq_ref) $(base_rmq_ref) master
84+
dep_rabbitmq_shovel_management = git_rmq rabbitmq-shovel-management $(current_rmq_ref) $(base_rmq_ref) master
85+
dep_rabbitmq_stomp = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
86+
dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
87+
dep_rabbitmq_top = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
88+
dep_rabbitmq_tracing = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
89+
dep_rabbitmq_trust_store = git_rmq rabbitmq-trust-store $(current_rmq_ref) $(base_rmq_ref) master
90+
dep_rabbitmq_test = git_rmq rabbitmq-test $(current_rmq_ref) $(base_rmq_ref) master
91+
dep_rabbitmq_web_dispatch = git_rmq rabbitmq-web-dispatch $(current_rmq_ref) $(base_rmq_ref) master
92+
dep_rabbitmq_web_stomp = git_rmq rabbitmq-web-stomp $(current_rmq_ref) $(base_rmq_ref) master
93+
dep_rabbitmq_web_stomp_examples = git_rmq rabbitmq-web-stomp-examples $(current_rmq_ref) $(base_rmq_ref) master
94+
dep_rabbitmq_web_mqtt = git_rmq rabbitmq-web-mqtt $(current_rmq_ref) $(base_rmq_ref) master
95+
dep_rabbitmq_web_mqtt_examples = git_rmq rabbitmq-web-mqtt-examples $(current_rmq_ref) $(base_rmq_ref) master
96+
dep_rabbitmq_website = git_rmq rabbitmq-website $(current_rmq_ref) $(base_rmq_ref) live master
97+
dep_toke = git_rmq toke $(current_rmq_ref) $(base_rmq_ref) master
98+
99+
dep_rabbitmq_public_umbrella = git_rmq rabbitmq-public-umbrella $(current_rmq_ref) $(base_rmq_ref) master
100+
101+
# Third-party dependencies version pinning.
102+
#
103+
# We do that in this file, which is copied in all projects, to ensure
104+
# all projects use the same versions. It avoids conflicts and makes it
105+
# possible to work with rabbitmq-public-umbrella.
106+
107+
dep_cowboy_commit = 1.1.0
108+
dep_mochiweb = git git://github.com/basho/mochiweb.git v2.9.0p2
109+
dep_ranch_commit = 1.3.2
110+
dep_sockjs = git https://github.com/rabbitmq/sockjs-erlang.git 405990ea62353d98d36dbf5e1e64942d9b0a1daf
111+
dep_webmachine_commit = 1.10.8p2
112+
dep_ranch_proxy_protocol = git git://github.com/heroku/ranch_proxy_protocol.git 1.4.2
113+
114+
RABBITMQ_COMPONENTS = amqp_client \
115+
rabbit \
116+
rabbit_common \
117+
rabbitmq_amqp1_0 \
118+
rabbitmq_auth_backend_amqp \
119+
rabbitmq_auth_backend_cache \
120+
rabbitmq_auth_backend_http \
121+
rabbitmq_auth_backend_ldap \
122+
rabbitmq_auth_mechanism_ssl \
123+
rabbitmq_boot_steps_visualiser \
124+
rabbitmq_clusterer \
125+
rabbitmq_cli \
126+
rabbitmq_codegen \
127+
rabbitmq_consistent_hash_exchange \
128+
rabbitmq_ct_client_helpers \
129+
rabbitmq_ct_helpers \
130+
rabbitmq_delayed_message_exchange \
131+
rabbitmq_dotnet_client \
132+
rabbitmq_event_exchange \
133+
rabbitmq_federation \
134+
rabbitmq_federation_management \
135+
rabbitmq_java_client \
136+
rabbitmq_jms_client \
137+
rabbitmq_jms_cts \
138+
rabbitmq_jms_topic_exchange \
139+
rabbitmq_lvc \
140+
rabbitmq_management \
141+
rabbitmq_management_agent \
142+
rabbitmq_management_exchange \
143+
rabbitmq_management_themes \
144+
rabbitmq_management_visualiser \
145+
rabbitmq_message_timestamp \
146+
rabbitmq_metronome \
147+
rabbitmq_mqtt \
148+
rabbitmq_objc_client \
149+
rabbitmq_peer_discovery_aws \
150+
rabbitmq_peer_discovery_common \
151+
rabbitmq_peer_discovery_consul \
152+
rabbitmq_recent_history_exchange \
153+
rabbitmq_routing_node_stamp \
154+
rabbitmq_rtopic_exchange \
155+
rabbitmq_server_release \
156+
rabbitmq_sharding \
157+
rabbitmq_shovel \
158+
rabbitmq_shovel_management \
159+
rabbitmq_stomp \
160+
rabbitmq_toke \
161+
rabbitmq_top \
162+
rabbitmq_tracing \
163+
rabbitmq_trust_store \
164+
rabbitmq_web_dispatch \
165+
rabbitmq_web_mqtt \
166+
rabbitmq_web_mqtt_examples \
167+
rabbitmq_web_stomp \
168+
rabbitmq_web_stomp_examples \
169+
rabbitmq_website
170+
171+
# Several components have a custom erlang.mk/build.config, mainly
172+
# to disable eunit. Therefore, we can't use the top-level project's
173+
# erlang.mk copy.
174+
NO_AUTOPATCH += $(RABBITMQ_COMPONENTS)
175+
176+
ifeq ($(origin current_rmq_ref),undefined)
177+
ifneq ($(wildcard .git),)
178+
current_rmq_ref := $(shell (\
179+
ref=$$(git branch --list | awk '/^\* \(.*detached / {ref=$$0; sub(/.*detached [^ ]+ /, "", ref); sub(/\)$$/, "", ref); print ref; exit;} /^\* / {ref=$$0; sub(/^\* /, "", ref); print ref; exit}');\
180+
if test "$$(git rev-parse --short HEAD)" != "$$ref"; then echo "$$ref"; fi))
181+
else
182+
current_rmq_ref := master
183+
endif
184+
endif
185+
export current_rmq_ref
186+
187+
ifeq ($(origin base_rmq_ref),undefined)
188+
ifneq ($(wildcard .git),)
189+
base_rmq_ref := $(shell \
190+
(git rev-parse --verify -q stable >/dev/null && \
191+
git merge-base --is-ancestor $$(git merge-base master HEAD) stable && \
192+
echo stable) || \
193+
echo master)
194+
else
195+
base_rmq_ref := master
196+
endif
197+
endif
198+
export base_rmq_ref
199+
200+
# Repository URL selection.
201+
#
202+
# First, we infer other components' location from the current project
203+
# repository URL, if it's a Git repository:
204+
# - We take the "origin" remote URL as the base
205+
# - The current project name and repository name is replaced by the
206+
# target's properties:
207+
# eg. rabbitmq-common is replaced by rabbitmq-codegen
208+
# eg. rabbit_common is replaced by rabbitmq_codegen
209+
#
210+
# If cloning from this computed location fails, we fallback to RabbitMQ
211+
# upstream which is GitHub.
212+
213+
# Maccro to transform eg. "rabbit_common" to "rabbitmq-common".
214+
rmq_cmp_repo_name = $(word 2,$(dep_$(1)))
215+
216+
# Upstream URL for the current project.
217+
RABBITMQ_COMPONENT_REPO_NAME := $(call rmq_cmp_repo_name,$(PROJECT))
218+
RABBITMQ_UPSTREAM_FETCH_URL ?= https://github.com/rabbitmq/$(RABBITMQ_COMPONENT_REPO_NAME).git
219+
RABBITMQ_UPSTREAM_PUSH_URL ?= [email protected]:rabbitmq/$(RABBITMQ_COMPONENT_REPO_NAME).git
220+
221+
# Current URL for the current project. If this is not a Git clone,
222+
# default to the upstream Git repository.
223+
ifneq ($(wildcard .git),)
224+
git_origin_fetch_url := $(shell git config remote.origin.url)
225+
git_origin_push_url := $(shell git config remote.origin.pushurl || git config remote.origin.url)
226+
RABBITMQ_CURRENT_FETCH_URL ?= $(git_origin_fetch_url)
227+
RABBITMQ_CURRENT_PUSH_URL ?= $(git_origin_push_url)
228+
else
229+
RABBITMQ_CURRENT_FETCH_URL ?= $(RABBITMQ_UPSTREAM_FETCH_URL)
230+
RABBITMQ_CURRENT_PUSH_URL ?= $(RABBITMQ_UPSTREAM_PUSH_URL)
231+
endif
232+
233+
# Macro to replace the following pattern:
234+
# 1. /foo.git -> /bar.git
235+
# 2. /foo -> /bar
236+
# 3. /foo/ -> /bar/
237+
subst_repo_name = $(patsubst %/$(1)/%,%/$(2)/%,$(patsubst %/$(1),%/$(2),$(patsubst %/$(1).git,%/$(2).git,$(3))))
238+
239+
# Macro to replace both the project's name (eg. "rabbit_common") and
240+
# repository name (eg. "rabbitmq-common") by the target's equivalent.
241+
#
242+
# This macro is kept on one line because we don't want whitespaces in
243+
# the returned value, as it's used in $(dep_fetch_git_rmq) in a shell
244+
# single-quoted string.
245+
dep_rmq_repo = $(if $(dep_$(2)),$(call subst_repo_name,$(PROJECT),$(2),$(call subst_repo_name,$(RABBITMQ_COMPONENT_REPO_NAME),$(call rmq_cmp_repo_name,$(2)),$(1))),$(pkg_$(1)_repo))
246+
247+
dep_rmq_commits = $(if $(dep_$(1)), \
248+
$(wordlist 3,$(words $(dep_$(1))),$(dep_$(1))), \
249+
$(pkg_$(1)_commit))
250+
251+
define dep_fetch_git_rmq
252+
fetch_url1='$(call dep_rmq_repo,$(RABBITMQ_CURRENT_FETCH_URL),$(1))'; \
253+
fetch_url2='$(call dep_rmq_repo,$(RABBITMQ_UPSTREAM_FETCH_URL),$(1))'; \
254+
if test "$$$$fetch_url1" != '$(RABBITMQ_CURRENT_FETCH_URL)' && \
255+
git clone -q -n -- "$$$$fetch_url1" $(DEPS_DIR)/$(call dep_name,$(1)); then \
256+
fetch_url="$$$$fetch_url1"; \
257+
push_url='$(call dep_rmq_repo,$(RABBITMQ_CURRENT_PUSH_URL),$(1))'; \
258+
elif git clone -q -n -- "$$$$fetch_url2" $(DEPS_DIR)/$(call dep_name,$(1)); then \
259+
fetch_url="$$$$fetch_url2"; \
260+
push_url='$(call dep_rmq_repo,$(RABBITMQ_UPSTREAM_PUSH_URL),$(1))'; \
261+
fi; \
262+
cd $(DEPS_DIR)/$(call dep_name,$(1)) && ( \
263+
$(foreach ref,$(call dep_rmq_commits,$(1)), \
264+
git checkout -q $(ref) >/dev/null 2>&1 || \
265+
) \
266+
(echo "error: no valid pathspec among: $(call dep_rmq_commits,$(1))" \
267+
1>&2 && false) ) && \
268+
(test "$$$$fetch_url" = "$$$$push_url" || \
269+
git remote set-url --push origin "$$$$push_url")
270+
endef
271+
272+
# --------------------------------------------------------------------
273+
# Component distribution.
274+
# --------------------------------------------------------------------
275+
276+
list-dist-deps::
277+
@:
278+
279+
prepare-dist::
280+
@:
281+
282+
# --------------------------------------------------------------------
283+
# rabbitmq-components.mk checks.
284+
# --------------------------------------------------------------------
285+
286+
# If this project is under the Umbrella project, we override $(DEPS_DIR)
287+
# to point to the Umbrella's one. We also disable `make distclean` so
288+
# $(DEPS_DIR) is not accidentally removed.
289+
290+
ifneq ($(wildcard ../../UMBRELLA.md),)
291+
UNDER_UMBRELLA = 1
292+
else ifneq ($(wildcard UMBRELLA.md),)
293+
UNDER_UMBRELLA = 1
294+
endif
295+
296+
ifeq ($(UNDER_UMBRELLA),1)
297+
ifneq ($(PROJECT),rabbitmq_public_umbrella)
298+
DEPS_DIR ?= $(abspath ..)
299+
endif
300+
301+
ifneq ($(filter distclean distclean-deps,$(MAKECMDGOALS)),)
302+
SKIP_DEPS = 1
303+
endif
304+
endif
305+
306+
UPSTREAM_RMQ_COMPONENTS_MK = $(DEPS_DIR)/rabbit_common/mk/rabbitmq-components.mk
307+
308+
check-rabbitmq-components.mk:
309+
$(verbose) cmp -s rabbitmq-components.mk \
310+
$(UPSTREAM_RMQ_COMPONENTS_MK) || \
311+
(echo "error: rabbitmq-components.mk must be updated!" 1>&2; \
312+
false)
313+
314+
ifeq ($(PROJECT),rabbit_common)
315+
rabbitmq-components-mk:
316+
@:
317+
else
318+
rabbitmq-components-mk:
319+
$(gen_verbose) cp -a $(UPSTREAM_RMQ_COMPONENTS_MK) .
320+
ifeq ($(DO_COMMIT),yes)
321+
$(verbose) git diff --quiet rabbitmq-components.mk \
322+
|| git commit -m 'Update rabbitmq-components.mk' rabbitmq-components.mk
323+
endif
324+
endif

0 commit comments

Comments
 (0)