0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 12:20:24 +00:00

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.
This commit is contained in:
Loïc Hoguin 2013-01-05 17:25:04 +01:00
parent 4395c1b59d
commit d8be610d4c
5 changed files with 62 additions and 37 deletions

View file

@ -1,24 +1,42 @@
# See LICENSE for licensing information. # See LICENSE for licensing information.
PROJECT = cowboy 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
all: app
# Application. # Application.
all: app
clean-all: clean clean-docs
rm -f .$(PROJECT).plt
rm -rf deps logs
deps/ranch: 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 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: clean:
@$(REBAR) clean -@cd deps/ranch && make clean
rm -rf ebin/
rm -f test/*.beam rm -f test/*.beam
rm -f erl_crash.dump rm -f erl_crash.dump
# Documentation.
docs: clean-docs docs: clean-docs
erl -noshell -eval 'edoc:application(cowboy, ".", []), init:stop().' erl -noshell -eval 'edoc:application(cowboy, ".", []), init:stop().'
@ -30,24 +48,16 @@ clean-docs:
# Tests. # 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 \ CT_RUN = ct_run \
-pa ebin deps/*/ebin \ -pa ebin deps/*/ebin \
-dir test \ -dir test \
-logdir logs \ -logdir logs \
-cover test/cover.spec -cover test/cover.spec
ct: tests: ERLC_OPTS += -DTEST=1
tests: clean app
@mkdir -p logs/ @mkdir -p logs/
@$(CT_RUN) -suite http_SUITE ws_SUITE @$(CT_RUN) -suite eunit_SUITE http_SUITE ws_SUITE
autobahn: autobahn:
@mkdir -p logs/ @mkdir -p logs/
@ -55,12 +65,10 @@ autobahn:
# Dialyzer. # Dialyzer.
DIALYZER = dialyzer build-plt: app
@dialyzer --build_plt --output_plt .$(PROJECT).plt \
build-plt: --apps kernel stdlib sasl inets crypto public_key ssl deps/ranch
@$(DIALYZER) --build_plt --output_plt .$(PROJECT).plt \
--apps kernel stdlib sasl inets crypto public_key ssl deps/*
dialyze: dialyze:
@$(DIALYZER) --src src --plt .$(PROJECT).plt --no_native \ @dialyzer --src src --plt .$(PROJECT).plt --no_native \
-Werror_handling -Wrace_conditions -Wunmatched_returns # -Wunderspecs -Werror_handling -Wrace_conditions -Wunmatched_returns # -Wunderspecs

0
ebin/.gitignore vendored
View file

View file

@ -1,9 +1,3 @@
{deps, [ {deps, [
{ranch, "0\\.6\\.0.*", {git, "git://github.com/extend/ranch.git", "0.6.0"}} {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
]}.

View file

@ -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
test/eunit_SUITE.erl Normal file
View file

@ -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}).