diff --git a/pkgs/development/beam-modules/default.nix b/pkgs/development/beam-modules/default.nix index fb0b8b5debad..c4dbcf310d9f 100644 --- a/pkgs/development/beam-modules/default.nix +++ b/pkgs/development/beam-modules/default.nix @@ -86,6 +86,7 @@ makeScopeWithSplicing' { mixBuildDirHook mixCompileHook mixEscriptSetupHook + mixFodDepsSetupHook mixReleaseSetupHook rebar3CompileHook rebarDevendorPatchHook diff --git a/pkgs/development/beam-modules/hooks/default.nix b/pkgs/development/beam-modules/hooks/default.nix index 304134c645fe..42d24aaac61d 100644 --- a/pkgs/development/beam-modules/hooks/default.nix +++ b/pkgs/development/beam-modules/hooks/default.nix @@ -33,6 +33,11 @@ meta.license = lib.licenses.mit; } ./mix-escript-setup-hook.sh; + mixFodDepsSetupHook = makeSetupHook { + name = "mix-fod-deps-setup-hook"; + meta.license = lib.licenses.mit; + } ./mix-fod-deps-setup-hook.sh; + mixReleaseSetupHook = makeSetupHook { name = "mix-release-setup-hook.sh"; meta.license = lib.licenses.mit; diff --git a/pkgs/development/beam-modules/hooks/mix-fod-deps-setup-hook.sh b/pkgs/development/beam-modules/hooks/mix-fod-deps-setup-hook.sh new file mode 100755 index 000000000000..2c5235050b58 --- /dev/null +++ b/pkgs/development/beam-modules/hooks/mix-fod-deps-setup-hook.sh @@ -0,0 +1,29 @@ +# shellcheck shell=bash + +mixFodDepsPostUnpack() { + echo "Executing mixFodDepsPostUnpack" + + if [ -n "${mixFodDeps-}" ]; then + # Compilation of the dependencies will require that the dependency path is + # writable, thus a copy to the $TEMPDIR is inevitable here. + export MIX_DEPS_PATH="$TEMPDIR/deps" + cp --no-preserve=mode -R "${mixFodDeps}" "$MIX_DEPS_PATH" + fi + + echo "Finished mixFodDepsPostUnpack" +} + +mixFodDepsPostConfigure() { + echo "Executing mixFodDepsPostConfigure" + + if [ -n "${mixFodDeps-}" ]; then + # Symlink deps to build root. Allows for mixFodDeps Phoenix projects to + # find javascript assets. + ln -s "$MIX_DEPS_PATH" ./deps + fi + + echo "Finished mixFodDepsPostConfigure" +} + +postUnpackHooks+=(mixFodDepsPostUnpack) +postConfigureHooks+=(mixFodDepsPostConfigure) diff --git a/pkgs/development/beam-modules/mix-release.nix b/pkgs/development/beam-modules/mix-release.nix index d585a4c5ca30..93bd199bee1c 100644 --- a/pkgs/development/beam-modules/mix-release.nix +++ b/pkgs/development/beam-modules/mix-release.nix @@ -20,6 +20,7 @@ mixBuildDirHook, mixCompileHook, mixEscriptSetupHook, + mixFodDepsSetupHook, mixReleaseSetupHook, }@inputs: @@ -124,7 +125,8 @@ lib.extendMkDerivation { ] ++ lib.optionals (escriptBinName != null) [ mixEscriptSetupHook ] ++ lib.optionals (escriptBinName == null) [ mixReleaseSetupHook ] - ++ (builtins.attrValues mixNixDeps); + ++ (builtins.attrValues mixNixDeps) + ++ lib.optionals (mixFodDeps != null) [ mixFodDepsSetupHook ]; buildInputs = [ bashNonInteractive @@ -163,16 +165,6 @@ lib.extendMkDerivation { } // (attrs.env or { }); - postUnpack = '' - ${lib.optionalString (mixFodDeps != null) '' - # Compilation of the dependencies will require that the dependency path is - # writable, thus a copy to the $TEMPDIR is inevitable here. - export MIX_DEPS_PATH="$TEMPDIR/deps" - cp --no-preserve=mode -R "${mixFodDeps}" "$MIX_DEPS_PATH" - ''} - '' - + (attrs.postUnpack or ""); - configurePhase = attrs.configurePhase or '' runHook preConfigure @@ -198,12 +190,6 @@ lib.extendMkDerivation { '') mixNixDeps} ''} - # Symlink deps to build root. Similar to above, but allows for mixFodDeps - # Phoenix projects to find javascript assets. - ${lib.optionalString (mixFodDeps != null) '' - ln -s "$MIX_DEPS_PATH" ./deps - ''} - runHook postConfigure '';