summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralisdair sullivan <alisdair.sullivan@askuity.com>2015-09-20 20:34:43 -0500
committeralisdair sullivan <alisdair.sullivan@askuity.com>2015-09-21 11:13:32 -0700
commit9d82215296205d2d30c152c7d7c6fcb8e4a92443 (patch)
tree3bf0479316c85e6fa59cef46cc9ca3985b1a9a5f
parente718af2af4fc4e1a2c85b5ecc84a0dadddb8bbea (diff)
add an export to allow specifing arbitrary extra erl files to be compiled
to `rebar_erlc_compiler`
-rw-r--r--src/rebar_erlc_compiler.erl7
-rw-r--r--test/rebar_compile_SUITE.erl33
2 files changed, 38 insertions, 2 deletions
diff --git a/src/rebar_erlc_compiler.erl b/src/rebar_erlc_compiler.erl
index 54faea4..2976a4f 100644
--- a/src/rebar_erlc_compiler.erl
+++ b/src/rebar_erlc_compiler.erl
@@ -28,6 +28,7 @@
-export([compile/1,
compile/3,
+ compile/4,
clean/1]).
-include("rebar.hrl").
@@ -104,6 +105,11 @@ compile(Opts, Dir, OutDir) ->
fun compile_mib/3),
doterl_compile(Opts, Dir, OutDir).
+-spec compile(rebar_dict(), file:filename(), file:filename(), [file:filename()]) -> 'ok'.
+compile(Opts, Dir, OutDir, More) ->
+ ErlOpts = rebar_opts:erl_opts(Opts),
+ doterl_compile(Opts, Dir, OutDir, More, ErlOpts).
+
-spec clean(file:filename()) -> 'ok'.
clean(AppDir) ->
MibFiles = rebar_utils:find_files(filename:join(AppDir, "mibs"), ?RE_PREFIX".*\\.mib\$"),
@@ -488,6 +494,7 @@ needs_compile(Source, Target) ->
filelib:last_modified(Source) > filelib:last_modified(Target).
gather_src([], Srcs) ->
+ ?DEBUG("src_files ~p", [Srcs]),
Srcs;
gather_src([Dir|Rest], Srcs) ->
gather_src(
diff --git a/test/rebar_compile_SUITE.erl b/test/rebar_compile_SUITE.erl
index f726943..7750924 100644
--- a/test/rebar_compile_SUITE.erl
+++ b/test/rebar_compile_SUITE.erl
@@ -25,7 +25,8 @@
only_default_transitive_deps/1,
clean_all/1,
override_deps/1,
- profile_override_deps/1]).
+ profile_override_deps/1,
+ build_more_sources/1]).
-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl").
@@ -54,7 +55,7 @@ all() ->
dont_recompile_yrl_or_xrl, delete_beam_if_source_deleted,
deps_in_path, checkout_priority, highest_version_of_pkg_dep,
parse_transform_test, erl_first_files_test, mib_test, only_default_transitive_deps,
- clean_all, override_deps, profile_override_deps].
+ clean_all, override_deps, profile_override_deps, build_more_sources].
build_basic_app(Config) ->
AppDir = ?config(apps, Config),
@@ -631,3 +632,31 @@ profile_override_deps(Config) ->
Config, RebarConfig, ["as", "a", "compile"],
{ok, [{dep, "some_dep"},{dep_not_exist, "other_dep"}]}
).
+
+build_more_sources(Config) ->
+ AppDir = ?config(apps, Config),
+
+ ASrc = <<"-module(a_src).\n-export([ok/0]).\nok() -> ok.\n">>,
+ BSrc = <<"-module(b_src).\n-export([ok/0]).\nok() -> ok.\n">>,
+ CSrc = <<"-module(c_src).\n-export([ok/0]).\nok() -> ok.\n">>,
+
+ ok = filelib:ensure_dir(filename:join([AppDir, "more", "dummy"])),
+ ok = filelib:ensure_dir(filename:join([AppDir, "ebin", "dummy"])),
+ ok = file:write_file(filename:join([AppDir, "more", "a_src.erl"]), ASrc),
+ ok = file:write_file(filename:join([AppDir, "more", "b_src.erl"]), BSrc),
+ ok = file:write_file(filename:join([AppDir, "more", "c_src.erl"]), CSrc),
+
+ Opts = dict:new(),
+
+ rebar_erlc_compiler:compile(Opts,
+ filename:join([AppDir, "more"]),
+ filename:join([AppDir, "ebin"]),
+ [filename:join([AppDir, "more", "a_src.erl"]),
+ filename:join([AppDir, "more", "b_src.erl"]),
+ filename:join([AppDir, "more", "c_src.erl"])]),
+
+ EbinDir = filename:join([AppDir, "ebin"]),
+ true = filelib:is_file(filename:join([EbinDir, "a_src.beam"])),
+ true = filelib:is_file(filename:join([EbinDir, "b_src.beam"])),
+ true = filelib:is_file(filename:join([EbinDir, "c_src.beam"])).
+