src/Pure/System/cygwin_init.scala
changeset 53467 8adcf1f0042d
parent 53438 6301ed01e34d
parent 53466 19e7d5044617
child 53468 0688928a41fd
--- a/src/Pure/System/cygwin_init.scala	Fri Sep 06 20:59:36 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,166 +0,0 @@
-/*  Title:      Pure/System/cygwin_init.scala
-    Author:     Makarius
-
-Initialize Isabelle distribution after extracting via 7zip.
-*/
-
-package isabelle
-
-
-import java.io.{File => JFile, BufferedReader, InputStreamReader}
-import java.nio.file.{Paths, Files}
-import java.awt.{GraphicsEnvironment, Point, Font}
-import javax.swing.ImageIcon
-
-import scala.annotation.tailrec
-import scala.swing.{ScrollPane, Button, FlowPanel,
-  BorderPanel, MainFrame, TextArea, SwingApplication}
-import scala.swing.event.ButtonClicked
-
-
-object Cygwin_Init
-{
-  /* main GUI entry point */
-
-  def main_frame(isabelle_home: String, start: => Unit) = new MainFrame
-  {
-    title = "Isabelle system initialization"
-    iconImage = new ImageIcon(isabelle_home + "\\lib\\logo\\isabelle.gif").getImage
-
-    val layout_panel = new BorderPanel
-    contents = layout_panel
-
-
-    /* text area */
-
-    def echo(msg: String) { text_area.append(msg + "\n") }
-
-    val text_area = new TextArea {
-      font = new Font("SansSerif", Font.PLAIN, GUI.resolution_scale(10) max 14)
-      editable = false
-      columns = 50
-      rows = 15
-    }
-
-    layout_panel.layout(new ScrollPane(text_area)) = BorderPanel.Position.Center
-
-
-    /* exit button */
-
-    var _return_code: Option[Int] = None
-    def maybe_exit()
-    {
-      _return_code match {
-        case None =>
-        case Some(0) =>
-          visible = false
-          default_thread_pool.submit(() => start)
-        case Some(rc) =>
-          sys.exit(rc)
-      }
-    }
-
-    def return_code(rc: Int): Unit =
-      Swing_Thread.later {
-        _return_code = Some(rc)
-        button.peer.getRootPane.setDefaultButton(button.peer)
-        layout_panel.repaint
-      }
-
-    override def closeOperation { maybe_exit() }
-
-    val button = new Button {
-      text = "Done"
-      reactions += { case ButtonClicked(_) => maybe_exit() }
-    }
-    val button_panel = new FlowPanel(FlowPanel.Alignment.Center)(button)
-
-    layout_panel.layout(button_panel) = BorderPanel.Position.South
-
-
-    /* show window */
-
-    pack()
-    val point = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint()
-    location = new Point(point.x - size.width / 2, point.y - size.height / 2)
-    visible = true
-
-    default_thread_pool.submit(() =>
-      try {
-        init_filesystem(isabelle_home, echo)
-        return_code(0)
-      }
-      catch {
-        case exn: Throwable =>
-          text_area.append("Error:\n" + Exn.message(exn) + "\n")
-          return_code(2)
-      }
-    )
-  }
-
-
-  /* init Cygwin file-system */
-
-  private def init_filesystem(isabelle_home: String, echo: String => Unit)
-  {
-    val cygwin_root = isabelle_home + "\\contrib\\cygwin"
-
-    def execute(args: String*): Int =
-    {
-      val cwd = new JFile(isabelle_home)
-      val env = Map("CYGWIN" -> "nodosfilewarning")
-      val proc = Isabelle_System.raw_execute(cwd, env, true, args: _*)
-      proc.getOutputStream.close
-
-      val stdout = new BufferedReader(new InputStreamReader(proc.getInputStream, UTF8.charset))
-      try {
-        var line = stdout.readLine
-        while (line != null) {
-          echo(line)
-          line = stdout.readLine
-        }
-      }
-      finally { stdout.close }
-
-      proc.waitFor
-    }
-
-    echo("Initializing Cygwin:")
-
-    echo("symlinks ...")
-    val symlinks =
-    {
-      val path = (new JFile(cygwin_root + "\\isabelle\\symlinks")).toPath
-      Files.readAllLines(path, UTF8.charset).toArray.toList.asInstanceOf[List[String]]
-    }
-    @tailrec def recover_symlinks(list: List[String]): Unit =
-    {
-      list match {
-        case Nil | List("") =>
-        case link :: content :: rest =>
-          val path = (new JFile(isabelle_home, link)).toPath
-
-          val writer = Files.newBufferedWriter(path, UTF8.charset)
-          try { writer.write("!<symlink>" + content + "\0") }
-          finally { writer.close }
-
-          Files.setAttribute(path, "dos:system", true)
-
-          recover_symlinks(rest)
-        case _ => error("Unbalanced symlinks list")
-      }
-    }
-    recover_symlinks(symlinks)
-
-    echo("rebaseall ...")
-    execute(cygwin_root + "\\bin\\dash.exe", "/isabelle/rebaseall")
-
-    echo("postinstall ...")
-    execute(cygwin_root + "\\bin\\bash.exe", "/isabelle/postinstall")
-
-    echo("init ...")
-    Isabelle_System.init()
-    echo("OK")
-  }
-}
-