%% Copyright (c) 2009, Dave Smith & %% Tim Dysinger %% Copyright (c) 2014, 2015 Duncan McGreggor %% Copyright (c) 2016, Eric Bailey %% -module(lr3_comp). -include("lr3_const.hrl"). -export([compile/3, compile_dir/4, compile_normal_apps/1]). %% =================================================================== %% Public API %% =================================================================== compile(Source, Target, Config) -> rebar_api:console(" ~~~~> \tCompiling ~s ...", [lr3_comp_util:relative(Source)]), rebar_api:debug("\t\tCompiling~n\t\t\t~s~n\t\t\tto ~s ...", [Source, Target]), LfeOpts = dict:fetch(lfe_opts, Config), rebar_api:debug("\t\tConfig: ~p", [LfeOpts]), CompileResults = lfe_comp:file(Source, LfeOpts), rebar_api:debug("\tCompile results: ~p", [CompileResults]), case CompileResults of {ok, _Mod} -> ok; {ok, _Mod, Ws} -> rebar_base_compiler:ok_tuple(Source, Ws); {error, [], Es, Ws} -> rebar_base_compiler:error_tuple(Source, Es, Ws, Config); {error, [{error, Es, Ws}|_], _Es, _Ws} -> rebar_base_compiler:error_tuple(Source, Es, Ws, Config) end. compile_dir(Config, FirstFiles, SourceDir, TargetDir) -> lr3_comp_util:ensure_dir(TargetDir), rebar_base_compiler:run(Config, FirstFiles, SourceDir, ".lfe", TargetDir, ".beam", fun compile/3). compile_normal_apps(State) -> rebar_api:debug("\tCompiling normal LFE apps ...", []), Apps = lr3_comp_util:get_apps(State), [compile_normal_app(AppInfo) || AppInfo <- Apps], {ok, State}. compile_normal_app(AppInfo) -> lr3_comp_util:copy_app_src(AppInfo), Opts = rebar_app_info:opts(AppInfo), AppDir = rebar_app_info:dir(AppInfo), OtherSrcDirs = rebar_dir:src_dirs(Opts), SourceDirs = lr3_comp_util:get_src_dirs(AppDir, ["src"] ++ OtherSrcDirs), OutDir = lr3_comp_util:relative_out_dir(AppInfo), FirstFiles = lr3_comp_util:get_first_files(Opts, AppDir), Config = lr3_comp_util:config(OutDir, Opts), rebar_api:debug("\tOtherSrcDirs: ~p", [OtherSrcDirs]), rebar_api:debug("\tAppInfoDir: ~p", [AppDir]), rebar_api:debug("\tSourceDirs: ~p", [SourceDirs]), rebar_api:debug("\tOutDir: ~p", [OutDir]), rebar_api:debug("\tFirstFiles: ~p", [FirstFiles]), rebar_api:debug("\tConfig: ~p", [dict:fetch(lfe_opts, Config)]), [compile_dir(Config, FirstFiles, Dir, OutDir) || Dir <- SourceDirs], rebar_api:debug("\tFinished compile.", []), code:add_patha(lr3_comp_util:out_dir(rebar_app_info:dir(AppInfo))).