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.Project.config()[:aliases]
|> check_aliases()
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.Task.rerun("nerves.loadpaths")
end
debug_info("Precompile End")
end
def check_aliases(aliases) do
deps_get = Keyword.get(aliases, String.to_atom("deps.get"), [])
unless Enum.member?(deps_get, "nerves.deps.get") do
Mix.raise("""
Nerves is missing an alias for \"deps.get\"
Please update nerves to the latest version:
mix deps.update nerves
Also update your mix.exs target aliases to:
defp aliases(_target) do
[
# Add custom mix aliases here
]
|> Nerves.Bootstrap.add_aliases()
end
""")
end
end
end