beamPackages.mixRelease: extract mixFodDepsSetupHook

This commit is contained in:
Adam C. Stephens
2026-08-28 13:46:34 -04:00
parent 71cfdbc359
commit 556f308bb5
4 changed files with 38 additions and 17 deletions

View File

@@ -86,6 +86,7 @@ makeScopeWithSplicing' {
mixBuildDirHook
mixCompileHook
mixEscriptSetupHook
mixFodDepsSetupHook
mixReleaseSetupHook
rebar3CompileHook
rebarDevendorPatchHook

View File

@@ -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;

View File

@@ -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)

View File

@@ -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
'';