aboutsummaryrefslogblamecommitdiff
path: root/mix.exs.in
blob: d7b236e01772ede05d8565917c128ac1ae7bd753 (plain) (tree)
1
2
3
4
5
6
7
8
9




                             
                                  


                            
                                         
                                
                                 























                                                                                      

                                              


                                                         
                                         


      







                                   











                                                                                       

                                                                   
                        
           







                                                                    
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