buildMix support for MIX_TARGET (#437325)

Changed files
+11 -3
pkgs
+4 -1
pkgs/development/beam-modules/build-mix.nix
···
meta ? { },
enableDebugInfo ? false,
mixEnv ? "prod",
+
mixTarget ? "host",
removeConfig ? true,
# A config directory that is considered for all the dependencies of an app, typically in $src/config/
# This was initially added, as some of Mobilizon's dependencies need to access the config at build time.
···
inherit version src;
MIX_ENV = mixEnv;
+
MIX_TARGET = mixTarget;
+
MIX_BUILD_PREFIX = (if mixTarget == "host" then "" else "${mixTarget}_") + "${mixEnv}";
MIX_DEBUG = if enableDebugInfo then 1 else 0;
HEX_OFFLINE = 1;
···
# Some packages like db_connection will use _build/shared instead of
# honoring the $MIX_ENV variable.
-
for reldir in _build/{$MIX_ENV,shared}/lib/${name}/{src,ebin,priv,include} ; do
+
for reldir in _build/{$MIX_BUILD_PREFIX,shared}/lib/${name}/{src,ebin,priv,include} ; do
if test -d $reldir ; then
# Some builds produce symlinks (eg: phoenix priv dircetory). They must
# be followed with -H flag.
+2
pkgs/development/beam-modules/fetch-mix-deps.nix
···
sha256 ? "",
src,
mixEnv ? "prod",
+
mixTarget ? "host",
debug ? false,
meta ? { },
patches ? [ ],
···
];
MIX_ENV = mixEnv;
+
MIX_TARGET = mixTarget;
MIX_DEBUG = if debug then 1 else 0;
DEBUG = if debug then 1 else 0; # for rebar3
# the api with `mix local.rebar rebar path` makes a copy of the binary
+2 -2
pkgs/development/beam-modules/mix-configure-hook.sh
···
# this hook will symlink all dependencies found in ERL_LIBS
# since Elixir 1.12.2 elixir does not look into ERL_LIBS for
# elixir depencencies anymore, so those have to be symlinked to the _build directory
-
mkdir -p _build/"$MIX_ENV"/lib
+
mkdir -p _build/"$MIX_BUILD_PREFIX"/lib
while read -r -d ':' lib; do
for dir in "$lib"/*; do
# Strip version number for directory name if it exists, so naming of
# all libs matches what mix's expectation.
dest=$(basename "$dir" | cut -d '-' -f1)
-
build_dir="_build/$MIX_ENV/lib/$dest"
+
build_dir="_build/$MIX_BUILD_PREFIX/lib/$dest"
((MIX_DEBUG == 1)) && echo "Linking $dir to $build_dir"
# Symlink libs to _build so that mix can find them when compiling.
# This is what allows mix to compile the package without searching
+3
pkgs/development/beam-modules/mix-release.nix
···
meta ? { },
enableDebugInfo ? false,
mixEnv ? "prod",
+
mixTarget ? "host",
compileFlags ? [ ],
# Build a particular named release.
# see https://hexdocs.pm/mix/1.12/Mix.Tasks.Release.html#content
···
buildInputs = buildInputs ++ lib.optionals (escriptBinName != null) [ erlang ];
MIX_ENV = mixEnv;
+
MIX_TARGET = mixTarget;
+
MIX_BUILD_PREFIX = (if mixTarget == "host" then "" else "${mixTarget}_") + "${mixEnv}";
MIX_DEBUG = if enableDebugInfo then 1 else 0;
HEX_OFFLINE = 1;