Current section
Files
Jump to
Current section
Files
src/rebar3_elixir_plugin_compiler.erl
-module(rebar3_elixir_plugin_compiler).
-export([build/1,
format_error/1]).
%% ===================================================================
%% Public API
%% ===================================================================
build(AppInfo) ->
AppDir = rebar_app_info:dir(AppInfo),
BuildDir = filename:join(AppDir, "../"),
BuildElixirDir = filename:join(AppDir, "_build/prod/lib/"),
AppName = rebar3_elixir_plugin_utils:to_string(rebar_app_info:name(AppInfo)),
ok = rebar3_elixir_plugin_utils:compile(AppDir),
{ok, Apps} = rebar_utils:list_dir(BuildElixirDir),
Deps = Apps -- [AppName],
rebar3_elixir_plugin_utils:move_to_path(Deps, BuildElixirDir, BuildDir),
AppBuild = filename:join(AppDir, "_build/prod/lib/" ++ AppName ++ "/ebin"),
AppTaget = filename:join(AppDir, "ebin"),
ec_file:copy(AppBuild, AppTaget, [recursive]),
Lock = rebar3_elixir_plugin_utils:create_rebar_lock_from_mix(AppDir, Deps),
ElixirLock = rebar3_elixir_plugin_utils:elixir_to_lock(Lock),
rebar3_elixir_plugin_utils:save_rebar_lock(AppDir, ElixirLock),
rebar3_elixir_plugin_utils:delete(filename:join(AppDir, "_build")),
ok.
format_error({mix_not_found, Name}) ->
io_lib:format("Elixir and mix must be installed to build application ~ts. "
"Install Elixir or check your path and try again.", [Name]);
format_error({mix_compile_failed, Name, _Error}) ->
io_lib:format("Failed to compile application ~ts with mix", [Name]);
format_error(Reason) ->
io_lib:format("~p", Reason).