defmodule Nerves do @elixir_version_req ">= 1.7.0" @otp_version_req ">= 21.0.0" def version, do: unquote(Mix.Project.config()[:version]) def elixir_version, do: unquote(System.version()) def otp_release, do: unquote(System.otp_release()) def system_requirements(elixir_version \\ nil, otp_release \\ nil) do elixir_version = elixir_version || elixir_version() otp_release = otp_release || otp_release() with {:ok, otp_rel_version} <- Version.parse(otp_release <> ".0.0"), true <- Version.match?(elixir_version, @elixir_version_req), true <- Version.match?(otp_rel_version, @otp_version_req) do :ok else _ -> Nerves.Utils.Shell.warn(""" Nerves #{version()} requires at least Elixir #{@elixir_version_req} and Erlang/OTP #{@otp_version_req}. Your system has Elixir #{elixir_version} and Erlang/OTP #{otp_release}. Please resolve this by either: 1. Installing a compatible version of Elixir and Erlang/OTP 2. Pinning your nerves and nerves_bootstrap dependencies to older versions. """) :error end end end