]> review.fuel-infra Code Review - packages/trusty/rabbitmq-server.git/blob - rabbitmq-server/deps/rabbitmq_jms_topic_exchange/rabbitmq-components.mk
Update rabbitmq-server
[packages/trusty/rabbitmq-server.git] / rabbitmq-server / deps / rabbitmq_jms_topic_exchange / rabbitmq-components.mk
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_amqp10_client                     = git_rmq rabbitmq-amqp1.0-client $(current_rmq_ref) $(base_rmq_ref) master
42 dep_amqp10_common                     = git_rmq rabbitmq-amqp1.0-common $(current_rmq_ref) $(base_rmq_ref) master
43 dep_rabbit                            = git_rmq rabbitmq-server $(current_rmq_ref) $(base_rmq_ref) master
44 dep_rabbit_common                     = git_rmq rabbitmq-common $(current_rmq_ref) $(base_rmq_ref) master
45 dep_rabbitmq_amqp1_0                  = git_rmq rabbitmq-amqp1.0 $(current_rmq_ref) $(base_rmq_ref) master
46 dep_rabbitmq_auth_backend_amqp        = git_rmq rabbitmq-auth-backend-amqp $(current_rmq_ref) $(base_rmq_ref) master
47 dep_rabbitmq_auth_backend_cache       = git_rmq rabbitmq-auth-backend-cache $(current_rmq_ref) $(base_rmq_ref) master
48 dep_rabbitmq_auth_backend_http        = git_rmq rabbitmq-auth-backend-http $(current_rmq_ref) $(base_rmq_ref) master
49 dep_rabbitmq_auth_backend_ldap        = git_rmq rabbitmq-auth-backend-ldap $(current_rmq_ref) $(base_rmq_ref) master
50 dep_rabbitmq_auth_mechanism_ssl       = git_rmq rabbitmq-auth-mechanism-ssl $(current_rmq_ref) $(base_rmq_ref) master
51 dep_rabbitmq_aws                      = git_rmq rabbitmq-aws $(current_rmq_ref) $(base_rmq_ref) master
52 dep_rabbitmq_boot_steps_visualiser    = git_rmq rabbitmq-boot-steps-visualiser $(current_rmq_ref) $(base_rmq_ref) master
53 dep_rabbitmq_clusterer                = git_rmq rabbitmq-clusterer $(current_rmq_ref) $(base_rmq_ref) master
54 dep_rabbitmq_cli                      = git_rmq rabbitmq-cli $(current_rmq_ref) $(base_rmq_ref) master
55 dep_rabbitmq_codegen                  = git_rmq rabbitmq-codegen $(current_rmq_ref) $(base_rmq_ref) master
56 dep_rabbitmq_consistent_hash_exchange = git_rmq rabbitmq-consistent-hash-exchange $(current_rmq_ref) $(base_rmq_ref) master
57 dep_rabbitmq_ct_client_helpers        = git_rmq rabbitmq-ct-client-helpers $(current_rmq_ref) $(base_rmq_ref) master
58 dep_rabbitmq_ct_helpers               = git_rmq rabbitmq-ct-helpers $(current_rmq_ref) $(base_rmq_ref) master
59 dep_rabbitmq_delayed_message_exchange = git_rmq rabbitmq-delayed-message-exchange $(current_rmq_ref) $(base_rmq_ref) master
60 dep_rabbitmq_dotnet_client            = git_rmq rabbitmq-dotnet-client $(current_rmq_ref) $(base_rmq_ref) master
61 dep_rabbitmq_event_exchange           = git_rmq rabbitmq-event-exchange $(current_rmq_ref) $(base_rmq_ref) master
62 dep_rabbitmq_federation               = git_rmq rabbitmq-federation $(current_rmq_ref) $(base_rmq_ref) master
63 dep_rabbitmq_federation_management    = git_rmq rabbitmq-federation-management $(current_rmq_ref) $(base_rmq_ref) master
64 dep_rabbitmq_java_client              = git_rmq rabbitmq-java-client $(current_rmq_ref) $(base_rmq_ref) master
65 dep_rabbitmq_jms_client               = git_rmq rabbitmq-jms-client $(current_rmq_ref) $(base_rmq_ref) master
66 dep_rabbitmq_jms_cts                  = git_rmq rabbitmq-jms-cts $(current_rmq_ref) $(base_rmq_ref) master
67 dep_rabbitmq_jms_topic_exchange       = git_rmq rabbitmq-jms-topic-exchange $(current_rmq_ref) $(base_rmq_ref) master
68 dep_rabbitmq_lvc_exchange             = git_rmq rabbitmq-lvc-exchange $(current_rmq_ref) $(base_rmq_ref) master
69 dep_rabbitmq_management               = git_rmq rabbitmq-management $(current_rmq_ref) $(base_rmq_ref) master
70 dep_rabbitmq_management_agent         = git_rmq rabbitmq-management-agent $(current_rmq_ref) $(base_rmq_ref) master
71 dep_rabbitmq_management_exchange      = git_rmq rabbitmq-management-exchange $(current_rmq_ref) $(base_rmq_ref) master
72 dep_rabbitmq_management_themes        = git_rmq rabbitmq-management-themes $(current_rmq_ref) $(base_rmq_ref) master
73 dep_rabbitmq_management_visualiser    = git_rmq rabbitmq-management-visualiser $(current_rmq_ref) $(base_rmq_ref) master
74 dep_rabbitmq_message_timestamp        = git_rmq rabbitmq-message-timestamp $(current_rmq_ref) $(base_rmq_ref) master
75 dep_rabbitmq_metronome                = git_rmq rabbitmq-metronome $(current_rmq_ref) $(base_rmq_ref) master
76 dep_rabbitmq_mqtt                     = git_rmq rabbitmq-mqtt $(current_rmq_ref) $(base_rmq_ref) master
77 dep_rabbitmq_objc_client              = git_rmq rabbitmq-objc-client $(current_rmq_ref) $(base_rmq_ref) master
78 dep_rabbitmq_peer_discovery_aws       = git_rmq rabbitmq-peer-discovery-aws $(current_rmq_ref) $(base_rmq_ref) master
79 dep_rabbitmq_peer_discovery_common    = git_rmq rabbitmq-peer-discovery-common $(current_rmq_ref) $(base_rmq_ref) master
80 dep_rabbitmq_peer_discovery_consul    = git_rmq rabbitmq-peer-discovery-consul $(current_rmq_ref) $(base_rmq_ref) master
81 dep_rabbitmq_peer_discovery_etcd      = git_rmq rabbitmq-peer-discovery-etcd $(current_rmq_ref) $(base_rmq_ref) master
82 dep_rabbitmq_peer_discovery_k8s       = git_rmq rabbitmq-peer-discovery-k8s $(current_rmq_ref) $(base_rmq_ref) master
83 dep_rabbitmq_random_exchange          = git_rmq rabbitmq-random-exchange $(current_rmq_ref) $(base_rmq_ref) master
84 dep_rabbitmq_recent_history_exchange  = git_rmq rabbitmq-recent-history-exchange $(current_rmq_ref) $(base_rmq_ref) master
85 dep_rabbitmq_routing_node_stamp       = git_rmq rabbitmq-routing-node-stamp $(current_rmq_ref) $(base_rmq_ref) master
86 dep_rabbitmq_rtopic_exchange          = git_rmq rabbitmq-rtopic-exchange $(current_rmq_ref) $(base_rmq_ref) master
87 dep_rabbitmq_server_release           = git_rmq rabbitmq-server-release $(current_rmq_ref) $(base_rmq_ref) master
88 dep_rabbitmq_sharding                 = git_rmq rabbitmq-sharding $(current_rmq_ref) $(base_rmq_ref) master
89 dep_rabbitmq_shovel                   = git_rmq rabbitmq-shovel $(current_rmq_ref) $(base_rmq_ref) master
90 dep_rabbitmq_shovel_management        = git_rmq rabbitmq-shovel-management $(current_rmq_ref) $(base_rmq_ref) master
91 dep_rabbitmq_stomp                    = git_rmq rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) master
92 dep_rabbitmq_toke                     = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) master
93 dep_rabbitmq_top                      = git_rmq rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) master
94 dep_rabbitmq_tracing                  = git_rmq rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) master
95 dep_rabbitmq_trust_store              = git_rmq rabbitmq-trust-store $(current_rmq_ref) $(base_rmq_ref) master
96 dep_rabbitmq_test                     = git_rmq rabbitmq-test $(current_rmq_ref) $(base_rmq_ref) master
97 dep_rabbitmq_web_dispatch             = git_rmq rabbitmq-web-dispatch $(current_rmq_ref) $(base_rmq_ref) master
98 dep_rabbitmq_web_stomp                = git_rmq rabbitmq-web-stomp $(current_rmq_ref) $(base_rmq_ref) master
99 dep_rabbitmq_web_stomp_examples       = git_rmq rabbitmq-web-stomp-examples $(current_rmq_ref) $(base_rmq_ref) master
100 dep_rabbitmq_web_mqtt                 = git_rmq rabbitmq-web-mqtt $(current_rmq_ref) $(base_rmq_ref) master
101 dep_rabbitmq_web_mqtt_examples        = git_rmq rabbitmq-web-mqtt-examples $(current_rmq_ref) $(base_rmq_ref) master
102 dep_rabbitmq_website                  = git_rmq rabbitmq-website $(current_rmq_ref) $(base_rmq_ref) live master
103 dep_toke                              = git_rmq toke $(current_rmq_ref) $(base_rmq_ref) master
104
105 dep_rabbitmq_public_umbrella          = git_rmq rabbitmq-public-umbrella $(current_rmq_ref) $(base_rmq_ref) master
106
107 # Third-party dependencies version pinning.
108 #
109 # We do that in this file, which is copied in all projects, to ensure
110 # all projects use the same versions. It avoids conflicts and makes it
111 # possible to work with rabbitmq-public-umbrella.
112
113 dep_cowboy = hex 1.0.4
114 dep_ranch = hex 1.3.2
115 dep_recon = hex 2.3.2
116
117 # Last commit of PropEr supporting Erlang R16B03.
118 dep_proper_commit = 735d972758d8bd85b12483626fe1b66450d6a6fe
119 # Last commit of sockjs support Erlang R16B03 and 17.x.
120 dep_sockjs = git https://github.com/rabbitmq/sockjs-erlang.git 5af2b588c812c318b19bc105b577a759c71c3e0a
121
122 RABBITMQ_COMPONENTS = amqp_client \
123                       amqp10_common \
124                       amqp10_client \
125                       rabbit \
126                       rabbit_common \
127                       rabbitmq_amqp1_0 \
128                       rabbitmq_auth_backend_amqp \
129                       rabbitmq_auth_backend_cache \
130                       rabbitmq_auth_backend_http \
131                       rabbitmq_auth_backend_ldap \
132                       rabbitmq_auth_mechanism_ssl \
133                       rabbitmq_aws \
134                       rabbitmq_boot_steps_visualiser \
135                       rabbitmq_clusterer \
136                       rabbitmq_cli \
137                       rabbitmq_codegen \
138                       rabbitmq_consistent_hash_exchange \
139                       rabbitmq_ct_client_helpers \
140                       rabbitmq_ct_helpers \
141                       rabbitmq_delayed_message_exchange \
142                       rabbitmq_dotnet_client \
143                       rabbitmq_event_exchange \
144                       rabbitmq_federation \
145                       rabbitmq_federation_management \
146                       rabbitmq_java_client \
147                       rabbitmq_jms_client \
148                       rabbitmq_jms_cts \
149                       rabbitmq_jms_topic_exchange \
150                       rabbitmq_lvc_exchange \
151                       rabbitmq_management \
152                       rabbitmq_management_agent \
153                       rabbitmq_management_exchange \
154                       rabbitmq_management_themes \
155                       rabbitmq_management_visualiser \
156                       rabbitmq_message_timestamp \
157                       rabbitmq_metronome \
158                       rabbitmq_mqtt \
159                       rabbitmq_objc_client \
160                       rabbitmq_peer_discovery_aws \
161                       rabbitmq_peer_discovery_common \
162                       rabbitmq_peer_discovery_consul \
163                       rabbitmq_peer_discovery_etcd \
164                       rabbitmq_peer_discovery_k8s \
165                       rabbitmq_random_exchange \
166                       rabbitmq_recent_history_exchange \
167                       rabbitmq_routing_node_stamp \
168                       rabbitmq_rtopic_exchange \
169                       rabbitmq_server_release \
170                       rabbitmq_sharding \
171                       rabbitmq_shovel \
172                       rabbitmq_shovel_management \
173                       rabbitmq_stomp \
174                       rabbitmq_toke \
175                       rabbitmq_top \
176                       rabbitmq_tracing \
177                       rabbitmq_trust_store \
178                       rabbitmq_web_dispatch \
179                       rabbitmq_web_mqtt \
180                       rabbitmq_web_mqtt_examples \
181                       rabbitmq_web_stomp \
182                       rabbitmq_web_stomp_examples \
183                       rabbitmq_website
184
185 # Several components have a custom erlang.mk/build.config, mainly
186 # to disable eunit. Therefore, we can't use the top-level project's
187 # erlang.mk copy.
188 NO_AUTOPATCH += $(RABBITMQ_COMPONENTS)
189
190 ifeq ($(origin current_rmq_ref),undefined)
191 ifneq ($(wildcard .git),)
192 current_rmq_ref := $(shell (\
193         ref=$$(LANG=C git branch --list | awk '/^\* \(.*detached / {ref=$$0; sub(/.*detached [^ ]+ /, "", ref); sub(/\)$$/, "", ref); print ref; exit;} /^\* / {ref=$$0; sub(/^\* /, "", ref); print ref; exit}');\
194         if test "$$(git rev-parse --short HEAD)" != "$$ref"; then echo "$$ref"; fi))
195 else
196 current_rmq_ref := master
197 endif
198 endif
199 export current_rmq_ref
200
201 ifeq ($(origin base_rmq_ref),undefined)
202 ifneq ($(wildcard .git),)
203 possible_base_rmq_ref := v3.6.x
204 ifeq ($(possible_base_rmq_ref),$(current_rmq_ref))
205 base_rmq_ref := $(current_rmq_ref)
206 else
207 base_rmq_ref := $(shell \
208         (git rev-parse --verify -q master >/dev/null && \
209          git rev-parse --verify -q $(possible_base_rmq_ref) >/dev/null && \
210          git merge-base --is-ancestor $$(git merge-base master HEAD) $(possible_base_rmq_ref) && \
211          echo $(possible_base_rmq_ref)) || \
212         echo master)
213 endif
214 else
215 base_rmq_ref := master
216 endif
217 endif
218 export base_rmq_ref
219
220 # Repository URL selection.
221 #
222 # First, we infer other components' location from the current project
223 # repository URL, if it's a Git repository:
224 #   - We take the "origin" remote URL as the base
225 # - The current project name and repository name is replaced by the
226 #   target's properties:
227 #       eg. rabbitmq-common is replaced by rabbitmq-codegen
228 #       eg. rabbit_common is replaced by rabbitmq_codegen
229 #
230 # If cloning from this computed location fails, we fallback to RabbitMQ
231 # upstream which is GitHub.
232
233 # Maccro to transform eg. "rabbit_common" to "rabbitmq-common".
234 rmq_cmp_repo_name = $(word 2,$(dep_$(1)))
235
236 # Upstream URL for the current project.
237 RABBITMQ_COMPONENT_REPO_NAME := $(call rmq_cmp_repo_name,$(PROJECT))
238 RABBITMQ_UPSTREAM_FETCH_URL ?= https://github.com/rabbitmq/$(RABBITMQ_COMPONENT_REPO_NAME).git
239 RABBITMQ_UPSTREAM_PUSH_URL ?= git@github.com:rabbitmq/$(RABBITMQ_COMPONENT_REPO_NAME).git
240
241 # Current URL for the current project. If this is not a Git clone,
242 # default to the upstream Git repository.
243 ifneq ($(wildcard .git),)
244 git_origin_fetch_url := $(shell git config remote.origin.url)
245 git_origin_push_url := $(shell git config remote.origin.pushurl || git config remote.origin.url)
246 RABBITMQ_CURRENT_FETCH_URL ?= $(git_origin_fetch_url)
247 RABBITMQ_CURRENT_PUSH_URL ?= $(git_origin_push_url)
248 else
249 RABBITMQ_CURRENT_FETCH_URL ?= $(RABBITMQ_UPSTREAM_FETCH_URL)
250 RABBITMQ_CURRENT_PUSH_URL ?= $(RABBITMQ_UPSTREAM_PUSH_URL)
251 endif
252
253 # Macro to replace the following pattern:
254 #   1. /foo.git -> /bar.git
255 #   2. /foo     -> /bar
256 #   3. /foo/    -> /bar/
257 subst_repo_name = $(patsubst %/$(1)/%,%/$(2)/%,$(patsubst %/$(1),%/$(2),$(patsubst %/$(1).git,%/$(2).git,$(3))))
258
259 # Macro to replace both the project's name (eg. "rabbit_common") and
260 # repository name (eg. "rabbitmq-common") by the target's equivalent.
261 #
262 # This macro is kept on one line because we don't want whitespaces in
263 # the returned value, as it's used in $(dep_fetch_git_rmq) in a shell
264 # single-quoted string.
265 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))
266
267 dep_rmq_commits = $(if $(dep_$(1)),                                     \
268                   $(wordlist 3,$(words $(dep_$(1))),$(dep_$(1))),       \
269                   $(pkg_$(1)_commit))
270
271 define dep_fetch_git_rmq
272         fetch_url1='$(call dep_rmq_repo,$(RABBITMQ_CURRENT_FETCH_URL),$(1))'; \
273         fetch_url2='$(call dep_rmq_repo,$(RABBITMQ_UPSTREAM_FETCH_URL),$(1))'; \
274         if test "$$$$fetch_url1" != '$(RABBITMQ_CURRENT_FETCH_URL)' && \
275          git clone -q -n -- "$$$$fetch_url1" $(DEPS_DIR)/$(call dep_name,$(1)); then \
276             fetch_url="$$$$fetch_url1"; \
277             push_url='$(call dep_rmq_repo,$(RABBITMQ_CURRENT_PUSH_URL),$(1))'; \
278         elif git clone -q -n -- "$$$$fetch_url2" $(DEPS_DIR)/$(call dep_name,$(1)); then \
279             fetch_url="$$$$fetch_url2"; \
280             push_url='$(call dep_rmq_repo,$(RABBITMQ_UPSTREAM_PUSH_URL),$(1))'; \
281         fi; \
282         cd $(DEPS_DIR)/$(call dep_name,$(1)) && ( \
283         $(foreach ref,$(call dep_rmq_commits,$(1)), \
284           git checkout -q $(ref) >/dev/null 2>&1 || \
285           ) \
286         (echo "error: no valid pathspec among: $(call dep_rmq_commits,$(1))" \
287           1>&2 && false) ) && \
288         (test "$$$$fetch_url" = "$$$$push_url" || \
289          git remote set-url --push origin "$$$$push_url")
290 endef
291
292 # --------------------------------------------------------------------
293 # Component distribution.
294 # --------------------------------------------------------------------
295
296 list-dist-deps::
297         @:
298
299 prepare-dist::
300         @:
301
302 # --------------------------------------------------------------------
303 # rabbitmq-components.mk checks.
304 # --------------------------------------------------------------------
305
306 # If this project is under the Umbrella project, we override $(DEPS_DIR)
307 # to point to the Umbrella's one. We also disable `make distclean` so
308 # $(DEPS_DIR) is not accidentally removed.
309
310 ifneq ($(wildcard ../../UMBRELLA.md),)
311 UNDER_UMBRELLA = 1
312 else ifneq ($(wildcard UMBRELLA.md),)
313 UNDER_UMBRELLA = 1
314 endif
315
316 ifeq ($(UNDER_UMBRELLA),1)
317 ifneq ($(PROJECT),rabbitmq_public_umbrella)
318 DEPS_DIR ?= $(abspath ..)
319 endif
320
321 ifneq ($(filter distclean distclean-deps,$(MAKECMDGOALS)),)
322 SKIP_DEPS = 1
323 endif
324 endif
325
326 UPSTREAM_RMQ_COMPONENTS_MK = $(DEPS_DIR)/rabbit_common/mk/rabbitmq-components.mk
327
328 ifeq ($(PROJECT),rabbit_common)
329 check-rabbitmq-components.mk:
330         @:
331 else
332 check-rabbitmq-components.mk:
333         $(verbose) cmp -s rabbitmq-components.mk \
334                 $(UPSTREAM_RMQ_COMPONENTS_MK) || \
335                 (echo "error: rabbitmq-components.mk must be updated!" 1>&2; \
336                   false)
337 endif
338
339 ifeq ($(PROJECT),rabbit_common)
340 rabbitmq-components-mk:
341         @:
342 else
343 rabbitmq-components-mk:
344         $(gen_verbose) cp -a $(UPSTREAM_RMQ_COMPONENTS_MK) .
345 ifeq ($(DO_COMMIT),yes)
346         $(verbose) git diff --quiet rabbitmq-components.mk \
347         || git commit -m 'Update rabbitmq-components.mk' rabbitmq-components.mk
348 endif
349 endif