diff --git a/compiler/erlang_check.erl b/compiler/erlang_check.erl index 186023e..71f19c9 100755 --- a/compiler/erlang_check.erl +++ b/compiler/erlang_check.erl @@ -1,7 +1,7 @@ #!/usr/bin/env escript main([File]) -> - Dir = filename:dirname(File), + Dir = get_root(filename:dirname(File)), Defs = [strong_validation, warn_export_all, warn_export_vars, @@ -9,10 +9,7 @@ main([File]) -> warn_obsolete_guard, warn_unused_import, report, - {i, Dir ++ "/include"}, - {i, Dir ++ "/../include"}, - {i, Dir ++ "/../../include"}, - {i, Dir ++ "/../../../include"}], + {i, Dir ++ "/include"}], RebarFile = rebar_file(Dir), RebarOpts = rebar_opts(RebarFile), code:add_patha(filename:absname("ebin")), @@ -31,6 +28,7 @@ rebar_file(Dir) -> end. rebar_opts(RebarFile) -> + Dir = get_root(filename:dirname(RebarFile)), case file:consult(RebarFile) of {ok, Terms} -> RebarLibDirs = proplists:get_value(lib_dirs, Terms, []), @@ -40,10 +38,21 @@ rebar_opts(RebarFile) -> end, RebarLibDirs), RebarDepsDir = proplists:get_value(deps_dir, Terms, "deps"), code:add_pathsa(filelib:wildcard(RebarDepsDir ++ "/*/ebin")), - IncludeDeps = {i, RebarDepsDir}, + IncludeDeps = {i, filename:join(Dir, RebarDepsDir)}, proplists:get_value(erl_opts, Terms, []) ++ [IncludeDeps]; {error, _} when RebarFile == "rebar.config" -> []; {error, _} -> rebar_opts("rebar.config") end. + +get_root(Dir) -> + Path = filename:split(filename:absname(Dir)), + filename:join(get_root(lists:reverse(Path), Path)). + +get_root([], Path) -> + Path; +get_root(["src" | Tail], _Path) -> + lists:reverse(Tail); +get_root([_ | Tail], Path) -> + get_root(Tail, Path).