2015-04-04 17:42:12 +02:00
|
|
|
defmodule Ejabberd.Mixfile do
|
|
|
|
use Mix.Project
|
|
|
|
|
|
|
|
def project do
|
|
|
|
[app: :ejabberd,
|
2020-07-30 18:32:31 +02:00
|
|
|
version: "20.7.0",
|
2017-06-04 03:00:57 +02:00
|
|
|
description: description(),
|
2018-11-27 11:01:52 +01:00
|
|
|
elixir: "~> 1.4",
|
2015-04-04 17:42:12 +02:00
|
|
|
elixirc_paths: ["lib"],
|
|
|
|
compile_path: ".",
|
2015-04-06 12:29:11 +02:00
|
|
|
compilers: [:asn1] ++ Mix.compilers,
|
2017-06-04 03:00:57 +02:00
|
|
|
erlc_options: erlc_options(),
|
2015-04-06 12:29:11 +02:00
|
|
|
erlc_paths: ["asn1", "src"],
|
2016-07-26 12:17:37 +02:00
|
|
|
# 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()]
|
2015-04-04 17:42:12 +02:00
|
|
|
end
|
|
|
|
|
2016-10-19 13:57:19 +02:00
|
|
|
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
|
|
|
|
|
2015-04-04 17:42:12 +02:00
|
|
|
def application do
|
|
|
|
[mod: {:ejabberd_app, []},
|
2019-01-16 15:01:32 +01:00
|
|
|
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,
|
2019-01-16 15:01:32 +01:00
|
|
|
: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]
|
2019-01-15 16:22:58 +01:00
|
|
|
++ cond_apps()]
|
2015-04-04 17:42:12 +02:00
|
|
|
end
|
2015-09-29 20:19:35 +02:00
|
|
|
|
2017-11-06 11:29:42 +01: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
|
|
|
|
|
2018-12-13 11:45:45 +01:00
|
|
|
defp if_version_above(ver, okResult) do
|
|
|
|
if :erlang.system_info(:otp_release) > ver do
|
|
|
|
okResult
|
|
|
|
else
|
|
|
|
[]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2020-03-03 11:18:07 +01:00
|
|
|
defp if_version_below(ver, okResult) do
|
|
|
|
if :erlang.system_info(:otp_release) < ver do
|
|
|
|
okResult
|
|
|
|
else
|
|
|
|
[]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2015-04-04 17:42:12 +02:00
|
|
|
defp erlc_options do
|
2015-09-07 17:35:58 +02:00
|
|
|
# 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"])
|
2020-03-03 11:18:07 +01:00
|
|
|
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}]
|
2017-10-24 12:02:52 +02:00
|
|
|
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:
|
2017-10-24 12:02:52 +02:00
|
|
|
option
|
2015-04-04 17:42:12 +02:00
|
|
|
end
|
2015-09-29 20:19:35 +02:00
|
|
|
|
2015-04-04 17:42:12 +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"},
|
2016-12-01 15:10:00 +01:00
|
|
|
{: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"},
|
2020-07-11 17:53:33 +02:00
|
|
|
{:stun, "~> 1.0.34"},
|
2020-04-28 17:23:36 +02:00
|
|
|
{:esip, "~> 1.0.32"},
|
2017-12-29 17:22:59 +01:00
|
|
|
{:p1_mysql, "~> 1.0"},
|
2019-02-26 12:05:10 +01:00
|
|
|
{:mqtree, "~> 1.0"},
|
2017-12-29 17:22:59 +01:00
|
|
|
{:p1_pgsql, "~> 1.1"},
|
2020-04-23 13:29:33 +02:00
|
|
|
{: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"},
|
2020-07-30 17:57:52 +02:00
|
|
|
{:yconf, "~> 1.0"},
|
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
|
2015-09-29 20:18:49 +02:00
|
|
|
|
2016-12-06 17:54:21 +01:00
|
|
|
defp deps_include(deps) do
|
2019-04-25 13:31:08 +02:00
|
|
|
base = if Mix.Project.umbrella?() do
|
|
|
|
"../../deps"
|
|
|
|
else
|
|
|
|
case Mix.Project.deps_paths()[:ejabberd] do
|
|
|
|
nil -> "deps"
|
|
|
|
_ -> ".."
|
|
|
|
end
|
2017-02-17 16:26:39 +01:00
|
|
|
end
|
|
|
|
Enum.map(deps, fn dep -> base<>"/#{dep}/include" end)
|
2016-12-06 17:54:21 +01:00
|
|
|
end
|
|
|
|
|
2016-10-19 13:57:19 +02:00
|
|
|
defp cond_deps do
|
2017-12-29 17:22:59 +01:00
|
|
|
for {:true, dep} <- [{config(:sqlite), {:sqlite3, "~> 1.1"}},
|
2016-10-19 13:57:19 +02:00
|
|
|
{config(:redis), {:eredis, "~> 1.0"}},
|
2018-01-22 17:42:02 +01:00
|
|
|
{config(:zlib), {:ezlib, "~> 1.0"}},
|
2017-01-29 14:35:22 +01:00
|
|
|
{config(:pam), {:epam, "~> 1.0"}},
|
2019-01-02 13:02:08 +01:00
|
|
|
{config(:tools), {:luerl, "~> 0.3.1"}}], do:
|
2016-10-19 13:57:19 +02:00
|
|
|
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},
|
2016-10-19 13:57:19 +02:00
|
|
|
{config(:pgsql), :p1_pgsql},
|
|
|
|
{config(:sqlite), :sqlite3},
|
2019-01-02 13:02:08 +01:00
|
|
|
{config(:zlib), :ezlib}], do:
|
2016-10-19 13:57:19 +02:00
|
|
|
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/"}]
|
2015-04-04 17:42:12 +02:00
|
|
|
end
|
2016-10-19 13:57:19 +02:00
|
|
|
|
2017-06-13 11:02:30 +02:00
|
|
|
defp vars do
|
2016-10-19 13:57:19 +02:00
|
|
|
case :file.consult("vars.config") do
|
|
|
|
{:ok,config} -> config
|
2019-01-02 13:02:08 +01:00
|
|
|
_ -> [zlib: true]
|
2016-10-19 13:57:19 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
defp config(key) do
|
2017-06-04 03:00:57 +02:00
|
|
|
case vars()[key] do
|
2016-10-19 13:57:19 +02:00
|
|
|
nil -> false
|
|
|
|
value -> value
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2015-04-04 17:42:12 +02:00
|
|
|
end
|
2015-04-06 12:29:11 +02:00
|
|
|
|
|
|
|
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] || []
|
|
|
|
|
2017-10-04 12:03:36 +02:00
|
|
|
force = case opts[:force] do
|
|
|
|
:true -> [force: true]
|
|
|
|
_ -> [force: false]
|
|
|
|
end
|
|
|
|
|
|
|
|
Erlang.compile(manifest(), mappings, :asn1, :erl, force, fn
|
2015-04-06 12:29:11 +02:00
|
|
|
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}
|
2015-05-29 09:30:16 +02:00
|
|
|
error -> error
|
2015-04-06 12:39:21 +02:00
|
|
|
end
|
2015-04-06 12:29:11 +02:00
|
|
|
end)
|
|
|
|
end
|
|
|
|
|
2017-06-04 03:00:57 +02:00
|
|
|
def manifests, do: [manifest()]
|
2015-04-06 12:29:11 +02:00
|
|
|
defp manifest, do: Path.join(Mix.Project.manifest_path, @manifest)
|
|
|
|
|
|
|
|
def clean, do: Erlang.clean(manifest())
|
|
|
|
end
|