@@ -60,189 +60,189 @@ function remove_llvmextras(project_file)
6060end
6161
6262@testset " PackageCompiler.jl" begin
63- # @testset "create_sysimage" begin
64- # new_project = mktempdir()
65- # old_project = Base.ACTIVE_PROJECT[]
66- # Base.ACTIVE_PROJECT[] = new_project
67- # try
68- # Pkg.add("Example")
69- # finally
70- # Base.ACTIVE_PROJECT[] = old_project
71- # end
72- # tmp = mktempdir()
73- # sysimage_path = joinpath(tmp, "sys." * Libdl.dlext)
74- # script = tempname()
75- # write(script, """
76- # script_func() = println(\"I am a script\")
77- # opt_during_sysimage = Base.JLOptions().opt_level
78- # print_opt() = println("opt: -O\$opt_during_sysimage")
79- # """)
80- # create_sysimage(; sysimage_path=sysimage_path,
81- # project=new_project,
82- # precompile_execution_file=joinpath(@__DIR__, "precompile_execution.jl"),
83- # precompile_statements_file=joinpath.(@__DIR__, ["precompile_statements.jl",
84- # "precompile_statements2.jl"]),
85- # script=script,
86- # sysimage_build_args = `-O1`
87- # )
88-
89- # # Check we can load sysimage and that Example is available in Main
90- # str = read(`$(Base.julia_cmd()) -J $(sysimage_path) -e 'println(Example.hello("foo")); script_func(); print_opt()'`, String)
91- # @test occursin("Hello, foo", str)
92- # @test occursin("I am a script", str)
93- # @test occursin("opt: -O1", str)
94- # end # testset
95-
96- # @testset "create_app" begin
97- # # Test creating an app
98- # app_source_dir = joinpath(@__DIR__, "..", "examples/MyApp/")
99- # app_compiled_dir = joinpath(tmp, "MyAppCompiled")
100- # if is_slow_ci
101- # incrementals_list = (true, false)
102- # else
103- # incrementals_list = (true, false)
104- # end
105- # @testset for incremental in incrementals_list
106- # if incremental == false
107- # if is_slow_ci
108- # @warn "Skipping the (incremental=false, filter_stdlibs=false) test because this is \"slow CI\""
109- # @test_skip false
110- # filter_stdlibs = (true,)
111- # else
112- # filter_stdlibs = (true, false)
113- # end
114- # else
115- # filter_stdlibs = (false,)
116- # end
117- # @testset for filter in filter_stdlibs
118- # @info "starting: create_app testset" incremental filter
119- # tmp_app_source_dir = joinpath(tmp, "MyApp")
120- # cp(app_source_dir, tmp_app_source_dir)
121- # if is_gha_ci && (is_julia_1_6 || is_julia_1_9)
122- # # Julia 1.6: Issue #706 "Cannot locate artifact 'LLVMExtra'" on 1.6 so remove.
123- # # Julia 1.9: There's no GitHub Issue, but it seems we hit a similar problem.
124- # @test_skip false
125- # remove_llvmextras(joinpath(tmp_app_source_dir, "Project.toml"))
126- # end
127- # try
128- # create_app(tmp_app_source_dir, app_compiled_dir; incremental=incremental, force=true, filter_stdlibs=filter, include_lazy_artifacts=true,
129- # precompile_execution_file=joinpath(app_source_dir, "precompile_app.jl"),
130- # executables=["MyApp" => "julia_main",
131- # "SecondApp" => "second_main",
132- # "ReturnType" => "wrong_return_type",
133- # "Error" => "erroring",
134- # "Undefined" => "undefined",
135- # ])
136- # finally
137- # rm(tmp_app_source_dir; recursive=true)
138- # # Get rid of some local state
139- # rm(joinpath(new_depot, "packages"); recursive=true, force=true)
140- # rm(joinpath(new_depot, "compiled"); recursive=true, force=true)
141- # rm(joinpath(new_depot, "artifacts"); recursive=true, force=true)
142- # end # try
143- # app_path(app_name) = abspath(app_compiled_dir, "bin", app_name * (Sys.iswindows() ? ".exe" : ""))
144- # app_output = read(`$(app_path("MyApp")) I get --args --julia-args --threads=3 --check-bounds=yes -O1`, String)
145-
146- # # Check stdlib filtering
147- # if filter == true
148- # @test !(occursin("LinearAlgebra", app_output))
149- # else
150- # @test occursin("LinearAlgebra", app_output)
151- # end
152- # # Check dependency run
153- # @test occursin("Example.domath", app_output)
154- # # Check PROGRAM_FILE
155- # @test occursin("Base.PROGRAM_FILE = $(repr(app_path("MyApp")))", app_output)
156- # # Check jll package runs
157- # @test occursin("Hello, World!", app_output)
158- # # Check artifact runs
159- # @test occursin("Artifact printed: Hello, World!", app_output)
160- # # Check artifact gets run from the correct place
161- # @test occursin("HelloWorld artifact at $(realpath(app_compiled_dir))", app_output)
162- # # Check ARGS
163- # @test occursin("""ARGS = ["I", "get", "--args"]""", app_output)
164- # # Check julia-args
165- # @test occursin("(Base.JLOptions()).opt_level = 1", app_output)
166- # @test occursin("(Base.JLOptions()).nthreads = 3", app_output)
167- # @test occursin("(Base.JLOptions()).check_bounds = 1", app_output)
168- # # Check transitive inclusion of dependencies
169- # @test occursin("is_crayons_loaded() = true", app_output)
170- # # Check app is precompiled in a normal process
171- # @test occursin("outputo: ok", app_output)
172- # @test occursin("myrand: ok", app_output)
173- # # Check distributed
174- # @test occursin("n = 20000000", app_output)
175- # @test occursin("From worker 2:\t8", app_output)
176- # @test occursin("From worker 3:\t8", app_output)
177- # @test occursin("From worker 4:\t8", app_output)
178- # @test occursin("From worker 5:\t8", app_output)
179-
180- # if is_julia_1_6 || is_julia_1_9
181- # # Julia 1.6: Issue #706 "Cannot locate artifact 'LLVMExtra'" on 1.6 so remove.
182- # # Julia 1.9: There's no GitHub Issue, but it seems we hit a similar problem.
183- # @test_skip false
184- # else
185- # @test occursin("LLVMExtra path: ok!", app_output)
186- # end
187- # @test occursin("micromamba_jll path: ok!", app_output)
188-
189- # # Test second app
190- # app_output = read(`$(app_path("SecondApp"))`, String)
191- # @test occursin("Hello from second main", app_output)
192-
193- # io = IOBuffer()
194- # p = run(pipeline(ignorestatus(`$(app_path("ReturnType"))`), stderr=io;))
195- # @test occursin("ERROR: expected a Cint return value from function MyApp.wrong_return_type", String(take!(io)))
196- # @test p.exitcode == 1
197-
198- # io = IOBuffer()
199- # p = run(pipeline(ignorestatus(`$(app_path("Error"))`), stderr=io;))
200- # @test occursin("MethodError: no method matching +(", String(take!(io)))
201- # @test p.exitcode == 1
202-
203- # io = IOBuffer()
204- # p = run(pipeline(ignorestatus(`$(app_path("Undefined"))`), stderr=io;))
205- # str = String(take!(io))
206- # @test all(occursin(str), ["UndefVarError:", "undefined", "not defined"])
207- # @test p.exitcode == 1
208- # @info "done: create_app testset" incremental filter
209- # end
210- # end
211- # end # testset
212-
213- # if !is_slow_ci
214- # # Test library creation
215- # lib_source_dir = joinpath(@__DIR__, "..", "examples/MyLib")
216- # lib_target_dir = joinpath(tmp, "MyLibCompiled")
217-
218- # # This is why we have to skip this test on 1.12:
219- # incremental = false
220-
221- # filter = true
222- # lib_name = "inc"
223-
224- # tmp_lib_src_dir = joinpath(tmp, "MyLib")
225- # cp(lib_source_dir, tmp_lib_src_dir)
226- # create_library(tmp_lib_src_dir, lib_target_dir; incremental=incremental, force=true, filter_stdlibs=filter,
227- # precompile_execution_file=joinpath(lib_source_dir, "build", "generate_precompile.jl"),
228- # precompile_statements_file=joinpath(lib_source_dir, "build", "additional_precompile.jl"),
229- # lib_name=lib_name, version=v"1.0.0")
230- # rm(tmp_lib_src_dir; recursive=true)
231- # end
232-
233- # # Test creating an empty sysimage
234- # if !is_slow_ci
235- # tmp = mktempdir()
236- # sysimage_path = joinpath(tmp, "empty." * Libdl.dlext)
237- # foreach(x -> touch(joinpath(tmp, x)), ["Project.toml", "Manifest.toml"])
238-
239- # # This is why we need to skip this test on 1.12:
240- # incremental=false
241-
242- # create_sysimage(String[]; sysimage_path=sysimage_path, incremental=incremental, filter_stdlibs=true, project=tmp)
243- # hello = read(`$(Base.julia_cmd()) -J $(sysimage_path) -e 'print("hello, world")'`, String)
244- # @test hello == "hello, world"
245- # end
63+ @testset " create_sysimage" begin
64+ new_project = mktempdir ()
65+ old_project = Base. ACTIVE_PROJECT[]
66+ Base. ACTIVE_PROJECT[] = new_project
67+ try
68+ Pkg. add (" Example" )
69+ finally
70+ Base. ACTIVE_PROJECT[] = old_project
71+ end
72+ tmp = mktempdir ()
73+ sysimage_path = joinpath (tmp, " sys." * Libdl. dlext)
74+ script = tempname ()
75+ write (script, """
76+ script_func() = println(\" I am a script\" )
77+ opt_during_sysimage = Base.JLOptions().opt_level
78+ print_opt() = println("opt: -O\$ opt_during_sysimage")
79+ """ )
80+ create_sysimage (; sysimage_path= sysimage_path,
81+ project= new_project,
82+ precompile_execution_file= joinpath (@__DIR__ , " precompile_execution.jl" ),
83+ precompile_statements_file= joinpath .(@__DIR__ , [" precompile_statements.jl" ,
84+ " precompile_statements2.jl" ]),
85+ script= script,
86+ sysimage_build_args = ` -O1`
87+ )
88+
89+ # Check we can load sysimage and that Example is available in Main
90+ str = read (` $(Base. julia_cmd ()) -J $(sysimage_path) -e 'println(Example.hello("foo")); script_func(); print_opt()'` , String)
91+ @test occursin (" Hello, foo" , str)
92+ @test occursin (" I am a script" , str)
93+ @test occursin (" opt: -O1" , str)
94+ end # testset
95+
96+ @testset " create_app" begin
97+ # Test creating an app
98+ app_source_dir = joinpath (@__DIR__ , " .." , " examples/MyApp/" )
99+ app_compiled_dir = joinpath (tmp, " MyAppCompiled" )
100+ if is_slow_ci
101+ incrementals_list = (true , false )
102+ else
103+ incrementals_list = (true , false )
104+ end
105+ @testset for incremental in incrementals_list
106+ if incremental == false
107+ if is_slow_ci
108+ @warn " Skipping the (incremental=false, filter_stdlibs=false) test because this is \" slow CI\" "
109+ @test_skip false
110+ filter_stdlibs = (true ,)
111+ else
112+ filter_stdlibs = (true , false )
113+ end
114+ else
115+ filter_stdlibs = (false ,)
116+ end
117+ @testset for filter in filter_stdlibs
118+ @info " starting: create_app testset" incremental filter
119+ tmp_app_source_dir = joinpath (tmp, " MyApp" )
120+ cp (app_source_dir, tmp_app_source_dir)
121+ if is_gha_ci && (is_julia_1_6 || is_julia_1_9)
122+ # Julia 1.6: Issue #706 "Cannot locate artifact 'LLVMExtra'" on 1.6 so remove.
123+ # Julia 1.9: There's no GitHub Issue, but it seems we hit a similar problem.
124+ @test_skip false
125+ remove_llvmextras (joinpath (tmp_app_source_dir, " Project.toml" ))
126+ end
127+ try
128+ create_app (tmp_app_source_dir, app_compiled_dir; incremental= incremental, force= true , filter_stdlibs= filter, include_lazy_artifacts= true ,
129+ precompile_execution_file= joinpath (app_source_dir, " precompile_app.jl" ),
130+ executables= [" MyApp" => " julia_main" ,
131+ " SecondApp" => " second_main" ,
132+ " ReturnType" => " wrong_return_type" ,
133+ " Error" => " erroring" ,
134+ " Undefined" => " undefined" ,
135+ ])
136+ finally
137+ rm (tmp_app_source_dir; recursive= true )
138+ # Get rid of some local state
139+ rm (joinpath (new_depot, " packages" ); recursive= true , force= true )
140+ rm (joinpath (new_depot, " compiled" ); recursive= true , force= true )
141+ rm (joinpath (new_depot, " artifacts" ); recursive= true , force= true )
142+ end # try
143+ app_path (app_name) = abspath (app_compiled_dir, " bin" , app_name * (Sys. iswindows () ? " .exe" : " " ))
144+ app_output = read (` $(app_path (" MyApp" )) I get --args --julia-args --threads=3 --check-bounds=yes -O1` , String)
145+
146+ # Check stdlib filtering
147+ if filter == true
148+ @test ! (occursin (" LinearAlgebra" , app_output))
149+ else
150+ @test occursin (" LinearAlgebra" , app_output)
151+ end
152+ # Check dependency run
153+ @test occursin (" Example.domath" , app_output)
154+ # Check PROGRAM_FILE
155+ @test occursin (" Base.PROGRAM_FILE = $(repr (app_path (" MyApp" ))) " , app_output)
156+ # Check jll package runs
157+ @test occursin (" Hello, World!" , app_output)
158+ # Check artifact runs
159+ @test occursin (" Artifact printed: Hello, World!" , app_output)
160+ # Check artifact gets run from the correct place
161+ @test occursin (" HelloWorld artifact at $(realpath (app_compiled_dir)) " , app_output)
162+ # Check ARGS
163+ @test occursin (""" ARGS = ["I", "get", "--args"]""" , app_output)
164+ # Check julia-args
165+ @test occursin (" (Base.JLOptions()).opt_level = 1" , app_output)
166+ @test occursin (" (Base.JLOptions()).nthreads = 3" , app_output)
167+ @test occursin (" (Base.JLOptions()).check_bounds = 1" , app_output)
168+ # Check transitive inclusion of dependencies
169+ @test occursin (" is_crayons_loaded() = true" , app_output)
170+ # Check app is precompiled in a normal process
171+ @test occursin (" outputo: ok" , app_output)
172+ @test occursin (" myrand: ok" , app_output)
173+ # Check distributed
174+ @test occursin (" n = 20000000" , app_output)
175+ @test occursin (" From worker 2:\t 8" , app_output)
176+ @test occursin (" From worker 3:\t 8" , app_output)
177+ @test occursin (" From worker 4:\t 8" , app_output)
178+ @test occursin (" From worker 5:\t 8" , app_output)
179+
180+ if is_julia_1_6 || is_julia_1_9
181+ # Julia 1.6: Issue #706 "Cannot locate artifact 'LLVMExtra'" on 1.6 so remove.
182+ # Julia 1.9: There's no GitHub Issue, but it seems we hit a similar problem.
183+ @test_skip false
184+ else
185+ @test occursin (" LLVMExtra path: ok!" , app_output)
186+ end
187+ @test occursin (" micromamba_jll path: ok!" , app_output)
188+
189+ # Test second app
190+ app_output = read (` $(app_path (" SecondApp" )) ` , String)
191+ @test occursin (" Hello from second main" , app_output)
192+
193+ io = IOBuffer ()
194+ p = run (pipeline (ignorestatus (` $(app_path (" ReturnType" )) ` ), stderr = io;))
195+ @test occursin (" ERROR: expected a Cint return value from function MyApp.wrong_return_type" , String (take! (io)))
196+ @test p. exitcode == 1
197+
198+ io = IOBuffer ()
199+ p = run (pipeline (ignorestatus (` $(app_path (" Error" )) ` ), stderr = io;))
200+ @test occursin (" MethodError: no method matching +(" , String (take! (io)))
201+ @test p. exitcode == 1
202+
203+ io = IOBuffer ()
204+ p = run (pipeline (ignorestatus (` $(app_path (" Undefined" )) ` ), stderr = io;))
205+ str = String (take! (io))
206+ @test all (occursin (str), [" UndefVarError:" , " undefined" , " not defined" ])
207+ @test p. exitcode == 1
208+ @info " done: create_app testset" incremental filter
209+ end
210+ end
211+ end # testset
212+
213+ if ! is_slow_ci
214+ # Test library creation
215+ lib_source_dir = joinpath (@__DIR__ , " .." , " examples/MyLib" )
216+ lib_target_dir = joinpath (tmp, " MyLibCompiled" )
217+
218+ # This is why we have to skip this test on 1.12:
219+ incremental = false
220+
221+ filter = true
222+ lib_name = " inc"
223+
224+ tmp_lib_src_dir = joinpath (tmp, " MyLib" )
225+ cp (lib_source_dir, tmp_lib_src_dir)
226+ create_library (tmp_lib_src_dir, lib_target_dir; incremental= incremental, force= true , filter_stdlibs= filter,
227+ precompile_execution_file= joinpath (lib_source_dir, " build" , " generate_precompile.jl" ),
228+ precompile_statements_file= joinpath (lib_source_dir, " build" , " additional_precompile.jl" ),
229+ lib_name= lib_name, version= v " 1.0.0" )
230+ rm (tmp_lib_src_dir; recursive= true )
231+ end
232+
233+ # Test creating an empty sysimage
234+ if ! is_slow_ci
235+ tmp = mktempdir ()
236+ sysimage_path = joinpath (tmp, " empty." * Libdl. dlext)
237+ foreach (x -> touch (joinpath (tmp, x)), [" Project.toml" , " Manifest.toml" ])
238+
239+ # This is why we need to skip this test on 1.12:
240+ incremental= false
241+
242+ create_sysimage (String[]; sysimage_path= sysimage_path, incremental= incremental, filter_stdlibs= true , project= tmp)
243+ hello = read (` $(Base. julia_cmd ()) -J $(sysimage_path) -e 'print("hello, world")'` , String)
244+ @test hello == " hello, world"
245+ end
246246
247247 @testset " examples/MyLib" begin
248248 # This testset makes sure that the `examples/MyLib` example does not bitrot.
0 commit comments