diff options
Diffstat (limited to 'pkgs/development/erlang-modules/build-erlang.nix')
-rw-r--r-- | pkgs/development/erlang-modules/build-erlang.nix | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/pkgs/development/erlang-modules/build-erlang.nix b/pkgs/development/erlang-modules/build-erlang.nix new file mode 100644 index 00000000000..e662166741a --- /dev/null +++ b/pkgs/development/erlang-modules/build-erlang.nix @@ -0,0 +1,68 @@ +# This file is not used not tested at this time, build-hex.nix is the currently +# main vehicle of bringing Erlang packages in. + +{ stdenv, erlang, rebar, openssl, libyaml }: + +{ name, version +, buildInputs ? [], erlangDeps ? [] +, postPatch ? "" +, meta ? {} +, ... }@attrs: + +with stdenv.lib; + +stdenv.mkDerivation (attrs // { + name = "${name}-${version}"; + + buildInputs = buildInputs ++ [ erlang rebar openssl libyaml ]; + + postPatch = '' + rm -f rebar + if [ -e "src/${name}.app.src" ]; then + sed -i -e 's/{ *vsn *,[^}]*}/{vsn, "${version}"}/' "src/${name}.app.src" + fi + ${postPatch} + ''; + + configurePhase = let + getDeps = drv: [drv] ++ (map getDeps drv.erlangDeps); + recursiveDeps = uniqList { + inputList = flatten (map getDeps erlangDeps); + }; + in '' + runHook preConfigure + ${concatMapStrings (dep: '' + header "linking erlang dependency ${dep}" + mkdir deps + ln -s "${dep}" "deps/${dep.packageName}" + stopNest + '') recursiveDeps} + runHook postConfigure + ''; + + buildPhase = '' + runHook preBuild + rebar compile + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + for reldir in src ebin priv include; do + [ -e "$reldir" ] || continue + mkdir "$out" + cp -rt "$out" "$reldir" + success=1 + done + runHook postInstall + ''; + + meta = { + inherit (erlang.meta) platforms; + } // meta; + + passthru = { + packageName = name; + inherit erlangDeps; + }; +}) |