diff options
-rw-r--r-- | src/rebar_port_compiler.erl | 20 |
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 |