summary refs log tree commit diff
path: root/pkgs/development/tools/build-managers/rebar3
diff options
context:
space:
mode:
authorGleb Peregud <gleber.p@gmail.com>2015-12-13 14:07:53 +0100
committerGleb Peregud <gleber.p@gmail.com>2015-12-15 14:05:51 +0100
commit108f3cf67fee2a7c8fd52710b65f386f773499e0 (patch)
treee543e4d26f142e85632e467f8d8955cc94a04cc7 /pkgs/development/tools/build-managers/rebar3
parent4ba1a51b7ff8162a92f624e3ddc7ada21bd8289e (diff)
downloadnixpkgs-108f3cf67fee2a7c8fd52710b65f386f773499e0.tar
nixpkgs-108f3cf67fee2a7c8fd52710b65f386f773499e0.tar.gz
nixpkgs-108f3cf67fee2a7c8fd52710b65f386f773499e0.tar.bz2
nixpkgs-108f3cf67fee2a7c8fd52710b65f386f773499e0.tar.lz
nixpkgs-108f3cf67fee2a7c8fd52710b65f386f773499e0.tar.xz
nixpkgs-108f3cf67fee2a7c8fd52710b65f386f773499e0.tar.zst
nixpkgs-108f3cf67fee2a7c8fd52710b65f386f773499e0.zip
Add patch which makes rebar compilation hermetic
Diffstat (limited to 'pkgs/development/tools/build-managers/rebar3')
-rw-r--r--pkgs/development/tools/build-managers/rebar3/default.nix2
-rw-r--r--pkgs/development/tools/build-managers/rebar3/hermetic-bootstrap.patch78
2 files changed, 80 insertions, 0 deletions
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(<<Name/binary, "-", Vsn/binary, ".tar">>),
+-    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"])),