summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaweł Chmielowski <pchmielowski@process-one.net>2015-12-18 17:17:13 +0100
committerPaweł Chmielowski <pchmielowski@process-one.net>2015-12-18 17:20:41 +0100
commit99fdba0745241ea9f2c2de211993eb2a3ab2aef5 (patch)
treec76bc2c17b2b9f9ca1acc72eec571bc6636d5aac
parentFix pubsub virtual nodetree plugin (diff)
Convert rebar.config.script to more declarative format
-rw-r--r--rebar.config89
-rw-r--r--rebar.config.script230
2 files changed, 163 insertions, 156 deletions
diff --git a/rebar.config b/rebar.config
new file mode 100644
index 00000000..039d0bf2
--- /dev/null
+++ b/rebar.config
@@ -0,0 +1,89 @@
+%%%-------------------------------------------------------------------
+%%% @author Evgeniy Khramtsov <ekhramtsov@process-one.net>
+%%% @copyright (C) 2013, Evgeniy Khramtsov
+%%% @doc
+%%%
+%%% @end
+%%% Created : 1 May 2013 by Evgeniy Khramtsov <ekhramtsov@process-one.net>
+%%%-------------------------------------------------------------------
+
+{deps, [{if_var_true, lager, {lager, ".*", {git, "git://github.com/basho/lager"}}},
+ {if_var_false, lager, {p1_logger, ".*", {git, "git://github.com/processone/p1_logger"}}},
+ {cache_tab, ".*", {git, "git://github.com/processone/cache_tab", {tag, "1.0.1"}}},
+ {p1_tls, ".*", {git, "https://github.com/processone/tls"}},
+ {p1_stringprep, ".*", {git, "git://github.com/processone/stringprep"}},
+ {p1_xml, ".*", {git, "https://github.com/processone/xml"}},
+ {esip, ".*", {git, "git://github.com/processone/p1_sip"}},
+ {p1_stun, ".*", {git, "git://github.com/processone/stun"}},
+ {p1_yaml, ".*", {git, "git://github.com/processone/p1_yaml"}},
+ {p1_utils, ".*", {git, "git://github.com/processone/p1_utils"}},
+ {jiffy, ".*", {git, "git://github.com/davisp/jiffy"}},
+ {oauth2, ".*", {git, "https://github.com/prefiks/oauth2.git"}},
+ {xmlrpc, ".*", {git, "git://github.com/rds13/xmlrpc"}},
+ {if_var_true, mysql, {p1_mysql, ".*", {git, "git://github.com/processone/mysql"}}},
+ {if_var_true, pgsql, {p1_pgsql, ".*", {git, "git://github.com/processone/pgsql"}}},
+ {if_var_true, sqlite, {sqlite3, ".*", {git, "git://github.com/alexeyr/erlang-sqlite3"}}},
+ {if_var_true, pam, {p1_pam, ".*", {git, "git://github.com/processone/epam"}}},
+ {if_var_true, zlib, {p1_zlib, ".*", {git, "git://github.com/processone/zlib"}}},
+ {if_var_true, riak, {riakc, ".*", {git, "git://github.com/basho/riak-erlang-client"}}},
+ {if_var_true, elixir, {rebar_elixir_plugin, ".*", {git, "git@github.com:processone/rebar_elixir_plugin.git"}}},
+ {if_var_true, elixir, {elixir, ".*", {git, "git://github.com/elixir-lang/elixir", {branch, "v1.0"}}}},
+ {if_var_true, iconv, {p1_iconv, ".*", {git, "git://github.com/processone/eiconv"}}},
+ {if_var_true, tools, {meck, "0.8.2", {git, "https://github.com/eproxus/meck", {tag, "0.8.2"}}}},
+ {if_var_true, redis, {eredis, ".*", {git, "git://github.com/wooga/eredis"}}}]}.
+
+{erl_opts, [nowarn_deprecated_function,
+ {if_var_true, roster_gateway_workaround, {d, 'ROSTER_GATWAY_WORKAROUND'}},
+ {if_var_match, db_type, mssql, {d, 'mssql'}},
+ {if_var_true, lager, {d, 'LAGER'}},
+ {if_var_true, erlang_deprecated_types, {d, 'ERL_DEPRECATED_TYPES'}},
+ {if_var_true, hipe, native},
+ {src_dirs, [asn1, src,
+ {if_var_true, tools, tools},
+ {if_var_true, elixir, include}]}]}.
+
+{deps_erl_opts, [{if_var_true, hipe, native}]}.
+
+{plugins, [deps_erl_opts,
+ {if_var_true, elixir, rebar_elixir_compiler},
+ {if_var_true, elixir, rebar_exunit}]}.
+
+{lib_dirs, [{if_var_true, elixir, "deps/elixir/lib"}]}.
+
+{sub_dirs, ["rel"]}.
+
+{keep_build_info, true}.
+
+{xref_warnings, false}.
+
+{xref_checks, [deprecated_function_calls]}.
+
+{xref_exclusions, [
+ "(\"gen_transport\":_/_)",
+ "(\"eprof\":_/_)",
+ {if_var_false, mysql, "(\".*mysql.*\":_/_)"},
+ {if_var_false, pgsql, "(\".*pgsql.*\":_/_)"},
+ {if_var_false, pam, "(\"epam\":_/_)"},
+ {if_var_false, riak, "(\"riak.*\":_/_)"},
+ {if_var_true, riak, "(\"riak_object\":_/_)"},
+ {if_var_false, zlib, "(\"ezlib\":_/_)"},
+ {if_var_false, http, "(\"lhttpc\":_/_)"},
+ {if_var_false, iconv, "(\"iconv\":_/_)"},
+ {if_var_false, odbc, "(\"odbc\":_/_)"},
+ {if_var_false, sqlite, "(\"sqlite3\":_/_)"},
+ {if_var_false, redis, "(\"eredis\":_/_)"}]}.
+
+{eunit_compile_opts, [{i, "tools"}]}.
+
+{post_hook_configure, [{"p1_tls", []},
+ {"p1_stringprep", []},
+ {"p1_yaml", []},
+ {"esip", []},
+ {"p1_xml", [{if_var_true, full_xml, "--enable-full-xml"}]},
+ {if_var_true, pam, {"p1_pam", []}},
+ {if_var_true, zlib, {"p1_zlib", []}},
+ {if_var_true, iconv, {"p1_iconv", []}}]}.
+
+{port_env, [{"CFLAGS", "-g -O2 -Wall"}]}.
+
+{port_specs, [{"priv/lib/jid.so", ["c_src/jid.c"]}]}.
diff --git a/rebar.config.script b/rebar.config.script
index 2642fc68..fdba3a91 100644
--- a/rebar.config.script
+++ b/rebar.config.script
@@ -7,8 +7,6 @@
%%% Created : 1 May 2013 by Evgeniy Khramtsov <ekhramtsov@process-one.net>
%%%-------------------------------------------------------------------
-{require_min_otp_vsn, "16"}.
-
Cfg = case file:consult("vars.config") of
{ok, Terms} ->
Terms;
@@ -16,51 +14,34 @@ Cfg = case file:consult("vars.config") of
[]
end,
-Macros = lists:flatmap(
- fun({roster_gateway_workaround, true}) ->
- [{d, 'ROSTER_GATEWAY_WORKAROUND'}];
- ({db_type, mssql}) ->
- [{d, 'mssql'}];
- ({lager, true}) ->
- [{d, 'LAGER'}];
- ({erlang_deprecated_types, true}) ->
- [{d, 'ERL_DEPRECATED_TYPES'}];
- (_) ->
- []
- end, Cfg),
-
-DebugInfo = case lists:keysearch(debug, 1, Cfg) of
- {value, {debug, true}} ->
- [];
- _ ->
- [no_debug_info]
- end,
-
-HiPE = case lists:keysearch(hipe, 1, Cfg) of
- {value, {hipe, true}} ->
- [native];
- _ ->
- []
- end,
-
-SrcDirs = lists:foldl(
- fun({tools, true}, Acc) ->
- [tools|Acc];
- (_, Acc) ->
- Acc
- end, [], Cfg),
-
-Deps = [{cache_tab, ".*", {git, "https://github.com/processone/cache_tab", {tag, "1.0.1"}}},
- {p1_tls, ".*", {git, "https://github.com/processone/tls"}},
- {p1_stringprep, ".*", {git, "https://github.com/processone/stringprep"}},
- {p1_xml, ".*", {git, "https://github.com/processone/xml"}},
- {esip, ".*", {git, "https://github.com/processone/p1_sip"}},
- {p1_stun, ".*", {git, "https://github.com/processone/stun"}},
- {p1_yaml, ".*", {git, "https://github.com/processone/p1_yaml"}},
- {p1_utils, ".*", {git, "https://github.com/processone/p1_utils"}},
- {jiffy, ".*", {git, "https://github.com/davisp/jiffy"}},
- {oauth2, ".*", {git, "https://github.com/prefiks/oauth2.git"}},
- {xmlrpc, ".*", {git, "https://github.com/rds13/xmlrpc.git"}}],
+ProcessVars = fun(_F, [], Acc) ->
+ lists:reverse(Acc);
+ (F, [{Type, Var, Value} | Tail], Acc) when
+ Type == if_var_true orelse
+ Type == if_var_false ->
+ Flag = Type == if_var_true,
+ case proplists:get_bool(Var, Cfg) of
+ V when V == Flag ->
+ F(F, Tail, [Value | Acc]);
+ _ ->
+ F(F, Tail, Acc)
+ end;
+ (F, [{Type, Var, Match, Value} | Tail], Acc) when
+ Type == if_var_match orelse
+ Type == if_var_no_match ->
+ case proplists:get_value(Var, Cfg) of
+ V when V == Match ->
+ F(F, Tail, [Value | Acc]);
+ _ ->
+ F(F, Tail, Acc)
+ end;
+ (F, [Other1 | Tail1], Acc) ->
+ F(F, Tail1, [F(F, Other1, []) | Acc]);
+ (F, Val, Acc) when is_tuple(Val) ->
+ list_to_tuple(F(F, tuple_to_list(Val), Acc));
+ (_F, Other2, _Acc) ->
+ Other2
+ end,
CFLags = proplists:get_value(cflags, Cfg, ""),
CPPFLags = proplists:get_value(cppflags, Cfg, ""),
@@ -70,97 +51,19 @@ ConfigureCmd = fun(Pkg, Flags) ->
{'get-deps',
"sh -c 'cd deps/" ++ Pkg ++
" && CFLAGS=\""++ CFLags ++"\" CPPFLAGS=\""++ CPPFLags ++"\" LDFLAGS=\""++ LDFLags ++"\"" ++
- " ./configure" ++ Flags ++ "'"}
+ " ./configure " ++ Flags ++ "'"}
end,
-XMLFlags = lists:foldl(
- fun({full_xml, true}, Acc) ->
- Acc ++ " --enable-full-xml";
- (_, Acc) ->
- Acc
- end, "", Cfg),
-
-PostHooks = [ConfigureCmd("p1_tls", ""),
- ConfigureCmd("p1_stringprep", ""),
- ConfigureCmd("p1_yaml", ""),
- ConfigureCmd("esip", ""),
- ConfigureCmd("p1_xml", XMLFlags)],
+Conf = ProcessVars(ProcessVars, CONFIG, []),
-CfgDeps = lists:flatmap(
- fun({mysql, true}) ->
- [{p1_mysql, ".*", {git, "https://github.com/processone/mysql"}}];
- ({pgsql, true}) ->
- [{p1_pgsql, ".*", {git, "https://github.com/processone/pgsql"}}];
- ({sqlite, true}) ->
- [{sqlite3, ".*", {git, "https://github.com/alexeyr/erlang-sqlite3"}}];
- ({pam, true}) ->
- [{p1_pam, ".*", {git, "https://github.com/processone/epam"}}];
- ({zlib, true}) ->
- [{p1_zlib, ".*", {git, "https://github.com/processone/zlib"}}];
- ({riak, true}) ->
- [{riakc, ".*", {git, "https://github.com/basho/riak-erlang-client"}}];
- ({elixir, true}) ->
- [{rebar_elixir_plugin, ".*", {git, "https://github.com/yrashk/rebar_elixir_plugin"}},
- {elixir, ".*", {git, "https://github.com/elixir-lang/elixir", {branch, "v1.0"}}}];
- ({iconv, true}) ->
- [{p1_iconv, ".*", {git, "https://github.com/processone/eiconv"}}];
- ({lager, true}) ->
- [{lager, ".*", {git, "https://github.com/basho/lager"}}];
- ({lager, false}) ->
- [{p1_logger, ".*", {git, "https://github.com/processone/p1_logger"}}];
- ({tools, true}) ->
- [{meck, "0.8.2", {git, "https://github.com/eproxus/meck", {tag, "0.8.2"}}}];
- ({redis, true}) ->
- [{eredis, ".*", {git, "https://github.com/wooga/eredis"}}];
- (_) ->
- []
- end, Cfg),
-
-CfgPostHooks = lists:flatmap(
- fun({pam, true}) ->
- [ConfigureCmd("p1_pam", "")];
- ({zlib, true}) ->
- [ConfigureCmd("p1_zlib", "")];
- ({iconv, true}) ->
- [ConfigureCmd("p1_iconv", "")];
- (_) ->
- []
- end, Cfg),
-
-CfgXrefs = lists:flatmap(
- fun({mysql, false}) ->
- ["(\".*mysql.*\":_/_)"];
- ({pgsql, false}) ->
- ["(\".*pgsql.*\":_/_)"];
- ({pam, false}) ->
- ["(\"epam\":_/_)"];
- ({riak, false}) ->
- ["(\"riak.*\":_/_)"];
- ({riak, true}) ->
- % used in map-reduce function called from riak vm
- ["(\"riak_object\":_/_)"];
- ({zlib, false}) ->
- ["(\"ezlib\":_/_)"];
- ({http, false}) ->
- ["(\"lhttpc\":_/_)"];
- ({iconv, false}) ->
- ["(\"iconv\":_/_)"];
- ({odbc, false}) ->
- ["(\"odbc\":_/_)"];
- (_) ->
- []
- end, Cfg),
-
-ElixirConfig = case lists:keysearch(elixir, 1, Cfg) of
- {value, {elixir, true}} ->
- [{plugins, [deps_erl_opts, rebar_elixir_compiler, rebar_exunit] },
- {lib_dirs, ["deps/elixir/lib"]}];
- _ ->
- [{plugins, [deps_erl_opts]}]
- end,
+Conf1 = case lists:keytake(post_hook_configure, 1, Conf) of
+ {value, {_, Items}, Rest} ->
+ [{post_hooks, [ConfigureCmd(Mod, string:join(Opts, " ")) || {Mod, Opts} <- Items]} | Rest];
+ _ ->
+ Conf
+ end,
{ok, Cwd} = file:get_cwd(),
-
TestConfigFile = filename:join([Cwd, "test", "config.ctc"]),
TestConfig = case file:read_file_info(TestConfigFile) of
{ok, _} ->
@@ -169,29 +72,44 @@ TestConfig = case file:read_file_info(TestConfigFile) of
""
end,
-AllDeps0 = Deps ++ CfgDeps,
-AllDeps = case lists:keytake(lager, 1, AllDeps0) of
- {value, Tuple, Rest} -> [Tuple|Rest];
- false -> AllDeps0
- end,
-
-Config = [{erl_opts, Macros ++ HiPE ++ DebugInfo ++
- [{src_dirs, [asn1, src | SrcDirs]}]},
- {deps_erl_opts, HiPE},
- {sub_dirs, ["rel"]},
- {keep_build_info, true},
- {ct_extra_params, "-ct_hooks cth_surefire "
- ++ TestConfig
- ++ "-include " ++ filename:join([Cwd, "tools"])},
- {xref_warnings, false},
- {xref_checks, [deprecated_function_calls]},
- {xref_queries,
- [{"(XC - UC) || (XU - X - B - "
- ++ string:join(CfgXrefs, " - ") ++ ")", []}]},
- {post_hooks, PostHooks ++ CfgPostHooks},
- {deps, AllDeps}] ++ ElixirConfig,
-%%io:format("ejabberd configuration:~n ~p~n", [Config]),
-Config.
+Conf2 = [{ct_extra_params, "-ct_hooks cth_surefire "
+ ++ TestConfig
+ ++ "-include "
+ ++ filename:join([Cwd, "tools"])} | Conf1],
+
+Conf3 = case lists:keytake(xref_exclusions, 1, Conf2) of
+ {value, {_, Items2}, Rest2} ->
+ [{xref_queries, [{lists:flatten(["(XC - UC) || (XU - X - B ",
+ [[" - ", V] || V <- Items2], ")"]), []}]} | Rest2];
+ _ ->
+ Conf2
+ end,
+
+Conf5 = case lists:keytake(floating_deps, 1, Conf3) of
+ {value, {_, FloatingDeps}, Rest4} ->
+ case lists:keytake(deps, 1, Rest4) of
+ {value, {_, Deps}, Rest41} ->
+ ND = lists:map(fun({DepName, Ver, {git, Repo, _Commit}}=Dep) ->
+ case lists:member(DepName, FloatingDeps) of
+ true ->
+ {DepName, ".*", {git, Repo}};
+ _ ->
+ Dep
+ end;
+ (Dep2) ->
+ Dep2
+ end, Deps),
+ [{deps, ND} | Rest41];
+ _ ->
+ Rest4
+ end;
+ _ ->
+ Conf3
+ end,
+
+%io:format("ejabberd configuration:~n ~p~n", [Conf5]),
+
+Conf5.
%% Local Variables:
%% mode: erlang