diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/rcl_app_discovery.erl | 10 | ||||
-rw-r--r-- | src/rcl_app_info.erl | 1 | ||||
-rw-r--r-- | src/rcl_prv_discover.erl | 51 | ||||
-rw-r--r-- | src/rcl_rel_discovery.erl | 11 | ||||
-rw-r--r-- | src/rcl_state.erl | 9 |
5 files changed, 57 insertions, 25 deletions
diff --git a/src/rcl_app_discovery.erl b/src/rcl_app_discovery.erl index 43557c4..1f1ecc8 100644 --- a/src/rcl_app_discovery.erl +++ b/src/rcl_app_discovery.erl @@ -86,7 +86,7 @@ setup_overrides(State, AppMetas0) -> Overrides = rcl_state:overrides(State), AppMetas1 = [AppMeta || AppMeta <- AppMetas0, not lists:keymember(app_name(AppMeta), 1, Overrides)], - [case is_valid_otp_app(filename:join([FileName, "ebin", + [case is_valid_otp_app(filename:join([FileName, <<"ebin">>, erlang:atom_to_list(AppName) ++ ".app"])) of {noresult, false} -> {error, {invalid_override, AppName, FileName}}; @@ -134,11 +134,11 @@ is_valid_otp_app(File) -> %% Is this an ebin dir? EbinDir = filename:dirname(File), case filename:basename(EbinDir) of - "ebin" -> - case lists:suffix(".app", File) of - true -> + <<"ebin">> -> + case filename:extension(File) of + <<".app">> -> has_at_least_one_beam(EbinDir, File); - false -> + _ -> {noresult, false} end; _ -> diff --git a/src/rcl_app_info.erl b/src/rcl_app_info.erl index f2afa0b..dadc579 100644 --- a/src/rcl_app_info.erl +++ b/src/rcl_app_info.erl @@ -91,7 +91,6 @@ new(AppName, Vsn, Dir, ActiveDeps, LibraryDeps) -> {ok, t()} | relcool:error(). new(AppName, Vsn, Dir, ActiveDeps, LibraryDeps, Link) when erlang:is_atom(AppName), - erlang:is_list(Dir), erlang:is_list(ActiveDeps), erlang:is_list(LibraryDeps) -> case parse_version(Vsn) of diff --git a/src/rcl_prv_discover.erl b/src/rcl_prv_discover.erl index 10fb28b..fa810a6 100644 --- a/src/rcl_prv_discover.erl +++ b/src/rcl_prv_discover.erl @@ -79,29 +79,54 @@ get_lib_dirs(State) -> true -> LibDirs0; false -> - add_current_dir(State, LibDirs0) + lists:flatten([LibDirs0, + add_common_project_dirs(State), + add_system_lib_dir(State), + add_release_output_dir(State)]) end. --spec add_current_dir(rcl_state:t(), [file:name()]) -> [file:name()]. -add_current_dir(State, LibDirs) -> +-spec add_common_project_dirs(rcl_state:t()) -> [file:name()]. +add_common_project_dirs(State) -> %% Check to see if there is a rebar.config. If so then look for a deps %% dir. If both are there then we add that to the lib dirs. - Root = rcl_state:root_dir(State), - add_system_lib_dir(State, [filename:absname(Root) | LibDirs]). + case rcl_state:get(State, disable_project_subdirs, false) of + true -> + []; + false -> + Root = rcl_state:root_dir(State), + Apps = filename:join(Root, "apps"), + Lib = filename:join(Root, "lib"), + Deps = filename:join(Root, "deps"), + lists:foldl(fun(Dir, LibDirs) -> + case ec_file:exists(Dir) of + true -> + [erlang:iolist_to_binary(Dir) | LibDirs]; + false -> + LibDirs + end + end, [], [Deps, Lib, Apps]) + end. --spec add_system_lib_dir(rcl_state:t(), [file:name()]) -> [file:name()]. -add_system_lib_dir(State, LibDirs) -> +-spec add_system_lib_dir(rcl_state:t()) -> [file:name()]. +add_system_lib_dir(State) -> ExcludeSystem = rcl_state:get(State, discover_exclude_system, false), - case ExcludeSystem of true -> - LibDirs; + []; + false -> + erlang:iolist_to_binary(code:lib_dir()) + end. + +add_release_output_dir(State) -> + case rcl_state:get(State, disable_discover_release_output, false) of + true -> + []; false -> - SystemLibDir0 = code:lib_dir(), - case filelib:is_dir(SystemLibDir0) of + Output = erlang:iolist_to_binary(rcl_state:output_dir(State)), + case ec_file:exists(erlang:binary_to_list(Output)) of true -> - [SystemLibDir0 | LibDirs]; + Output; false -> - LibDirs + [] end end. diff --git a/src/rcl_rel_discovery.erl b/src/rcl_rel_discovery.erl index 38d7913..d9012ea 100644 --- a/src/rcl_rel_discovery.erl +++ b/src/rcl_rel_discovery.erl @@ -74,12 +74,13 @@ resolve_rel_metadata(State, LibDirs, AppMeta) -> case Errors of [] -> + ReleaseMeta1 = [RelMeta || {ok, RelMeta} <- ReleaseMeta0], rcl_log:debug(rcl_state:log(State), fun() -> ["Resolved the following OTP Releases from the system: \n", - [[rcl_release:format(1, Rel), "\n"] || Rel <- ReleaseMeta0]] + [[rcl_release:format(1, Rel), "\n"] || Rel <- ReleaseMeta1]] end), - {ok, ReleaseMeta0}; + {ok, ReleaseMeta1}; _ -> ?RCL_ERROR(Errors) end. @@ -105,10 +106,10 @@ discover_dir(File, AppMeta, file) -> | {error, Reason::term()} | {noresult, false}. is_valid_release(File, AppMeta) -> - case lists:suffix(".rel", File) of - true -> + case filename:extension(File) of + <<".rel">>-> resolve_release(File, AppMeta); - false -> + _ -> {noresult, false} end. diff --git a/src/rcl_state.erl b/src/rcl_state.erl index 6568541..7247818 100644 --- a/src/rcl_state.erl +++ b/src/rcl_state.erl @@ -103,7 +103,7 @@ new(PropList, Target) State0 = #state_t{log = proplists:get_value(log, PropList, rcl_log:new(error)), output_dir=proplists:get_value(output_dir, PropList, ""), - lib_dirs=proplists:get_value(lib_dirs, PropList, ""), + lib_dirs=[to_binary(Dir) || Dir <- proplists:get_value(lib_dirs, PropList, [])], config_file=proplists:get_value(config, PropList, undefined), action = Target, goals=proplists:get_value(goals, PropList, []), @@ -292,6 +292,13 @@ create_logic_providers(State0) -> State5#state_t{providers=[ConfigProvider, DiscoveryProvider, ReleaseProvider, OverlayProvider, AssemblerProvider]}. +to_binary(Dir) + when erlang:is_list(Dir) -> + erlang:list_to_binary(Dir); +to_binary(Dir) + when erlang:is_binary(Dir) -> + Dir. + %%%=================================================================== %%% Test Functions %%%=================================================================== |