From 108f3cf67fee2a7c8fd52710b65f386f773499e0 Mon Sep 17 00:00:00 2001 From: Gleb Peregud Date: Sun, 13 Dec 2015 14:07:53 +0100 Subject: [PATCH] Add patch which makes rebar compilation hermetic --- .../tools/build-managers/rebar3/default.nix | 2 + .../rebar3/hermetic-bootstrap.patch | 78 +++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 pkgs/development/tools/build-managers/rebar3/hermetic-bootstrap.patch diff --git a/pkgs/development/tools/build-managers/rebar3/default.nix b/pkgs/development/tools/build-managers/rebar3/default.nix index f905622413a..841e0b71f42 100644 --- a/pkgs/development/tools/build-managers/rebar3/default.nix +++ b/pkgs/development/tools/build-managers/rebar3/default.nix @@ -17,6 +17,8 @@ stdenv.mkDerivation { sha256 = "0px66scjdia9aaa5z36qzxb848r56m0k98g0bxw065a2narsh4xy"; }; + patches = [ ./hermetic-bootstrap.patch ]; + buildInputs = [ erlang ]; inherit setupRegistry; diff --git a/pkgs/development/tools/build-managers/rebar3/hermetic-bootstrap.patch b/pkgs/development/tools/build-managers/rebar3/hermetic-bootstrap.patch new file mode 100644 index 00000000000..13d60fdcc91 --- /dev/null +++ b/pkgs/development/tools/build-managers/rebar3/hermetic-bootstrap.patch @@ -0,0 +1,78 @@ +diff --git a/bootstrap b/bootstrap +index 25bd658..b2a986b 100755 +--- a/bootstrap ++++ b/bootstrap +@@ -8,9 +8,6 @@ main(_Args) -> + application:start(asn1), + application:start(public_key), + application:start(ssl), +- inets:start(), +- inets:start(httpc, [{profile, rebar}]), +- set_httpc_options(), + + %% Fetch and build deps required to build rebar3 + BaseDeps = [{providers, []} +@@ -33,7 +30,6 @@ main(_Args) -> + + setup_env(), + os:putenv("REBAR_PROFILE", "bootstrap"), +- rebar3:run(["update"]), + {ok, State} = rebar3:run(["compile"]), + reset_env(), + os:putenv("REBAR_PROFILE", ""), +@@ -71,33 +67,7 @@ fetch_and_compile({Name, ErlFirstFiles}, Deps) -> + compile(Name, ErlFirstFiles). + + fetch({pkg, Name, Vsn}, App) -> +- Dir = filename:join([filename:absname("_build/default/lib/"), App]), +- CDN = "https://s3.amazonaws.com/s3.hex.pm/tarballs", +- Package = binary_to_list(<>), +- Url = string:join([CDN, Package], "/"), +- case request(Url) of +- {ok, Binary} -> +- {ok, Contents} = extract(Binary), +- ok = erl_tar:extract({binary, Contents}, [{cwd, Dir}, compressed]); +- _ -> +- io:format("Error: Unable to fetch package ~p ~p~n", [Name, Vsn]) +- end. +- +-extract(Binary) -> +- {ok, Files} = erl_tar:extract({binary, Binary}, [memory]), +- {"contents.tar.gz", Contents} = lists:keyfind("contents.tar.gz", 1, Files), +- {ok, Contents}. +- +-request(Url) -> +- case httpc:request(get, {Url, []}, +- [{relaxed, true}], +- [{body_format, binary}], +- rebar) of +- {ok, {{_Version, 200, _Reason}, _Headers, Body}} -> +- {ok, Body}; +- Error -> +- Error +- end. ++ ok. + + get_rebar_config() -> + {ok, [[Home]]} = init:get_argument(home), +@@ -109,20 +79,6 @@ get_rebar_config() -> + [] + end. + +-get_http_vars(Scheme) -> +- proplists:get_value(Scheme, get_rebar_config(), []). +- +-set_httpc_options() -> +- set_httpc_options(https_proxy, get_http_vars(https_proxy)), +- set_httpc_options(proxy, get_http_vars(http_proxy)). +- +-set_httpc_options(_, []) -> +- ok; +- +-set_httpc_options(Scheme, Proxy) -> +- {ok, {_, _, Host, Port, _, _}} = http_uri:parse(Proxy), +- httpc:set_options([{Scheme, {{Host, Port}, []}}], rebar). +- + compile(App, FirstFiles) -> + Dir = filename:join(filename:absname("_build/default/lib/"), App), + filelib:ensure_dir(filename:join([Dir, "ebin", "dummy.beam"])),