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