summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFred Hebert <mononcqc@ferd.ca>2015-09-17 20:34:39 -0400
committerFred Hebert <mononcqc@ferd.ca>2015-09-17 20:34:39 -0400
commitd9638f88fb48371ceddc399ca3bfeee9ddaadcae (patch)
tree43b55356b6d9f7f54413e38533fa98f86742d2ad
parentdf203da7f386d911d5da51556872fa380b41fe33 (diff)
parent7ad9f7ea75ab96aaecc4e420772ada151f2d4473 (diff)
Merge pull request #786 from tsloughter/api_compile
add 'bare compile' provider, for starters for use by mix
-rw-r--r--src/rebar.app.src1
-rw-r--r--src/rebar_prv_bare_compile.erl55
-rw-r--r--src/rebar_prv_compile.erl6
-rw-r--r--src/rebar_prv_escriptize.erl2
-rw-r--r--src/rebar_prv_local_install.erl5
5 files changed, 64 insertions, 5 deletions
diff --git a/src/rebar.app.src b/src/rebar.app.src
index 4d1dfd7..69df1b2 100644
--- a/src/rebar.app.src
+++ b/src/rebar.app.src
@@ -36,6 +36,7 @@
{providers, [rebar_prv_app_discovery,
rebar_prv_as,
+ rebar_prv_bare_compile,
rebar_prv_clean,
rebar_prv_common_test,
rebar_prv_compile,
diff --git a/src/rebar_prv_bare_compile.erl b/src/rebar_prv_bare_compile.erl
new file mode 100644
index 0000000..201620a
--- /dev/null
+++ b/src/rebar_prv_bare_compile.erl
@@ -0,0 +1,55 @@
+-module(rebar_prv_bare_compile).
+
+-behaviour(provider).
+
+-export([init/1,
+ do/1,
+ format_error/1]).
+
+-include_lib("providers/include/providers.hrl").
+-include("rebar.hrl").
+
+-define(PROVIDER, compile).
+-define(NAMESPACE, bare).
+-define(DEPS, [{default, app_discovery}]).
+
+%% ===================================================================
+%% Public API
+%% ===================================================================
+
+-spec init(rebar_state:t()) -> {ok, rebar_state:t()}.
+init(State) ->
+ State1 =
+ rebar_state:add_provider(State,
+ providers:create([{name, ?PROVIDER},
+ {module, ?MODULE},
+ {namespace, ?NAMESPACE},
+ {bare, false},
+ {deps, ?DEPS},
+ {example, ""},
+ {short_desc, ""},
+ {desc, ""},
+ {opts, [{paths, $p, "paths", string, "Wildcard path of ebin directories to add to code path"}]}])),
+ {ok, State1}.
+
+-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
+do(State) ->
+ OrigPath = code:get_path(),
+
+ %% Add code paths from --paths to the beginning of the code path
+ {RawOpts, _} = rebar_state:command_parsed_args(State),
+ Paths = proplists:get_value(paths, RawOpts),
+ CodePaths = filelib:wildcard(Paths),
+ code:add_pathsa(CodePaths),
+
+ [AppInfo] = rebar_state:project_apps(State),
+ AppInfo1 = rebar_app_info:out_dir(AppInfo, rebar_dir:get_cwd()),
+ rebar_prv_compile:compile(State, AppInfo1),
+
+ rebar_utils:cleanup_code_path(OrigPath),
+
+ {ok, State}.
+
+-spec format_error(any()) -> iolist().
+format_error(Reason) ->
+ io_lib:format("~p", [Reason]).
diff --git a/src/rebar_prv_compile.erl b/src/rebar_prv_compile.erl
index 89ea430..9811de9 100644
--- a/src/rebar_prv_compile.erl
+++ b/src/rebar_prv_compile.erl
@@ -6,7 +6,8 @@
do/1,
format_error/1]).
--export([compile/3]).
+-export([compile/2,
+ compile/3]).
-include_lib("providers/include/providers.hrl").
-include("rebar.hrl").
@@ -81,6 +82,9 @@ build_app(State, Providers, AppInfo) ->
copy_app_dirs(AppInfo, AppDir, OutDir),
compile(State, Providers, AppInfo).
+compile(State, AppInfo) ->
+ compile(State, rebar_state:providers(State), AppInfo).
+
compile(State, Providers, AppInfo) ->
?INFO("Compiling ~s", [rebar_app_info:name(AppInfo)]),
AppDir = rebar_app_info:dir(AppInfo),
diff --git a/src/rebar_prv_escriptize.erl b/src/rebar_prv_escriptize.erl
index 3cdc9bf..32f5508 100644
--- a/src/rebar_prv_escriptize.erl
+++ b/src/rebar_prv_escriptize.erl
@@ -107,7 +107,7 @@ escriptize(State0, App) ->
ExtraFiles = usort(InclBeams ++ InclExtra),
Files = get_nonempty(EbinFiles ++ ExtraFiles),
- DefaultEmuArgs = ?FMT("%%! -escript main ~s -pa ~s/~s/ebin\n",
+ DefaultEmuArgs = ?FMT("%%! -escript main ~s -pz ~s/~s/ebin\n",
[AppNameStr, AppNameStr, AppNameStr]),
EscriptSections =
[ {shebang,
diff --git a/src/rebar_prv_local_install.erl b/src/rebar_prv_local_install.erl
index bf536d0..172986d 100644
--- a/src/rebar_prv_local_install.erl
+++ b/src/rebar_prv_local_install.erl
@@ -58,10 +58,9 @@ format_error(Reason) ->
io_lib:format("~p", [Reason]).
bin_contents(OutputDir) ->
- <<"
-#!/usr/bin/env sh
+ <<"#!/usr/bin/env sh
-erl -pa ", (ec_cnv:to_binary(OutputDir))/binary,"/*/ebin +sbtu +A0 -noshell -boot start_clean -s rebar3 main -extra \"$@\"
+erl -pz ", (ec_cnv:to_binary(OutputDir))/binary,"/*/ebin +sbtu +A0 -noshell -boot start_clean -s rebar3 main -extra \"$@\"
">>.
extract_escript(State, ScriptPath) ->