xmpp.chapril.org-ejabberd/mix.exs

206 lines
6.0 KiB
Elixir
Raw Normal View History

defmodule Ejabberd.Mixfile do
use Mix.Project
def project do
[app: :ejabberd,
2020-04-29 16:29:59 +02:00
version: "20.4.0",
2017-06-04 03:00:57 +02:00
description: description(),
elixir: "~> 1.4",
elixirc_paths: ["lib"],
compile_path: ".",
compilers: [:asn1] ++ Mix.compilers,
2017-06-04 03:00:57 +02:00
erlc_options: erlc_options(),
erlc_paths: ["asn1", "src"],
# Elixir tests are starting the part of ejabberd they need
aliases: [test: "test --no-start"],
2017-06-04 03:00:57 +02:00
package: package(),
deps: deps()]
end
def description do
2016-01-24 10:19:28 +01:00
"""
2019-09-30 10:10:44 +02:00
Robust, Ubiquitous and Massively Scalable Messaging Platform (XMPP, MQTT, SIP Server)
2016-01-24 10:19:28 +01:00
"""
end
def application do
[mod: {:ejabberd_app, []},
applications: [:kernel, :stdlib, :sasl, :ssl],
included_applications: [:lager, :mnesia, :inets, :p1_utils, :cache_tab,
2019-02-27 14:35:07 +01:00
:fast_tls, :stringprep, :fast_xml, :xmpp, :mqtree,
:stun, :fast_yaml, :esip, :jiffy, :p1_oauth2,
2019-09-25 14:54:21 +02:00
:eimp, :base64url, :jose, :pkix, :os_mon, :yconf,
:p1_acme, :idna]
++ cond_apps()]
end
2015-09-29 20:19:35 +02:00
defp if_function_exported(mod, fun, arity, okResult) do
:code.ensure_loaded(mod)
if :erlang.function_exported(mod, fun, arity) do
okResult
else
[]
end
end
defp if_version_above(ver, okResult) do
if :erlang.system_info(:otp_release) > ver do
okResult
else
[]
end
end
defp if_version_below(ver, okResult) do
if :erlang.system_info(:otp_release) < ver do
okResult
else
[]
end
end
defp erlc_options do
# Use our own includes + includes from all dependencies
2017-03-28 16:08:10 +02:00
includes = ["include"] ++ deps_include(["fast_xml", "xmpp", "p1_utils"])
result = [:debug_info, {:d, :ELIXIR_ENABLED}] ++
cond_options() ++
Enum.map(includes, fn (path) -> {:i, path} end) ++
if_version_above('20', [{:d, :DEPRECATED_GET_STACKTRACE}]) ++
if_version_below('22', [{:d, :LAGER}]) ++
if_function_exported(:erl_error, :format_exception, 6, [{:d, :HAVE_ERL_ERROR}])
defines = for {:d, value} <- result, do: {:d, value}
result ++ [{:d, :ALL_DEFS, defines}]
end
defp cond_options do
2019-03-11 16:58:26 +01:00
for {:true, option} <- [{config(:sip), {:d, :SIP}},
{config(:stun), {:d, :STUN}},
{config(:roster_gateway_workaround), {:d, :ROSTER_GATWAY_WORKAROUND}},
{config(:new_sql_schema), {:d, :NEW_SQL_SCHEMA}}
], do:
option
end
2015-09-29 20:19:35 +02:00
defp deps do
2018-11-23 12:59:51 +01:00
[{:lager, "~> 3.6.0"},
2017-03-22 11:59:39 +01:00
{:p1_utils, "~> 1.0"},
2018-01-10 18:14:52 +01:00
{:fast_xml, "~> 1.1"},
2020-04-28 17:23:36 +02:00
{:xmpp, ">= 1.4.6"},
2017-12-28 14:43:13 +01:00
{:cache_tab, "~> 1.0"},
{:stringprep, "~> 1.0"},
2019-08-06 15:47:58 +02:00
{:fast_yaml, "~> 1.0"},
2019-02-26 12:05:10 +01:00
{:fast_tls, "~> 1.1"},
{:stun, "~> 1.0.34"},
2020-04-28 17:23:36 +02:00
{:esip, "~> 1.0.32"},
{:p1_mysql, "~> 1.0"},
2019-02-26 12:05:10 +01:00
{:mqtree, "~> 1.0"},
{:p1_pgsql, "~> 1.1"},
{:jiffy, "~> 1.0.4"},
2016-02-03 10:55:40 +01:00
{:p1_oauth2, "~> 0.6.1"},
2019-01-02 10:30:29 +01:00
{:distillery, "~> 2.0"},
2018-12-06 10:18:43 +01:00
{:pkix, "~> 1.0"},
2017-11-09 09:59:40 +01:00
{:ex_doc, ">= 0.0.0", only: :dev},
2018-03-23 13:27:58 +01:00
{:eimp, "~> 1.0"},
2018-01-12 12:28:31 +01:00
{:base64url, "~> 0.0.1"},
{:yconf, git: "https://github.com/processone/yconf", ref: "60e431a1f1e4504ccc9e329a9202b88c26b341ae"},
2019-09-25 14:54:21 +02:00
{:jose, "~> 1.8"},
{:idna, "~> 6.0"},
{:p1_acme, "~> 1.0"}]
2017-06-04 03:00:57 +02:00
++ cond_deps()
2015-09-29 20:19:35 +02:00
end
defp deps_include(deps) do
base = if Mix.Project.umbrella?() do
"../../deps"
else
case Mix.Project.deps_paths()[:ejabberd] do
nil -> "deps"
_ -> ".."
end
end
Enum.map(deps, fn dep -> base<>"/#{dep}/include" end)
end
defp cond_deps do
for {:true, dep} <- [{config(:sqlite), {:sqlite3, "~> 1.1"}},
{config(:redis), {:eredis, "~> 1.0"}},
2018-01-22 17:42:02 +01:00
{config(:zlib), {:ezlib, "~> 1.0"}},
{config(:pam), {:epam, "~> 1.0"}},
2019-01-02 13:02:08 +01:00
{config(:tools), {:luerl, "~> 0.3.1"}}], do:
dep
end
defp cond_apps do
for {:true, app} <- [{config(:redis), :eredis},
{config(:mysql), :p1_mysql},
2019-12-25 00:38:48 +01:00
{config(:odbc), :odbc},
{config(:pgsql), :p1_pgsql},
{config(:sqlite), :sqlite3},
2019-01-02 13:02:08 +01:00
{config(:zlib), :ezlib}], do:
app
end
2017-06-13 11:02:30 +02:00
defp package do
2016-01-24 10:07:12 +01:00
[# These are the default files included in the package
files: ["lib", "src", "priv", "mix.exs", "include", "README.md", "COPYING"],
maintainers: ["ProcessOne"],
licenses: ["GPLv2"],
links: %{"Site" => "https://www.ejabberd.im",
"Documentation" => "http://docs.ejabberd.im",
2016-02-08 11:50:04 +01:00
"Source" => "https://github.com/processone/ejabberd",
"ProcessOne" => "http://www.process-one.net/"}]
end
2017-06-13 11:02:30 +02:00
defp vars do
case :file.consult("vars.config") do
{:ok,config} -> config
2019-01-02 13:02:08 +01:00
_ -> [zlib: true]
end
end
defp config(key) do
2017-06-04 03:00:57 +02:00
case vars()[key] do
nil -> false
value -> value
end
end
end
defmodule Mix.Tasks.Compile.Asn1 do
use Mix.Task
alias Mix.Compilers.Erlang
@recursive true
@manifest ".compile.asn1"
def run(args) do
{opts, _, _} = OptionParser.parse(args, switches: [force: :boolean])
project = Mix.Project.config
source_paths = project[:asn1_paths] || ["asn1"]
dest_paths = project[:asn1_target] || ["src"]
mappings = Enum.zip(source_paths, dest_paths)
options = project[:asn1_options] || []
force = case opts[:force] do
:true -> [force: true]
_ -> [force: false]
end
Erlang.compile(manifest(), mappings, :asn1, :erl, force, fn
input, output ->
options = options ++ [:noobj, outdir: Erlang.to_erl_file(Path.dirname(output))]
2015-04-06 12:39:21 +02:00
case :asn1ct.compile(Erlang.to_erl_file(input), options) do
:ok -> {:ok, :done}
error -> error
2015-04-06 12:39:21 +02:00
end
end)
end
2017-06-04 03:00:57 +02:00
def manifests, do: [manifest()]
defp manifest, do: Path.join(Mix.Project.manifest_path, @manifest)
def clean, do: Erlang.clean(manifest())
end