From fcbfef1e431e5fcdd400a7650b04a11699ebdb38 Mon Sep 17 00:00:00 2001 From: Adam Stephens Date: Wed, 28 Jun 2023 10:48:59 -0400 Subject: [PATCH] buildMix: copy package.json to support phoenix builds --- pkgs/development/beam-modules/build-mix.nix | 6 ++++++ pkgs/development/beam-modules/mix-release.nix | 21 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/pkgs/development/beam-modules/build-mix.nix b/pkgs/development/beam-modules/build-mix.nix index f74da7b7827d..4c5ad3f6fa24 100644 --- a/pkgs/development/beam-modules/build-mix.nix +++ b/pkgs/development/beam-modules/build-mix.nix @@ -87,6 +87,12 @@ let fi done + # Copy the source so it can be used by dependent packages. For example, + # phoenix applications need the source of phoenix and phoenix_html to + # build javascript and css assets. + mkdir -p $out/src + cp -r $src/* "$out/src" + runHook postInstall ''; diff --git a/pkgs/development/beam-modules/mix-release.nix b/pkgs/development/beam-modules/mix-release.nix index 0f070cce7ad3..d48dc38a4b8d 100644 --- a/pkgs/development/beam-modules/mix-release.nix +++ b/pkgs/development/beam-modules/mix-release.nix @@ -81,6 +81,27 @@ stdenv.mkDerivation (overridable // { # Phoenix projects for example will need compile.phoenix mix deps.compile --no-deps-check --skip-umbrella-children + # Symlink dependency sources. This is needed for projects that require + # access to the source of their dependencies. For example, Phoenix + # applications need javascript assets to build asset bundles. + ${lib.optionalString (mixNixDeps != { }) '' + mkdir -p deps + + ${lib.concatMapStringsSep "\n" (dep: '' + dep_name=$(basename ${dep} | cut -d '-' -f2) + dep_path="deps/$dep_name" + if [ -d "${dep}/src" ]; then + ln -s ${dep}/src $dep_path + fi + '') (builtins.attrValues 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 ../deps ./ + ''} + runHook postConfigure '';