#!/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]).