aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rcl_cmd_args.erl15
-rw-r--r--src/relcool.erl25
2 files changed, 35 insertions, 5 deletions
diff --git a/src/rcl_cmd_args.erl b/src/rcl_cmd_args.erl
index 3bb9f41..9d829d3 100644
--- a/src/rcl_cmd_args.erl
+++ b/src/rcl_cmd_args.erl
@@ -160,9 +160,22 @@ create_lib_dirs(Opts, Acc) ->
Error = {error, _} ->
Error;
ok ->
- {ok, [{lib_dirs, [filename:absname(Dir) || Dir <- Dirs]} | Acc]}
+ create_root_dir(Opts, [{lib_dirs, [filename:absname(Dir) || Dir <- Dirs]} | Acc])
end.
+-spec create_root_dir([getopt:option()], rcl_state:cmd_args()) ->
+ {ok, rcl_state:cmd_args()} | relcool:error().
+create_root_dir(Opts, Acc) ->
+ Dir = proplists:get_value(root_dir, Opts, undefined),
+ case Dir of
+ undefined ->
+ {ok, Cwd} = file:get_cwd(),
+ {ok, [{root_dir, Cwd} | Acc]};
+ _ ->
+ {ok, [{root_dir, Dir} | Acc]}
+ end.
+
+
-spec check_lib_dirs([string()]) -> ok | relcool:error().
check_lib_dirs([]) ->
ok;
diff --git a/src/relcool.erl b/src/relcool.erl
index 9babdb2..f240553 100644
--- a/src/relcool.erl
+++ b/src/relcool.erl
@@ -23,6 +23,7 @@
-export([main/1,
do/7,
do/8,
+ do/9,
format_error/1,
opt_spec_list/0]).
@@ -60,10 +61,25 @@ main(Args) ->
%% @param OutputDir - The directory where the release should be built to
%% @param Configs - The list of config files for the system
do(RelName, RelVsn, Goals, LibDirs, LogLevel, OutputDir, Configs) ->
- do(RelName, RelVsn, Goals, LibDirs, LogLevel, OutputDir, [], Configs).
+ {ok, Cwd} = file:get_cwd(),
+ do(Cwd, RelName, RelVsn, Goals, LibDirs, LogLevel, OutputDir, [], Configs).
%% @doc provides an API to run the Relcool process from erlang applications
%%
+%% @param RootDir - The root directory for the project
+%% @param RelName - The release name to build (maybe `undefined`)
+%% @param RelVsn - The release version to build (maybe `undefined`)
+%% @param Goals - The release goals for the system in depsolver or Relcool goal
+%% format
+%% @param LibDirs - The library dirs that should be used for the system
+%% @param OutputDir - The directory where the release should be built to
+%% @param Configs - The list of config files for the system
+do(RootDir, RelName, RelVsn, Goals, LibDirs, LogLevel, OutputDir, Configs) ->
+ do(RootDir, RelName, RelVsn, Goals, LibDirs, LogLevel, OutputDir, [], Configs).
+
+%% @doc provides an API to run the Relcool process from erlang applications
+%%
+%% @param RootDir - The root directory for the system
%% @param RelName - The release name to build (maybe `undefined`)
%% @param RelVsn - The release version to build (maybe `undefined`)
%% @param Goals - The release goals for the system in depsolver or Relcool goal
@@ -72,13 +88,14 @@ do(RelName, RelVsn, Goals, LibDirs, LogLevel, OutputDir, Configs) ->
%% @param OutputDir - The directory where the release should be built to
%% @param Overrides - A list of overrides for the system
%% @param Configs - The list of config files for the system
-do(RelName, RelVsn, Goals, LibDirs, LogLevel, OutputDir, Overrides, Config) ->
+do(RootDir, RelName, RelVsn, Goals, LibDirs, LogLevel, OutputDir, Overrides, Config) ->
State = rcl_state:new([{relname, RelName},
{relvsn, RelVsn},
{goals, Goals},
{overrides, Overrides},
{output_dir, OutputDir},
{lib_dirs, LibDirs},
+ {root_dir, RootDir},
{log, rcl_log:new(LogLevel)}],
Config),
run_relcool_process(rcl_state:caller(State, api)).
@@ -93,8 +110,8 @@ opt_spec_list() ->
"usually the OTP"},
{output_dir, $o, "output-dir", string, "The output directory for the release. This is `./` by default."},
{lib_dir, $l, "lib-dir", string, "Additional dirs that should be searched for OTP Apps"},
- {log_level, $V, "verbose", {integer, 0}, "Verbosity level, maybe between 0 and 2"}
- ].
+ {log_level, $V, "verbose", {integer, 0}, "Verbosity level, maybe between 0 and 2"},
+ {root_dir, $r, "root", string, "The project root directory"}].
-spec format_error(Reason::term()) -> iolist().
format_error({invalid_return_value, Provider, Value}) ->