Skip to content

Commit 5428081

Browse files
author
José Valim
committed
Build .beam location from scratch on mix compile.elixir
Signed-off-by: José Valim <[email protected]>
1 parent fd18b6a commit 5428081

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

lib/mix/lib/mix/compilers/elixir.ex

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ defmodule Mix.Compilers.Elixir do
1515
"""
1616
def compile(manifest, srcs, skip, exts, dest, force, on_start) do
1717
all = Mix.Utils.extract_files(srcs -- skip, exts)
18-
{all_entries, skip_entries} = read_manifest(manifest, skip)
18+
{all_entries, skip_entries} = read_manifest(manifest, dest, skip)
1919

2020
removed =
2121
for {_b, _m, source, _d, _f, _bin} <- all_entries, not(source in all), do: source
@@ -181,28 +181,32 @@ defmodule Mix.Compilers.Elixir do
181181

182182
# Reads the manifest returning the results as tuples.
183183
# The beam files are read, removed and stored in memory.
184-
defp read_manifest(manifest, skip_paths) do
184+
defp read_manifest(manifest, dest, skip_paths) do
185185
initial = {[], []}
186186

187187
case File.read(manifest) do
188188
{:ok, contents} ->
189189
skip_paths = Enum.map(skip_paths, &(&1 <> "/"))
190190
Enum.reduce String.split(contents, "\n"), initial, fn x, acc ->
191-
read_manifest_entry(String.split(x, "\t"), acc, skip_paths)
191+
read_manifest_entry(String.split(x, "\t"), acc, dest, skip_paths)
192192
end
193193
{:error, _} ->
194194
initial
195195
end
196196
end
197197

198-
defp read_manifest_entry([beam, module, source|deps], {keep, skip}, skip_paths) do
198+
defp read_manifest_entry([_beam, module, source|deps], {keep, skip}, dest, skip_paths) do
199199
{deps, files} =
200200
case Enum.split_while(deps, &(&1 != "Elixir")) do
201201
{deps, ["Elixir"|files]} -> {deps, files}
202202
{deps, _} -> {deps, []}
203203
end
204204

205-
entry = {beam, module, source, deps, files, nil}
205+
# TODO: Notice we do not use beam from the file.
206+
# Once Elixir v1.1 is out, we can start writing "1"
207+
# instead of the beam file in write_manifest/2.
208+
entry = {Path.join(dest, module <> ".beam"), module, source,
209+
deps, files, nil}
206210

207211
if String.starts_with?(source, skip_paths) do
208212
{keep, [entry|skip]}
@@ -211,7 +215,7 @@ defmodule Mix.Compilers.Elixir do
211215
end
212216
end
213217

214-
defp read_manifest_entry(_, acc, _skip_paths) do
218+
defp read_manifest_entry(_, acc, _dest, _skip_paths) do
215219
acc
216220
end
217221

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
6565
assert Mix.Tasks.Compile.Elixir.run([]) == :ok
6666
refute File.regular?("_build/dev/lib/sample/ebin/Elixir.A.beam")
6767
refute Code.ensure_loaded?(A)
68-
refute String.contains?(File.read!("_build/dev/lib/sample/.compile.elixir"),
69-
"Elixir.A.beam")
68+
refute String.contains?(File.read!("_build/dev/lib/sample/.compile.elixir"), "Elixir.A")
7069
end
7170
end
7271

0 commit comments

Comments
 (0)