Commits

Anonymous committed e8fcd0b

Add a test case for problems with transitive deps when the ebin dir doesn't exist before compile.

Comments (0)

Files changed (6)

inttest/tdeps3/a.erl

+-module(a).
+
+-compile(export_all).
+
+-include_lib("b/include/b.hrl").
+
+hello() ->
+    io:format("~s\n", [?HELLO]).
+

inttest/tdeps3/a.rebar.config

+{deps, [{b, "1", {hg, "../repo/b", "tip"}}]}.
+

inttest/tdeps3/b.hrl

+
+-include_lib("c/include/c.hrl").
+

inttest/tdeps3/b.rebar.config

+{deps, [{c, "1", {hg, "../repo/c", "tip"}}]}.
+

inttest/tdeps3/c.hrl

+-define(HELLO, hello).
+

inttest/tdeps3/tdeps3_rt.erl

+-module(tdeps3_rt).
+
+-compile(export_all).
+
+%% Exercise transitive dependencies with ebin directories that do not exist
+%% until after compile.
+%% A -> B -> C, where A includes a .hrl from B which includes .hrl from C
+
+files() ->
+    [
+     %% A application
+     {create, "src/a.app.src", app(a, [a])},
+     {copy, "a.rebar.config", "rebar.config"},
+     {copy, "a.erl", "src/a.erl"},
+     {copy, "../../rebar", "rebar"},
+
+     %% B application
+     {create, "repo/b/src/b.app.src", app(b, [])},
+     {copy, "b.rebar.config", "repo/b/rebar.config"},
+     {copy, "b.hrl", "repo/b/include/b.hrl"},
+
+     %% C application
+     {create, "repo/c/src/c.app.src", app(c, [])},
+     {copy, "c.hrl", "repo/c/include/c.hrl"}
+    ].
+
+run(Dir) ->
+    %% Initialize the b/c apps as mercurial repos so that dependencies pull
+    %% properly
+    HgCmd = "/bin/sh -c \"hg init && hg add && hg commit -m 'Initial commit'\"",
+    {ok, _} = retest_sh:run(HgCmd, [{dir, "repo/b"}]),
+    {ok, _} = retest_sh:run(HgCmd, [{dir, "repo/c"}]),
+
+
+    {ok, _} = retest_sh:run("./rebar get-deps", []),
+    {ok, _} = retest_sh:run("./rebar compile", []),
+
+    true = filelib:is_file("ebin/a.beam"),
+    ok.
+
+
+
+%%
+%% Generate the contents of a simple .app file
+%%
+app(Name, Modules) ->
+    App = {application, Name,
+           [{description, atom_to_list(Name)},
+            {vsn, "1"},
+            {modules, Modules},
+            {registered, []},
+            {applications, [kernel, stdlib]}]},
+    io_lib:format("~p.\n", [App]).