Skip to content

Commit 4afc03b

Browse files
committed
Ensure compile paths are available during compilation, closes #13458
1 parent e236cbb commit 4afc03b

File tree

2 files changed

+27
-13
lines changed

2 files changed

+27
-13
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: 22 additions & 6 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

@@ -942,7 +958,7 @@ defmodule Mix.Tasks.Compile.ElixirTest do
942958
Code.put_compiler_option(:ignore_module_conflict, false)
943959
end
944960

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

966-
test "compiles dependent changed external resources" do
982+
test "recompiles dependent changed external resources" do
967983
in_fixture("no_mixfile", fn ->
968984
Mix.Project.push(MixTest.Case.Sample)
969985
tmp = tmp_path("c.eex")

0 commit comments

Comments
 (0)