summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rebar_port_compiler.erl20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/rebar_port_compiler.erl b/src/rebar_port_compiler.erl
index cdd9be6..4163dd4 100644
--- a/src/rebar_port_compiler.erl
+++ b/src/rebar_port_compiler.erl
@@ -214,16 +214,30 @@ compile_each([Source | Rest], Type, Env, NewBins) ->
Bin = replace_extension(Source, Ext, ".o"),
case needs_compile(Source, Bin) of
true ->
- ?CONSOLE("Compiling ~s\n", [Source]),
Template = select_compile_template(Type, compiler(Ext)),
- rebar_utils:sh(expand_command(Template, Env, Source, Bin),
- [{env, Env}]),
+ Cmd = expand_command(Template, Env, Source, Bin),
+ ShOpts = [{env, Env}, return_on_error, {use_stdout, false}],
+ exec_compiler(Source, Cmd, ShOpts),
compile_each(Rest, Type, Env, [Bin | NewBins]);
false ->
?INFO("Skipping ~s\n", [Source]),
compile_each(Rest, Type, Env, NewBins)
end.
+exec_compiler(Source, Cmd, ShOpts) ->
+ case rebar_utils:sh(Cmd, ShOpts) of
+ {error, {_RC, RawError}} ->
+ AbsSource = filename:absname(Source),
+ ?CONSOLE("Compiling ~s\n", [AbsSource]),
+ Error = re:replace(RawError, Source, AbsSource,
+ [{return, list}, global]),
+ ?CONSOLE("~s", [Error]),
+ ?ABORT;
+ {ok, Output} ->
+ ?CONSOLE("Compiling ~s\n", [Source]),
+ ?CONSOLE("~s", [Output])
+ end.
+
needs_compile(Source, Bin) ->
%% TODO: Generate depends using gcc -MM so we can also
%% check for include changes