summaryrefslogtreecommitdiff
path: root/src/rebar_utils.erl
diff options
context:
space:
mode:
authorMotiejus Jakštys <desired.mta@gmail.com>2012-07-02 12:12:17 +0300
committerTuncer Ayaz <tuncer.ayaz@gmail.com>2012-07-02 18:46:00 +0200
commit394c0f43f88ce7fba9f16f634fd9d006cf42e949 (patch)
treec863825b9f5873ef1df28dcacb1ea2896911bd7e /src/rebar_utils.erl
parentec2f67def8e29af6bcf701ffdba00f297cea3d55 (diff)
Move erl_opts/1 and src_dirs/1 to rebar_utils.erl
These functions will be necessary in rebar_eunit.erl, too.
Diffstat (limited to 'src/rebar_utils.erl')
-rw-r--r--src/rebar_utils.erl48
1 files changed, 47 insertions, 1 deletions
diff --git a/src/rebar_utils.erl b/src/rebar_utils.erl
index ec816b8..f2290e0 100644
--- a/src/rebar_utils.erl
+++ b/src/rebar_utils.erl
@@ -48,7 +48,9 @@
get_deprecated_global/3, get_deprecated_global/4,
get_deprecated_list/4, get_deprecated_list/5,
get_deprecated_local/4, get_deprecated_local/5,
- delayed_halt/1]).
+ delayed_halt/1,
+ erl_opts/1, src_dirs/1
+ ]).
-include("rebar.hrl").
@@ -452,3 +454,47 @@ vcs_vsn_cmd(Version) -> {unknown, Version}.
vcs_vsn_invoke(Cmd, Dir) ->
{ok, VsnString} = rebar_utils:sh(Cmd, [{cd, Dir}, {use_stdout, false}]),
string:strip(VsnString, right, $\n).
+
+%% @doc Return list of erl_opts
+-spec erl_opts(rebar_config:config()) -> list().
+erl_opts(Config) ->
+ RawErlOpts = filter_defines(rebar_config:get(Config, erl_opts, []), []),
+ GlobalDefines = [{d, list_to_atom(D)} ||
+ D <- rebar_config:get_global(defines, [])],
+ Opts = GlobalDefines ++ RawErlOpts,
+ case proplists:is_defined(no_debug_info, Opts) of
+ true ->
+ [O || O <- Opts, O =/= no_debug_info];
+ false ->
+ [debug_info|Opts]
+ end.
+
+-spec src_dirs(SrcDirs::[string()]) -> [file:filename(), ...].
+src_dirs([]) ->
+ ["src"];
+src_dirs(SrcDirs) ->
+ SrcDirs.
+
+%%
+%% Filter a list of erl_opts platform_define options such that only
+%% those which match the provided architecture regex are returned.
+%%
+-spec filter_defines(ErlOpts::list(), Acc::list()) -> list().
+filter_defines([], Acc) ->
+ lists:reverse(Acc);
+filter_defines([{platform_define, ArchRegex, Key} | Rest], Acc) ->
+ case rebar_utils:is_arch(ArchRegex) of
+ true ->
+ filter_defines(Rest, [{d, Key} | Acc]);
+ false ->
+ filter_defines(Rest, Acc)
+ end;
+filter_defines([{platform_define, ArchRegex, Key, Value} | Rest], Acc) ->
+ case rebar_utils:is_arch(ArchRegex) of
+ true ->
+ filter_defines(Rest, [{d, Key, Value} | Acc]);
+ false ->
+ filter_defines(Rest, Acc)
+ end;
+filter_defines([Opt | Rest], Acc) ->
+ filter_defines(Rest, [Opt | Acc]).