summary refs log tree commit diff
path: root/pkgs/development/erlang-modules/build-erlang.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/erlang-modules/build-erlang.nix')
-rw-r--r--pkgs/development/erlang-modules/build-erlang.nix68
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;
+  };
+})