summaryrefslogtreecommitdiffstats
path: root/pkgs/development/beam-modules/build-mix.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/beam-modules/build-mix.nix')
-rw-r--r--pkgs/development/beam-modules/build-mix.nix85
1 files changed, 85 insertions, 0 deletions
diff --git a/pkgs/development/beam-modules/build-mix.nix b/pkgs/development/beam-modules/build-mix.nix
new file mode 100644
index 000000000000..70c186df8a06
--- /dev/null
+++ b/pkgs/development/beam-modules/build-mix.nix
@@ -0,0 +1,85 @@
+{ stdenv, writeText, elixir, erlang, hexRegistrySnapshot, hex }:
+
+{ name
+, version
+, src
+, setupHook ? null
+, buildInputs ? []
+, beamDeps ? []
+, postPatch ? ""
+, compilePorts ? false
+, meta ? {}
+, ... }@attrs:
+
+with stdenv.lib;
+
+let
+ shell = drv: stdenv.mkDerivation {
+ name = "interactive-shell-${drv.name}";
+ buildInputs = [ drv ];
+ };
+
+ bootstrapper = ./mix-bootstrap;
+
+ pkg = self: stdenv.mkDerivation ( attrs // {
+ name = "${name}-${version}";
+ inherit version;
+
+ dontStrip = true;
+
+ inherit src;
+
+ setupHook = if setupHook == null
+ then writeText "setupHook.sh" ''
+ addToSearchPath ERL_LIBS "$1/lib/erlang/lib"
+ ''
+ else setupHook;
+
+ inherit buildInputs;
+ propagatedBuildInputs = [ hexRegistrySnapshot hex elixir ] ++ beamDeps;
+
+ configurePhase = ''
+ runHook preConfigure
+ ${erlang}/bin/escript ${bootstrapper}
+ runHook postConfigure
+ '';
+
+ buildPhase = ''
+ runHook preBuild
+
+ export HEX_OFFLINE=1
+ export HEX_HOME=`pwd`
+ export MIX_ENV=prod
+
+ MIX_ENV=prod mix compile --debug-info --no-deps-check
+
+ runHook postBuild
+ '';
+
+ installPhase = ''
+ runHook preInstall
+
+ MIXENV=prod
+
+ if [ -d "_build/shared" ]; then
+ MIXENV=shared
+ fi
+
+ mkdir -p "$out/lib/erlang/lib/${name}-${version}"
+ for reldir in src ebin priv include; do
+ fd="_build/$MIXENV/lib/${name}/$reldir"
+ [ -d "$fd" ] || continue
+ cp -Hrt "$out/lib/erlang/lib/${name}-${version}" "$fd"
+ success=1
+ done
+
+ runHook postInstall
+ '';
+
+ passthru = {
+ packageName = name;
+ env = shell self;
+ inherit beamDeps;
+ };
+});
+in fix pkg