Skip to content

Commit e3b6a91

Browse files
committed
Ensure compile paths are available during compilation, closes elixir-lang#13458
1 parent bb8689f commit e3b6a91

File tree

2 files changed

+28
-14
lines changed

2 files changed

+28
-14
lines changed

lib/mix/lib/mix/tasks/compile.all.ex

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,11 @@ defmodule Mix.Tasks.Compile.All do
4343
Code.delete_paths(current_paths -- loaded_paths)
4444
end
4545

46-
Code.prepend_paths(loaded_paths -- current_paths, cache: true)
46+
# Add the current compilation path. compile.elixir and compile.erlang
47+
# will also add this path, but only if they run, so we always add it
48+
# here too. Furthermore, we don't cache it as we may still write to it.
49+
compile_path = to_charlist(Mix.Project.compile_path())
50+
Code.prepend_paths([compile_path | loaded_paths -- current_paths], cache: true)
4751

4852
result =
4953
if "--no-compile" in args do
@@ -62,12 +66,6 @@ defmodule Mix.Tasks.Compile.All do
6266
Mix.AppLoader.write_cache(app_cache, Map.new(loaded_modules))
6367
end
6468

65-
# Add the current compilation path. compile.elixir and compile.erlang
66-
# will also add this path, but only if they run, so we always add it
67-
# here too. Furthermore, we don't cache it as we may still write to it.
68-
compile_path = to_charlist(Mix.Project.compile_path())
69-
_ = Code.prepend_path(compile_path)
70-
7169
unless "--no-app-loading" in args do
7270
app = config[:app]
7371

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

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ defmodule Mix.Tasks.Compile.ElixirTest do
1919

2020
in_fixture("no_mixfile", fn ->
2121
Mix.Project.push(MixTest.Case.Sample)
22+
23+
File.write!("lib/a.ex", """
24+
defmodule A, do: :ok
25+
26+
# Also make sure that we access the ebin directory during compilation
27+
true = to_charlist(Mix.Project.compile_path()) in :code.get_path()
28+
""")
29+
2230
Mix.Tasks.Compile.Elixir.run(["--verbose"])
2331

2432
assert File.regular?("_build/shared/lib/sample/ebin/Elixir.A.beam")
@@ -32,6 +40,14 @@ defmodule Mix.Tasks.Compile.ElixirTest do
3240
test "compiles a project with per environment build" do
3341
in_fixture("no_mixfile", fn ->
3442
Mix.Project.push(MixTest.Case.Sample)
43+
44+
File.write!("lib/a.ex", """
45+
defmodule A, do: :ok
46+
47+
# Also make sure that we access the ebin directory during compilation
48+
true = to_charlist(Mix.Project.compile_path()) in :code.get_path()
49+
""")
50+
3551
Mix.Tasks.Compile.Elixir.run(["--verbose"])
3652

3753
assert File.regular?("_build/dev/lib/sample/ebin/Elixir.A.beam")
@@ -736,7 +752,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
736752
end)
737753
end
738754

739-
test "compiles mtime changed files if content changed but not length" do
755+
test "recompiles mtime changed files if content changed but not length" do
740756
in_fixture("no_mixfile", fn ->
741757
Mix.Project.push(MixTest.Case.Sample)
742758
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []}
@@ -836,7 +852,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
836852
end)
837853
end
838854

839-
test "compiles size changed files" do
855+
test "recompiles size changed files" do
840856
in_fixture("no_mixfile", fn ->
841857
Mix.Project.push(MixTest.Case.Sample)
842858
past = @old_time
@@ -858,7 +874,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
858874
end)
859875
end
860876

861-
test "compiles dependent changed modules" do
877+
test "recompiles dependent changed modules" do
862878
in_fixture("no_mixfile", fn ->
863879
Mix.Project.push(MixTest.Case.Sample)
864880
File.write!("lib/a.ex", "defmodule A, do: B.module_info()")
@@ -878,7 +894,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
878894
end)
879895
end
880896

881-
test "compiles dependent changed modules without beam files" do
897+
test "recompiles dependent changed modules without beam files" do
882898
in_fixture("no_mixfile", fn ->
883899
Mix.Project.push(MixTest.Case.Sample)
884900

@@ -907,7 +923,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
907923
Code.put_compiler_option(:ignore_module_conflict, false)
908924
end
909925

910-
test "compiles dependent changed modules even on removal" do
926+
test "recompiles dependent changed modules even on removal" do
911927
in_fixture("no_mixfile", fn ->
912928
Mix.Project.push(MixTest.Case.Sample)
913929
File.write!("lib/a.ex", "defmodule A, do: B.module_info()")
@@ -928,7 +944,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
928944
end)
929945
end
930946

931-
test "compiles dependent changed on conflict" do
947+
test "recompiles dependent changed on conflict" do
932948
in_fixture("no_mixfile", fn ->
933949
Mix.Project.push(MixTest.Case.Sample)
934950

@@ -955,7 +971,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
955971
end)
956972
end
957973

958-
test "compiles dependent changed external resources" do
974+
test "recompiles dependent changed external resources" do
959975
in_fixture("no_mixfile", fn ->
960976
Mix.Project.push(MixTest.Case.Sample)
961977
tmp = tmp_path("c.eex")

0 commit comments

Comments
 (0)