#!/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).