25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

38 satır
1.4 KiB

10 yıl önce
10 yıl önce
  1. %% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*-
  2. %% ex: ts=4 sw=4 et
  3. -module(rebar_plugins).
  4. -export([install/1]).
  5. -include("rebar.hrl").
  6. %% ===================================================================
  7. %% Public API
  8. %% ===================================================================
  9. install(State) ->
  10. State1 = rebar_state:set(State, deps_dir, ?DEFAULT_PLUGINS_DIR),
  11. Plugins = rebar_state:get(State1, plugins, []),
  12. {ok, State2} = rebar_prv_install_deps:handle_deps(State1, Plugins),
  13. Apps = rebar_state:get(State2, all_deps, []),
  14. ToBuild = lists:dropwhile(fun rebar_app_info:valid/1, Apps),
  15. lists:foreach(fun(AppInfo) ->
  16. C = rebar_config:consult(rebar_app_info:dir(AppInfo)),
  17. S = rebar_state:new(rebar_state:new(), C, rebar_app_info:dir(AppInfo)),
  18. rebar_prv_compile:build(S, AppInfo)
  19. end, ToBuild),
  20. PluginProviders = plugin_providers(Plugins),
  21. {ok, PluginProviders, rebar_state:set(State2, deps_dir, ?DEFAULT_DEPS_DIR)}.
  22. plugin_providers(Plugins) ->
  23. lists:map(fun({Plugin, _, _}) when is_atom(Plugin) ->
  24. Plugin;
  25. ({Plugin, _}) when is_atom(Plugin) ->
  26. Plugin;
  27. (Plugin) when is_atom(Plugin) ->
  28. Plugin
  29. end, Plugins).