src/Pure/Tools/build.scala
changeset 71648 12c3fe42b2a8
parent 71645 07e6053ce89c
child 71649 2acdbb6ee521
equal deleted inserted replaced
71647:7b0656fa783b 71648:12c3fe42b2a8
     6 */
     6 */
     7 
     7 
     8 package isabelle
     8 package isabelle
     9 
     9 
    10 
    10 
    11 import scala.collection.SortedSet
    11 import scala.collection.{SortedSet, mutable}
    12 import scala.annotation.tailrec
    12 import scala.annotation.tailrec
    13 
    13 
    14 
    14 
    15 object Build
    15 object Build
    16 {
    16 {
   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))) :::