]> granicus.if.org Git - ejabberd/commitdiff
Convert rebar.config.script to more declarative format
authorPaweł Chmielowski <pchmielowski@process-one.net>
Fri, 18 Dec 2015 16:17:13 +0000 (17:17 +0100)
committerPaweł Chmielowski <pchmielowski@process-one.net>
Fri, 18 Dec 2015 16:20:41 +0000 (17:20 +0100)
rebar.config [new file with mode: 0644]
rebar.config.script

diff --git a/rebar.config b/rebar.config
new file mode 100644 (file)
index 0000000..039d0bf
--- /dev/null
@@ -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"]}]}.
index 2642fc68217cb7bb325fa11be2ce947b189015a2..fdba3a91a4eb2bcdd56efe7fc793e09e5da2c816 100644 (file)
@@ -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