297 progress: Progress = new Progress, |
297 progress: Progress = new Progress, |
298 build_heap: Boolean = false, |
298 build_heap: Boolean = false, |
299 dirs: List[Path] = Nil, |
299 dirs: List[Path] = Nil, |
300 fresh: Boolean = false, |
300 fresh: Boolean = false, |
301 strict: Boolean = false |
301 strict: Boolean = false |
302 ): Int = { |
302 ): Results = { |
303 val selection = Sessions.Selection.session(logic) |
303 val selection = Sessions.Selection.session(logic) |
304 val rc = |
304 |
305 if (!fresh && build(options, selection = selection, |
305 def test_build(): Results = |
306 build_heap = build_heap, no_build = true, dirs = dirs).ok) Process_Result.RC.ok |
306 build(options, selection = selection, |
|
307 build_heap = build_heap, no_build = true, dirs = dirs) |
|
308 |
|
309 def full_build(): Results = { |
|
310 progress.echo("Build started for Isabelle/" + logic + " ...") |
|
311 build(options, selection = selection, progress = progress, |
|
312 build_heap = build_heap, fresh_build = fresh, dirs = dirs) |
|
313 } |
|
314 |
|
315 val results = |
|
316 if (fresh) full_build() |
307 else { |
317 else { |
308 progress.echo("Build started for Isabelle/" + logic + " ...") |
318 val results0 = test_build() |
309 build(options, selection = selection, progress = progress, |
319 if (results0.ok) results0 else full_build() |
310 build_heap = build_heap, fresh_build = fresh, dirs = dirs).rc |
320 } |
311 } |
321 |
312 if (strict && rc != Process_Result.RC.ok) error("Failed to build Isabelle/" + logic) else rc |
322 if (strict && !results.ok) error("Failed to build Isabelle/" + logic) else results |
313 } |
323 } |
314 |
324 |
315 |
325 |
316 /* Isabelle tool wrappers */ |
326 /* Isabelle tool wrappers */ |
317 |
327 |