rebar3Relx: add beamDeps support

This commit is contained in:
David 2021-05-17 17:51:58 +02:00 committed by Raphael Megzari
parent ac9b645021
commit 72795f8c0b

View File

@ -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
'';