summaryrefslogtreecommitdiff
path: root/pkgs/development/beam-modules/rebar3-release.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/beam-modules/rebar3-release.nix')
-rw-r--r--pkgs/development/beam-modules/rebar3-release.nix41
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
'';