summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile147
1 files changed, 147 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..680003cf
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,147 @@
+NODENAME=rabbit
+RABBIT_ARGS=
+SOURCE_DIR=src
+EBIN_DIR=ebin
+INCLUDE_DIR=include
+SOURCES=$(wildcard $(SOURCE_DIR)/*.erl)
+TARGETS=$(EBIN_DIR)/rabbit_framing.beam $(patsubst $(SOURCE_DIR)/%.erl, $(EBIN_DIR)/%.beam,$(SOURCES))
+PLT=rabbit.plt
+WEB_URL=http://stage.rabbitmq.com/
+
+ifndef USE_SPECS
+# our type specs rely on features / bug fixes in dialyzer that are
+# only available in R12B-3 upwards
+#
+# NB: the test assumes that version number will only contain single digits
+USE_SPECS=$(shell if [ $$(erl -noshell -eval 'io:format(erlang:system_info(version)), halt().') \> "5.6.2" ]; then echo "true"; else echo "false"; fi)
+endif
+
+#other args: +native +"{hipe,[o3,verbose]}" -Ddebug=true +debug_info +no_strict_record_tests
+ERLC_OPTS=-I $(INCLUDE_DIR) -o $(EBIN_DIR) -Wall -v +debug_info $(shell [ $(USE_SPECS) = "true" ] && echo "-Duse_specs")
+
+MNESIA_DIR=/tmp/rabbitmq-$(NODENAME)-mnesia
+LOG_BASE=/tmp
+
+VERSION=0.0.0
+TARBALL_NAME=rabbitmq-server-$(VERSION)
+
+SIBLING_CODEGEN_DIR=../rabbitmq-codegen/
+AMQP_CODEGEN_DIR=$(shell [ -d $(SIBLING_CODEGEN_DIR) ] && echo $(SIBLING_CODEGEN_DIR) || echo codegen)
+AMQP_SPEC_JSON_PATH=$(AMQP_CODEGEN_DIR)/amqp-0.8.json
+
+ERL_CALL=erl_call -sname $(NODENAME) -e
+
+# for the moment we don't use boot files because they introduce a
+# dependency on particular versions of OTP applications
+#all: $(EBIN_DIR)/rabbit.boot
+all: $(TARGETS)
+
+$(EBIN_DIR)/%.beam: $(SOURCE_DIR)/%.erl $(INCLUDE_DIR)/rabbit_framing.hrl $(INCLUDE_DIR)/rabbit.hrl
+ erlc $(ERLC_OPTS) $<
+# ERLC_EMULATOR="erl -smp" erlc $(ERLC_OPTS) $<
+
+$(INCLUDE_DIR)/rabbit_framing.hrl $(SOURCE_DIR)/rabbit_framing.erl: codegen.py $(AMQP_CODEGEN_DIR)/amqp_codegen.py $(AMQP_SPEC_JSON_PATH)
+ python codegen.py header $(AMQP_SPEC_JSON_PATH) > $(INCLUDE_DIR)/rabbit_framing.hrl
+ python codegen.py body $(AMQP_SPEC_JSON_PATH) > $(SOURCE_DIR)/rabbit_framing.erl
+
+$(EBIN_DIR)/rabbit.boot $(EBIN_DIR)/rabbit.script: $(EBIN_DIR)/rabbit.app $(EBIN_DIR)/rabbit.rel $(TARGETS)
+ erl -noshell -eval 'systools:make_script("ebin/rabbit", [{path, ["ebin"]}]), halt().'
+
+$(PLT): $(TARGETS)
+ dialyzer -c $? --output_plt $@ $(shell if [ -f $@ ] ; then echo "--plt $@"; fi)
+
+dialyze: $(PLT)
+
+clean: cleandb
+ rm -f $(EBIN_DIR)/*.beam
+ rm -f $(EBIN_DIR)/rabbit.boot $(EBIN_DIR)/rabbit.script
+ rm -f $(INCLUDE_DIR)/rabbit_framing.hrl $(SOURCE_DIR)/rabbit_framing.erl codegen.pyc
+ rm -f $(PLT)
+
+cleandb: stop-node
+ erl -mnesia dir '"$(MNESIA_DIR)"' -noshell -eval 'lists:foreach(fun file:delete/1, filelib:wildcard(mnesia:system_info(directory) ++ "/*")), halt().'
+
+############ various tasks to interact with RabbitMQ ###################
+
+run: all
+ NODE_IP_ADDRESS=$(NODE_IP_ADDRESS) NODE_PORT=$(NODE_PORT) NODE_ONLY=true LOG_BASE=$(LOG_BASE) RABBIT_ARGS="$(RABBIT_ARGS) -s rabbit" MNESIA_DIR=$(MNESIA_DIR) ./scripts/rabbitmq-server
+
+run-node: all
+ NODE_IP_ADDRESS=$(NODE_IP_ADDRESS) NODE_PORT=$(NODE_PORT) NODE_ONLY=true LOG_BASE=$(LOG_BASE) RABBIT_ARGS="$(RABBIT_ARGS)" MNESIA_DIR=$(MNESIA_DIR) ./scripts/rabbitmq-server
+
+run-tests: all
+ echo "rabbit_tests:all_tests()." | $(ERL_CALL)
+
+start-background-node: stop-node
+ NODE_IP_ADDRESS=$(NODE_IP_ADDRESS) NODE_PORT=$(NODE_PORT) NODE_ONLY=true LOG_BASE=$(LOG_BASE) RABBIT_ARGS="$(RABBIT_ARGS) -detached" MNESIA_DIR=$(MNESIA_DIR) ./scripts/rabbitmq-server ; sleep 1
+
+start-rabbit-on-node: all
+ echo "rabbit:start()." | $(ERL_CALL)
+
+stop-rabbit-on-node: all
+ echo "rabbit:stop()." | $(ERL_CALL)
+
+force-snapshot: all
+ echo "rabbit_persister:force_snapshot()." | $(ERL_CALL)
+
+stop-node:
+ -$(ERL_CALL) -q
+
+start-cover: all
+ echo "cover:start(), rabbit_misc:enable_cover()." | $(ERL_CALL)
+
+stop-cover: all
+ echo "rabbit_misc:report_cover(), cover:stop()." | $(ERL_CALL)
+ cat cover/summary.txt
+
+########################################################################
+
+generic_stage:
+ mkdir -p $(GENERIC_STAGE_DIR)
+ cp -r ebin include src $(GENERIC_STAGE_DIR)
+ cp LICENSE LICENSE-MPL-RabbitMQ $(GENERIC_STAGE_DIR)
+
+ if [ -f INSTALL.in ]; then \
+ cp INSTALL.in $(GENERIC_STAGE_DIR)/INSTALL; \
+ elinks -dump -no-references -no-numbering $(WEB_URL)install.html \
+ >> $(GENERIC_STAGE_DIR)/INSTALL; \
+ cp BUILD.in $(GENERIC_STAGE_DIR)/BUILD; \
+ elinks -dump -no-references -no-numbering $(WEB_URL)build.html \
+ >> $(GENERIC_STAGE_DIR)/BUILD; \
+ else \
+ cp INSTALL $(GENERIC_STAGE_DIR); \
+ cp BUILD $(GENERIC_STAGE_DIR); \
+ fi
+
+ sed -i 's/%%VERSION%%/$(VERSION)/' $(GENERIC_STAGE_DIR)/ebin/rabbit.app
+
+srcdist: distclean
+ $(MAKE) VERSION=$(VERSION) GENERIC_STAGE_DIR=dist/$(TARBALL_NAME) generic_stage
+
+ cp -r $(AMQP_CODEGEN_DIR) dist/$(TARBALL_NAME)/codegen
+ cp codegen.py Makefile dist/$(TARBALL_NAME)
+
+ cp -r scripts dist/$(TARBALL_NAME)
+ chmod 0755 dist/$(TARBALL_NAME)/scripts/*
+
+ (cd dist; tar -zcf $(TARBALL_NAME).tar.gz $(TARBALL_NAME))
+ (cd dist; zip -r $(TARBALL_NAME).zip $(TARBALL_NAME))
+ rm -rf dist/$(TARBALL_NAME)
+
+distclean: clean
+ make -C $(AMQP_CODEGEN_DIR) clean
+ rm -rf dist
+ find . -name '*~' -exec rm {} \;
+
+install: all
+ @[ -n "$(TARGET_DIR)" ] || (echo "Please set TARGET_DIR."; false)
+ @[ -n "$(SBIN_DIR)" ] || (echo "Please set SBIN_DIR."; false)
+
+ $(MAKE) VERSION=$(VERSION) GENERIC_STAGE_DIR=$(TARGET_DIR) generic_stage
+
+ chmod 0755 scripts/*
+ mkdir -p $(SBIN_DIR)
+ cp scripts/rabbitmq-server $(SBIN_DIR)
+ cp scripts/rabbitmqctl $(SBIN_DIR)
+ cp scripts/rabbitmq-multi $(SBIN_DIR)
+ rm -f $(TARGET_DIR)/BUILD