depman.erl 1.4 KB

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