diff options
author | Mickael Remond <mremond@process-one.net> | 2015-04-04 17:42:12 +0200 |
---|---|---|
committer | Mickael Remond <mremond@process-one.net> | 2015-04-04 17:42:12 +0200 |
commit | ea8db9967fbfe53f581c3ae721657d9e6f919864 (patch) | |
tree | 1998f2625b14fc4b5855d7c806b34700c13f52e6 /lib | |
parent | Replace crypto calls that will be removed in a future release (diff) |
ejabberd can be embedded in an Elixir application
Diffstat (limited to 'lib')
-rw-r--r-- | lib/mix/tasks/compile.asn1.ex | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/lib/mix/tasks/compile.asn1.ex b/lib/mix/tasks/compile.asn1.ex new file mode 100644 index 00000000..e1af6046 --- /dev/null +++ b/lib/mix/tasks/compile.asn1.ex @@ -0,0 +1,53 @@ +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 |