summaryrefslogtreecommitdiff
path: root/bootstrap
diff options
context:
space:
mode:
authorTuncer Ayaz <tuncer.ayaz@gmail.com>2012-05-18 22:16:38 +0200
committerTuncer Ayaz <tuncer.ayaz@gmail.com>2012-06-14 23:46:55 +0200
commit1e980859e2ecf0ee0fb2036b3a35496492246d55 (patch)
treed44283fd7ec13e1bf06936eaadb3ec3f67380268 /bootstrap
parent8fb552b73f8f83fae96bf0b970b94a4c2ca5effc (diff)
downloadrebar-1e980859e2ecf0ee0fb2036b3a35496492246d55.tar.gz
Extend escriptize and reuse in bootstrap
Diffstat (limited to 'bootstrap')
-rwxr-xr-xbootstrap84
1 files changed, 3 insertions, 81 deletions
diff --git a/bootstrap b/bootstrap
index c68bcab..fc6d1a8 100755
--- a/bootstrap
+++ b/bootstrap
@@ -53,36 +53,9 @@ main(Args) ->
%% Add ebin/ to our path
true = code:add_path("ebin"),
- %% Run rebar to do proper .app validation and such
- rebar:main(["compile"] ++ Args),
-
- TempDir = make_temp_dir(),
- ok = copy_files(TempDir), %% Copy the ebin and priv/templates
- {ok, Dirs} = file:list_dir(TempDir),
-
- case zip:create("mem", Dirs, [memory, {cwd, TempDir}]) of
- {ok, {"mem", ZipBin}} ->
- ok = rebar_file_utils:rm_rf(TempDir),
- %% Archive was successfully created. Prefix that binary with our
- %% header and write to "rebar" file.
- %% Without -noshell -noinput escript consumes all input that would
- %% otherwise go to the shell for the next command.
- Script = <<"#!/usr/bin/env escript\n%%! -noshell -noinput\n",
- ZipBin/binary>>,
- case file:write_file("rebar", Script) of
- ok ->
- ok;
- {error, WriteError} ->
- io:format("Failed to write rebar script: ~p\n",
- [WriteError]),
- halt(1)
- end;
- {error, ZipError} ->
- ok = rebar_file_utils:rm_rf(TempDir),
- io:format("Failed to construct rebar script archive: ~p\n",
- [ZipError]),
- halt(1)
- end,
+ %% Run rebar compile to do proper .app validation etc.
+ %% and rebar escriptize to create the rebar script
+ rebar:main(["compile", "escriptize"] ++ Args),
%% Finally, update executable perms for our script on *nix,
%% or write out script files on win32.
@@ -104,37 +77,6 @@ main(Args) ->
"Place this script anywhere in your path\n"
"and you can use rebar to build OTP-compliant apps.\n").
-make_temp_dir() ->
- case temp_name("rebar.") of
- {ok, TempDir} ->
- case file:make_dir(TempDir) of
- ok ->
- TempDir;
- Error ->
- io:format("Failed to create temporary directory: ~p~n",
- [Error]),
- halt(1),
- Error
- end;
- Error ->
- io:format("Failed to create temporary directory: ~p~n",
- [Error]),
- halt(1)
- end.
-
-temp_name(Prefix) ->
- temp_name(Prefix, 5).
-
-temp_name(_Prefix, 0) ->
- {error, eexist};
-temp_name(Prefix, N) ->
- Hash = erlang:phash2(make_ref()),
- Name = Prefix ++ integer_to_list(Hash),
- case filelib:is_file(Name) of
- false -> {ok, Name};
- true -> temp_name(Prefix, N-1)
- end.
-
rm(Path) ->
NativePath = filename:nativename(Path),
Cmd = case os:type() of
@@ -149,26 +91,6 @@ build_time() ->
lists:flatten(io_lib:format("~4..0w~2..0w~2..0w_~2..0w~2..0w~2..0w",
[Y, M, D, H, Min, S])).
-copy_files(Temp) ->
- BaseEbinDir = filename:join("rebar", "ebin"),
- BaseTemplatesDir = filename:join("priv", "templates"),
- EbinDir = filename:join(Temp, BaseEbinDir),
- TemplatesDir = filename:join(Temp, BaseTemplatesDir),
-
- %% prepare directory structure
- lists:foreach(
- fun(Dir) ->
- ok = filelib:ensure_dir(filename:join(Dir, "dummy"))
- end, [EbinDir, TemplatesDir]),
-
- %% copy content of ebin
- EbinSrc = filename:join(["ebin", "*"]),
- ok = rebar_file_utils:cp_r([EbinSrc], EbinDir),
-
- %% copy content of priv/templates
- TemplatesSrc = filename:join(BaseTemplatesDir, "*"),
- ok = rebar_file_utils:cp_r([TemplatesSrc], TemplatesDir).
-
vcs_info([]) ->
"No VCS info available.";
vcs_info([{Id, Dir, Cmd} | Rest]) ->