diff options
| author | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2015-08-10 11:50:41 +0200 |
|---|---|---|
| committer | Jean-Sébastien Pédron <jean-sebastien.pedron@dumbbell.fr> | 2015-10-20 11:10:48 +0200 |
| commit | e3b6e1e1b545a20b6c1ec9d8c55d12406325d139 (patch) | |
| tree | 830b86df646e231f73af0718f42df12e253e9595 | |
| parent | 31c9fdf6080b42684b27d6e7805f7ba6bfa38601 (diff) | |
| download | rabbitmq-server-git-e3b6e1e1b545a20b6c1ec9d8c55d12406325d139.tar.gz | |
Makefile: Use `erlang.mk`
| -rw-r--r-- | Makefile | 426 |
1 files changed, 52 insertions, 374 deletions
@@ -1,333 +1,19 @@ -TMPDIR ?= /tmp +PROJECT = rabbit -RABBITMQ_NODENAME ?= rabbit -RABBITMQ_SERVER_START_ARGS ?= -RABBITMQ_MNESIA_DIR ?= $(TMPDIR)/rabbitmq-$(RABBITMQ_NODENAME)-mnesia -RABBITMQ_PLUGINS_EXPAND_DIR ?= $(TMPDIR)/rabbitmq-$(RABBITMQ_NODENAME)-plugins-scratch -RABBITMQ_LOG_BASE ?= $(TMPDIR) +DEPS = rabbitmq-common +dep_rabbitmq-common= git file:///home/dumbbell/Projects/pivotal/other-repos/rabbitmq-common master -DEPS_FILE=deps.mk -SOURCE_DIR=src -TEST_DIR=test/src -EBIN_DIR=ebin -TEST_EBIN_DIR=test/ebin -INCLUDE_DIR=include -DOCS_DIR=docs -INCLUDES=$(wildcard $(INCLUDE_DIR)/*.hrl) $(INCLUDE_DIR)/rabbit_framing.hrl -SOURCES=$(wildcard $(SOURCE_DIR)/*.erl) $(SOURCE_DIR)/rabbit_framing_amqp_0_9_1.erl $(SOURCE_DIR)/rabbit_framing_amqp_0_8.erl $(USAGES_ERL) -TEST_SOURCES=$(wildcard $(TEST_DIR)/*.erl) -BEAM_TARGETS=$(patsubst $(SOURCE_DIR)/%.erl, $(EBIN_DIR)/%.beam, $(SOURCES)) -TEST_BEAM_TARGETS=$(patsubst $(TEST_DIR)/%.erl, $(TEST_EBIN_DIR)/%.beam, $(TEST_SOURCES)) -TARGETS=$(EBIN_DIR)/rabbit.app $(INCLUDE_DIR)/rabbit_framing.hrl $(BEAM_TARGETS) plugins -TEST_TARGETS=$(TEST_BEAM_TARGETS) -WEB_URL=http://www.rabbitmq.com/ -MANPAGES=$(patsubst %.xml, %.gz, $(wildcard $(DOCS_DIR)/*.[0-9].xml)) -WEB_MANPAGES=$(patsubst %.xml, %.man.xml, $(wildcard $(DOCS_DIR)/*.[0-9].xml) $(DOCS_DIR)/rabbitmq-service.xml $(DOCS_DIR)/rabbitmq-echopid.xml) -USAGES_XML=$(DOCS_DIR)/rabbitmqctl.1.xml $(DOCS_DIR)/rabbitmq-plugins.1.xml -USAGES_ERL=$(foreach XML, $(USAGES_XML), $(call usage_xml_to_erl, $(XML))) +.DEFAULT_GOAL = all -BASIC_PLT=basic.plt -RABBIT_PLT=rabbit.plt +# -------------------------------------------------------------------- +# Man pages. +# -------------------------------------------------------------------- -ifndef USE_PROPER_QC -# PropEr needs to be installed for property checking -# http://proper.softlab.ntua.gr/ -USE_PROPER_QC=$(shell erl -noshell -eval 'io:format({module, proper} =:= code:ensure_loaded(proper)), halt().') -endif - -#other args: +native +"{hipe,[o3,verbose]}" -Ddebug=true +debug_info +no_strict_record_tests -ERLC_OPTS=-I $(INCLUDE_DIR) -Wall +warn_export_vars -v +debug_info $(call boolean_macro,$(USE_SPECS),use_specs) $(call boolean_macro,$(USE_PROPER_QC),use_proper_qc) - -# Our type specs rely on dict:dict/0 etc, which are only available in -# 17.0 upwards. -define compare_version -$(shell awk 'BEGIN { - split("$(1)", v1, "\."); - version1 = v1[1] * 1000000 + v1[2] * 10000 + v1[3] * 100 + v1[4]; - - split("$(2)", v2, "\."); - version2 = v2[1] * 1000000 + v2[2] * 10000 + v2[3] * 100 + v2[4]; - - if (version1 $(3) version2) { - print "true"; - } else { - print "false"; - } -}') -endef - -ERTS_VER = $(shell erl -version 2>&1 | sed -E 's/.* version //') -USE_SPECS_MIN_ERTS_VER = 5.11 -ifeq ($(call compare_version,$(ERTS_VER),$(USE_SPECS_MIN_ERTS_VER),>=),true) -ERLC_OPTS += -Duse_specs -endif - -ifdef INSTRUMENT_FOR_QC -ERLC_OPTS += -DINSTR_MOD=gm_qc -else -ERLC_OPTS += -DINSTR_MOD=gm -endif - -ifdef CREDIT_FLOW_TRACING -ERLC_OPTS += -DCREDIT_FLOW_TRACING=true -endif - -include version.mk - -PLUGINS_SRC_DIR?=$(shell [ -d "plugins-src" ] && echo "plugins-src" || echo ) -PLUGINS_DIR=plugins -TARBALL_NAME=rabbitmq-server-$(VERSION) -TARGET_SRC_DIR=dist/$(TARBALL_NAME) - -SIBLING_CODEGEN_DIR=../rabbitmq-codegen/ -AMQP_CODEGEN_DIR=$(shell [ -d $(SIBLING_CODEGEN_DIR) ] && echo $(SIBLING_CODEGEN_DIR) || echo codegen) -AMQP_SPEC_JSON_FILES_0_9_1=$(AMQP_CODEGEN_DIR)/amqp-rabbitmq-0.9.1.json $(AMQP_CODEGEN_DIR)/credit_extension.json -AMQP_SPEC_JSON_FILES_0_8=$(AMQP_CODEGEN_DIR)/amqp-rabbitmq-0.8.json - -ERL_CALL=erl_call -sname $(RABBITMQ_NODENAME) -e - -ERL_EBIN=erl -noinput -pa $(EBIN_DIR) - -define usage_xml_to_erl - $(subst __,_,$(patsubst $(DOCS_DIR)/rabbitmq%.1.xml, $(SOURCE_DIR)/rabbit_%_usage.erl, $(subst -,_,$(1)))) -endef - -define usage_dep - $(call usage_xml_to_erl, $(1)): $(1) $(DOCS_DIR)/usage.xsl -endef - -define boolean_macro -$(if $(filter true,$(1)),-D$(2)) -endef - -ifneq "$(SBIN_DIR)" "" -ifneq "$(TARGET_DIR)" "" -SCRIPTS_REL_PATH=$(shell ./calculate-relative $(TARGET_DIR)/sbin $(SBIN_DIR)) -endif -endif - -# Versions prior to this are not supported -NEED_MAKE := 3.80 -ifneq "$(NEED_MAKE)" "$(firstword $(sort $(NEED_MAKE) $(MAKE_VERSION)))" -$(error Versions of make prior to $(NEED_MAKE) are not supported) -endif - -# .DEFAULT_GOAL introduced in 3.81 -DEFAULT_GOAL_MAKE := 3.81 -ifneq "$(DEFAULT_GOAL_MAKE)" "$(firstword $(sort $(DEFAULT_GOAL_MAKE) $(MAKE_VERSION)))" -.DEFAULT_GOAL=all -endif - -all: $(TARGETS) $(TEST_TARGETS) - -.PHONY: plugins check-xref -ifneq "$(PLUGINS_SRC_DIR)" "" -plugins: - [ -d "$(PLUGINS_SRC_DIR)/rabbitmq-server" ] || ln -s "$(CURDIR)" "$(PLUGINS_SRC_DIR)/rabbitmq-server" - mkdir -p $(PLUGINS_DIR) - PLUGINS_SRC_DIR="" $(MAKE) -C "$(PLUGINS_SRC_DIR)" plugins-dist PLUGINS_DIST_DIR="$(CURDIR)/$(PLUGINS_DIR)" VERSION=$(VERSION) - echo "Put your EZs here and use rabbitmq-plugins to enable them." > $(PLUGINS_DIR)/README - rm -f $(PLUGINS_DIR)/rabbit_common*.ez - -# add -q to remove printout of warnings.... -check-xref: $(BEAM_TARGETS) $(PLUGINS_DIR) - rm -rf lib - ./check_xref $(PLUGINS_DIR) -q - -else -plugins: -# Not building plugins - -check-xref: - $(info xref checks are disabled as there is no plugins-src directory) - -endif - -$(DEPS_FILE): $(SOURCES) $(INCLUDES) - rm -f $@ - echo $(subst : ,:,$(foreach FILE,$^,$(FILE):)) | escript generate_deps $@ $(EBIN_DIR) - -$(EBIN_DIR)/rabbit.app: $(EBIN_DIR)/rabbit_app.in $(SOURCES) generate_app - escript generate_app $< $@ $(SOURCE_DIR) - -$(EBIN_DIR)/%.beam: $(SOURCE_DIR)/%.erl | $(DEPS_FILE) - erlc -o $(EBIN_DIR) $(ERLC_OPTS) -pa $(EBIN_DIR) $< - -$(TEST_EBIN_DIR)/%.beam: $(TEST_DIR)/%.erl | $(TEST_EBIN_DIR) - erlc -o $(TEST_EBIN_DIR) $(ERLC_OPTS) -pa $(EBIN_DIR) -pa $(TEST_EBIN_DIR) $< - -$(TEST_EBIN_DIR): - mkdir -p $(TEST_EBIN_DIR) - -$(INCLUDE_DIR)/rabbit_framing.hrl: codegen.py $(AMQP_CODEGEN_DIR)/amqp_codegen.py $(AMQP_SPEC_JSON_FILES_0_9_1) $(AMQP_SPEC_JSON_FILES_0_8) - ./codegen.py --ignore-conflicts header $(AMQP_SPEC_JSON_FILES_0_9_1) $(AMQP_SPEC_JSON_FILES_0_8) $@ - -$(SOURCE_DIR)/rabbit_framing_amqp_0_9_1.erl: codegen.py $(AMQP_CODEGEN_DIR)/amqp_codegen.py $(AMQP_SPEC_JSON_FILES_0_9_1) - ./codegen.py body $(AMQP_SPEC_JSON_FILES_0_9_1) $@ - -$(SOURCE_DIR)/rabbit_framing_amqp_0_8.erl: codegen.py $(AMQP_CODEGEN_DIR)/amqp_codegen.py $(AMQP_SPEC_JSON_FILES_0_8) - ./codegen.py body $(AMQP_SPEC_JSON_FILES_0_8) $@ - -dialyze: $(BEAM_TARGETS) $(BASIC_PLT) - dialyzer --plt $(BASIC_PLT) --no_native --fullpath \ - $(BEAM_TARGETS) - -# rabbit.plt is used by rabbitmq-erlang-client's dialyze make target -create-plt: $(RABBIT_PLT) - -$(RABBIT_PLT): $(BEAM_TARGETS) $(BASIC_PLT) - dialyzer --plt $(BASIC_PLT) --output_plt $@ --no_native \ - --add_to_plt $(BEAM_TARGETS) - -$(BASIC_PLT): $(BEAM_TARGETS) - if [ -f $@ ]; then \ - touch $@; \ - else \ - dialyzer --output_plt $@ --build_plt \ - --apps erts kernel stdlib compiler sasl os_mon mnesia tools \ - public_key crypto ssl xmerl; \ - fi - -clean: - rm -f $(EBIN_DIR)/*.beam - rm -f $(EBIN_DIR)/rabbit.app $(EBIN_DIR)/rabbit.boot $(EBIN_DIR)/rabbit.script $(EBIN_DIR)/rabbit.rel - rm -rf $(TEST_EBIN_DIR) - rm -f $(PLUGINS_DIR)/*.ez - [ -d "$(PLUGINS_SRC_DIR)" ] && PLUGINS_SRC_DIR="" PRESERVE_CLONE_DIR=1 make -C $(PLUGINS_SRC_DIR) clean || true - rm -f $(INCLUDE_DIR)/rabbit_framing.hrl $(SOURCE_DIR)/rabbit_framing_amqp_*.erl codegen.pyc - rm -f $(DOCS_DIR)/*.[0-9].gz $(DOCS_DIR)/*.man.xml $(DOCS_DIR)/*.erl $(USAGES_ERL) - rm -f $(RABBIT_PLT) - rm -f $(DEPS_FILE) - -cleandb: - rm -rf $(RABBITMQ_MNESIA_DIR)/* - -############ various tasks to interact with RabbitMQ ################### - -BASIC_SCRIPT_ENVIRONMENT_SETTINGS=\ - RABBITMQ_NODE_IP_ADDRESS="$(RABBITMQ_NODE_IP_ADDRESS)" \ - RABBITMQ_NODE_PORT="$(RABBITMQ_NODE_PORT)" \ - RABBITMQ_LOG_BASE="$(RABBITMQ_LOG_BASE)" \ - RABBITMQ_MNESIA_DIR="$(RABBITMQ_MNESIA_DIR)" \ - RABBITMQ_PLUGINS_EXPAND_DIR="$(RABBITMQ_PLUGINS_EXPAND_DIR)" - -run: all - $(BASIC_SCRIPT_ENVIRONMENT_SETTINGS) \ - RABBITMQ_ALLOW_INPUT=true \ - RABBITMQ_SERVER_START_ARGS="$(RABBITMQ_SERVER_START_ARGS)" \ - ./scripts/rabbitmq-server - -run-background: all - $(BASIC_SCRIPT_ENVIRONMENT_SETTINGS) \ - RABBITMQ_SERVER_START_ARGS="$(RABBITMQ_SERVER_START_ARGS)" \ - ./scripts/rabbitmq-server -detached - -run-node: all - $(BASIC_SCRIPT_ENVIRONMENT_SETTINGS) \ - RABBITMQ_NODE_ONLY=true \ - RABBITMQ_ALLOW_INPUT=true \ - RABBITMQ_SERVER_START_ARGS="$(RABBITMQ_SERVER_START_ARGS)" \ - ./scripts/rabbitmq-server - -run-background-node: all - $(BASIC_SCRIPT_ENVIRONMENT_SETTINGS) \ - RABBITMQ_NODE_ONLY=true \ - RABBITMQ_SERVER_START_ARGS="$(RABBITMQ_SERVER_START_ARGS)" \ - ./scripts/rabbitmq-server -detached - -run-tests: all - echo 'code:add_path("$(TEST_EBIN_DIR)").' | $(ERL_CALL) - echo 'code:add_path("$(TEST_EBIN_DIR)").' | $(ERL_CALL) -n hare || true - OUT=$$(echo "rabbit_tests:all_tests()." | $(ERL_CALL)) ; \ - echo $$OUT ; echo $$OUT | grep '^{ok, passed}$$' > /dev/null - -run-qc: all - echo 'code:add_path("$(TEST_EBIN_DIR)").' | $(ERL_CALL) - ./quickcheck $(RABBITMQ_NODENAME) rabbit_backing_queue_qc 100 40 - ./quickcheck $(RABBITMQ_NODENAME) gm_qc 1000 200 - -start-background-node: all - -rm -f $(RABBITMQ_MNESIA_DIR).pid - mkdir -p $(RABBITMQ_MNESIA_DIR) - $(BASIC_SCRIPT_ENVIRONMENT_SETTINGS) \ - RABBITMQ_NODE_ONLY=true \ - RABBITMQ_SERVER_START_ARGS="$(RABBITMQ_SERVER_START_ARGS)" \ - ./scripts/rabbitmq-server \ - > $(RABBITMQ_MNESIA_DIR)/startup_log \ - 2> $(RABBITMQ_MNESIA_DIR)/startup_err & - ./scripts/rabbitmqctl -n $(RABBITMQ_NODENAME) wait $(RABBITMQ_MNESIA_DIR).pid kernel - -start-rabbit-on-node: all - echo "rabbit:start()." | $(ERL_CALL) - ./scripts/rabbitmqctl -n $(RABBITMQ_NODENAME) wait $(RABBITMQ_MNESIA_DIR).pid - -stop-rabbit-on-node: all - echo "rabbit:stop()." | $(ERL_CALL) - -set-resource-alarm: all - echo "rabbit_alarm:set_alarm({{resource_limit, $(SOURCE), node()}, []})." | \ - $(ERL_CALL) - -clear-resource-alarm: all - echo "rabbit_alarm:clear_alarm({resource_limit, $(SOURCE), node()})." | \ - $(ERL_CALL) - -stop-node: - -( \ - pid=$$(./scripts/rabbitmqctl -n $(RABBITMQ_NODENAME) eval 'os:getpid().') && \ - $(ERL_CALL) -q && \ - while ps -p $$pid >/dev/null 2>&1; do sleep 1; done \ - ) - -# code coverage will be created for subdirectory "ebin" of COVER_DIR -COVER_DIR=. - -start-cover: all - echo "rabbit_misc:start_cover([\"rabbit\", \"hare\"])." | $(ERL_CALL) - echo "rabbit_misc:enable_cover([\"$(COVER_DIR)\"])." | $(ERL_CALL) - -stop-cover: all - echo "rabbit_misc:report_cover(), cover:stop()." | $(ERL_CALL) - cat cover/summary.txt - -######################################################################## - -srcdist: distclean - mkdir -p $(TARGET_SRC_DIR)/codegen - cp -r ebin src include LICENSE LICENSE-MPL-RabbitMQ INSTALL README $(TARGET_SRC_DIR) - sed 's/%%VSN%%/$(VERSION)/' $(TARGET_SRC_DIR)/ebin/rabbit_app.in > $(TARGET_SRC_DIR)/ebin/rabbit_app.in.tmp && \ - mv $(TARGET_SRC_DIR)/ebin/rabbit_app.in.tmp $(TARGET_SRC_DIR)/ebin/rabbit_app.in - - cp -r $(AMQP_CODEGEN_DIR)/* $(TARGET_SRC_DIR)/codegen/ - cp codegen.py Makefile generate_app generate_deps calculate-relative $(TARGET_SRC_DIR) - - echo "VERSION?=${VERSION}" > $(TARGET_SRC_DIR)/version.mk - - cp -r scripts $(TARGET_SRC_DIR) - cp -r $(DOCS_DIR) $(TARGET_SRC_DIR) - chmod 0755 $(TARGET_SRC_DIR)/scripts/* - -ifneq "$(PLUGINS_SRC_DIR)" "" - cp -r $(PLUGINS_SRC_DIR) $(TARGET_SRC_DIR)/plugins-src - rm $(TARGET_SRC_DIR)/LICENSE - cat packaging/common/LICENSE.head >> $(TARGET_SRC_DIR)/LICENSE - cat $(AMQP_CODEGEN_DIR)/license_info >> $(TARGET_SRC_DIR)/LICENSE - find $(PLUGINS_SRC_DIR)/licensing -name "license_info_*" -exec cat '{}' >> $(TARGET_SRC_DIR)/LICENSE \; - cat packaging/common/LICENSE.tail >> $(TARGET_SRC_DIR)/LICENSE - find $(PLUGINS_SRC_DIR)/licensing -name "LICENSE-*" -exec cp '{}' $(TARGET_SRC_DIR) \; - rm -rf $(TARGET_SRC_DIR)/licensing -else - @echo No plugins source distribution found -endif - - (cd dist; tar -zchf $(TARBALL_NAME).tar.gz $(TARBALL_NAME)) - (cd dist; zip -q -r $(TARBALL_NAME).zip $(TARBALL_NAME)) - rm -rf $(TARGET_SRC_DIR) - -distclean: clean - $(MAKE) -C $(AMQP_CODEGEN_DIR) distclean - rm -rf dist - find . -regex '.*\(~\|#\|\.swp\|\.dump\)' -exec rm {} \; +DOCS_DIR = docs +MANPAGES = $(patsubst %.xml, %.gz, $(wildcard $(DOCS_DIR)/*.[0-9].xml)) +WEB_MANPAGES = $(patsubst %.xml, %.man.xml, $(wildcard $(DOCS_DIR)/*.[0-9].xml) $(DOCS_DIR)/rabbitmq-service.xml $(DOCS_DIR)/rabbitmq-echopid.xml) +USAGES_XML = $(DOCS_DIR)/rabbitmqctl.1.xml $(DOCS_DIR)/rabbitmq-plugins.1.xml +USAGES_ERL = $(foreach XML, $(USAGES_XML), $(call usage_xml_to_erl, $(XML))) # xmlto can not read from standard input, so we mess with a tmp file. %.gz: %.xml $(DOCS_DIR)/examples-to-end.xsl @@ -340,7 +26,7 @@ distclean: clean # Use tmp files rather than a pipeline so that we get meaningful errors # Do not fold the cp into previous line, it's there to stop the file being # generated but empty if we fail -$(SOURCE_DIR)/%_usage.erl: +src/%_usage.erl: xsltproc --novalid --stringparam modulename "`basename $@ .erl`" \ $(DOCS_DIR)/usage.xsl $< > $@.tmp sed -e 's/"/\\"/g' -e 's/%QUOTE%/"/g' $@.tmp > $@.tmp2 @@ -359,64 +45,56 @@ $(SOURCE_DIR)/%_usage.erl: xmllint --format - > $@ rm `basename $< .xml`.html -docs_all: $(MANPAGES) $(WEB_MANPAGES) - -install: install_bin install_docs - -install_bin: all install_dirs - cp -r ebin include LICENSE* INSTALL $(TARGET_DIR) +define usage_xml_to_erl +$(subst __,_,$(patsubst $(DOCS_DIR)/rabbitmq%.1.xml, src/rabbit_%_usage.erl, $(subst -,_,$(1)))) +endef - chmod 0755 scripts/* - for script in rabbitmq-env rabbitmq-server rabbitmqctl rabbitmq-plugins rabbitmq-defaults; do \ - cp scripts/$$script $(TARGET_DIR)/sbin; \ - [ -e $(SBIN_DIR)/$$script ] || ln -s $(SCRIPTS_REL_PATH)/$$script $(SBIN_DIR)/$$script; \ - done +define usage_dep +$(call usage_xml_to_erl, $(1)):: $(1) $(DOCS_DIR)/usage.xsl +endef - mkdir -p $(TARGET_DIR)/$(PLUGINS_DIR) - [ -d "$(PLUGINS_DIR)" ] && cp $(PLUGINS_DIR)/*.ez $(PLUGINS_DIR)/README $(TARGET_DIR)/$(PLUGINS_DIR) || true +$(foreach XML,$(USAGES_XML),$(eval $(call usage_dep, $(XML)))) -install_docs: docs_all install_dirs - for section in 1 5; do \ - mkdir -p $(MAN_DIR)/man$$section; \ - for manpage in $(DOCS_DIR)/*.$$section.gz; do \ - cp $$manpage $(MAN_DIR)/man$$section; \ - done; \ - done - if test "$(DOC_INSTALL_DIR)"; then \ - cp $(DOCS_DIR)/rabbitmq.config.example $(DOC_INSTALL_DIR)/rabbitmq.config.example; \ - fi +# -------------------------------------------------------------------- +# Back to main targets. +# -------------------------------------------------------------------- -install_dirs: - @ OK=true && \ - { [ -n "$(TARGET_DIR)" ] || { echo "Please set TARGET_DIR."; OK=false; }; } && \ - { [ -n "$(SBIN_DIR)" ] || { echo "Please set SBIN_DIR."; OK=false; }; } && \ - { [ -n "$(MAN_DIR)" ] || { echo "Please set MAN_DIR."; OK=false; }; } && $$OK +include erlang.mk - mkdir -p $(TARGET_DIR)/sbin - mkdir -p $(SBIN_DIR) - mkdir -p $(MAN_DIR) - if test "$(DOC_INSTALL_DIR)"; then \ - mkdir -p $(DOC_INSTALL_DIR); \ - fi +ebin/$(PROJECT).app:: $(USAGES_ERL) + $(if $(strip $?),$(call compile_erl,$?)) -$(foreach XML,$(USAGES_XML),$(eval $(call usage_dep, $(XML)))) +clean:: clean-generated -# Note that all targets which depend on clean must have clean in their -# name. Also any target that doesn't depend on clean should not have -# clean in its name, unless you know that you don't need any of the -# automatic dependency generation for that target (e.g. cleandb). +clean-generated: + $(gen_verbose) rm -f $(USAGES_ERL) -# We want to load the dep file if *any* target *doesn't* contain -# "clean" - i.e. if removing all clean-like targets leaves something. +ERLC_OPTS += -I $(DEPS_DIR)/rabbitmq-common/include -ifeq "$(MAKECMDGOALS)" "" -TESTABLEGOALS:=$(.DEFAULT_GOAL) +ifdef INSTRUMENT_FOR_QC +ERLC_OPTS += -DINSTR_MOD=gm_qc else -TESTABLEGOALS:=$(MAKECMDGOALS) +ERLC_OPTS += -DINSTR_MOD=gm endif -ifneq "$(strip $(patsubst clean%,,$(patsubst %clean,,$(TESTABLEGOALS))))" "" -include $(DEPS_FILE) +ifdef CREDIT_FLOW_TRACING +ERLC_OPTS += -DCREDIT_FLOW_TRACING=true +endif + +define boolean_macro +$(if $(filter true,$(1)),-D$(2)) +endef + +ifndef USE_SPECS +# our type specs rely on dict:dict/0 etc, which are only available in 17.0 +# upwards. +USE_SPECS := $(shell erl -noshell -eval 'io:format([list_to_integer(X) || X <- string:tokens(erlang:system_info(version), ".")] >= [5,11]), halt().') +ERLC_OPTS += $(call boolean_macro,$(USE_SPECS),use_specs) endif -.PHONY: run-qc +ifndef USE_PROPER_QC +# PropEr needs to be installed for property checking +# http://proper.softlab.ntua.gr/ +USE_PROPER_QC := $(shell erl -noshell -eval 'io:format({module, proper} =:= code:ensure_loaded(proper)), halt().') +ERLC_OPTS += $(call boolean_macro,$(USE_PROPER_QC),use_proper_qc) +endif |
