]> granicus.if.org Git - ejabberd/commitdiff
Fix asn1 module compilation with mix
authorMickael Remond <mremond@process-one.net>
Mon, 6 Apr 2015 10:29:11 +0000 (12:29 +0200)
committerMickael Remond <mremond@process-one.net>
Mon, 6 Apr 2015 10:29:11 +0000 (12:29 +0200)
This should solve building ejabberd as an Elixir dependency.

lib/mix/tasks/compile.asn1.ex [deleted file]
mix.exs

diff --git a/lib/mix/tasks/compile.asn1.ex b/lib/mix/tasks/compile.asn1.ex
deleted file mode 100644 (file)
index e1af604..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-defmodule Mix.Tasks.Compile.Asn1 do
-  use Mix.Task
-  alias Mix.Compilers.Erlang
-  
-  @recursive true
-  @manifest ".compile.asn1"
-
-  @moduledoc """
-  Compile ASN.1 source files.
-  When this task runs, it will check the modification time of every file, and
-  if it has changed, the file will be compiled. Files will be
-  compiled in the source directory with a .erl extension and generate a .hrl file.
-  You can force compilation regardless of modification times by passing
-  the `--force` option.
-  ## Command line options
-    * `--force` - forces compilation regardless of modification times
-  ## Configuration
-    * `:asn1_paths` - directories to find asn1 files. Defaults to `["asn1"]`.
-  """
-
-  @doc """
-  Runs this task.
-  """
-  @spec run(OptionParser.argv) :: :ok | :noop
-  def run(args) do
-    {opts, _, _} = OptionParser.parse(args, switches: [force: :boolean])
-
-    project      = Mix.Project.config
-    source_paths = project[:asn1_paths] || ["asn1"]
-    dest_paths    = project[:erlc_paths]
-    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))]
-        :asn1ct.compile(Erlang.to_erl_file(input), options)
-    end)
-  end
-
-  @doc """
-  Returns ASN.1 manifests.
-  """
-  def manifests, do: [manifest]
-  defp manifest, do: Path.join(Mix.Project.manifest_path, @manifest)
-
-  @doc """
-  Cleans up compilation artifacts.
-  """
-  def clean do
-    Erlang.clean(manifest())
-  end
-end
diff --git a/mix.exs b/mix.exs
index 8e735264b612c59f96ed2653a56c3df855ba1c10..5dfe44967f070a2501156cebedcf94fbd1fc13e6 100644 (file)
--- a/mix.exs
+++ b/mix.exs
@@ -7,8 +7,9 @@ defmodule Ejabberd.Mixfile do
      elixir: "~> 1.0",
      elixirc_paths: ["lib"],
      compile_path: ".",
-     compilers: Mix.compilers,
+     compilers: [:asn1] ++ Mix.compilers,
      erlc_options: erlc_options,
+     erlc_paths: ["asn1", "src"],
      deps: deps]
   end
 
@@ -33,12 +34,43 @@ defmodule Ejabberd.Mixfile do
         {: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"},
+        {: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"}
+        {:eredis, github: "wooga/eredis"}
      ]
   end
 end
+
+defmodule Mix.Tasks.Compile.Asn1 do
+  use Mix.Task
+  alias Mix.Compilers.Erlang
+
+  @recursive true
+  @manifest ".compile.asn1"
+
+  @spec run(OptionParser.argv) :: :ok | :noop
+  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))]
+        result = :asn1ct.compile(Erlang.to_erl_file(input), options)
+        :ok
+    end)
+  end
+
+  def manifests, do: [manifest]
+  defp manifest, do: Path.join(Mix.Project.manifest_path, @manifest)
+
+  def clean, do: Erlang.clean(manifest())
+end