@@ -134,30 +134,17 @@ define restore_hex_cache_from_erl_term
134
134
endef
135
135
136
136
# --------------------------------------------------------------------
137
- # Distribution.
137
+ # Distribution - common variables and generic functions .
138
138
# --------------------------------------------------------------------
139
139
140
- .PHONY : source-dist clean-source-dist
141
-
142
- SOURCE_DIST_BASE ?= rabbitmq-server
143
- SOURCE_DIST_SUFFIXES ?= tar.xz
144
- SOURCE_DIST ?= $(PACKAGES_DIR ) /$(SOURCE_DIST_BASE ) -$(PROJECT_VERSION )
145
-
146
- # The first source distribution file is used by packages: if the archive
147
- # type changes, you must update all packages' Makefile.
148
- SOURCE_DIST_FILES = $(addprefix $(SOURCE_DIST ) .,$(SOURCE_DIST_SUFFIXES ) )
149
-
150
- .PHONY : $(SOURCE_DIST_FILES )
151
-
152
- source-dist : $(SOURCE_DIST_FILES )
153
- @:
154
-
155
140
RSYNC ?= rsync
156
141
RSYNC_V_0 =
157
142
RSYNC_V_1 = -v
158
143
RSYNC_V_2 = -v
159
144
RSYNC_V = $(RSYNC_V_$(V ) )
160
- RSYNC_FLAGS += -a $(RSYNC_V ) \
145
+ BASE_RSYNC_FLAGS += -a $(RSYNC_V ) \
146
+ --delete \
147
+ --delete-excluded \
161
148
--exclude '.sw?' --exclude '.*.sw?' \
162
149
--exclude '*.beam' \
163
150
--exclude '*.d' \
@@ -188,12 +175,10 @@ RSYNC_FLAGS += -a $(RSYNC_V) \
188
175
--exclude '$(notdir $(DEPS_DIR ) ) /' \
189
176
--exclude 'hexer*' \
190
177
--exclude 'logs/' \
191
- --exclude 'packaging' \
192
178
--exclude 'PKG_*.md' \
193
179
--exclude '/plugins/' \
194
180
--include 'cli/plugins' \
195
181
--exclude '$(notdir $(DIST_DIR ) ) /' \
196
- --exclude 'test' \
197
182
--exclude '/$(notdir $(PACKAGES_DIR ) ) /' \
198
183
--exclude '/PACKAGES/' \
199
184
--exclude '/amqp_client/doc/' \
@@ -208,9 +193,21 @@ RSYNC_FLAGS += -a $(RSYNC_V) \
208
193
--exclude '/ranch/doc/' \
209
194
--exclude '/ranch/examples/' \
210
195
--exclude '/sockjs/examples/' \
211
- --exclude '/workflow_sources/' \
212
- --delete \
213
- --delete-excluded
196
+ --exclude '/workflow_sources/'
197
+
198
+ SOURCE_DIST_RSYNC_FLAGS += $(BASE_RSYNC_FLAGS ) \
199
+ --exclude 'packaging' \
200
+ --exclude 'test'
201
+
202
+ # For source-bundle, explicitly include folders that are needed
203
+ # for tests to execute. These are added before excludes from
204
+ # the base flags so rsync honors the first match.
205
+ SOURCE_BUNDLE_RSYNC_FLAGS += \
206
+ --include 'rabbit_shovel_test/ebin' \
207
+ --include 'rabbit_shovel_test/ebin/*' \
208
+ --include 'rabbitmq_ct_helpers/tools' \
209
+ --include 'rabbitmq_ct_helpers/tools/*' \
210
+ $(BASE_RSYNC_FLAGS )
214
211
215
212
TAR ?= tar
216
213
TAR_V_0 =
@@ -228,65 +225,125 @@ ZIP_V_1 =
228
225
ZIP_V_2 =
229
226
ZIP_V = $(ZIP_V_$(V ) )
230
227
231
- .PHONY : $(SOURCE_DIST )
232
- .PHONY : clean-source-dist distclean-packages clean-unpacked-source-dist
233
-
234
- $(SOURCE_DIST ) : $(ERLANG_MK_RECURSIVE_DEPS_LIST )
235
- $(verbose ) mkdir -p $(dir $@ )
236
- $(gen_verbose ) $(RSYNC ) $(RSYNC_FLAGS ) ./ $@ /
237
- $(verbose ) echo " $( PROJECT_DESCRIPTION) $( PROJECT_VERSION) " > " $@ /git-revisions.txt"
238
- $(verbose ) echo " $( PROJECT) $$ (git rev-parse HEAD) $$ (git describe --tags --exact-match 2>/dev/null || git symbolic-ref -q --short HEAD)" >> " $@ /git-revisions.txt"
239
- $(verbose ) echo " $$ (TZ= git --no-pager log -n 1 --format='%cd' --date='format-local:%Y%m%d%H%M.%S')" > " $@ .git-times.txt"
240
- $(verbose ) cat packaging/common/LICENSE.head > $@ /LICENSE
241
- $(verbose ) mkdir -p $@ /deps/licensing
242
- $(verbose ) set -e; for dep in $$ (cat $( ERLANG_MK_RECURSIVE_DEPS_LIST) | LC_COLLATE=C sort); do \
243
- $(RSYNC ) $(RSYNC_FLAGS ) \
244
- $$ dep \
245
- $@ /deps; \
228
+ ifeq ($(shell tar --version | grep -c "GNU tar") ,0)
229
+ # Skip all flags if this is Darwin (a.k.a. macOS, a.k.a. OS X)
230
+ ifeq ($(shell uname | grep -c "Darwin") ,0)
231
+ TAR_FLAGS_FOR_REPRODUCIBLE_BUILDS = --uid 0 \
232
+ --gid 0 \
233
+ --numeric-owner \
234
+ --no-acls \
235
+ --no-fflags \
236
+ --no-xattrs
237
+ endif
238
+ else
239
+ TAR_FLAGS_FOR_REPRODUCIBLE_BUILDS = --owner 0 \
240
+ --group 0 \
241
+ --numeric-owner
242
+ endif
243
+
244
+ DIST_SUFFIXES ?= tar.xz
245
+
246
+ # Function to create distribution targets
247
+ # Args: $(1) - Full distribution path
248
+ # $(2) - RSYNC flags to use
249
+ define create_dist_target
250
+ $(1 ) : $(ERLANG_MK_RECURSIVE_DEPS_LIST )
251
+ $${verbose} mkdir -p $$(dir $$@ )
252
+ $${gen_verbose} $${RSYNC} $(2 ) ./ $$@ /
253
+ $${verbose} echo "$(PROJECT_DESCRIPTION ) $(PROJECT_VERSION ) " > $$@ /git-revisions.txt
254
+ $${verbose} echo "$(PROJECT ) $$$$(git rev-parse HEAD ) $$$$(git describe --tags --exact-match 2>/dev/null || git symbolic-ref -q --short HEAD ) " >> $$@ /git-revisions.txt
255
+ $${verbose} echo "$$$$(TZ= git --no-pager log -n 1 --format='%cd' --date='format-local:%Y%m%d%H%M.%S' ) " > $$@ .git-times.txt
256
+ $${verbose} cat packaging/common/LICENSE.head > $$@ /LICENSE
257
+ $${verbose} mkdir -p $$@ /deps/licensing
258
+ $${verbose} set -e; for dep in $$$$(cat $(ERLANG_MK_RECURSIVE_DEPS_LIST ) | LC_COLLATE=C sort ) ; do \
259
+ $${RSYNC} $(2 ) \
260
+ $$$$dep \
261
+ $$@ /deps; \
246
262
rm -f \
247
- $@ /deps/rabbit_common/rebar.config \
248
- $@ /deps/rabbit_common/rebar.lock; \
249
- if test -f $@ /deps/$$ (basename $$ dep)/erlang.mk && \
250
- test " $$ (wc -l $@ /deps/$$ (basename $$ dep)/erlang.mk | awk '{print $$ 1;}')" = " 1" && \
251
- grep -qs -E " ^[[:blank:]]*include[[:blank:]]+(erlang\.mk|.*/erlang\.mk)$$ " $@ /deps/$$(basename $$dep) /erlang.mk; then \
252
- echo " include ../../erlang.mk" > $@ /deps/$$(basename $$dep) /erlang.mk; \
263
+ $$ @ /deps/rabbit_common/rebar.config \
264
+ $$ @ /deps/rabbit_common/rebar.lock; \
265
+ if test -f $$ @ /deps/$$$$ (basename $$ $$dep) /erlang.mk && \
266
+ test "$$$$ (wc -l $$ @ /deps/$$$$ (basename $$$$ dep) /erlang.mk | awk '{print $$ $$1;}' ) " = "1" && \
267
+ grep -qs -E "^[[:blank:]]*include[[:blank:]]+(erlang\.mk|.*/erlang\.mk)$$$$ " $$ @ /deps/$$$$ (basename $$ $$dep) /erlang.mk; then \
268
+ echo "include ../../erlang.mk" > $$ @ /deps/$$$$ (basename $$ $$dep) /erlang.mk; \
253
269
fi; \
254
- sed -E -i.bak " s|^[[:blank:]]*include[[:blank:]]+\.\./.*erlang.mk$$ |include ../../erlang.mk|" \
255
- $@ /deps/$$(basename $$dep) /Makefile && \
256
- rm $@ /deps/$$(basename $$dep) /Makefile.bak; \
257
- mix_exs=$@ /deps/$$(basename $$dep) /mix.exs; \
258
- if test -f $$ mix_exs; then \
259
- (cd $$ (dirname " $$ mix_exs" ) && \
260
- (test -d $@ /deps/.hex || env DEPS_DIR=$@ /deps MIX_HOME=$@ /deps/.mix HEX_HOME=$@ /deps/.hex MIX_ENV=prod FILL_HEX_CACHE=yes mix local.hex --force) && \
261
- env DEPS_DIR=$@ /deps MIX_HOME=$@ /deps/.mix HEX_HOME=$@ /deps/.hex MIX_ENV=prod FILL_HEX_CACHE=yes mix deps.get --only prod && \
270
+ sed -E -i.bak "s|^[[:blank:]]*include[[:blank:]]+\.\./.*erlang.mk$$$$ |include ../../erlang.mk|" \
271
+ $$ @ /deps/$$$$ (basename $$ $$dep) /Makefile && \
272
+ rm $$ @ /deps/$$$$ (basename $$ $$dep) /Makefile.bak; \
273
+ mix_exs=$$ @ /deps/$$$$ (basename $$ $$dep) /mix.exs; \
274
+ if test -f $$$$ mix_exs; then \
275
+ (cd $$$$ (dirname "$$ $$mix_exs" ) && \
276
+ (test -d $$ @ /deps/.hex || env DEPS_DIR=$$ @ /deps MIX_HOME=$$ @ /deps/.mix HEX_HOME=$ $@ /deps/.hex MIX_ENV=prod FILL_HEX_CACHE=yes mix local.hex --force) && \
277
+ env DEPS_DIR=$$ @ /deps MIX_HOME=$$ @ /deps/.mix HEX_HOME=$ $@ /deps/.hex MIX_ENV=prod FILL_HEX_CACHE=yes mix deps.get --only prod && \
262
278
cp $(CURDIR ) /mk/rabbitmq-mix.mk . && \
263
279
rm -rf _build deps); \
264
280
fi; \
265
- if test -f " $$ dep/license_info" ; then \
266
- cp " $$ dep/license_info" " $@ /deps/licensing/license_info_$$ (basename " $$ dep" )" ; \
267
- cat " $$ dep/license_info" >> $@ /LICENSE; \
281
+ if test -f "$$$$ dep/license_info"; then \
282
+ cp "$$$$ dep/license_info" "$$ @ /deps/licensing/license_info_$$$$ (basename $$$$ dep) "; \
283
+ cat "$$$$ dep/license_info" >> $ $@ /LICENSE; \
268
284
fi; \
269
- find " $$ dep" -maxdepth 1 -name ' LICENSE-*' -exec cp ' {}' $@ /deps/licensing \; ; \
270
- (cd $$ dep; \
271
- echo " $$ (basename " $$ dep" ) $$ (git rev-parse HEAD) $$ (git describe --tags --exact-match 2>/dev/null || git symbolic-ref -q --short HEAD)" ) \
272
- >> " $@ /git-revisions.txt" ; \
273
- ! test -d $$ dep/.git || (cd $$ dep; \
274
- echo " $$ (env TZ= git --no-pager log -n 1 --format='%cd' --date='format-local:%Y%m%d%H%M.%S')" ) \
275
- >> " $@ .git-times.txt" ; \
285
+ find "$$$$ dep" -maxdepth 1 -name 'LICENSE-*' -exec cp '{}' $ $@ /deps/licensing \; ; \
286
+ (cd $$$$ dep; \
287
+ echo "$$$$ (basename "$$$$ dep") $$$$ (git rev-parse HEAD ) $$ $$(git describe --tags --exact-match 2>/dev/null || git symbolic-ref -q --short HEAD ) ") \
288
+ >> "$$ @ /git-revisions.txt"; \
289
+ ! test -d $$$$ dep/.git || (cd $$ $$dep; \
290
+ echo "$$$$ (env TZ= git --no-pager log -n 1 --format='%cd' --date='format-local:%Y%m%d%H%M.%S' ) ") \
291
+ >> "$$ @ .git-times.txt"; \
276
292
done
277
- $( verbose ) cat packaging/common/LICENSE.tail >> $@ /LICENSE
278
- $( verbose ) find $@ /deps/licensing -name ' LICENSE-*' -exec cp ' {}' $@ \;
279
- $( verbose ) rm -rf $@ /deps/licensing
280
- $( verbose ) for file in $$ (find $@ -name ' *.app.src' ); do \
293
+ $${ verbose} cat packaging/common/LICENSE.tail >> $ $@ /LICENSE
294
+ $${ verbose} find $$ @ /deps/licensing -name 'LICENSE-*' -exec cp '{}' $ $@ \;
295
+ $${ verbose} rm -rf $ $@ /deps/licensing
296
+ $${ verbose} for file in $$$$ (find $ $@ -name '*.app.src' ) ; do \
281
297
sed -E -i.bak \
282
298
-e 's/[{]vsn[[:blank:]]*,[[:blank:]]*(""|"0.0.0")[[:blank:]]*}/{vsn, "$(PROJECT_VERSION ) "}/' \
283
299
-e 's/[{]broker_version_requirements[[:blank:]]*,[[:blank:]]*\[\][[:blank:]]*}/{broker_version_requirements, ["$(PROJECT_VERSION ) "]}/' \
284
- $$ file; \
285
- rm $$ file.bak; \
300
+ $$$$ file; \
301
+ rm $$$$ file.bak; \
286
302
done
287
- $(verbose ) echo " PLUGINS := $( PLUGINS) " > $@ /plugins.mk
288
- # Remember the latest Git timestamp.
289
- $(verbose) sort -r < "
[email protected] " | head -n 1 > "
[email protected] "
303
+ $${verbose} echo "PLUGINS := $(PLUGINS ) " > $$@ /plugins.mk
304
+ $${verbose} sort -r < "$$@ .git-times.txt" | head -n 1 > "$$@ .git-time.txt"
305
+ $${verbose} $$(call erlang,$$(call dump_hex_cache_to_erl_term,$$(call core_native_path,$$@ ) ,$$(call core_native_path,$$@ .git-time.txt) ) )
306
+ $${verbose} find $$@ -print0 | xargs -0 touch -t "$$$$(cat $$@ .git-time.txt ) "
307
+ $${verbose} rm "$$@ .git-times.txt" "$$@ .git-time.txt"
308
+
309
+ $(1 ) .manifest: $(1 )
310
+ $${gen_verbose} cd $$(dir $$@ ) && \
311
+ find $$(notdir $$< ) | LC_COLLATE=C sort > $$@
312
+
313
+ $(1 ) .tar.xz: $(1 ) .manifest
314
+ $${gen_verbose} cd $$(dir $$@ ) && \
315
+ $${TAR} $${TAR_V} $${TAR_FLAGS_FOR_REPRODUCIBLE_BUILDS} --no-recursion -T $$(notdir $$< ) -cf - | \
316
+ $${XZ} > $$@
317
+
318
+ $(1 ) .tar.gz: $(1 ) .manifest
319
+ $${gen_verbose} cd $$(dir $$@ ) && \
320
+ $${TAR} $${TAR_V} $${TAR_FLAGS_FOR_REPRODUCIBLE_BUILDS} --no-recursion -T $$(notdir $$< ) -cf - | \
321
+ $${GZIP} --best > $$@
322
+
323
+ $(1 ) .tar.bz2: $(1 ) .manifest
324
+ $${gen_verbose} cd $$(dir $$@ ) && \
325
+ $${TAR} $${TAR_V} $${TAR_FLAGS_FOR_REPRODUCIBLE_BUILDS} --no-recursion -T $$(notdir $$< ) -cf - | \
326
+ $${BZIP2} > $$@
327
+
328
+ $(1 ) .zip: $(1 ) .manifest
329
+ $${verbose} rm -f $$@
330
+ $${gen_verbose} cd $$(dir $$@ ) && \
331
+ $${ZIP} $${ZIP_V} --names-stdin $$@ < $$(notdir $$< )
332
+
333
+ endef
334
+
335
+ # Function to create clean targets
336
+ # Args: $(1) - Base name (e.g. SOURCE_DIST_BASE or BUNDLE_DIST_BASE)
337
+ define create_clean_targets
338
+ .PHONY: clean-$(1 )
339
+
340
+ clean-$(1 ) :
341
+ $${gen_verbose} rm -rf -- $(1 ) -*
342
+
343
+ # Add each clean target to the clean:: rule
344
+ clean:: clean-$(1 )
345
+ endef
346
+
290
347
# Mix Hex component requires a cache file, otherwise it refuses to build
291
348
# offline... That cache is an ETS table with all the applications we
292
349
# depend on, plus some versioning informations and checksums. There
@@ -300,11 +357,6 @@ $(SOURCE_DIST): $(ERLANG_MK_RECURSIVE_DEPS_LIST)
300
357
#
301
358
# The ETS file must be recreated before compiling RabbitMQ. See the
302
359
# `restore-hex-cache-ets-file` Make target.
303
- $(verbose) $(call erlang,$(call dump_hex_cache_to_erl_term,$(call core_native_path,$@),$(call core_native_path,
[email protected] )))
304
- # Fix file timestamps to have reproducible source archives.
305
- $(verbose) find $@ -print0 | xargs -0 touch -t "$$(cat "
[email protected] ")"
306
-
307
-
308
360
define dump_hex_cache_to_erl_term
309
361
In = "$(1 ) /deps/.hex/cache.ets",
310
362
Out = "$(1 ) /deps/.hex/cache.erl",
@@ -333,50 +385,35 @@ define dump_hex_cache_to_erl_term
333
385
init:stop().
334
386
endef
335
387
336
- $( SOURCE_DIST ) .manifest : $( SOURCE_DIST )
337
- $( gen_verbose ) cd $( dir $( SOURCE_DIST ) ) && \
338
- find $( notdir $( SOURCE_DIST ) ) | LC_COLLATE=C sort > $@
388
+ # --------------------------------------------------------------------
389
+ # Distribution - public targets
390
+ # --------------------------------------------------------------------
339
391
340
- ifeq ($(shell tar --version | grep -c "GNU tar") ,0)
341
- # Skip all flags if this is Darwin (a.k.a. macOS, a.k.a. OS X)
342
- ifeq ($(shell uname | grep -c "Darwin") ,0)
343
- TAR_FLAGS_FOR_REPRODUCIBLE_BUILDS = --uid 0 \
344
- --gid 0 \
345
- --numeric-owner \
346
- --no-acls \
347
- --no-fflags \
348
- --no-xattrs
349
- endif
350
- else
351
- TAR_FLAGS_FOR_REPRODUCIBLE_BUILDS = --owner 0 \
352
- --group 0 \
353
- --numeric-owner
354
- endif
392
+ SOURCE_DIST_BASE ?= rabbitmq-server
393
+ SOURCE_DIST ?= $(PACKAGES_DIR ) /$(SOURCE_DIST_BASE ) -$(PROJECT_VERSION )
394
+ SOURCE_DIST_FILES = $(addprefix $(SOURCE_DIST ) .,$(DIST_SUFFIXES ) )
355
395
356
- $(SOURCE_DIST ) .tar.gz : $(SOURCE_DIST ) .manifest
357
- $(gen_verbose ) cd $(dir $(SOURCE_DIST ) ) && \
358
- $(TAR ) $(TAR_V ) $(TAR_FLAGS_FOR_REPRODUCIBLE_BUILDS ) --no-recursion -T $(SOURCE_DIST ) .manifest -cf - | \
359
- $(GZIP ) --best > $@
396
+ .PHONY : source-dist
397
+ source-dist : $(SOURCE_DIST_FILES )
398
+ @:
399
+
400
+ $(eval $(call create_dist_target,$(SOURCE_DIST),$(SOURCE_DIST_RSYNC_FLAGS)))
360
401
361
- $(SOURCE_DIST ) .tar.bz2 : $(SOURCE_DIST ) .manifest
362
- $(gen_verbose ) cd $(dir $(SOURCE_DIST ) ) && \
363
- $(TAR ) $(TAR_V ) $(TAR_FLAGS_FOR_REPRODUCIBLE_BUILDS ) --no-recursion -T $(SOURCE_DIST ) .manifest -cf - | \
364
- $(BZIP2 ) > $@
402
+ SOURCE_BUNDLE_BASE ?= rabbitmq-server-bundle
403
+ SOURCE_BUNDLE_DIST ?= $(PACKAGES_DIR ) /$(SOURCE_BUNDLE_BASE ) -$(PROJECT_VERSION )
404
+ SOURCE_BUNDLE_FILES = $(addprefix $(SOURCE_BUNDLE_DIST ) .,$(DIST_SUFFIXES ) )
365
405
366
- $(SOURCE_DIST ) .tar.xz : $(SOURCE_DIST ) .manifest
367
- $(gen_verbose ) cd $(dir $(SOURCE_DIST ) ) && \
368
- $(TAR ) $(TAR_V ) $(TAR_FLAGS_FOR_REPRODUCIBLE_BUILDS ) --no-recursion -T $(SOURCE_DIST ) .manifest -cf - | \
369
- $(XZ ) > $@
406
+ .PHONY : source-bundle
407
+ source-bundle : $(SOURCE_BUNDLE_FILES )
408
+ @:
370
409
371
- $(SOURCE_DIST ) .zip : $(SOURCE_DIST ) .manifest
372
- $(verbose ) rm -f $@
373
- $(gen_verbose ) cd $(dir $(SOURCE_DIST ) ) && \
374
- $(ZIP ) $(ZIP_V ) --names-stdin $@ < $(SOURCE_DIST ) .manifest
410
+ $(eval $(call create_dist_target,$(SOURCE_BUNDLE_DIST),$(SOURCE_BUNDLE_RSYNC_FLAGS)))
375
411
376
- clean :: clean-source-dist
412
+ # Create the clean targets for both distributions
413
+ $(eval $(call create_clean_targets,$(SOURCE_DIST_BASE)))
414
+ $(eval $(call create_clean_targets,$(SOURCE_BUNDLE_BASE)))
377
415
378
- clean-source-dist :
379
- $(gen_verbose ) rm -rf -- $(SOURCE_DIST_BASE ) -*
416
+ .PHONY : distclean-packages clean-unpacked-source-dist
380
417
381
418
distclean :: distclean-packages
382
419
0 commit comments