|
| 1 | +VERSION=0.0.0 |
| 2 | +SOURCE_DIR=rabbitmq-server-$(VERSION) |
| 3 | +TARGET_DIR=rabbitmq_server-$(VERSION) |
| 4 | +TARGET_TARBALL=rabbitmq-server-$(OS)-standalone-$(VERSION) |
| 5 | +RLS_DIR=$(TARGET_DIR)/release/$(TARGET_DIR) |
| 6 | + |
| 7 | +ERTS_VSN=$(shell erl -noshell -eval 'io:format("~s", [erlang:system_info(version)]), halt().') |
| 8 | +ERTS_ROOT_DIR=$(shell erl -noshell -eval 'io:format("~s", [code:root_dir()]), halt().') |
| 9 | + |
| 10 | +# used to generate the erlang release |
| 11 | +RABBITMQ_HOME=$(TARGET_DIR) |
| 12 | +RABBITMQ_EBIN_ROOT=$(RABBITMQ_HOME)/ebin |
| 13 | +RABBITMQ_PLUGINS_DIR=$(RABBITMQ_HOME)/plugins |
| 14 | +RABBITMQ_PLUGINS_EXPAND_DIR=$(RABBITMQ_PLUGINS_DIR)/expand |
| 15 | + |
| 16 | +RABBITMQ_DEFAULTS=$(TARGET_DIR)/sbin/rabbitmq-defaults |
| 17 | +fix_defaults = sed -e $(1) $(RABBITMQ_DEFAULTS) > $(RABBITMQ_DEFAULTS).tmp \ |
| 18 | + && mv $(RABBITMQ_DEFAULTS).tmp $(RABBITMQ_DEFAULTS) |
| 19 | + |
| 20 | +dist: |
| 21 | + tar -zxf ../../dist/$(SOURCE_DIR).tar.gz |
| 22 | + |
| 23 | + $(MAKE) -C $(SOURCE_DIR) \ |
| 24 | + TARGET_DIR=`pwd`/$(TARGET_DIR) \ |
| 25 | + SBIN_DIR=`pwd`/$(TARGET_DIR)/sbin \ |
| 26 | + MAN_DIR=`pwd`/$(TARGET_DIR)/share/man \ |
| 27 | + install |
| 28 | + |
| 29 | +## Here we set the RABBITMQ_HOME variable, |
| 30 | +## then we make ERL_DIR point to our released erl |
| 31 | +## and we add the paths to our released start_clean and start_sasl boot scripts |
| 32 | + $(call fix_defaults,'s:^SYS_PREFIX=$$:SYS_PREFIX=\$${RABBITMQ_HOME}:') |
| 33 | + $(call fix_defaults,'s:^ERL_DIR=$$:ERL_DIR=\$${RABBITMQ_HOME}/erts-$(ERTS_VSN)/bin/:') |
| 34 | + $(call fix_defaults,'s:start_clean$$:"\$${SYS_PREFIX}/releases/$(VERSION)/start_clean":') |
| 35 | + $(call fix_defaults,'s:start_sasl:"\$${SYS_PREFIX}/releases/$(VERSION)/start_sasl":') |
| 36 | + |
| 37 | + chmod 0755 $(RABBITMQ_DEFAULTS) |
| 38 | + |
| 39 | + mkdir -p $(TARGET_DIR)/etc/rabbitmq |
| 40 | + |
| 41 | + $(MAKE) generate_release |
| 42 | + |
| 43 | + mkdir -p $(RLS_DIR) |
| 44 | + tar -C $(RLS_DIR) -xzf $(RABBITMQ_HOME)/rabbit.tar.gz |
| 45 | + |
| 46 | +# add minimal boot file |
| 47 | + cp $(ERTS_ROOT_DIR)/bin/start_clean.boot $(RLS_DIR)/releases/$(VERSION) |
| 48 | + cp $(ERTS_ROOT_DIR)/bin/start_sasl.boot $(RLS_DIR)/releases/$(VERSION) |
| 49 | + |
| 50 | +# move rabbitmq files to top level folder |
| 51 | + mv $(RLS_DIR)/lib/rabbit-$(VERSION)/* $(RLS_DIR) |
| 52 | + |
| 53 | +# remove empty lib/rabbit-$(VERSION) folder |
| 54 | + rm -rf $(RLS_DIR)/lib/rabbit-$(VERSION) |
| 55 | + |
| 56 | +# fix Erlang ROOTDIR |
| 57 | + patch -o $(RLS_DIR)/erts-$(ERTS_VSN)/bin/erl $(RLS_DIR)/erts-$(ERTS_VSN)/bin/erl.src < erl.diff |
| 58 | + |
| 59 | + tar -zcf $(TARGET_TARBALL).tar.gz -C $(TARGET_DIR)/release $(TARGET_DIR) |
| 60 | + rm -rf $(SOURCE_DIR) $(TARGET_DIR) |
| 61 | + |
| 62 | +clean: clean_partial |
| 63 | + rm -f rabbitmq-server-$(OS)-standalone-*.tar.gz |
| 64 | + |
| 65 | +clean_partial: |
| 66 | + rm -rf $(SOURCE_DIR) |
| 67 | + rm -rf $(TARGET_DIR) |
| 68 | + |
| 69 | +.PHONY : generate_release |
| 70 | +generate_release: |
| 71 | + erlc \ |
| 72 | + -I $(TARGET_DIR)/include/ -o src -Wall \ |
| 73 | + -v +debug_info -Duse_specs -Duse_proper_qc \ |
| 74 | + -pa $(TARGET_DIR)/ebin/ src/rabbit_release.erl |
| 75 | + erl \ |
| 76 | + -pa "$(RABBITMQ_EBIN_ROOT)" \ |
| 77 | + -pa src \ |
| 78 | + -noinput \ |
| 79 | + -hidden \ |
| 80 | + -s rabbit_release \ |
| 81 | + -extra "$(RABBITMQ_PLUGINS_DIR)" "$(RABBITMQ_PLUGINS_EXPAND_DIR)" "$(RABBITMQ_HOME)" |
| 82 | + rm src/rabbit_release.beam |
0 commit comments