From f84c51b37a63c406ac3051b2e9538593a212e174 Mon Sep 17 00:00:00 2001 From: Fred Hebert Date: Sat, 14 Nov 2015 21:42:26 +0000 Subject: Fix error reports on missing include paths In some cases (nested includes?) paths end up in such a way that joining them breaks up and hard-crashes rebar3. This patch specifically handles this scenario to fix things by avoiding passing empty lists to filename:join. --- src/rebar_erlc_compiler.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/rebar_erlc_compiler.erl') diff --git a/src/rebar_erlc_compiler.erl b/src/rebar_erlc_compiler.erl index 57b7387..fb5796c 100644 --- a/src/rebar_erlc_compiler.erl +++ b/src/rebar_erlc_compiler.erl @@ -688,7 +688,7 @@ warn_and_find_path(File, Dir) -> true -> [SrcHeader]; false -> - IncludeDir = filename:join(filename:join(rebar_utils:droplast(filename:split(Dir))), "include"), + IncludeDir = filename:join(rebar_utils:droplast(filename:split(Dir))++["include"]), IncludeHeader = filename:join(IncludeDir, File), case filelib:is_regular(IncludeHeader) of true -> -- cgit v1.1 From be09be6d6bb005646e22d68ca8cc3a51fe4a1ab1 Mon Sep 17 00:00:00 2001 From: Phil Toland Date: Mon, 30 Nov 2015 17:42:01 -0600 Subject: Fix a small bug in the MIB compiler when building dependencies When compiling a dependency with a MIB file the generated hrl file is left in the root project directory in a file called "include". This has the perverse effect of messing up the search path for include files causing any dependencies with files in their "include" directory to fail to build after that. --- src/rebar_erlc_compiler.erl | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/rebar_erlc_compiler.erl') diff --git a/src/rebar_erlc_compiler.erl b/src/rebar_erlc_compiler.erl index fb5796c..2cd66a5 100644 --- a/src/rebar_erlc_compiler.erl +++ b/src/rebar_erlc_compiler.erl @@ -520,15 +520,20 @@ target_base(OutDir, Source) -> rebar_dict()) -> 'ok'. compile_mib(Source, Target, Opts) -> Dir = filename:dirname(Target), + IncludeDir = filename:join(Dir, "include"), + + Mib = filename:rootname(Target), + HrlFilename = Mib ++ ".hrl", + ok = filelib:ensure_dir(Target), - ok = filelib:ensure_dir(filename:join([Dir, "include", "dummy.hrl"])), + ok = filelib:ensure_dir(filename:join([IncludeDir, HrlFilename])), + AllOpts = [{outdir, Dir} ,{i, [Dir]}] ++ rebar_opts:get(Opts, mib_opts, []), case snmpc:compile(Source, AllOpts) of {ok, _} -> - Mib = filename:rootname(Target), MibToHrlOpts = case proplists:get_value(verbosity, AllOpts, undefined) of undefined -> @@ -537,8 +542,7 @@ compile_mib(Source, Target, Opts) -> #options{specific = [{verbosity, Verbosity}]} end, ok = snmpc:mib_to_hrl(Mib, Mib, MibToHrlOpts), - Hrl_filename = Mib ++ ".hrl", - rebar_file_utils:mv(Hrl_filename, "include"), + rebar_file_utils:mv(HrlFilename, IncludeDir), ok; {error, compilation_failed} -> ?FAIL -- cgit v1.1 From afbf7295325ab4a99d4fea62d6f860002f1fee25 Mon Sep 17 00:00:00 2001 From: Phil Toland Date: Tue, 1 Dec 2015 12:39:12 -0600 Subject: Added tests and fixed a bug --- src/rebar_erlc_compiler.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/rebar_erlc_compiler.erl') diff --git a/src/rebar_erlc_compiler.erl b/src/rebar_erlc_compiler.erl index 2cd66a5..c6eb2c1 100644 --- a/src/rebar_erlc_compiler.erl +++ b/src/rebar_erlc_compiler.erl @@ -526,7 +526,7 @@ compile_mib(Source, Target, Opts) -> HrlFilename = Mib ++ ".hrl", ok = filelib:ensure_dir(Target), - ok = filelib:ensure_dir(filename:join([IncludeDir, HrlFilename])), + ok = filelib:ensure_dir(filename:join([IncludeDir, "dummy.hrl"])), AllOpts = [{outdir, Dir} ,{i, [Dir]}] ++ -- cgit v1.1 From d9ae98e4d8d4e8773d7db96e1d977ca8eff08472 Mon Sep 17 00:00:00 2001 From: alisdair sullivan Date: Sun, 6 Dec 2015 23:14:25 -0800 Subject: symlink mib hrl output in apps `include' directories this restores compatibility with rebar2 and erlang.mk --- src/rebar_erlc_compiler.erl | 70 +++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 31 deletions(-) (limited to 'src/rebar_erlc_compiler.erl') diff --git a/src/rebar_erlc_compiler.erl b/src/rebar_erlc_compiler.erl index c6eb2c1..50e61f3 100644 --- a/src/rebar_erlc_compiler.erl +++ b/src/rebar_erlc_compiler.erl @@ -116,7 +116,7 @@ compile(AppInfo, CompileOpts) when element(1, AppInfo) == app_info_t -> check_files([filename:join(Dir, File) || File <- rebar_opts:get(RebarOpts, mib_first_files, [])]), filename:join(Dir, "mibs"), ".mib", filename:join([Dir, "priv", "mibs"]), ".bin", - fun compile_mib/3), + compile_mib(AppInfo)), SrcDirs = lists:map(fun(SrcDir) -> filename:join(Dir, SrcDir) end, rebar_dir:src_dirs(RebarOpts, ["src"])), @@ -516,36 +516,44 @@ internal_erl_compile(_Opts, Dir, Module, OutDir, ErlOpts) -> target_base(OutDir, Source) -> filename:join(OutDir, filename:basename(Source, ".erl")). --spec compile_mib(file:filename(), file:filename(), - rebar_dict()) -> 'ok'. -compile_mib(Source, Target, Opts) -> - Dir = filename:dirname(Target), - IncludeDir = filename:join(Dir, "include"), - - Mib = filename:rootname(Target), - HrlFilename = Mib ++ ".hrl", - - ok = filelib:ensure_dir(Target), - ok = filelib:ensure_dir(filename:join([IncludeDir, "dummy.hrl"])), - - AllOpts = [{outdir, Dir} - ,{i, [Dir]}] ++ - rebar_opts:get(Opts, mib_opts, []), - - case snmpc:compile(Source, AllOpts) of - {ok, _} -> - MibToHrlOpts = - case proplists:get_value(verbosity, AllOpts, undefined) of - undefined -> - #options{specific = []}; - Verbosity -> - #options{specific = [{verbosity, Verbosity}]} - end, - ok = snmpc:mib_to_hrl(Mib, Mib, MibToHrlOpts), - rebar_file_utils:mv(HrlFilename, IncludeDir), - ok; - {error, compilation_failed} -> - ?FAIL +-spec compile_mib(rebar_app_info:t()) -> + fun((file:filename(), file:filename(), rebar_dict()) -> 'ok'). +compile_mib(AppInfo) -> + fun(Source, Target, Opts) -> + Dir = filename:dirname(Target), + IncludeDir = filename:join(Dir, "include"), + + Mib = filename:rootname(Target), + HrlFilename = Mib ++ ".hrl", + Hrl = filename:basename(HrlFilename), + + AppInclude = filename:join([rebar_app_info:dir(AppInfo), "include"]), + + ok = filelib:ensure_dir(Target), + ok = filelib:ensure_dir(filename:join([IncludeDir, "dummy.hrl"])), + ok = filelib:ensure_dir(filename:join([AppInclude, "dummy.hrl"])), + + AllOpts = [{outdir, Dir} + ,{i, [Dir]}] ++ + rebar_opts:get(Opts, mib_opts, []), + + case snmpc:compile(Source, AllOpts) of + {ok, _} -> + MibToHrlOpts = + case proplists:get_value(verbosity, AllOpts, undefined) of + undefined -> + #options{specific = []}; + Verbosity -> + #options{specific = [{verbosity, Verbosity}]} + end, + ok = snmpc:mib_to_hrl(Mib, Mib, MibToHrlOpts), + rebar_file_utils:mv(HrlFilename, IncludeDir), + rebar_file_utils:symlink_or_copy(filename:join([IncludeDir, Hrl]), + filename:join([AppInclude, Hrl])), + ok; + {error, compilation_failed} -> + ?FAIL + end end. -spec compile_xrl(file:filename(), file:filename(), -- cgit v1.1 From 6f70b7fc881dc02e06d51ed9204c6a128f2d49e7 Mon Sep 17 00:00:00 2001 From: alisdair sullivan Date: Tue, 8 Dec 2015 08:48:42 -0800 Subject: remove mib header file in `priv/mibs/include' --- src/rebar_erlc_compiler.erl | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'src/rebar_erlc_compiler.erl') diff --git a/src/rebar_erlc_compiler.erl b/src/rebar_erlc_compiler.erl index 50e61f3..162ed07 100644 --- a/src/rebar_erlc_compiler.erl +++ b/src/rebar_erlc_compiler.erl @@ -521,16 +521,12 @@ target_base(OutDir, Source) -> compile_mib(AppInfo) -> fun(Source, Target, Opts) -> Dir = filename:dirname(Target), - IncludeDir = filename:join(Dir, "include"), - Mib = filename:rootname(Target), HrlFilename = Mib ++ ".hrl", - Hrl = filename:basename(HrlFilename), AppInclude = filename:join([rebar_app_info:dir(AppInfo), "include"]), ok = filelib:ensure_dir(Target), - ok = filelib:ensure_dir(filename:join([IncludeDir, "dummy.hrl"])), ok = filelib:ensure_dir(filename:join([AppInclude, "dummy.hrl"])), AllOpts = [{outdir, Dir} @@ -547,9 +543,7 @@ compile_mib(AppInfo) -> #options{specific = [{verbosity, Verbosity}]} end, ok = snmpc:mib_to_hrl(Mib, Mib, MibToHrlOpts), - rebar_file_utils:mv(HrlFilename, IncludeDir), - rebar_file_utils:symlink_or_copy(filename:join([IncludeDir, Hrl]), - filename:join([AppInclude, Hrl])), + rebar_file_utils:mv(HrlFilename, AppInclude), ok; {error, compilation_failed} -> ?FAIL -- cgit v1.1 From 123630a68eef89be63b6ffca1a4cbb21e76a2625 Mon Sep 17 00:00:00 2001 From: Luis Rascao Date: Tue, 26 Jan 2016 00:30:56 +0000 Subject: Add module directory to include path Several projects use an include path relative to the project's root. file:compile will look in three places for the include files: The current working directory The directory where the module is being compiled The directories given by the include option --- src/rebar_erlc_compiler.erl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/rebar_erlc_compiler.erl') diff --git a/src/rebar_erlc_compiler.erl b/src/rebar_erlc_compiler.erl index 162ed07..3480cf6 100644 --- a/src/rebar_erlc_compiler.erl +++ b/src/rebar_erlc_compiler.erl @@ -304,7 +304,8 @@ needed_files(G, ErlOpts, Dir, OutDir, SourceFiles) -> TargetBase = target_base(OutDir, Source), Target = TargetBase ++ ".beam", AllOpts = [{outdir, filename:dirname(Target)} - ,{i, filename:join(Dir, "include")}] ++ ErlOpts, + ,{i, filename:join(Dir, "include")} + ,{i, Dir}] ++ ErlOpts, digraph:vertex(G, Source) > {Source, filelib:last_modified(Target)} orelse opts_changed(AllOpts, TargetBase) end, SourceFiles). @@ -503,7 +504,7 @@ internal_erl_compile(_Opts, Dir, Module, OutDir, ErlOpts) -> Target = target_base(OutDir, Module) ++ ".beam", ok = filelib:ensure_dir(Target), AllOpts = [{outdir, filename:dirname(Target)}] ++ ErlOpts ++ - [{i, filename:join(Dir, "include")}, return], + [{i, filename:join(Dir, "include")}, {i, Dir}, return], case compile:file(Module, AllOpts) of {ok, _Mod} -> ok; -- cgit v1.1