defmodule Ejabberd.Mixfile do use Mix.Project def project do [app: :ejabberd, version: "@PACKAGE_VERSION@", elixir: "~> 1.0", elixirc_paths: ["lib"], compile_path: ".", compilers: [:asn1] ++ Mix.compilers, erlc_options: erlc_options, erlc_paths: ["asn1", "src"], deps: deps] end def application do [mod: {:ejabberd_app, []}, applications: [:kernel, :stdlib]] end defp erlc_options do includes = Path.wildcard(Path.join("..", "/*/include")) [:debug_info, {:d, :NO_EXT_LIB}] ++ Enum.map(includes, fn(path) -> {:i, path} end) end defp deps do [ {:p1_xml, github: "processone/xml"}, {:p1_logger, github: "processone/p1_logger"}, {:p1_yaml, github: "processone/p1_yaml"}, {:p1_tls, github: "processone/tls"}, {:p1_stringprep, github: "processone/stringprep"}, {:p1_zlib, github: "processone/zlib"}, {:p1_cache_tab, github: "processone/cache_tab"}, {:p1_utils, github: "processone/p1_utils"}, {:p1_iconv, github: "processone/eiconv"}, {:esip, github: "processone/p1_sip"}, {:p1_stun, github: "processone/stun"}, {:ehyperloglog, github: "vaxelfel/eHyperLogLog"}, {:p1_mysql, github: "processone/mysql"}, {:p1_pgsql, github: "processone/pgsql"}, {:eredis, github: "wooga/eredis"} ] 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] || [] Erlang.compile(manifest(), mappings, :asn1, :erl, opts[:force], fn input, output -> options = options ++ [:noobj, outdir: Erlang.to_erl_file(Path.dirname(output))] case :asn1ct.compile(Erlang.to_erl_file(input), options) do :ok -> {:ok, :done} error -> error end end) end def manifests, do: [manifest] defp manifest, do: Path.join(Mix.Project.manifest_path, @manifest) def clean, do: Erlang.clean(manifest()) end