@ -49,7 +49,7 @@ run(Config, FirstFiles, RestFiles, CompileFn) ->
Jobs = rebar : get_jobs ( Config ) ,
? DEBUG ( " Starting ~B compile worker(s) ~n " , [ Jobs ] ) ,
Pids = [ spawn_monitor ( F ) | | _ I < - lists : seq ( 1 , Jobs ) ] ,
compile_queue ( Pids , RestFiles )
compile_queue ( Config , Pids, RestFiles )
end .
run ( Config , FirstFiles , SourceDir , SourceExt , TargetDir , TargetExt ,
@ -139,27 +139,31 @@ compile_each([Source | Rest], Config, CompileFn) ->
skipped - >
? INFO ( " Skipped ~s \n " , [ Source ] ) ;
Error - >
? CONSOLE ( " Compiling ~s failed: \n " ,
[ maybe_absname ( Config , Source ) ] ) ,
maybe_report ( Error ) ,
? DEBUG ( " Compilation failed: ~p \n " , [ Error ] ) ,
? FAIL
end ,
compile_each ( Rest , Config , CompileFn ) .
compile_queue ( [ ] , [ ] ) - >
compile_queue ( _ Config , [] , [ ] ) - >
ok ;
compile_queue ( Pids , Targets ) - >
compile_queue ( Config , Pids, Targets ) - >
receive
{ next , Worker } - >
case Targets of
[ ] - >
Worker ! empty ,
compile_queue ( Pids , Targets ) ;
compile_queue ( Config , Pids, Targets ) ;
[ Source | Rest ] - >
Worker ! { compile , Source } ,
compile_queue ( Pids , Rest )
compile_queue ( Config , Pids, Rest )
end ;
{ fail , Error } - >
{ fail , [ _ , { source , Source } } = Error ] - >
? CONSOLE ( " Compiling ~s failed: \n " ,
[ maybe_absname ( Config , Source ) ] ) ,
maybe_report ( Error ) ,
? DEBUG ( " Worker compilation failed: ~p \n " , [ Error ] ) ,
? FAIL ;
@ -167,20 +171,20 @@ compile_queue(Pids, Targets) ->
{ compiled , Source , Warnings } - >
report ( Warnings ) ,
? CONSOLE ( " Compiled ~s \n " , [ Source ] ) ,
compile_queue ( Pids , Targets ) ;
compile_queue ( Config , Pids, Targets ) ;
{ compiled , Source } - >
? CONSOLE ( " Compiled ~s \n " , [ Source ] ) ,
compile_queue ( Pids , Targets ) ;
compile_queue ( Config , Pids, Targets ) ;
{ skipped , Source } - >
? INFO ( " Skipped ~s \n " , [ Source ] ) ,
compile_queue ( Pids , Targets ) ;
compile_queue ( Config , Pids, Targets ) ;
{ 'DOWN' , Mref , _ , Pid , normal } - >
? DEBUG ( " Worker exited cleanly \n " , [ ] ) ,
Pids2 = lists : delete ( { Pid , Mref } , Pids ) ,
compile_queue ( Pids2 , Targets ) ;
compile_queue ( Config , Pids2, Targets ) ;
{ 'DOWN' , _ Mref , _ , _ Pid , Info } - >
? DEBUG ( " Worker failed: ~p \n " , [ Info ] ) ,
@ -239,12 +243,7 @@ report(Messages) ->
format_errors ( Config , _ MainSource , Extra , Errors ) - >
[ begin
AbsSource = case rebar_utils : processing_base_dir ( Config ) of
true - >
Source ;
false - >
filename : absname ( Source )
end ,
AbsSource = maybe_absname ( Config , Source ) ,
[ format_error ( AbsSource , Extra , Desc ) | | Desc < - Descs ]
end
| | { Source , Descs } < - Errors ] .
@ -258,3 +257,11 @@ format_error(AbsSource, Extra, {Line, Mod, Desc}) ->
format_error ( AbsSource , Extra , { Mod , Desc } ) - >
ErrorDesc = Mod : format_error ( Desc ) ,
? FMT ( " ~s : ~s ~s ~n " , [ AbsSource , Extra , ErrorDesc ] ) .
maybe_absname ( Config , Filename ) - >
case rebar_utils : processing_base_dir ( Config ) of
true - >
Filename ;
false - >
filename : absname ( Filename )
end .