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(-) 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 +- test/rebar_compile_SUITE.erl | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) 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]}] ++ diff --git a/test/rebar_compile_SUITE.erl b/test/rebar_compile_SUITE.erl index 1c2c527..3e7e015 100644 --- a/test/rebar_compile_SUITE.erl +++ b/test/rebar_compile_SUITE.erl @@ -1018,11 +1018,14 @@ mib_test(Config) -> rebar_test_utils:run_and_check(Config, RebarConfig, ["compile"], {ok, [{app, Name}]}), - %% check a beam corresponding to the src in the extra src_dir exists in ebin + %% check a bin corresponding to the mib in the mibs dir exists in priv/mibs PrivMibsDir = filename:join([AppDir, "_build", "default", "lib", Name, "priv", "mibs"]), true = filelib:is_file(filename:join([PrivMibsDir, "SIMPLE-MIB.bin"])), - %% check the extra src_dir was linked into the _build dir + %% check a hrl corresponding to the mib in the mibs dir exists in priv/mibs/include + true = filelib:is_file(filename:join([PrivMibsDir, "include", "SIMPLE-MIB.hrl"])), + + %% check the mibs dir was linked into the _build dir true = filelib:is_dir(filename:join([AppDir, "_build", "default", "lib", Name, "mibs"])). umbrella_mib_first_test(Config) -> @@ -1065,11 +1068,14 @@ umbrella_mib_first_test(Config) -> rebar_test_utils:run_and_check(Config, RebarConfig, ["compile"], {ok, [{app, Name}]}), - %% check a beam corresponding to the src in the extra src_dir exists in ebin + %% check a bin corresponding to the mib in the mibs dir exists in priv/mibs PrivMibsDir = filename:join([AppsDir, "_build", "default", "lib", Name, "priv", "mibs"]), true = filelib:is_file(filename:join([PrivMibsDir, "SIMPLE-MIB.bin"])), - %% check the extra src_dir was linked into the _build dir + %% check a hrl corresponding to the mib in the mibs dir exists in priv/mibs/include + true = filelib:is_file(filename:join([PrivMibsDir, "include", "SIMPLE-MIB.hrl"])), + + %% check the mibs dir was linked into the _build dir true = filelib:is_dir(filename:join([AppsDir, "_build", "default", "lib", Name, "mibs"])). only_default_transitive_deps(Config) -> -- cgit v1.1