path: root/Makefile
diff options
authorLoïc Hoguin <[email protected]>2013-01-05 17:25:04 +0100
committerLoïc Hoguin <[email protected]>2013-01-05 17:25:04 +0100
commitd8be610d4c68aa126afa952de4f134d68cc80636 (patch)
treedfd2c878c2af2d6ec89364e095bee3c2cf72dd95 /Makefile
parent4395c1b59dde20cd4fa2887a13cfc377960ee338 (diff)
Stop using rebar in the Makefile
First and foremost: yes, you can still use Cowboy as a rebar dependency. This commit only removes the use of rebar when *developing* Cowboy, not when *using* Cowboy. Over the past two years I went from very happy with rebar to unsatisfied and most recently found it counter productive in many ways, from having insane default configuration to various unefficient operations. The earlier reversal from 'rebar ct' to 'ct_run' made my workflow much more natural, as I always needed to look at 'logs/raw.log' to find out what was wrong, anyway. Why not let 'ct_run' output it directly instead? Removing rebar made my life easier. If you wonder why I don't patch rebar, there's two reasons. First is that the direction taken by rebar isn't compatible with my views, and this would be a huge fight to steer it in another direction. I got other, more important fights to make. Second is that I'd rather patch OTP so that everyone benefits from it, not just users of rebar. Anyway this isn't my personal blog so I will stop babbling here. There's a few important things to note relative to this commit: * You don't need rebar to work on Cowboy anymore * The eunit tests are now ran through common_test Ping me if it doesn't work out for you.
Diffstat (limited to 'Makefile')
1 files changed, 30 insertions, 22 deletions
diff --git a/Makefile b/Makefile
index 410dda6..d1441fc 100644
--- a/Makefile
+++ b/Makefile
@@ -1,24 +1,42 @@
# See LICENSE for licensing information.
PROJECT = cowboy
+RANCH_VSN = 0.6.0
+ERLC_OPTS = -Werror +debug_info +warn_export_all # +bin_opt_info +warn_missing_spec
-REBAR = rebar
+.PHONY: all clean-all app clean docs clean-docs tests autobahn build-plt dialyze
+# Application.
all: app
-# Application.
+clean-all: clean clean-docs
+ rm -f .$(PROJECT).plt
+ rm -rf deps logs
- @$(REBAR) get-deps
+ @mkdir -p deps/
+ git clone -n -- https://github.com/extend/ranch.git deps/ranch
+ cd deps/ranch ; git checkout -q $(RANCH_VSN)
+MODULES = $(shell ls src/*.erl | sed 's/src\///;s/\.erl/,/' | sed '$$s/.$$//')
app: deps/ranch
- @$(REBAR) compile
+ @cd deps/ranch ; make
+ @mkdir -p ebin/
+ @cat src/cowboy.app.src \
+ | sed 's/{modules, \[\]}/{modules, \[$(MODULES)\]}/' \
+ > ebin/cowboy.app
+ erlc -v $(ERLC_OPTS) -o ebin/ -pa ebin/ src/cowboy_middleware.erl src/*.erl
- @$(REBAR) clean
+ -@cd deps/ranch && make clean
+ rm -rf ebin/
rm -f test/*.beam
rm -f erl_crash.dump
+# Documentation.
docs: clean-docs
erl -noshell -eval 'edoc:application(cowboy, ".", []), init:stop().'
@@ -30,24 +48,16 @@ clean-docs:
# Tests.
- @$(REBAR) -C rebar.tests.config get-deps
- cd deps/proper && $(REBAR) compile
-tests: clean deps/proper app eunit ct
- @$(REBAR) -C rebar.tests.config eunit skip_deps=true
CT_RUN = ct_run \
-pa ebin deps/*/ebin \
-dir test \
-logdir logs \
-cover test/cover.spec
+tests: ERLC_OPTS += -DTEST=1
+tests: clean app
@mkdir -p logs/
- @$(CT_RUN) -suite http_SUITE ws_SUITE
+ @$(CT_RUN) -suite eunit_SUITE http_SUITE ws_SUITE
@mkdir -p logs/
@@ -55,12 +65,10 @@ autobahn:
# Dialyzer.
-DIALYZER = dialyzer
- @$(DIALYZER) --build_plt --output_plt .$(PROJECT).plt \
- --apps kernel stdlib sasl inets crypto public_key ssl deps/*
+build-plt: app
+ @dialyzer --build_plt --output_plt .$(PROJECT).plt \
+ --apps kernel stdlib sasl inets crypto public_key ssl deps/ranch
- @$(DIALYZER) --src src --plt .$(PROJECT).plt --no_native \
+ @dialyzer --src src --plt .$(PROJECT).plt --no_native \
-Werror_handling -Wrace_conditions -Wunmatched_returns # -Wunderspecs