aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--erlang.mk90
1 files changed, 73 insertions, 17 deletions
diff --git a/erlang.mk b/erlang.mk
index f073155..0dadfbb 100644
--- a/erlang.mk
+++ b/erlang.mk
@@ -21,10 +21,10 @@ PROJECT ?= $(notdir $(CURDIR))
PKG_FILE ?= $(CURDIR)/.erlang.mk.packages.v1
export PKG_FILE
-PKG_FILE_URL ?= https://raw.github.com/extend/erlang.mk/master/packages.v1.txt
+PKG_FILE_URL ?= https://raw.github.com/extend/erlang.mk/master/packages.v1.tsv
define get_pkg_file
- wget -O $(PKG_FILE) $(PKG_FILE_URL)
+ wget --no-check-certificate -O $(PKG_FILE) $(PKG_FILE_URL) || rm $(PKG_FILE)
endef
# Verbosity and tweaks.
@@ -46,8 +46,36 @@ dtl_verbose = $(dtl_verbose_$(V))
gen_verbose_0 = @echo " GEN " $@;
gen_verbose = $(gen_verbose_$(V))
-.PHONY: all clean-all app clean deps clean-deps docs clean-docs \
- build-tests tests build-plt dialyze
+.PHONY: rel clean-rel all clean-all app clean deps clean-deps \
+ docs clean-docs build-tests tests build-plt dialyze
+
+# Release.
+
+RELX_CONFIG ?= $(CURDIR)/relx.config
+
+ifneq ($(wildcard $(RELX_CONFIG)),)
+
+RELX ?= $(CURDIR)/relx
+export RELX
+
+RELX_URL ?= https://github.com/erlware/relx/releases/download/v0.5.2/relx
+RELX_OPTS ?=
+
+define get_relx
+ wget -O $(RELX) $(RELX_URL) || rm $(RELX)
+ chmod +x $(RELX)
+endef
+
+rel: clean-rel all $(RELX)
+ @$(RELX) -c $(RELX_CONFIG) $(RELX_OPTS)
+
+$(RELX):
+ @$(call get_relx)
+
+clean-rel:
+ @rm -rf _rel
+
+endif
# Deps directory.
@@ -62,6 +90,9 @@ ALL_TEST_DEPS_DIRS = $(addprefix $(DEPS_DIR)/,$(TEST_DEPS))
# Application.
+ERL_LIBS ?= $(DEPS_DIR)
+export ERL_LIBS
+
ERLC_OPTS ?= -Werror +debug_info +warn_export_all +warn_export_vars \
+warn_shadow_vars +warn_obsolete_guard # +bin_opt_info +warn_missing_spec
COMPILE_FIRST ?=
@@ -73,14 +104,14 @@ clean-all: clean clean-deps clean-docs
$(gen_verbose) rm -rf .$(PROJECT).plt $(DEPS_DIR) logs
app: ebin/$(PROJECT).app
- $(eval MODULES := $(shell find ebin -name \*.beam \
+ $(eval MODULES := $(shell find ebin -type f -name \*.beam \
| sed 's/ebin\///;s/\.beam/,/' | sed '$$s/.$$//'))
$(appsrc_verbose) cat src/$(PROJECT).app.src \
- | sed 's/{modules, \[\]}/{modules, \[$(MODULES)\]}/' \
+ | sed 's/{modules,[[:space:]]*\[\]}/{modules, \[$(MODULES)\]}/' \
> ebin/$(PROJECT).app
define compile_erl
- $(erlc_verbose) ERL_LIBS=$(DEPS_DIR) erlc -v $(ERLC_OPTS) -o ebin/ \
+ $(erlc_verbose) erlc -v $(ERLC_OPTS) -o ebin/ \
-pa ebin/ -I include/ $(COMPILE_FIRST_PATHS) $(1)
endef
@@ -101,9 +132,11 @@ define compile_dtl
init:stop()'
endef
-ebin/$(PROJECT).app: src/*.erl $(wildcard src/*.core) \
- $(wildcard src/*.xrl) $(wildcard src/*.yrl) \
- $(wildcard templates/*.dtl)
+ebin/$(PROJECT).app: $(shell find src -type f -name \*.erl) \
+ $(shell find src -type f -name \*.core) \
+ $(shell find src -type f -name \*.xrl) \
+ $(shell find src -type f -name \*.yrl) \
+ $(shell find templates -type f -name \*.dtl 2>/dev/null)
@mkdir -p ebin/
$(if $(strip $(filter %.erl %.core,$?)), \
$(call compile_erl,$(filter %.erl %.core,$?)))
@@ -147,13 +180,21 @@ deps: $(ALL_DEPS_DIRS)
done
clean-deps:
- @for dep in $(ALL_DEPS_DIRS) ; do $(MAKE) -C $$dep clean; done
+ @for dep in $(ALL_DEPS_DIRS) ; do \
+ if [ -f $$dep/Makefile ] ; then \
+ $(MAKE) -C $$dep clean ; \
+ else \
+ echo "include $(CURDIR)/erlang.mk" | $(MAKE) -f - -C $$dep clean ; \
+ fi ; \
+ done
# Documentation.
+EDOC_OPTS ?=
+
docs: clean-docs
$(gen_verbose) erl -noshell \
- -eval 'edoc:application($(PROJECT), ".", []), init:stop().'
+ -eval 'edoc:application($(PROJECT), ".", [$(EDOC_OPTS)]), init:stop().'
clean-docs:
$(gen_verbose) rm -f doc/*.css doc/*.html doc/*.png doc/edoc-info
@@ -166,24 +207,39 @@ build-test-deps: $(ALL_TEST_DEPS_DIRS)
@for dep in $(ALL_TEST_DEPS_DIRS) ; do $(MAKE) -C $$dep; done
build-tests: build-test-deps
- $(gen_verbose) ERL_LIBS=$(DEPS_DIR) erlc -v $(ERLC_OPTS) -o test/ \
+ $(gen_verbose) erlc -v $(ERLC_OPTS) -o test/ \
$(wildcard test/*.erl test/*/*.erl) -pa ebin/
CT_RUN = ct_run \
-no_auto_compile \
-noshell \
- -pa ebin $(DEPS_DIR)/*/ebin \
+ -pa $(realpath ebin) $(DEPS_DIR)/*/ebin \
-dir test \
-logdir logs
# -cover test/cover.spec
CT_SUITES ?=
-CT_SUITES_FULL = $(addsuffix _SUITE,$(CT_SUITES))
+
+define test_target
+test_$(1): ERLC_OPTS += -DTEST=1 +'{parse_transform, eunit_autoexport}'
+test_$(1): clean deps app build-tests
+ @if [ -d "test" ] ; \
+ then \
+ mkdir -p logs/ ; \
+ $(CT_RUN) -suite $(addsuffix _SUITE,$(1)) ; \
+ fi
+ $(gen_verbose) rm -f test/*.beam
+endef
+
+$(foreach test,$(CT_SUITES),$(eval $(call test_target,$(test))))
tests: ERLC_OPTS += -DTEST=1 +'{parse_transform, eunit_autoexport}'
tests: clean deps app build-tests
- @mkdir -p logs/
- @$(CT_RUN) -suite $(CT_SUITES_FULL)
+ @if [ -d "test" ] ; \
+ then \
+ mkdir -p logs/ ; \
+ $(CT_RUN) -suite $(addsuffix _SUITE,$(CT_SUITES)) ; \
+ fi
$(gen_verbose) rm -f test/*.beam
# Dialyzer.