256 val resources = new Resources(sessions_structure, deps(parent)) |
256 val resources = new Resources(sessions_structure, deps(parent)) |
257 val session = new Session(options, resources) |
257 val session = new Session(options, resources) |
258 val handler = new Handler(progress, session, name) |
258 val handler = new Handler(progress, session, name) |
259 session.init_protocol_handler(handler) |
259 session.init_protocol_handler(handler) |
260 |
260 |
|
261 val stdout = new StringBuilder(1000) |
|
262 val messages = new mutable.ListBuffer[String] |
|
263 |
|
264 session.all_messages += |
|
265 Session.Consumer("build_session_output") { |
|
266 case msg: Prover.Output => |
|
267 val message = msg.message |
|
268 if (msg.is_stdout) { |
|
269 stdout ++= Symbol.encode(XML.content(message)) |
|
270 } |
|
271 else if (Protocol.is_exported(message)) { |
|
272 messages += Symbol.encode(Protocol.message_text(List(message))) |
|
273 } |
|
274 case _ => |
|
275 } |
|
276 |
261 val eval_main = Command_Line.ML_tool("Isabelle_Process.init_build ()" :: eval_store) |
277 val eval_main = Command_Line.ML_tool("Isabelle_Process.init_build ()" :: eval_store) |
262 |
278 |
263 val process = |
279 val process = |
264 Isabelle_Process(session, options, sessions_structure, store, |
280 Isabelle_Process(session, options, sessions_structure, store, |
265 logic = parent, raw_ml_system = is_pure, |
281 logic = parent, raw_ml_system = is_pure, |
266 use_prelude = use_prelude, eval_main = eval_main, |
282 use_prelude = use_prelude, eval_main = eval_main, |
267 cwd = info.dir.file, env = env).await_startup |
283 cwd = info.dir.file, env = env).await_startup |
268 |
284 |
269 session.protocol_command("build_session", args_yxml) |
285 session.protocol_command("build_session", args_yxml) |
270 |
286 |
271 val result = process.join |
287 val process_result = process.join |
|
288 |
|
289 val result = process_result.output(stdout.toString :: messages.toList) |
272 handler.build_session_errors.join match { |
290 handler.build_session_errors.join match { |
273 case Nil => result |
291 case Nil => result |
274 case errors => |
292 case errors => |
275 result.error_rc.output( |
293 result.error_rc.output( |
276 errors.flatMap(s => split_lines(Output.error_message_text(s))) ::: |
294 errors.flatMap(s => split_lines(Output.error_message_text(s))) ::: |