tuned;
authorwenzelm
Sun, 22 Jul 2012 21:59:14 +0200
changeset 49439e6b0c14f04c8
parent 49438 0ccf143a2a69
child 49440 0d95980e9aae
tuned;
src/Pure/System/build.scala
     1.1 --- a/src/Pure/System/build.scala	Sun Jul 22 12:26:41 2012 +0200
     1.2 +++ b/src/Pure/System/build.scala	Sun Jul 22 21:59:14 2012 +0200
     1.3 @@ -41,10 +41,6 @@
     1.4  
     1.5      /* Info */
     1.6  
     1.7 -    sealed abstract class Status
     1.8 -    case object Pending extends Status
     1.9 -    case object Running extends Status
    1.10 -
    1.11      sealed case class Info(
    1.12        dir: Path,
    1.13        parent: Option[String],
    1.14 @@ -52,8 +48,7 @@
    1.15        options: Options,
    1.16        theories: List[(Options, List[Path])],
    1.17        files: List[Path],
    1.18 -      digest: SHA1.Digest,
    1.19 -      status: Status = Pending)
    1.20 +      digest: SHA1.Digest)
    1.21  
    1.22  
    1.23      /* Queue */
    1.24 @@ -269,6 +264,9 @@
    1.25    }
    1.26  
    1.27  
    1.28 +
    1.29 +  /** build **/
    1.30 +
    1.31    /* dependencies */
    1.32  
    1.33    sealed case class Node(
    1.34 @@ -314,28 +312,23 @@
    1.35        }))
    1.36  
    1.37  
    1.38 +  /* jobs */
    1.39  
    1.40 -  /** build **/
    1.41 -
    1.42 -  private def echo(msg: String) { java.lang.System.out.println(msg) }
    1.43 -  private def echo_n(msg: String) { java.lang.System.out.print(msg) }
    1.44 -
    1.45 -  class Build_Job(cwd: JFile, env: Map[String, String], script: String, args: String)
    1.46 +  private class Job(cwd: JFile, env: Map[String, String], script: String, args: String)
    1.47    {
    1.48      private val args_file = File.tmp_file("args")
    1.49      private val env1 = env + ("ARGS_FILE" -> Isabelle_System.posix_path(args_file.getPath))
    1.50      File.write(args_file, args)
    1.51  
    1.52 -    private val (thread, result) = Simple_Thread.future("build_job") {
    1.53 -      Isabelle_System.bash_env(cwd, env1, script)
    1.54 -    }
    1.55 +    private val (thread, result) =
    1.56 +      Simple_Thread.future("build") { Isabelle_System.bash_env(cwd, env1, script) }
    1.57  
    1.58      def terminate: Unit = thread.interrupt
    1.59      def is_finished: Boolean = result.is_finished
    1.60      def join: (String, String, Int) = { val rc = result.join; args_file.delete; rc }
    1.61    }
    1.62  
    1.63 -  private def build_job(save: Boolean, name: String, info: Session.Info): Build_Job =
    1.64 +  private def start_job(save: Boolean, name: String, info: Session.Info): Job =
    1.65    {
    1.66      val parent = info.parent.getOrElse("")
    1.67  
    1.68 @@ -369,9 +362,15 @@
    1.69        pair(bool, pair(string, pair(string, list(string))))(
    1.70          save, (parent, (name, info.theories.map(_._2).flatten.map(_.implode))))
    1.71      }
    1.72 -    new Build_Job(cwd, env, script, YXML.string_of_body(args_xml))
    1.73 +    new Job(cwd, env, script, YXML.string_of_body(args_xml))
    1.74    }
    1.75  
    1.76 +
    1.77 +  /* Scala entry point */
    1.78 +
    1.79 +  private def echo(msg: String) { java.lang.System.out.println(msg) }
    1.80 +  private def echo_n(msg: String) { java.lang.System.out.print(msg) }
    1.81 +
    1.82    def build(all_sessions: Boolean, build_images: Boolean, list_only: Boolean,
    1.83      more_dirs: List[Path], more_options: List[String], sessions: List[String]): Int =
    1.84    {
    1.85 @@ -397,7 +396,7 @@
    1.86      val log_dir = Path.explode("$ISABELLE_OUTPUT/log")
    1.87      log_dir.file.mkdirs()
    1.88  
    1.89 -    // run jobs
    1.90 +
    1.91      val rcs =
    1.92        for ((name, info) <- queue.topological_order) yield
    1.93        {
    1.94 @@ -406,7 +405,7 @@
    1.95            val save = build_images || queue.is_inner(name)
    1.96            echo((if (save) "Building " else "Running ") + name + " ...")
    1.97  
    1.98 -          val (out, err, rc) = build_job(save, name, info).join
    1.99 +          val (out, err, rc) = start_job(save, name, info).join
   1.100            echo_n(err)
   1.101  
   1.102            val log = log_dir + Path.basic(name)