summaryrefslogtreecommitdiff
path: root/src/rebar_config.erl
diff options
context:
space:
mode:
authorDave Smith <dizzyd@dizzyd.com>2009-11-25 21:55:47 -0700
committerDave Smith <dizzyd@dizzyd.com>2009-11-25 21:55:47 -0700
commite4a9310a9769d432ea8d1fa32710ebb02eda2c60 (patch)
treef47bd877a37e71eae91baca8cfeda542968be0e9 /src/rebar_config.erl
parentfd8794dae791c80bfe8e4ab1aa3a9c97370695a9 (diff)
downloadrebar-e4a9310a9769d432ea8d1fa32710ebb02eda2c60.tar.gz
Adding support for basic compilation ordering
Diffstat (limited to 'src/rebar_config.erl')
-rw-r--r--src/rebar_config.erl37
1 files changed, 35 insertions, 2 deletions
diff --git a/src/rebar_config.erl b/src/rebar_config.erl
index 077de75..0b3ffee 100644
--- a/src/rebar_config.erl
+++ b/src/rebar_config.erl
@@ -28,13 +28,34 @@
get_modules/2,
get_list/3]).
+-include("rebar.hrl").
+
-record(config, { dir,
opts }).
+
+%% ===================================================================
+%% Public API
+%% ===================================================================
+
new(Dir) ->
{ok, DefaultConfig} = application:get_env(rebar, default_config),
- #config { dir = Dir,
- opts = orddict:from_list(DefaultConfig)}.
+ BaseDict = orddict:from_list(DefaultConfig),
+
+ %% Load terms from rebar.config, if it exists
+ ConfigFile = filename:join([Dir, "rebar.config"]),
+ case file:consult(ConfigFile) of
+ {ok, Terms} ->
+ Dict = merge_terms(Terms, BaseDict);
+ {error, enoent} ->
+ Dict = BaseDict;
+ Other ->
+ ?WARN("Failed to load ~s: ~p\n", [ConfigFile, Other]),
+ ?FAIL,
+ Dict = BaseDict
+ end,
+ #config { dir = Dir, opts = Dict }.
+
get_modules(Config, app) ->
case orddict:find(app_modules, Config#config.opts) of
@@ -52,3 +73,15 @@ get_list(Config, Key, Default) ->
List
end.
+
+
+%% ===================================================================
+%% Internal functions
+%% ===================================================================
+
+merge_terms([], Dict) ->
+ Dict;
+merge_terms([{Key, Value} | Rest], Dict) ->
+ merge_terms(Rest, orddict:append(Key, Value, Dict));
+merge_terms([_ | Rest], Dict) ->
+ merge_terms(Rest, Dict).