1 defmodule Ejabberd.Mixfile do
7 description: description(),
9 elixirc_paths: ["lib"],
11 compilers: [:asn1] ++ Mix.compilers,
12 erlc_options: erlc_options(),
13 erlc_paths: ["asn1", "src"],
14 # Elixir tests are starting the part of ejabberd they need
15 aliases: [test: "test --no-start"],
22 Robust, ubiquitous and massively scalable Jabber / XMPP Instant Messaging platform.
27 [mod: {:ejabberd_app, []},
28 applications: [:ssl, :os_mon],
29 included_applications: [:lager, :mnesia, :inets, :p1_utils, :cache_tab,
30 :fast_tls, :stringprep, :fast_xml, :xmpp,
31 :stun, :fast_yaml, :esip, :jiffy, :p1_oauth2,
32 :eimp, :fs, :base64url, :jose]
36 defp if_function_exported(mod, fun, arity, okResult) do
37 :code.ensure_loaded(mod)
38 if :erlang.function_exported(mod, fun, arity) do
46 # Use our own includes + includes from all dependencies
47 includes = ["include"] ++ deps_include(["fast_xml", "xmpp", "p1_utils"])
48 [:debug_info, {:d, :ELIXIR_ENABLED}] ++ cond_options() ++ Enum.map(includes, fn(path) -> {:i, path} end) ++
49 if_function_exported(:crypto, :strong_rand_bytes, 1, [{:d, :STRONG_RAND_BYTES}]) ++
50 if_function_exported(:rand, :uniform, 1, [{:d, :RAND_UNIFORM}]) ++
51 if_function_exported(:gb_sets, :iterator_from, 2, [{:d, :GB_SETS_ITERATOR_FROM}]) ++
52 if_function_exported(:public_key, :short_name_hash, 1, [{:d, :SHORT_NAME_HASH}])
56 for {:true, option} <- [{config(:graphics), {:d, :GRAPHICS}}], do:
61 [{:lager, "~> 3.4.0"},
62 {:p1_utils, "~> 1.0"},
63 {:fast_xml, "~> 1.1"},
65 {:cache_tab, "~> 1.0"},
66 {:stringprep, "~> 1.0"},
67 {:fast_yaml, "~> 1.0"},
68 {:fast_tls, "~> 1.0"},
71 {:p1_mysql, "~> 1.0"},
72 {:p1_pgsql, "~> 1.1"},
73 {:jiffy, "~> 0.14.7"},
74 {:p1_oauth2, "~> 0.6.1"},
75 {:distillery, "~> 1.0"},
76 {:ex_doc, ">= 0.0.0", only: :dev},
77 {:eimp, github: "processone/eimp", ref: "c7201d18"},
78 {:base64url, "~> 0.0.1"},
84 defp deps_include(deps) do
85 base = case Mix.Project.deps_paths()[:ejabberd] do
89 Enum.map(deps, fn dep -> base<>"/#{dep}/include" end)
93 for {:true, dep} <- [{config(:sqlite), {:sqlite3, "~> 1.1"}},
94 {config(:riak), {:riakc, "~> 2.4"}},
95 {config(:redis), {:eredis, "~> 1.0"}},
96 {config(:zlib), {:ezlib, "~> 1.0"}},
97 {config(:iconv), {:iconv, "~> 1.0"}},
98 {config(:pam), {:epam, "~> 1.0"}},
99 {config(:tools), {:luerl, "~> 0.3.1"}},
100 {config(:tools), {:meck, "~> 0.8.4"}},
101 {config(:tools), {:moka, github: "processone/moka", tag: "1.0.5c"}}], do:
106 for {:true, app} <- [{config(:redis), :eredis},
107 {config(:mysql), :p1_mysql},
108 {config(:pgsql), :p1_pgsql},
109 {config(:sqlite), :sqlite3},
110 {config(:zlib), :ezlib},
111 {config(:iconv), :iconv}], do:
116 [# These are the default files included in the package
117 files: ["lib", "src", "priv", "mix.exs", "include", "README.md", "COPYING"],
118 maintainers: ["ProcessOne"],
120 links: %{"Site" => "https://www.ejabberd.im",
121 "Documentation" => "http://docs.ejabberd.im",
122 "Source" => "https://github.com/processone/ejabberd",
123 "ProcessOne" => "http://www.process-one.net/"}]
127 case :file.consult("vars.config") do
128 {:ok,config} -> config
129 _ -> [zlib: true, iconv: true]
142 defmodule Mix.Tasks.Compile.Asn1 do
144 alias Mix.Compilers.Erlang
147 @manifest ".compile.asn1"
150 {opts, _, _} = OptionParser.parse(args, switches: [force: :boolean])
152 project = Mix.Project.config
153 source_paths = project[:asn1_paths] || ["asn1"]
154 dest_paths = project[:asn1_target] || ["src"]
155 mappings = Enum.zip(source_paths, dest_paths)
156 options = project[:asn1_options] || []
158 force = case opts[:force] do
159 :true -> [force: true]
163 Erlang.compile(manifest(), mappings, :asn1, :erl, force, fn
165 options = options ++ [:noobj, outdir: Erlang.to_erl_file(Path.dirname(output))]
166 case :asn1ct.compile(Erlang.to_erl_file(input), options) do
173 def manifests, do: [manifest()]
174 defp manifest, do: Path.join(Mix.Project.manifest_path, @manifest)
176 def clean, do: Erlang.clean(manifest())