Browse Source

Fix alternative path printing, default is relative

This required moving the reporting functions to rebar_base_compiler but
since this was already done for error_tuple, this seems to make sense.

Paths are also reformatted for warnings in erlc files.
pull/1227/head
Fred Hebert 9 years ago
parent
commit
1875eadd9a
2 changed files with 39 additions and 38 deletions
  1. +29
    -2
      src/rebar_base_compiler.erl
  2. +10
    -36
      src/rebar_erlc_compiler.erl

+ 29
- 2
src/rebar_base_compiler.erl View File

@ -32,7 +32,11 @@
run/7,
run/8,
ok_tuple/2,
error_tuple/4]).
error_tuple/4,
format_error_source/2]).
-define(DEFAULT_COMPILER_SOURCE_FORMAT, relative).
%% ===================================================================
%% Public API
@ -76,6 +80,28 @@ error_tuple(Source, Es, Ws, Opts) ->
{error, format_errors(Source, Es),
format_warnings(Source, Ws, Opts)}.
format_error_source(Path, Opts) ->
Type = case rebar_opts:get(Opts, compiler_source_format,
?DEFAULT_COMPILER_SOURCE_FORMAT) of
V when V == absolute; V == relative; V == build ->
V;
Other ->
?WARN("Invalid argument ~p for compiler_source_format - "
"assuming ~s~n", [Other, ?DEFAULT_COMPILER_SOURCE_FORMAT]),
?DEFAULT_COMPILER_SOURCE_FORMAT
end,
case Type of
absolute -> resolve_linked_source(Path);
build -> Path;
relative ->
Cwd = rebar_dir:get_cwd(),
rebar_dir:make_relative_path(resolve_linked_source(Path), Cwd)
end.
resolve_linked_source(Src) ->
{Dir, Base} = rebar_file_utils:split_dirname(Src),
filename:join(rebar_file_utils:resolve_link(Dir), Base).
%% ===================================================================
%% Internal functions
%% ===================================================================
@ -114,7 +140,8 @@ compile_each([Source | Rest], Config, CompileFn) ->
skipped ->
?DEBUG("~sSkipped ~s", [rebar_utils:indent(1), filename:basename(Source)]);
Error ->
?ERROR("Compiling ~s failed", [Source]),
NewSource = format_error_source(Source, Config),
?ERROR("Compiling ~s failed", [NewSource]),
maybe_report(Error),
?DEBUG("Compilation failed: ~p", [Error]),
?FAIL

+ 10
- 36
src/rebar_erlc_compiler.erl View File

@ -54,9 +54,6 @@
-define(DEFAULT_OUTDIR, "ebin").
-define(RE_PREFIX, "^[^._]").
-type compiler_source_format() :: absolute | relative | build.
-define(DEFAULT_COMPILER_SOURCE_FORMAT, build).
%% ===================================================================
%% Public API
%% ===================================================================
@ -511,43 +508,20 @@ internal_erl_compile(Opts, Dir, Module, OutDir, ErlOpts) ->
{ok, _Mod} ->
ok;
{ok, _Mod, Ws} ->
rebar_base_compiler:ok_tuple(Module, Ws);
FormattedWs = format_error_sources(Ws, Opts),
rebar_base_compiler:ok_tuple(Module, FormattedWs);
{error, Es, Ws} ->
error_tuple(Module, Es, Ws, AllOpts, source_format(Opts))
error_tuple(Module, Es, Ws, AllOpts, Opts)
end.
-spec source_format(rebar_dict()) -> compiler_source_format().
source_format(Opts) ->
case rebar_opts:get(Opts, compiler_source_format,
?DEFAULT_COMPILER_SOURCE_FORMAT) of
V when V == absolute;
V == relative;
V == build -> V;
Other ->
?WARN("Invalid argument ~p for compiler_source_format - "
"assuming ~s~n", [Other, ?DEFAULT_COMPILER_SOURCE_FORMAT]),
?DEFAULT_COMPILER_SOURCE_FORMAT
end.
error_tuple(Module, Es, Ws, AllOpts, Opts) ->
FormattedEs = format_error_sources(Es, Opts),
FormattedWs = format_error_sources(Ws, Opts),
rebar_base_compiler:error_tuple(Module, FormattedEs, FormattedWs, AllOpts).
error_tuple(Module, Es, Ws, Opts, SourceFormat) ->
Cwd = rebar_dir:get_cwd(),
FormattedEs = format_error_sources(Es, SourceFormat, Cwd),
FormattedWs = format_error_sources(Ws, SourceFormat, Cwd),
rebar_base_compiler:error_tuple(Module, FormattedEs, FormattedWs, Opts).
format_error_sources(Es, Format, Cwd) ->
[{format_error_source(Src, Format, Cwd), Desc} || {Src, Desc} <- Es].
format_error_source(Src, absolute, _Cwd) ->
resolve_linked_source(Src);
format_error_source(Src, relative, Cwd) ->
rebar_dir:make_relative_path(resolve_linked_source(Src), Cwd);
format_error_source(Src, build, _Cwd) ->
Src.
resolve_linked_source(Src) ->
{Dir, Base} = rebar_file_utils:split_dirname(Src),
filename:join(rebar_file_utils:resolve_link(Dir), Base).
format_error_sources(Es, Opts) ->
[{rebar_base_compiler:format_error_source(Src, Opts), Desc}
|| {Src, Desc} <- Es].
target_base(OutDir, Source) ->
filename:join(OutDir, filename:basename(Source, ".erl")).

Loading…
Cancel
Save