diff options
Diffstat (limited to 'pkgs/development/beam-modules/rebar3-release.nix')
| -rw-r--r-- | pkgs/development/beam-modules/rebar3-release.nix | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/pkgs/development/beam-modules/rebar3-release.nix b/pkgs/development/beam-modules/rebar3-release.nix index 1b0e27891d83..e8e2aecc460c 100644 --- a/pkgs/development/beam-modules/rebar3-release.nix +++ b/pkgs/development/beam-modules/rebar3-release.nix @@ -1,8 +1,10 @@ -{ stdenv, writeText, erlang, rebar3, openssl, +{ stdenv, erlang, rebar3WithPlugins, openssl, lib }: { name, version , src +, beamDeps ? [] +, buildPlugins ? [] , checkouts ? null , releaseType , buildInputs ? [] @@ -12,7 +14,6 @@ , buildPhase ? null , configurePhase ? null , meta ? {} -, enableDebugInfo ? false , ... }@attrs: with lib; @@ -27,28 +28,42 @@ let (_: v: v != null) { inherit setupHook configurePhase buildPhase installPhase; }; - pkg = self: stdenv.mkDerivation (attrs // { + # When using the `beamDeps` argument, it is important that we use + # `rebar3WithPlugins` here even when there are no plugins. The vanilla + # `rebar3` package is an escript archive with bundled dependencies which can + # interfere with those in the app we are trying to build. `rebar3WithPlugins` + # doesn't have this issue since it puts its own deps last on the code path. + rebar3 = rebar3WithPlugins { + plugins = buildPlugins; + }; + + pkg = + assert beamDeps != [] -> checkouts == null; + self: stdenv.mkDerivation (attrs // { name = "${name}-${version}"; inherit version; - buildInputs = buildInputs ++ [ erlang rebar3 openssl ]; - propagatedBuildInputs = [checkouts]; + buildInputs = buildInputs ++ [ erlang rebar3 openssl ] ++ beamDeps; dontStrip = true; inherit src; - setupHook = writeText "setupHook.sh" '' - addToSearchPath ERL_LIBS "$1/lib/erlang/lib/" - ''; - configurePhase = '' runHook preConfigure - ${if checkouts != null then - "cp --no-preserve=all -R ${checkouts}/_checkouts ." - else - ""} + ${lib.optionalString (checkouts != null) + "cp --no-preserve=all -R ${checkouts}/_checkouts ."} + ${# Prevent rebar3 from trying to manage deps + lib.optionalString (beamDeps != [ ]) '' + erl -noshell -eval ' + {ok, Terms0} = file:consult("rebar.config"), + Terms = lists:keydelete(deps, 1, Terms0), + ok = file:write_file("rebar.config", [io_lib:format("~tp.~n", [T]) || T <- Terms]), + init:stop(0) + ' + rm -f rebar.lock + ''} runHook postConfigure ''; |
