Skip to content

eval in __init__ causes incorrect precompilation warning #29059

@fredrikekre

Description

@fredrikekre

Noticed in a couple of packages since precompile is on by default. Setup:

using Pkg
A = joinpath(pwd(), "PackageA");
B = joinpath(pwd(), "PackageB");
Pkg.generate.(["PackageA", "PackageB"]);
Pkg.activate(A);
Pkg.develop(PackageSpec(path = B));
Pkg.activate();
Pkg.develop([PackageSpec(path = A), PackageSpec(path = B)]);
write(joinpath(A, "src", "PackageA.jl"), "module PackageA\nusing PackageB\nend");
write(joinpath(B, "src", "PackageB.jl"), "module PackageB\n__init__() = eval(:(b() = 1))\nend");

and then

julia> using PackageA
[ Info: Precompiling PackageA [578a9956-b149-11e8-3635-0b7267ab0bb3]
WARNING: eval from module PackageB to PackageA:    
Expr(:call, :b) = Expr(:block, #= Symbol("/home/fredrik/PackageB/src/PackageB.jl"):2 =#, 1)
  ** incremental compilation may be broken for this module **

See e.g. JuliaDocs/Documenter.jl#806

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions