1234567891011121314151617181920212223242526272829 |
- #!/usr/bin/env escript
- -module(depman).
- -compile([export_all]).
- -define(ABORT(Str, Args), io:format(Str, Args), throw(abort)).
- app_exists(App,Srv) when is_tuple(App) -> app_exists(element(1,App), Srv);
- app_exists(App,Srv) when is_atom(App) -> case reltool_server:get_app(Srv,App) of {ok, _} -> true; _ -> false end.
- validate_rel_apps(ReltoolServer, {sys, ReltoolConfig}) ->
- case lists:keyfind(rel, 1, ReltoolConfig) of
- false -> ok;
- {rel, _Name, _Vsn, Apps} ->
- Missing = lists:sort([App || App <- Apps, app_exists(App, ReltoolServer) == false]),
- case Missing of [] -> ok; _ -> ?ABORT("Missing Apps: ~p\n", [Missing]) end;
- Rel -> ?ABORT("Invalid {rel, ...} section in reltool.config: ~p\n", [Rel]) end.
- relconfig(Apps) ->
- LibDirs = [Dir || Dir <- ["apps", "deps"], case file:read_file_info(Dir) of {ok, _} -> true; _ -> false end],
- {sys, [ {lib_dirs,LibDirs}, {rel,"node","1",Apps}, {boot_rel,"node"}, {app,observer,[{incl_cond,exclude}]} ]}.
- main([]) -> ?ABORT("usage: ./depman.erl apps", []);
- main(MainApps) ->
- Relconfig = relconfig([list_to_atom(A) || A <- MainApps]),
- {ok, Server} = reltool:start_server([{config, Relconfig}]),
- validate_rel_apps(Server, Relconfig),
- {ok, {release, _Node, _Erts, Apps}} = reltool_server:get_rel(Server, "node"),
- Alist = [element(1, A) || A <- Apps],
- io:format("~w~n", [Alist]).
|