summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlvaro Videla <alvaro@rabbitmq.com>2012-11-16 13:09:49 +0100
committerAlvaro Videla <alvaro@rabbitmq.com>2012-11-16 13:09:49 +0100
commited962e5599b0ea9a932f33d2447225821820b28e (patch)
tree623534cfea4f4aa5e74186bbeab53f7d941b87c0 /src
parentae6dc3556a2fb6995d4ce91093ae2b04befed5d5 (diff)
downloadrabbitmq-server-git-ed962e5599b0ea9a932f33d2447225821820b28e.tar.gz
moves rabbit_release to the standalone packaging folder
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_release.erl148
1 files changed, 0 insertions, 148 deletions
diff --git a/src/rabbit_release.erl b/src/rabbit_release.erl
deleted file mode 100644
index bcba26995d..0000000000
--- a/src/rabbit_release.erl
+++ /dev/null
@@ -1,148 +0,0 @@
-%% based on rabbit_prelaunch.erl from rabbitmq-server source code
--module(rabbit_release).
-
--export([start/0, stop/0, make_tar/2]).
-
--include("rabbit.hrl").
-
--define(BaseApps, [rabbit]).
--define(ERROR_CODE, 1).
-
-start() ->
- %% Determine our various directories
- [PluginsDistDir, UnpackedPluginDir, RabbitHome] =
- init:get_plain_arguments(),
- RootName = UnpackedPluginDir ++ "/rabbit",
-
- prepare_plugins(PluginsDistDir, UnpackedPluginDir),
-
- PluginAppNames = [ P#plugin.name || P <- rabbit_plugins:list(PluginsDistDir) ],
-
- %% we need to call find_plugins because it has the secondary effect of adding the
- %% plugin ebin folder to the code path. We need that in order to load the plugin app
- RequiredApps = find_plugins(UnpackedPluginDir),
-
- %% Build the entire set of dependencies - this will load the
- %% applications along the way
- AllApps = case catch sets:to_list(expand_dependencies(RequiredApps)) of
- {failed_to_load_app, App, Err} ->
- terminate("failed to load application ~s:~n~p",
- [App, Err]);
- AppList ->
- AppList
- end,
-
- %% we need a list of ERTS apps we need to ship with rabbit
- BaseApps = AllApps -- PluginAppNames,
-
- AppVersions = [determine_version(App) || App <- BaseApps],
- RabbitVersion = proplists:get_value(rabbit, AppVersions),
-
- %% Build the overall release descriptor
- RDesc = {release,
- {"rabbit", RabbitVersion},
- {erts, erlang:system_info(version)},
- AppVersions},
-
- %% Write it out to $RABBITMQ_PLUGINS_EXPAND_DIR/rabbit.rel
- rabbit_file:write_file(RootName ++ ".rel", io_lib:format("~p.~n", [RDesc])),
-
- %% Compile the script
- systools:make_script(RootName),
- systools:script2boot(RootName),
- %% Make release tarfile
- make_tar(RootName, RabbitHome),
- terminate(0),
- ok.
-
-stop() ->
- ok.
-
-make_tar(Release, RabbitHome) ->
- systools:make_tar(Release,
- [
- {dirs, [docs, etc, include, plugins, sbin, share]},
- {erts, code:root_dir()},
- {outdir, RabbitHome}
- ]).
-
-determine_version(App) ->
- application:load(App),
- {ok, Vsn} = application:get_key(App, vsn),
- {App, Vsn}.
-
-delete_recursively(Fn) ->
- case rabbit_file:recursive_delete([Fn]) of
- ok -> ok;
- {error, {Path, E}} -> {error, {cannot_delete, Path, E}};
- Error -> Error
- end.
-
-prepare_plugins(PluginsDistDir, DestDir) ->
- %% Eliminate the contents of the destination directory
- case delete_recursively(DestDir) of
- ok -> ok;
- {error, E} -> terminate("Could not delete dir ~s (~p)", [DestDir, E])
- end,
- case filelib:ensure_dir(DestDir ++ "/") of
- ok -> ok;
- {error, E2} -> terminate("Could not create dir ~s (~p)", [DestDir, E2])
- end,
-
- [prepare_plugin(Plugin, DestDir) || Plugin <- rabbit_plugins:list(PluginsDistDir)].
-
-prepare_plugin(#plugin{type = ez, location = Location}, PluginDestDir) ->
- zip:unzip(Location, [{cwd, PluginDestDir}]);
-prepare_plugin(#plugin{type = dir, name = Name, location = Location},
- PluginsDestDir) ->
- rabbit_file:recursive_copy(Location,
- filename:join([PluginsDestDir, Name])).
-
-expand_dependencies(Pending) ->
- expand_dependencies(sets:new(), Pending).
-expand_dependencies(Current, []) ->
- Current;
-expand_dependencies(Current, [Next|Rest]) ->
- case sets:is_element(Next, Current) of
- true ->
- expand_dependencies(Current, Rest);
- false ->
- case application:load(Next) of
- ok ->
- ok;
- {error, {already_loaded, _}} ->
- ok;
- {error, Reason} ->
- throw({failed_to_load_app, Next, Reason})
- end,
- {ok, Required} = application:get_key(Next, applications),
- Unique = [A || A <- Required, not(sets:is_element(A, Current))],
- expand_dependencies(sets:add_element(Next, Current), Rest ++ Unique)
- end.
-
-find_plugins(PluginDir) ->
- [prepare_dir_plugin(PluginName) ||
- PluginName <- filelib:wildcard(PluginDir ++ "/*/ebin/*.app")].
-
-prepare_dir_plugin(PluginAppDescFn) ->
- %% Add the plugin ebin directory to the load path
- PluginEBinDirN = filename:dirname(PluginAppDescFn),
- code:add_path(PluginEBinDirN),
-
- %% We want the second-last token
- NameTokens = string:tokens(PluginAppDescFn,"/."),
- PluginNameString = lists:nth(length(NameTokens) - 1, NameTokens),
- list_to_atom(PluginNameString).
-
-terminate(Fmt, Args) ->
- io:format("ERROR: " ++ Fmt ++ "~n", Args),
- terminate(?ERROR_CODE).
-
-terminate(Status) ->
- case os:type() of
- {unix, _} -> halt(Status);
- {win32, _} -> init:stop(Status),
- receive
- after infinity -> ok
- end
- end.