nixpkgs/pkgs/development/beam-modules/rebar3-release.nix
2021-01-24 00:16:29 +07:00

84 lines
1.8 KiB
Nix

{ stdenv, writeText, erlang, rebar3, openssl,
lib }:
{ name, version
, src
, checkouts ? null
, releaseType
, buildInputs ? []
, setupHook ? null
, profile ? "default"
, installPhase ? null
, buildPhase ? null
, configurePhase ? null
, meta ? {}
, enableDebugInfo ? false
, ... }@attrs:
with lib;
let
shell = drv: stdenv.mkDerivation {
name = "interactive-shell-${drv.name}";
buildInputs = [ drv ];
};
customPhases = filterAttrs
(_: v: v != null)
{ inherit setupHook configurePhase buildPhase installPhase; };
pkg = self: stdenv.mkDerivation (attrs // {
name = "${name}-${version}";
inherit version;
buildInputs = buildInputs ++ [ erlang rebar3 openssl ];
propagatedBuildInputs = [checkouts];
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
''''}
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
HOME=. DEBUG=1 rebar3 as ${profile} ${if releaseType == "escript"
then '' escriptize''
else '' release''}
runHook postBuild
'';
installPhase = ''
runHook preInstall
dir=${if releaseType == "escript"
then ''bin''
else ''rel''}
mkdir -p "$out/$dir"
cp -R --preserve=mode "_build/${profile}/$dir" "$out"
runHook postInstall
'';
meta = {
inherit (erlang.meta) platforms;
} // meta;
passthru = {
packageName = name;
env = shell self;
};
} // customPhases);
in
fix pkg