#!/usr/bin/env escript
|
|
%% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*-
|
|
%% ex: ft=erlang ts=4 sw=4 et
|
|
|
|
main(Args) ->
|
|
case lists:member("--help", Args) of
|
|
true ->
|
|
usage(),
|
|
halt(0);
|
|
false ->
|
|
ok
|
|
end,
|
|
|
|
%% Check for force=1 flag to force a rebuild
|
|
case lists:member("force=1", Args) of
|
|
true ->
|
|
rm("ebin/*.beam");
|
|
false ->
|
|
rm("ebin/rebar.beam")
|
|
end,
|
|
|
|
%% Extract the system info of the version of OTP we use to compile rebar
|
|
|
|
os:cmd("./bootstrap/rebar get-deps compile escriptize"),
|
|
|
|
%% Finally, update executable perms for our script on *nix,
|
|
%% or write out script files on win32.
|
|
case os:type() of
|
|
{unix,_} ->
|
|
[] = os:cmd("chmod u+x rebar3"),
|
|
ok;
|
|
{win32,_} ->
|
|
write_windows_scripts(),
|
|
ok;
|
|
_ ->
|
|
ok
|
|
end,
|
|
|
|
%% Add a helpful message
|
|
io:format("Congratulations! You now have a self-contained script called"
|
|
" \"rebar3\" in\n"
|
|
"your current working directory. "
|
|
"Place this script anywhere in your path\n"
|
|
"and you can use rebar to build OTP-compliant apps.\n").
|
|
|
|
usage() ->
|
|
io:format("Usage: bootstrap [OPTION]...~n"),
|
|
io:format(" force=1 unconditional build~n"),
|
|
io:format(" debug add debug information~n").
|
|
|
|
rm(Path) ->
|
|
NativePath = filename:nativename(Path),
|
|
Cmd = case os:type() of
|
|
{unix,_} -> "rm -f ";
|
|
{win32,_} -> "del /q "
|
|
end,
|
|
[] = os:cmd(Cmd ++ NativePath),
|
|
ok.
|
|
|
|
write_windows_scripts() ->
|
|
CmdScript=
|
|
"@echo off\r\n"
|
|
"setlocal\r\n"
|
|
"set rebarscript=%~f0\r\n"
|
|
"escript.exe \"%rebarscript:.cmd=%\" %*\r\n",
|
|
ok = file:write_file("rebar.cmd", CmdScript).
|