% This file is part of Jiffy released under the MIT license.
% See the LICENSE file for more information.

% Only include PropEr as a dependency when the JIFFY_DEV
% environment variable is defined. This allows downstream
% applications to avoid requiring PropEr.
%
% This script is based on the example provided with Rebar.

ErlOpts = [{d, 'JIFFY_DEV'}],

Proper = [
    {proper, ".*", {git, "git://github.com/manopapad/proper.git", "master"}}
],

ConfigPath = filename:dirname(SCRIPT),
DevMarker = filename:join([ConfigPath, ".jiffy.dev"]),

case filelib:is_file(DevMarker) of
    true ->
        % Don't override existing dependencies
        Config0 = case lists:keyfind(deps, 1, CONFIG) of
            false ->
                CONFIG ++ [{deps, Proper}];
            {deps, DepsList} ->
                lists:keyreplace(deps, 1, CONFIG, {deps, DepsList ++ Proper})
        end,
        Config1 = case lists:keyfind(erl_opts, 1, Config0) of
            false ->
                Config0 ++ [{erl_opts, ErlOpts}];
            {erl_opts, Opts} ->
                NewOpts = {erl_opts, Opts ++ ErlOpts},
                lists:keyreplace(erl_opts, 1, Config0, NewOpts)
        end;
    false ->
        CONFIG
end.
