mirror of
https://github.com/correl/rebar.git
synced 2024-11-14 19:19:30 +00:00
Getting basic erlang compilation working
This commit is contained in:
parent
b7e2088c27
commit
e52bb6783c
4 changed files with 76 additions and 5 deletions
|
@ -2,3 +2,5 @@
|
||||||
-record(global_state, { working_dir }).
|
-record(global_state, { working_dir }).
|
||||||
|
|
||||||
-define(CONSOLE(Str, Args), io:format(Str, Args)).
|
-define(CONSOLE(Str, Args), io:format(Str, Args)).
|
||||||
|
|
||||||
|
-define(FAIL, throw({error, failed})).
|
||||||
|
|
|
@ -136,7 +136,7 @@ apply_command([{Type, Dir, File} | Rest], Command) ->
|
||||||
ok ->
|
ok ->
|
||||||
apply_command(Rest, Command);
|
apply_command(Rest, Command);
|
||||||
Other ->
|
Other ->
|
||||||
?CONSOLE("Execution of ~p failed while processing ~s: ~p", [Command, Dir, Other])
|
?CONSOLE("~p failed while processing ~s: ~p", [Command, Dir, Other])
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,8 @@
|
||||||
-module(rebar_config).
|
-module(rebar_config).
|
||||||
|
|
||||||
-export([new/1,
|
-export([new/1,
|
||||||
get_modules/2]).
|
get_modules/2,
|
||||||
|
get_list/3]).
|
||||||
|
|
||||||
-record(config, { dir,
|
-record(config, { dir,
|
||||||
opts }).
|
opts }).
|
||||||
|
@ -42,3 +43,12 @@ get_modules(Config, app) ->
|
||||||
{ok, Modules} ->
|
{ok, Modules} ->
|
||||||
Modules
|
Modules
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
get_list(Config, Key, Default) ->
|
||||||
|
case orddict:find(Key, Config#config.opts) of
|
||||||
|
error ->
|
||||||
|
Default;
|
||||||
|
{ok, List} ->
|
||||||
|
List
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
|
@ -34,13 +34,72 @@
|
||||||
%% ===================================================================
|
%% ===================================================================
|
||||||
|
|
||||||
compile(Config, Dir) ->
|
compile(Config, Dir) ->
|
||||||
io:format(".erl compiling: ~s\n", [Dir]),
|
do_compile(Config, "src/*.erl", "ebin", ".erl", ".beam",
|
||||||
ok.
|
fun compile_erl/2),
|
||||||
|
do_compile(Config, "mibs/*.mib", "priv/mibs", ".mib", ".bin",
|
||||||
|
fun compile_mib/2).
|
||||||
|
|
||||||
clean(Config, Dir) ->
|
clean(Config, Dir) ->
|
||||||
rebar_utils:delete_files("ebin/*.beam").
|
% rebar_utils:delete_files("ebin/*.beam"),
|
||||||
|
% rebar_utils:delete_files("priv/mibs/*.bin").
|
||||||
|
ok.
|
||||||
|
|
||||||
|
|
||||||
%% ===================================================================
|
%% ===================================================================
|
||||||
%% Internal functions
|
%% Internal functions
|
||||||
%% ===================================================================
|
%% ===================================================================
|
||||||
|
|
||||||
|
do_compile(Config, SrcWildcard, OutDir, InExt, OutExt, CompileFn) ->
|
||||||
|
case filelib:wildcard(SrcWildcard) of
|
||||||
|
[] ->
|
||||||
|
ok;
|
||||||
|
Srcs when is_list(Srcs) ->
|
||||||
|
%% Build list of output files
|
||||||
|
Targets = [target_file(S, OutDir, InExt, OutExt) || S <- Srcs],
|
||||||
|
Files = lists:zip(Targets, Srcs),
|
||||||
|
|
||||||
|
%% Make sure target directory exists
|
||||||
|
ok = filelib:ensure_dir(hd(Targets)),
|
||||||
|
|
||||||
|
%% Start compiling
|
||||||
|
compile_each(Files, Config, CompileFn)
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
compile_each([], _Config, _CompileFn) ->
|
||||||
|
ok;
|
||||||
|
compile_each([{Target, Src} | Rest], Config, CompileFn) ->
|
||||||
|
case needs_compile(Target, Src) of
|
||||||
|
true ->
|
||||||
|
?CONSOLE("Compiling ~s\n", [Src]),
|
||||||
|
CompileFn(Src, Config);
|
||||||
|
false ->
|
||||||
|
ok
|
||||||
|
end,
|
||||||
|
compile_each(Rest, Config, CompileFn).
|
||||||
|
|
||||||
|
needs_compile(Target, Src) ->
|
||||||
|
filelib:last_modified(Target) < filelib:last_modified(Src).
|
||||||
|
|
||||||
|
|
||||||
|
target_file(F, TargetDir, InExt, OutExt) ->
|
||||||
|
filename:join([TargetDir, filename:basename(F, InExt) ++ OutExt]).
|
||||||
|
|
||||||
|
|
||||||
|
compile_erl(Source, Config) ->
|
||||||
|
Opts = rebar_config:get_list(Config, erlc_opts, []),
|
||||||
|
case compile:file(Source, [{i, "include"}, {outdir, "ebin"}, report] ++ Opts) of
|
||||||
|
{ok, _} ->
|
||||||
|
ok;
|
||||||
|
error ->
|
||||||
|
?FAIL
|
||||||
|
end.
|
||||||
|
|
||||||
|
compile_mib(Source, Config) ->
|
||||||
|
Opts = meab_config:get_list(mibc_opts, []),
|
||||||
|
case snmpc:compile(Source, [{outdir, "priv/mibs"}, {i, ["priv/mibs"]}] ++ Opts) of
|
||||||
|
{ok, _} ->
|
||||||
|
ok;
|
||||||
|
{error, compilation_failed} ->
|
||||||
|
?FAIL
|
||||||
|
end.
|
||||||
|
|
Loading…
Reference in a new issue