Skip to content

Commit 30aabdc

Browse files
author
José Valim
committed
Do not silently discard Erlang compile errors, closes #6209
1 parent 19fc7d4 commit 30aabdc

File tree

3 files changed

+30
-8
lines changed

3 files changed

+30
-8
lines changed

lib/mix/lib/mix/compilers/erlang.ex

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,7 @@ defmodule Mix.Compilers.Erlang do
4242
of error. An error is raised at the end if any of the
4343
files failed to compile.
4444
"""
45-
def compile(manifest, mappings, src_ext, dest_ext, force, callback) when is_boolean(force) do
46-
compile(manifest, mappings, src_ext, dest_ext, [force: force], callback)
47-
end
48-
49-
def compile(manifest, mappings, src_ext, dest_ext, opts, callback) do
45+
def compile(manifest, mappings, src_ext, dest_ext, opts, callback) when is_list(opts) do
5046
force = opts[:force]
5147
files =
5248
for {src, dest} <- mappings do
@@ -55,6 +51,12 @@ defmodule Mix.Compilers.Erlang do
5551
compile(manifest, files, src_ext, opts, callback)
5652
end
5753

54+
def compile(manifest, mappings, src_ext, dest_ext, force, callback) when is_boolean(force) do
55+
IO.warn "Mix.Compilers.Erlang.compile/6 with a boolean as 5th argument is deprecated, " <>
56+
"please pass [force: true]"
57+
compile(manifest, mappings, src_ext, dest_ext, [force: force], callback)
58+
end
59+
5860
@doc """
5961
Compiles the given `mappings`.
6062

lib/mix/lib/mix/tasks/compile.erlang.ex

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ defmodule Mix.Tasks.Compile.Erlang do
7171
unless is_list(erlc_options) do
7272
Mix.raise ":erlc_options should be a list of options, got: #{inspect(erlc_options)}"
7373
end
74-
erlc_options = erlc_options ++ [{:outdir, compile_path}, {:i, include_path}, :report]
74+
erlc_options = erlc_options ++ [:report, outdir: compile_path, i: include_path]
7575
erlc_options = Enum.map erlc_options, fn
7676
{kind, dir} when kind in [:i, :outdir] ->
7777
{kind, to_erl_file(dir)}
@@ -95,7 +95,14 @@ defmodule Mix.Tasks.Compile.Erlang do
9595
:code.delete(module)
9696

9797
file = to_erl_file(Path.rootname(input, ".erl"))
98-
:compile.file(file, erlc_options)
98+
case :compile.file(file, erlc_options) do
99+
{:ok, module} ->
100+
{:ok, module}
101+
:error ->
102+
:error
103+
{:error, :badarg} ->
104+
Mix.raise "Compiling Erlang #{inspect file} failed with ArgumentError, probably because of invalid :erlc_options"
105+
end
99106
end)
100107
end
101108

lib/mix/test/mix/tasks/compile.erlang_test.exs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,24 @@ defmodule Mix.Tasks.Compile.ErlangTest do
44
use MixTest.Case
55
import ExUnit.CaptureIO
66

7-
setup do
7+
setup config do
8+
erlc_options = Map.get(config, :erlc_options, [])
9+
Mix.ProjectStack.post_config erlc_options: erlc_options
810
Mix.Project.push MixTest.Case.Sample
911
:ok
1012
end
1113

14+
@tag erlc_options: [{:d, 'foo', 'bar'}]
15+
test "raises on invalid erlc_options" do
16+
in_fixture "compile_erlang", fn ->
17+
assert_raise Mix.Error, ~r"failed with ArgumentError", fn ->
18+
capture_io fn ->
19+
Mix.Tasks.Compile.Erlang.run []
20+
end
21+
end
22+
end
23+
end
24+
1225
test "compilation continues if one file fails to compile" do
1326
in_fixture "compile_erlang", fn ->
1427
File.write! "src/zzz.erl", """

0 commit comments

Comments
 (0)