src/Pure/PIDE/batch_session.scala
author wenzelm
Wed, 14 Jan 2015 14:28:52 +0100
changeset 59364 3b5da177ae6b
parent 59362 41f1645a4f63
child 59366 e94df7f6b608
permissions -rw-r--r--
clarified build_theories;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
59362
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Tools/batch_session.scala
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
     3
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
     4
PIDE session in batch mode.
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
     5
*/
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
     6
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
     7
package isabelle
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
     8
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
     9
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    10
import isabelle._
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    11
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    12
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    13
object Batch_Session
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    14
{
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    15
  def batch_session(
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    16
    options: Options,
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    17
    verbose: Boolean = false,
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    18
    dirs: List[Path] = Nil,
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    19
    session: String)
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    20
  {
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    21
    val (_, session_tree) =
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    22
      Build.find_sessions(options, dirs).selection(false, false, Nil, List(session))
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    23
    val session_info = session_tree(session)
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    24
    val parent_session =
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    25
      session_info.parent getOrElse error("No parent session for " + quote(session))
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    26
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    27
    if (Build.build(options, new Build.Console_Progress(verbose),
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    28
        verbose = verbose, build_heap = true,
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    29
        dirs = dirs, sessions = List(parent_session)) != 0)
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    30
      new RuntimeException
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    31
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    32
    val deps = Build.dependencies(Build.Ignore_Progress, false, verbose, false, session_tree)
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    33
    val resources =
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    34
    {
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    35
      val content = deps(parent_session)
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    36
      new Resources(content.loaded_theories, content.known_theories, content.syntax)
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    37
    }
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    38
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    39
    val progress = new Build.Console_Progress(verbose)
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    40
    val result = Future.promise[Unit]
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    41
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    42
    val prover_session = new Session(resources)
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    43
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    44
    prover_session.phase_changed +=
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    45
      Session.Consumer[Session.Phase](getClass.getName) {
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    46
        case Session.Ready =>
59364
3b5da177ae6b clarified build_theories;
wenzelm
parents: 59362
diff changeset
    47
          val id = Document_ID.make().toString
59362
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    48
          val master_dir = session_info.dir
59364
3b5da177ae6b clarified build_theories;
wenzelm
parents: 59362
diff changeset
    49
          val theories = session_info.theories.map({ case (_, opts, thys) => (opts, thys) })
3b5da177ae6b clarified build_theories;
wenzelm
parents: 59362
diff changeset
    50
          prover_session.build_theories(id, master_dir, theories)
3b5da177ae6b clarified build_theories;
wenzelm
parents: 59362
diff changeset
    51
          // FIXME proper check of result!?
59362
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    52
        case Session.Inactive | Session.Failed =>
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    53
          result.fulfill_result(Exn.Exn(ERROR("Prover process terminated")))
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    54
        case Session.Shutdown =>
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    55
          result.fulfill(())
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    56
        case _ =>
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    57
      }
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    58
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    59
    prover_session.all_messages +=
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    60
      Session.Consumer[Prover.Message](getClass.getName) {
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    61
        case msg: Prover.Output =>
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    62
          msg.properties match {
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    63
            case Markup.Loading_Theory(name) => progress.theory(session, name)
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    64
            case _ =>
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    65
          }
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    66
        case _ =>
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    67
      }
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    68
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    69
    prover_session.start("Isabelle", List("-r", "-q", parent_session))
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    70
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    71
    result.join
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    72
  }
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    73
}
41f1645a4f63 some support for PIDE batch session;
wenzelm
parents:
diff changeset
    74