diff options
Diffstat (limited to 'pkgs/development/erlang-modules/build-hex.nix')
-rw-r--r-- | pkgs/development/erlang-modules/build-hex.nix | 94 |
1 files changed, 2 insertions, 92 deletions
diff --git a/pkgs/development/erlang-modules/build-hex.nix b/pkgs/development/erlang-modules/build-hex.nix index 7ba8fab9bd2a..ff6e47e5a805 100644 --- a/pkgs/development/erlang-modules/build-hex.nix +++ b/pkgs/development/erlang-modules/build-hex.nix @@ -1,109 +1,19 @@ -{ stdenv, erlang, rebar3, openssl, libyaml, fetchHex, fetchFromGitHub, - rebar3-pc, buildEnv }: +{ stdenv, buildRebar3, fetchHex }: { name, version, sha256 , hexPkg ? name -, buildInputs ? [], erlangDeps ? [], pluginDeps ? [] -, postPatch ? "" -, compilePorts ? false -, meta ? {} , ... }@attrs: with stdenv.lib; let - plugins = pluginDeps ++ (if compilePorts then [rebar3-pc] else []); - getDeps = drv: [drv] ++ (map getDeps drv.erlangDeps); - recursiveDeps = unique (flatten (map getDeps erlangDeps)); - recursivePluginsDeps = unique (flatten (map getDeps plugins)); - - erlEnv = drv: buildEnv { - name = "erlang-env-${drv.name}"; - paths = [ drv ] ++ recursiveDeps; - ignoreCollisions = false; - meta = drv.meta; - }; - - shell = drv: let - drvEnv = erlEnv drv; - in stdenv.mkDerivation { - name = "interactive-shell-${drv.name}"; - nativeBuildInputs = [ erlang drvEnv ]; - shellHook = '' - export ERL_LIBS="${drvEnv}"; - ''; - }; - pkg = self: stdenv.mkDerivation (attrs // { - name = "${name}-${version}"; - - buildInputs = buildInputs ++ [ erlang rebar3 openssl libyaml ]; + pkg = self: buildRebar3 (attrs // { src = fetchHex { pkg = hexPkg; inherit version; inherit sha256; }; - - postPatch = '' - rm -f rebar rebar3 - if [ -e "src/${name}.app.src" ]; then - sed -i -e 's/{ *vsn *,[^}]*}/{vsn, "${version}"}/' "src/${name}.app.src" - fi - - ${if compilePorts then '' - echo "{plugins, [pc]}." >> rebar.config - '' else ''''} - - ${rebar3.setupRegistry} - - ${postPatch} - ''; - - configurePhase = '' - runHook preConfigure - ${concatMapStrings (dep: '' - header "linking erlang dependency ${dep}" - ln -s "${dep}/${dep.name}" "_build/default/lib/${dep.name}" - stopNest - '') recursiveDeps} - ${concatMapStrings (dep: '' - header "linking rebar3 plugins ${dep}" - ln -s "${dep}/${dep.name}" "_build/default/plugins/${dep.name}" - stopNest - '') recursivePluginsDeps} - runHook postConfigure - ''; - - buildPhase = '' - runHook preBuild - HOME=. rebar3 compile - ${if compilePorts then '' - HOME=. rebar3 pc compile - '' else ''''} - runHook postBuild - ''; - - installPhase = '' - runHook preInstall - mkdir -p "$out/${name}" - for reldir in src ebin priv include; do - fd="_build/default/lib/${name}/$reldir" - [ -d "$fd" ] || continue - cp -Hrt "$out/${name}" "$fd" - success=1 - done - runHook postInstall - ''; - - meta = { - inherit (erlang.meta) platforms; - } // meta; - - passthru = { - packageName = name; - env = shell self; - inherit erlangDeps; - }; }); in fix pkg |