src/Pure/Tools/build_dialog.scala
author wenzelm
Sat, 07 Sep 2013 17:23:05 +0200
changeset 53460 6015a663b889
parent 53456 d12be8f62285
permissions -rw-r--r--
tuned signature;

/*  Title:      Pure/Tools/build_dialog.scala
    Author:     Makarius

Dialog for session build process.
*/

package isabelle


import java.awt.{GraphicsEnvironment, Point, Font}

import scala.swing.{ScrollPane, Button, CheckBox, FlowPanel,
  BorderPanel, MainFrame, TextArea, SwingApplication, Component, Label}
import scala.swing.event.ButtonClicked


object Build_Dialog
{
  /* command line entry point */

  def main(args: Array[String])
  {
    GUI.init_laf()
    try {
      args.toList match {
        case
          logic_option ::
          logic ::
          Properties.Value.Boolean(system_mode) ::
          include_dirs =>
            val options = Options.init()
            val dirs = include_dirs.map(Path.explode(_))
            val session =
              Isabelle_System.default_logic(logic,
                if (logic_option != "") options.string(logic_option) else "")

            val system_dialog = new System_Dialog
            dialog(options, system_dialog, system_mode, dirs, session)
            system_dialog.join_exit

        case _ => error("Bad arguments:\n" + cat_lines(args))
      }
    }
    catch {
      case exn: Throwable =>
        GUI.error_dialog(null, "Isabelle build failure", GUI.scrollable_text(Exn.message(exn)))
        sys.exit(2)
    }
  }


  /* dialog */

  def dialog(
    options: Options,
    system_dialog: System_Dialog,
    system_mode: Boolean,
    dirs: List[Path],
    session: String)
  {
    val more_dirs = dirs.map((false, _))

    if (Build.build(options = options, build_heap = true, no_build = true,
        more_dirs = more_dirs, sessions = List(session)) == 0)
      system_dialog.return_code(0)
    else {
      system_dialog.title("Isabelle build (" + Isabelle_System.getenv("ML_IDENTIFIER") + ")")
      system_dialog.echo("Build started for Isabelle/" + session + " ...")

      val (out, rc) =
        try {
          ("",
            Build.build(options = options, progress = system_dialog,
              build_heap = true, more_dirs = more_dirs,
              system_mode = system_mode, sessions = List(session)))
        }
        catch { case exn: Throwable => (Exn.message(exn) + "\n", 2) }

      system_dialog.echo(out + (if (rc == 0) "OK\n" else "Return code: " + rc + "\n"))
      system_dialog.return_code(rc)
    }
  }
}