Current section

Files

Jump to
nerves_bootstrap lib mix tasks nerves precompile.ex
Raw

lib/mix/tasks/nerves/precompile.ex

defmodule Mix.Tasks.Nerves.Precompile do
use Mix.Task
import Mix.Nerves.IO
def run(_args) do
debug_info("Precompile Start")
# Note: We have to directly use the environment variable here instead of
# calling Nerves.Env.enabled?/0 because the nerves.precompile step happens
# before the nerves dependency is compiled, which is where Nerves.Env
# currently lives. This would be improved by moving Nerves.Env to
# nerves_bootstrap.
unless System.get_env("NERVES_ENV_DISABLED") do
System.put_env("NERVES_PRECOMPILE", "1")
Mix.Tasks.Nerves.Env.run([])
parent = Mix.Project.config()[:app]
system_app = Nerves.Env.system().app
{m, f, a} =
if parent == system_app do
Mix.Tasks.Deps.Compile.run([Nerves.Env.toolchain().app, "--include-children"])
{Mix.Tasks.Compile, :run, [["--no-deps-check"]]}
else
system_app_name = to_string(system_app)
{Mix.Tasks.Deps.Compile, :run, [[system_app_name, "--include-children"]]}
end
apply(m, f, a)
Mix.Task.reenable("deps.compile")
Mix.Task.reenable("compile")
System.put_env("NERVES_PRECOMPILE", "0")
Mix.Tasks.Nerves.Loadpaths.run([])
end
debug_info("Precompile End")
end
end