summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/rebar.hrl3
-rw-r--r--priv/templates/plugin.erl.dtl16
-rw-r--r--src/rebar3.erl10
-rw-r--r--src/rebar_core.erl20
-rw-r--r--src/rebar_plugins.erl24
-rw-r--r--src/rebar_prv_install_deps.erl27
6 files changed, 53 insertions, 47 deletions
diff --git a/include/rebar.hrl b/include/rebar.hrl
index 1b83a9b..8d21626 100644
--- a/include/rebar.hrl
+++ b/include/rebar.hrl
@@ -23,6 +23,7 @@
opts :: list()}). % The list of options that the task requires/understands
-define(DEFAULT_LIB_DIRS, ["apps", "libs", "."]).
--define(DEFAULT_DEPS_DIRS, ["deps"]).
+-define(DEFAULT_DEPS_DIR, "deps").
+-define(DEFAULT_PLUGINS_DIR, "plugins").
-define(DEFAULT_CONFIG_FILE, "rebar.config").
-define(LOCK_FILE, "rebar.lock").
diff --git a/priv/templates/plugin.erl.dtl b/priv/templates/plugin.erl.dtl
index 3f8c9cd..80a03bb 100644
--- a/priv/templates/plugin.erl.dtl
+++ b/priv/templates/plugin.erl.dtl
@@ -14,14 +14,14 @@
-spec init(rebar_state:t()) -> {ok, rebar_state:t()}.
init(State) ->
- State1 = rebar_state:(State, rebar_provider:create([{name, ?PROVIDER},
- {provider_impl, ?MODULE},
- {bare, false},
- {deps, ?DEPS},
- {example, "rebar {{appid}}"},
- {short_desc, "{{appid}} plugin."},
- {desc, ""},
- {opts, []}])),
+ State1 = rebar_state:add_provider(State, rebar_provider:create([{name, ?PROVIDER},
+ {provider_impl, ?MODULE},
+ {bare, false},
+ {deps, ?DEPS},
+ {example, "rebar {{appid}}"},
+ {short_desc, "{{appid}} plugin."},
+ {desc, ""},
+ {opts, []}])),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()}.
diff --git a/src/rebar3.erl b/src/rebar3.erl
index 39babeb..44d7d98 100644
--- a/src/rebar3.erl
+++ b/src/rebar3.erl
@@ -141,10 +141,12 @@ run_aux(State, Args) ->
State2 = rebar_state:set(State1, base_dir, filename:absname(rebar_state:dir(State1))),
{ok, Providers} = application:get_env(rebar, providers),
- rebar_plugins:install(State2),
- State3 = rebar_state:create_logic_providers(Providers, State2),
- Task = rebar_state:get(State3, task, "help"),
- rebar_core:process_command(rebar_state:command_args(State3, Args), list_to_atom(Task)),
+ {ok, PluginProviders, State3} = rebar_plugins:install(State2),
+ rebar_core:update_code_path(State),
+
+ State4 = rebar_state:create_logic_providers(Providers++PluginProviders, State3),
+ Task = rebar_state:get(State4, task, "help"),
+ rebar_core:process_command(rebar_state:command_args(State4, Args), list_to_atom(Task)),
ok.
%%
diff --git a/src/rebar_core.erl b/src/rebar_core.erl
index ce3816d..24b376f 100644
--- a/src/rebar_core.erl
+++ b/src/rebar_core.erl
@@ -26,16 +26,12 @@
%% -------------------------------------------------------------------
-module(rebar_core).
--export([process_command/2]).
+-export([process_command/2
+ ,update_code_path/1]).
-include("rebar.hrl").
process_command(State, Command) ->
- true = rebar_utils:expand_code_path(),
- LibDirs = rebar_state:get(State, lib_dirs, ?DEFAULT_LIB_DIRS),
- DepsDir = rebar_state:get(State, deps_dir, ?DEFAULT_DEPS_DIRS),
- _UpdatedCodePaths = update_code_path([DepsDir | LibDirs]),
-
%% ? rebar_prv_install_deps:setup_env(State),
TargetProviders = rebar_provider:get_target_providers(Command, State),
@@ -47,13 +43,21 @@ process_command(State, Command) ->
Conf1
end, State, TargetProviders).
+update_code_path(State) ->
+ true = rebar_utils:expand_code_path(),
+ LibDirs = rebar_state:get(State, lib_dirs, ?DEFAULT_LIB_DIRS),
+ DepsDir = rebar_state:get(State, deps_dir, ?DEFAULT_DEPS_DIR),
+ PluginsDir = rebar_state:get(State, plugins_dir, ?DEFAULT_PLUGINS_DIR),
+ _UpdatedCodePaths = update_code_path_([DepsDir, PluginsDir | LibDirs]).
+
+
%% ===================================================================
%% Internal functions
%% ===================================================================
-update_code_path([]) ->
+update_code_path_([]) ->
no_change;
-update_code_path(Paths) ->
+update_code_path_(Paths) ->
LibPaths = expand_lib_dirs(Paths, rebar_utils:get_cwd(), []),
ok = code:add_pathsa(LibPaths),
%% track just the paths we added, so we can remove them without
diff --git a/src/rebar_plugins.erl b/src/rebar_plugins.erl
index e9ab0b2..3e51f7f 100644
--- a/src/rebar_plugins.erl
+++ b/src/rebar_plugins.erl
@@ -12,8 +12,26 @@
%% ===================================================================
install(State) ->
- BaseDir = rebar_state:get(State, base_dir, ""),
- State1 = rebar_state:set(State, base_dir, "plugins"),
+ State1 = rebar_state:set(State, deps_dir, "plugins"),
+
Plugins = rebar_state:get(State1, plugins, []),
{ok, State2} = rebar_prv_install_deps:handle_deps(State1, Plugins),
- {ok, rebar_state:set(State2, base_dir, BaseDir)}.
+
+ Apps = rebar_state:get(State2, all_deps),
+ lists:foreach(fun(AppInfo) ->
+ C = rebar_config:consult(rebar_app_info:dir(AppInfo)),
+ S = rebar_state:new(rebar_state:new(), C, rebar_app_info:dir(AppInfo)),
+ rebar_prv_compile:build(S, AppInfo)
+ end, Apps),
+
+ PluginProviders = plugin_providers(Plugins),
+ {ok, PluginProviders, rebar_state:set(State2, deps_dir, ?DEFAULT_DEPS_DIR)}.
+
+plugin_providers(Plugins) ->
+ lists:map(fun({Plugin, _, _}) when is_atom(Plugin) ->
+ Plugin;
+ ({Plugin, _}) when is_atom(Plugin) ->
+ Plugin;
+ (Plugin) when is_atom(Plugin) ->
+ Plugin
+ end, Plugins).
diff --git a/src/rebar_prv_install_deps.erl b/src/rebar_prv_install_deps.erl
index 0752f0a..81acf22 100644
--- a/src/rebar_prv_install_deps.erl
+++ b/src/rebar_prv_install_deps.erl
@@ -33,8 +33,7 @@
-include("rebar.hrl").
--export([setup_env/1,
- handle_deps/2]).
+-export([handle_deps/2]).
%% for internal use only
-export([get_deps_dir/1]).
@@ -78,29 +77,11 @@ do(State) ->
{ok, Sort} = rebar_topo:sort_apps(ordsets:to_list(Source)),
{ok, rebar_state:set(State1, deps_to_build, lists:dropwhile(fun is_valid/1, Sort -- ProjectApps))}.
-
-%% set REBAR_DEPS_DIR and ERL_LIBS environment variables
-setup_env(State) ->
- DepsDir = get_deps_dir(State),
- %% include rebar's DepsDir in ERL_LIBS
- Separator = case os:type() of
- {win32, nt} ->
- ";";
- _ ->
- ":"
- end,
- ERL_LIBS = case os:getenv("ERL_LIBS") of
- false ->
- {"ERL_LIBS", DepsDir};
- PrevValue ->
- {"ERL_LIBS", DepsDir ++ Separator ++ PrevValue}
- end,
- [{"REBAR_DEPS_DIR", DepsDir}, ERL_LIBS].
-
-spec get_deps_dir(rebar_state:t()) -> file:filename_all().
get_deps_dir(State) ->
BaseDir = rebar_state:get(State, base_dir, ""),
- get_deps_dir(BaseDir, "deps").
+ DepsDir = rebar_state:get(State, deps_dir, ?DEFAULT_DEPS_DIR),
+ get_deps_dir(BaseDir, DepsDir).
-spec get_deps_dir(file:filename_all(), rebar_state:t()) -> file:filename_all().
get_deps_dir(DepsDir, App) ->
@@ -113,7 +94,7 @@ handle_deps(State, Deps) ->
%% Read in package index and dep graph
{Packages, Graph} = rebar_packages:get_packages(State),
- %% Split source deps form binary deps, needed to keep backwards compatibility
+ %% Split source deps from binary deps, needed to keep backwards compatibility
DepsDir = get_deps_dir(State),
{SrcDeps, BinaryDeps} = parse_deps(DepsDir, Deps),
State1 = rebar_state:src_deps(rebar_state:binary_deps(State, BinaryDeps),