mirror of
https://github.com/processone/ejabberd.git
synced 2024-12-20 17:27:00 +01:00
Fix asn1 module compilation with mix
This should solve building ejabberd as an Elixir dependency.
This commit is contained in:
parent
69bff82301
commit
cf83a75ceb
@ -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
|
40
mix.exs
40
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
|
||||
|
Loading…
Reference in New Issue
Block a user