Packages
nerves_bootstrap
1.11.3
1.16.0
1.15.3
1.15.2
1.15.1
1.15.0
1.14.5
1.14.4
1.14.3
1.14.2
1.14.0
1.13.1
1.13.0
1.12.2
1.12.1
1.12.0
1.11.5
1.11.4
1.11.3
1.11.2
1.11.1
1.11.0
1.10.6
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.0
1.8.1
1.8.0
1.7.1
1.7.0
1.6.3
1.6.2
1.6.1
1.6.0
1.5.3
1.5.2
1.5.1
1.5.0
1.4.3
1.4.2
1.4.1
1.4.0
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.0
1.0.1
1.0.0
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.4
0.6.3
Nerves mix integration bootstrap and new project generator
Current section
Files
Jump to
Current section
Files
lib/attic/precompile.ex
defmodule Mix.Tasks.Nerves.Precompile do
@moduledoc deprecated: "Tasks from :nerves should be used instead"
use Mix.Task
import Mix.Nerves.IO
@switches [loadpaths: :boolean]
@impl Mix.Task
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")
{opts, _, _} = OptionParser.parse(args, switches: @switches)
Mix.Tasks.Nerves.Env.run([])
{app, deps} =
Nerves.Env.packages()
|> Enum.split_with(&(&1.app == Mix.Project.config()[:app]))
(deps ++ app)
|> compile_check()
|> Enum.each(&compile/1)
Mix.Task.reenable("deps.compile")
Mix.Task.reenable("compile")
System.put_env("NERVES_PRECOMPILE", "0")
if opts[:loadpaths] != false, do: Mix.Task.rerun("nerves.loadpaths")
end
debug_info("Precompile End")
end
defp compile(%{app: app}) do
if Mix.Project.config()[:app] == app do
Mix.Tasks.Compile.run([app, "--include-children"])
else
Mix.Tasks.Deps.Compile.run([app, "--no-deps-check", "--include-children"])
end
end
defp error_on_stale_nerves_package?(package) do
# Detect packages that need to be rebuilt by the Nerves package compiler
# and that the user hasn't explicitly marked as `compile: true`. These
# universally take long to build so force the user to acknowledge it.
Mix.Project.config()[:app] != package.app and
:nerves_package in Map.get(package, :compilers, Mix.compilers()) and
Nerves.Artifact.expand_sites(package) != [] and
Nerves.Artifact.stale?(package) and
package.dep_opts[:compile] != true
end
defp compile_check(packages) do
case Enum.filter(packages, &error_on_stale_nerves_package?/1) do
[] ->
packages
stale_packages ->
stale_package_text = for package <- stale_packages, into: "", do: "\n #{package.app}"
example = List.first(stale_packages)
Mix.raise("""
The following Nerves packages need to be built:
#{stale_package_text}
The build process for each of these can take a significant amount of
time so the maintainers have listed URLs for downloading pre-built packages.
If you have not modified these packages, please try running `mix deps.get`
or `mix deps.update` to download the precompiled versions.
If you have limited network access and are able to obtain the files via
other means, copy them to `~/.nerves/dl` or the location specified by
`$NERVES_DL_DIR`.
If you are making modifications to one of the packages or want to force
local compilation, add `nerves: [compile: true]` to the dependency. For
example:
{:#{example.app}, "~> #{example.version}", nerves: [compile: true]}
If the package is a dependency of a dependency, you will need to
override it on the parent project with `override: true`.
""")
end
end
end