Просмотр исходного кода

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.
Loïc Hoguin 12 лет назад
Родитель
Сommit
d8be610d4c
5 измененных файлов с 61 добавлено и 36 удалено
  1. 30 22
      Makefile
  2. 0 0
      ebin/.gitignore
  3. 0 6
      rebar.config
  4. 0 8
      rebar.tests.config
  5. 31 0
      test/eunit_SUITE.erl

+ 30 - 22
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
 
 deps/ranch:
-	@$(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
 
 clean:
-	@$(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.
 
-deps/proper:
-	@$(REBAR) -C rebar.tests.config get-deps
-	cd deps/proper && $(REBAR) compile
-
-tests: clean deps/proper app eunit ct
-
-eunit:
-	@$(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
 
-ct:
+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
 
 autobahn:
 	@mkdir -p logs/
@@ -55,12 +65,10 @@ autobahn:
 
 # Dialyzer.
 
-DIALYZER = dialyzer
-
-build-plt:
-	@$(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
 
 dialyze:
-	@$(DIALYZER) --src src --plt .$(PROJECT).plt --no_native \
+	@dialyzer --src src --plt .$(PROJECT).plt --no_native \
 		-Werror_handling -Wrace_conditions -Wunmatched_returns # -Wunderspecs

+ 0 - 0
ebin/.gitignore


+ 0 - 6
rebar.config

@@ -1,9 +1,3 @@
 {deps, [
 	{ranch, "0\\.6\\.0.*", {git, "git://github.com/extend/ranch.git", "0.6.0"}}
 ]}.
-{erl_opts, [
-%%	bin_opt_info,
-%%	warn_missing_spec,
-	warnings_as_errors,
-	warn_export_all
-]}.

+ 0 - 8
rebar.tests.config

@@ -1,8 +0,0 @@
-{cover_enabled, true}.
-{deps, [
-	{proper, ".*",
-		{git, "git://github.com/manopapad/proper.git", "master"}},
-	{ranch, "0\\.6\\.0.*", {git, "git://github.com/extend/ranch.git", "0.6.0"}}
-]}.
-{eunit_opts, [verbose, {report, {eunit_surefire, [{dir, "."}]}}]}.
-{erl_opts, []}.

+ 31 - 0
test/eunit_SUITE.erl

@@ -0,0 +1,31 @@
+%% Copyright (c) 2013, Loïc Hoguin <essen@ninenines.eu>
+%%
+%% Permission to use, copy, modify, and/or distribute this software for any
+%% purpose with or without fee is hereby granted, provided that the above
+%% copyright notice and this permission notice appear in all copies.
+%%
+%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+-module(eunit_SUITE).
+
+-include_lib("common_test/include/ct.hrl").
+
+%% ct.
+-export([all/0]).
+
+%% Tests.
+-export([eunit/1]).
+
+%% ct.
+
+all() ->
+	[eunit].
+
+eunit(Config) ->
+	ok = eunit:test({application, cowboy}).