aboutsummaryrefslogtreecommitdiff
path: root/rebar.config.script
blob: 833595d481ea5c3f515d618f3ecdce1c8b31c4d8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
%%%-------------------------------------------------------------------
%%% @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>
%%%-------------------------------------------------------------------

{require_min_otp_vsn, "16"}.

Cfg = case file:consult("vars.config") of
          {ok, Terms} ->
              Terms;
          _Err ->
              []
      end,

Macros = lists:flatmap(
           fun({roster_gateway_workaround, true}) ->
                   [{d, 'ROSTER_GATEWAY_WORKAROUND'}];
              ({transient_supervisors, false}) ->
                   [{d, 'NO_TRANSIENT_SUPERVISORS'}];
              ({nif, true}) ->
                   [{d, 'NIF'}];
              ({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 = [{p1_cache_tab, ".*", {git, "https://github.com/processone/cache_tab", "f7ea12b0ba962a3d2f9a406d2954cf7de4e27230"}},
        {p1_tls, ".*", {git, "https://github.com/processone/tls", "e56321afd974e9da33da913cd31beebc8e73e75f"}},
        {p1_stringprep, ".*", {git, "https://github.com/processone/stringprep", "3c640237a3a7831dc39de6a6d329d3a9af25c579"}},
        {p1_xml, ".*", {git, "https://github.com/processone/xml", "1c8b016b0ac7986efb823baf1682a43565449e65"}},
        {esip, ".*", {git, "https://github.com/processone/p1_sip", "d662d3fe7f6288b444ea321d854de0bd6d40e022"}},
        {p1_stun, ".*", {git, "https://github.com/processone/stun", "061bdae484268cbf0457ad4797e74b8516df3ad1"}},
        {p1_yaml, ".*", {git, "https://github.com/processone/p1_yaml", "79f756ba73a235c4d3836ec07b5f7f2b55f49638"}},
        {p1_utils, ".*", {git, "https://github.com/processone/p1_utils", "d7800881e6702723ce58b7646b60c9e4cd25d563"}},
        {jiffy, ".*", {git, "https://github.com/davisp/jiffy", "cfc61a2e952dc3182e0f9b1473467563699992e2"}},
        {oauth2, ".*", {git, "https://github.com/prefiks/oauth2.git", "e6da9912e5d8f658e7e868f41a102d085bdbef59"}},
        {xmlrpc, ".*", {git, "https://github.com/rds13/xmlrpc.git", "42e6e96a0fe7106830274feed915125feb1056f3"}}],

CFLags = proplists:get_value(cflags, Cfg, ""),
CPPFLags = proplists:get_value(cppflags, Cfg, ""),
LDFLags = proplists:get_value(ldflags, Cfg, ""),

ConfigureCmd = fun(Pkg, Flags) ->
                       {'get-deps',
                        "sh -c 'cd deps/" ++ Pkg ++
                            " && CFLAGS=\""++ CFLags ++"\" CPPFLAGS=\""++ CPPFLags ++"\" LDFLAGS=\""++ LDFLags ++"\"" ++
                            " ./configure" ++ Flags ++ "'"}
               end,

XMLFlags = lists:foldl(
             fun({nif, true}, Acc) ->
                     Acc ++ " --enable-nif";
                ({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)],

CfgDeps = lists:flatmap(
            fun({mysql, true}) ->
                    [{p1_mysql, ".*", {git, "https://github.com/processone/mysql", "dfa87da95f8fdb92e270741c2a53f796b682f918"}}];
               ({pgsql, true}) ->
                    [{p1_pgsql, ".*", {git, "https://github.com/processone/pgsql", "e72c03c60bfcb56bbb5d259342021d9cb3581dac"}}];
               ({sqlite, true}) ->
                    [{sqlite3, ".*", {git, "https://github.com/alexeyr/erlang-sqlite3", "8350dc603804c503f99c92bfd2eab1dd6885758e"}}];
               ({pam, true}) ->
                    [{p1_pam, ".*", {git, "https://github.com/processone/epam", "d3ce290b7da75d780a03e86e7a8198a80e9826a6"}}];
               ({zlib, true}) ->
                    [{p1_zlib, ".*", {git, "https://github.com/processone/zlib", "e3d4222b7aae616d7ef2e7e2fa0bbf451516c602"}}];
               ({riak, true}) ->
                    [{riakc, ".*", {git, "https://github.com/basho/riak-erlang-client", {tag, "1.4.2"}}}];
               ({elixir, true}) ->
                    [{rebar_elixir_plugin, ".*", {git, "https://github.com/yrashk/rebar_elixir_plugin", "7058379b7c7e017555647f6b9cecfd87cd50f884"}},
                     {elixir, ".*", {git, "https://github.com/elixir-lang/elixir", "1d9548fd285d243721b7eba71912bde2ffd1f6c3"}}];
               ({iconv, true}) ->
                    [{p1_iconv, ".*", {git, "https://github.com/processone/eiconv", "8b7542b1aaf0a851f335e464956956985af6d9a2"}}];
               ({lager, true}) ->
                    [{lager, ".*", {git, "https://github.com/basho/lager", "4d2ec8c701e1fa2d386f92f2b83b23faf8608ac3"}}];
               ({lager, false}) ->
                    [{p1_logger, ".*", {git, "https://github.com/processone/p1_logger", "3e19507fd5606a73694917158767ecb3f5704e3f"}}];
               ({tools, true}) ->
                    [{meck, "0.*", {git, "https://github.com/eproxus/meck", "0845277398b8326f9dddddd9fc3cf73467ba6877"}}];
               ({redis, true}) ->
                    [{eredis, ".*", {git, "https://github.com/wooga/eredis", "bf12ecb30253c84a2331f4f0d93fd68856fcb9f4"}}];
               (_) ->
                    []
            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, [rebar_elixir_compiler, rebar_exunit] },
                        {lib_dirs, ["deps/elixir/lib"]}];
                   _ ->
                       []
               end,

{ok, Cwd} = file:get_cwd(),

TestConfigFile = filename:join([Cwd, "test", "config.ctc"]),
TestConfig = case file:read_file_info(TestConfigFile) of
                 {ok, _} ->
                     "-userconfig ct_config_plain " ++ TestConfigFile ++ " ";
                 _ ->
                     ""
             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]}]},
          {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, []},
	  {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.

%% Local Variables:
%% mode: erlang
%% End:
%% vim: set filetype=erlang tabstop=8: