@@ -59,189 +59,189 @@ function remove_llvmextras(project_file)
59
59
end
60
60
61
61
@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
245
245
246
246
@testset " examples/MyLib" begin
247
247
include (" examples_mylib.jl" )
0 commit comments