mirror of
https://github.com/correl/rebar.git
synced 2024-11-27 11:09:55 +00:00
Removing 'install' command; semantics were poorly defined could damage a typical OTP installation
This commit is contained in:
parent
24cc775e88
commit
51ed787290
1 changed files with 1 additions and 80 deletions
|
@ -27,8 +27,7 @@
|
||||||
-module(rebar_otp_app).
|
-module(rebar_otp_app).
|
||||||
|
|
||||||
-export([compile/2,
|
-export([compile/2,
|
||||||
clean/2,
|
clean/2]).
|
||||||
install/2]).
|
|
||||||
|
|
||||||
-include("rebar.hrl").
|
-include("rebar.hrl").
|
||||||
|
|
||||||
|
@ -67,88 +66,10 @@ clean(_Config, File) ->
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
install(Config, File) ->
|
|
||||||
%% If we get an .app.src file, it needs to be pre-processed and
|
|
||||||
%% written out as a ebin/*.app file. That resulting file will then
|
|
||||||
%% be validated as usual.
|
|
||||||
case rebar_app_utils:is_app_src(File) of
|
|
||||||
true ->
|
|
||||||
AppFile = preprocess(File);
|
|
||||||
false ->
|
|
||||||
AppFile = File
|
|
||||||
end,
|
|
||||||
|
|
||||||
%% Load the app name and version from the .app file and construct
|
|
||||||
%% the app identifier
|
|
||||||
{ok, AppName, AppData} = rebar_app_utils:load_app_file(AppFile),
|
|
||||||
|
|
||||||
%% Validate the .app file prior to installation
|
|
||||||
validate_name(AppName, AppFile),
|
|
||||||
validate_modules(AppName, proplists:get_value(modules, AppData)),
|
|
||||||
|
|
||||||
%% Get the target directory. The user can specify a target= directory
|
|
||||||
%% on the command line for convenience, or it defaults to the Erlang
|
|
||||||
%% install dir
|
|
||||||
TargetDir = rebar_config:get_global(target, code:lib_dir()),
|
|
||||||
|
|
||||||
%% Pull out the vsn and construct identifier
|
|
||||||
Vsn = proplists:get_value(vsn, AppData),
|
|
||||||
AppId = ?FMT("~s-~s", [AppName, Vsn]),
|
|
||||||
?CONSOLE("Installing: ~s to ~s\n", [AppId, TargetDir]),
|
|
||||||
|
|
||||||
%% Check the erlang lib directory to see if this app identifier
|
|
||||||
%% is already present.
|
|
||||||
AppDir = filename:join([TargetDir, AppId]),
|
|
||||||
case filelib:is_dir(AppDir) of
|
|
||||||
true ->
|
|
||||||
%% Already exists -- check for force=1 global flag and only
|
|
||||||
%% continue if it's set
|
|
||||||
case rebar_config:get_global(force, "0") of
|
|
||||||
"0" ->
|
|
||||||
?ERROR("~s already exists. Installation failed.\n", [AppId]),
|
|
||||||
?FAIL;
|
|
||||||
"1" ->
|
|
||||||
?WARN("~s already exists, but forcibly overwriting.\n", [AppId])
|
|
||||||
end;
|
|
||||||
false ->
|
|
||||||
ok
|
|
||||||
end,
|
|
||||||
|
|
||||||
%% Wipe out any previous versions
|
|
||||||
ok = rebar_file_utils:rm_rf(AppDir),
|
|
||||||
|
|
||||||
%% Re-create target
|
|
||||||
ok = rebar_file_utils:mkdir_p(AppDir),
|
|
||||||
|
|
||||||
%% By default we copy the ebin, include, src and priv directories (if they exist)
|
|
||||||
Files = [F || F <- ["ebin", "src", "priv", "include"],
|
|
||||||
filelib:last_modified(F) /= 0],
|
|
||||||
ok = rebar_file_utils:cp_r(Files, AppDir),
|
|
||||||
|
|
||||||
%% Check the config to see if we have any binaries that need to be
|
|
||||||
%% linked into the erlang path
|
|
||||||
case rebar_config:get_list(Config, app_bin, []) of
|
|
||||||
[] ->
|
|
||||||
ok;
|
|
||||||
List ->
|
|
||||||
%% code:root_dir() gives $OTPROOT/lib/erlang on a stock install
|
|
||||||
%% so find the bin dir relative to that.
|
|
||||||
BinDir = filename:join([code:root_dir(), "..", "..", "bin"]),
|
|
||||||
install_binaries(List, AppDir, BinDir)
|
|
||||||
end.
|
|
||||||
|
|
||||||
|
|
||||||
%% ===================================================================
|
%% ===================================================================
|
||||||
%% Internal functions
|
%% Internal functions
|
||||||
%% ===================================================================
|
%% ===================================================================
|
||||||
|
|
||||||
install_binaries([], _AppDir, _BinDir) ->
|
|
||||||
ok;
|
|
||||||
install_binaries([Bin | Rest], AppDir, BinDir) ->
|
|
||||||
FqBin = filename:join([AppDir, Bin]),
|
|
||||||
rebar_file_utils:ln_sf(FqBin, BinDir),
|
|
||||||
install_binaries(Rest, AppDir, BinDir).
|
|
||||||
|
|
||||||
preprocess(AppSrcFile) ->
|
preprocess(AppSrcFile) ->
|
||||||
case rebar_app_utils:load_app_file(AppSrcFile) of
|
case rebar_app_utils:load_app_file(AppSrcFile) of
|
||||||
{ok, AppName, AppData} ->
|
{ok, AppName, AppData} ->
|
||||||
|
|
Loading…
Reference in a new issue