Skip to content

Commit 5e8b187

Browse files
committed
Ensure compile paths are available during compilation, closes #13458
1 parent aea1a47 commit 5e8b187

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
@@ -64,12 +68,6 @@ defmodule Mix.Tasks.Compile.All do
6468
Mix.AppLoader.write_cache(app_cache, Map.new(loaded_modules))
6569
end
6670

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

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")
@@ -772,7 +788,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
772788
end)
773789
end
774790

775-
test "compiles mtime changed files if content changed but not length" do
791+
test "recompiles mtime changed files if content changed but not length" do
776792
in_fixture("no_mixfile", fn ->
777793
Mix.Project.push(MixTest.Case.Sample)
778794
assert Mix.Tasks.Compile.Elixir.run(["--verbose"]) == {:ok, []}
@@ -872,7 +888,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
872888
end)
873889
end
874890

875-
test "compiles size changed files" do
891+
test "recompiles size changed files" do
876892
in_fixture("no_mixfile", fn ->
877893
Mix.Project.push(MixTest.Case.Sample)
878894
past = @old_time
@@ -894,7 +910,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
894910
end)
895911
end
896912

897-
test "compiles dependent changed modules" do
913+
test "recompiles dependent changed modules" do
898914
in_fixture("no_mixfile", fn ->
899915
Mix.Project.push(MixTest.Case.Sample)
900916
File.write!("lib/a.ex", "defmodule A, do: B.module_info()")
@@ -914,7 +930,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
914930
end)
915931
end
916932

917-
test "compiles dependent changed modules without beam files" do
933+
test "recompiles dependent changed modules without beam files" do
918934
in_fixture("no_mixfile", fn ->
919935
Mix.Project.push(MixTest.Case.Sample)
920936

@@ -943,7 +959,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
943959
Code.put_compiler_option(:ignore_module_conflict, false)
944960
end
945961

946-
test "compiles dependent changed modules even on removal" do
962+
test "recompiles dependent changed modules even on removal" do
947963
in_fixture("no_mixfile", fn ->
948964
Mix.Project.push(MixTest.Case.Sample)
949965
File.write!("lib/a.ex", "defmodule A, do: B.module_info()")
@@ -964,7 +980,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
964980
end)
965981
end
966982

967-
test "compiles dependent changed on conflict" do
983+
test "recompiles dependent changed on conflict" do
968984
in_fixture("no_mixfile", fn ->
969985
Mix.Project.push(MixTest.Case.Sample)
970986

@@ -991,7 +1007,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
9911007
end)
9921008
end
9931009

994-
test "compiles dependent changed external resources" do
1010+
test "recompiles dependent changed external resources" do
9951011
in_fixture("no_mixfile", fn ->
9961012
Mix.Project.push(MixTest.Case.Sample)
9971013
tmp = tmp_path("c.eex")

0 commit comments

Comments
 (0)