| author | wenzelm | 
| Sun, 02 Mar 2014 21:02:27 +0100 | |
| changeset 55841 | a232c0ff3c20 | 
| parent 55618 | 995162143ef4 | 
| child 56661 | ef623f6f036b | 
| permissions | -rw-r--r-- | 
| 50687 | 1 | /* Title: Pure/Tools/main.scala | 
| 47663 
20e0865ae9e7
default Isabelle application wrapper -- JVM entry point for Isabelle.exe;
 wenzelm parents: diff
changeset | 2 | Author: Makarius | 
| 
20e0865ae9e7
default Isabelle application wrapper -- JVM entry point for Isabelle.exe;
 wenzelm parents: diff
changeset | 3 | |
| 53419 
1c87e79bb838
main application entry point involves implicit Cygwin init, depending on "uninitialized" file indicator;
 wenzelm parents: 
52675diff
changeset | 4 | Main Isabelle application entry point. | 
| 47663 
20e0865ae9e7
default Isabelle application wrapper -- JVM entry point for Isabelle.exe;
 wenzelm parents: diff
changeset | 5 | */ | 
| 
20e0865ae9e7
default Isabelle application wrapper -- JVM entry point for Isabelle.exe;
 wenzelm parents: diff
changeset | 6 | |
| 
20e0865ae9e7
default Isabelle application wrapper -- JVM entry point for Isabelle.exe;
 wenzelm parents: diff
changeset | 7 | package isabelle | 
| 
20e0865ae9e7
default Isabelle application wrapper -- JVM entry point for Isabelle.exe;
 wenzelm parents: diff
changeset | 8 | |
| 53419 
1c87e79bb838
main application entry point involves implicit Cygwin init, depending on "uninitialized" file indicator;
 wenzelm parents: 
52675diff
changeset | 9 | |
| 55618 | 10 | import java.lang.{Class, ClassLoader}
 | 
| 53461 | 11 | import java.io.{File => JFile, BufferedReader, InputStreamReader}
 | 
| 12 | import java.nio.file.Files | |
| 13 | ||
| 14 | import scala.annotation.tailrec | |
| 47663 
20e0865ae9e7
default Isabelle application wrapper -- JVM entry point for Isabelle.exe;
 wenzelm parents: diff
changeset | 15 | |
| 
20e0865ae9e7
default Isabelle application wrapper -- JVM entry point for Isabelle.exe;
 wenzelm parents: diff
changeset | 16 | |
| 
20e0865ae9e7
default Isabelle application wrapper -- JVM entry point for Isabelle.exe;
 wenzelm parents: diff
changeset | 17 | object Main | 
| 
20e0865ae9e7
default Isabelle application wrapper -- JVM entry point for Isabelle.exe;
 wenzelm parents: diff
changeset | 18 | {
 | 
| 53461 | 19 | /** main entry point **/ | 
| 20 | ||
| 53456 | 21 | def main(args: Array[String]) | 
| 53449 | 22 |   {
 | 
| 53456 | 23 | val system_dialog = new System_Dialog | 
| 24 | ||
| 25 | def exit_error(exn: Throwable): Nothing = | |
| 26 |     {
 | |
| 27 | GUI.dialog(null, "Isabelle", GUI.scrollable_text(Exn.message(exn))) | |
| 28 | system_dialog.return_code(2) | |
| 53460 | 29 | system_dialog.join_exit | 
| 53456 | 30 | } | 
| 31 | ||
| 32 | def build | |
| 33 |     {
 | |
| 34 |       try {
 | |
| 35 | GUI.init_laf() | |
| 36 | Isabelle_System.init() | |
| 53449 | 37 | |
| 53456 | 38 |         val mode = Isabelle_System.getenv("JEDIT_BUILD_MODE")
 | 
| 39 | if (mode == "none") | |
| 40 | system_dialog.return_code(0) | |
| 41 |         else {
 | |
| 53519 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 42 | val options = Options.init() | 
| 53456 | 43 | val system_mode = mode == "" || mode == "system" | 
| 53519 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 44 |           val more_dirs = Path.split(Isabelle_System.getenv("JEDIT_SESSION_DIRS")).map((false, _))
 | 
| 53456 | 45 | val session = Isabelle_System.default_logic( | 
| 46 |             Isabelle_System.getenv("JEDIT_LOGIC"),
 | |
| 47 |             options.string("jedit_logic"))
 | |
| 53519 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 48 | |
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 49 | if (Build.build(options = options, build_heap = true, no_build = true, | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 50 | more_dirs = more_dirs, sessions = List(session)) == 0) | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 51 | system_dialog.return_code(0) | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 52 |           else {
 | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 53 |             system_dialog.title("Isabelle build (" + Isabelle_System.getenv("ML_IDENTIFIER") + ")")
 | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 54 |             system_dialog.echo("Build started for Isabelle/" + session + " ...")
 | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 55 | |
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 56 | val (out, rc) = | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 57 |               try {
 | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 58 |                 ("",
 | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 59 | Build.build(options = options, progress = system_dialog, | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 60 | build_heap = true, more_dirs = more_dirs, | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 61 | system_mode = system_mode, sessions = List(session))) | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 62 | } | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 63 |               catch { case exn: Throwable => (Exn.message(exn) + "\n", 2) }
 | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 64 | |
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 65 | system_dialog.echo(out + (if (rc == 0) "OK\n" else "Return code: " + rc + "\n")) | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 66 | system_dialog.return_code(rc) | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 67 | } | 
| 53456 | 68 | } | 
| 69 | } | |
| 70 |       catch { case exn: Throwable => exit_error(exn) }
 | |
| 71 | } | |
| 53449 | 72 | |
| 53456 | 73 | def start | 
| 74 |     {
 | |
| 75 | val do_start = | |
| 76 |       {
 | |
| 77 |         try {
 | |
| 78 | /* settings directory */ | |
| 79 | ||
| 80 |           val settings_dir = Path.explode("$JEDIT_SETTINGS")
 | |
| 81 |           Isabelle_System.mkdirs(settings_dir + Path.explode("DockableWindowManager"))
 | |
| 82 | ||
| 83 |           if (!(settings_dir + Path.explode("perspective.xml")).is_file) {
 | |
| 84 |             File.write(settings_dir + Path.explode("DockableWindowManager/perspective-view0.xml"),
 | |
| 53772 | 85 | """<DOCKING LEFT="" TOP="" RIGHT="isabelle-documentation" BOTTOM="" LEFT_POS="0" TOP_POS="0" RIGHT_POS="250" BOTTOM_POS="250" />""") | 
| 53456 | 86 |             File.write(settings_dir + Path.explode("perspective.xml"),
 | 
| 87 | """<?xml version="1.0" encoding="UTF-8" ?> | |
| 88 | <!DOCTYPE PERSPECTIVE SYSTEM "perspective.dtd"> | |
| 89 | <PERSPECTIVE> | |
| 90 | <VIEW PLAIN="FALSE"> | |
| 91 | <GEOMETRY X="0" Y="35" WIDTH="1072" HEIGHT="787" EXT_STATE="0" /> | |
| 92 | </VIEW> | |
| 93 | </PERSPECTIVE>""") | |
| 94 | } | |
| 53449 | 95 | |
| 96 | ||
| 53456 | 97 | /* args */ | 
| 98 | ||
| 99 | val jedit_options = | |
| 100 |             Isabelle_System.getenv_strict("JEDIT_OPTIONS").split(" +")
 | |
| 101 | ||
| 102 | val jedit_settings = | |
| 103 |             Array("-settings=" + Isabelle_System.platform_path(Path.explode("$JEDIT_SETTINGS")))
 | |
| 104 | ||
| 105 | val more_args = | |
| 106 | if (args.isEmpty) | |
| 107 |               Array(Isabelle_System.platform_path(Path.explode("$USER_HOME/Scratch.thy")))
 | |
| 108 | else args | |
| 109 | ||
| 110 | ||
| 111 | /* startup */ | |
| 53445 
811db2b751ed
warm start of Isabelle/jEdit from Isabelle/Scala;
 wenzelm parents: 
53423diff
changeset | 112 | |
| 53965 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 113 | update_environment() | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 114 | |
| 53456 | 115 |           System.setProperty("jedit.home",
 | 
| 116 |             Isabelle_System.platform_path(Path.explode("$JEDIT_HOME/dist")))
 | |
| 117 | ||
| 118 |           System.setProperty("scala.home",
 | |
| 119 |             Isabelle_System.platform_path(Path.explode("$SCALA_HOME")))
 | |
| 120 | ||
| 53912 
f6fb8ca4517f
initialize class immediately (potentially more robust);
 wenzelm parents: 
53772diff
changeset | 121 | val jedit = | 
| 
f6fb8ca4517f
initialize class immediately (potentially more robust);
 wenzelm parents: 
53772diff
changeset | 122 |             Class.forName("org.gjt.sp.jedit.jEdit", true, ClassLoader.getSystemClassLoader)
 | 
| 53456 | 123 |           val jedit_main = jedit.getDeclaredMethod("main", classOf[Array[String]])
 | 
| 124 | ||
| 125 | () => jedit_main.invoke(null, jedit_options ++ jedit_settings ++ more_args) | |
| 126 | } | |
| 127 |         catch { case exn: Throwable => exit_error(exn) }
 | |
| 128 | } | |
| 129 | do_start() | |
| 130 | } | |
| 53419 
1c87e79bb838
main application entry point involves implicit Cygwin init, depending on "uninitialized" file indicator;
 wenzelm parents: 
52675diff
changeset | 131 | |
| 
1c87e79bb838
main application entry point involves implicit Cygwin init, depending on "uninitialized" file indicator;
 wenzelm parents: 
52675diff
changeset | 132 |     if (Platform.is_windows) {
 | 
| 53459 | 133 |       try {
 | 
| 134 | GUI.init_laf() | |
| 53419 
1c87e79bb838
main application entry point involves implicit Cygwin init, depending on "uninitialized" file indicator;
 wenzelm parents: 
52675diff
changeset | 135 | |
| 53967 
bfaae48b0ce0
simplified ISABELLE_HOME on Windows (see also 9c8a1b9c0630, 5a7903ba2dac);
 wenzelm parents: 
53966diff
changeset | 136 |         val isabelle_home0 = System.getenv("ISABELLE_HOME")
 | 
| 53459 | 137 |         val isabelle_home = System.getProperty("isabelle.home")
 | 
| 47663 
20e0865ae9e7
default Isabelle application wrapper -- JVM entry point for Isabelle.exe;
 wenzelm parents: diff
changeset | 138 | |
| 53459 | 139 |         if (isabelle_home0 == null || isabelle_home0 == "") {
 | 
| 140 | if (isabelle_home == null || isabelle_home == "") | |
| 141 |             error("Unknown Isabelle home directory")
 | |
| 142 | if (!(new JFile(isabelle_home)).isDirectory) | |
| 143 |             error("Bad Isabelle home directory: " + quote(isabelle_home))
 | |
| 53419 
1c87e79bb838
main application entry point involves implicit Cygwin init, depending on "uninitialized" file indicator;
 wenzelm parents: 
52675diff
changeset | 144 | |
| 53459 | 145 | val cygwin_root = isabelle_home + "\\contrib\\cygwin" | 
| 146 | if ((new JFile(cygwin_root)).isDirectory) | |
| 147 |             System.setProperty("cygwin.root", cygwin_root)
 | |
| 53422 | 148 | |
| 53459 | 149 | val uninitialized_file = new JFile(cygwin_root, "isabelle\\uninitialized") | 
| 150 | val uninitialized = uninitialized_file.isFile && uninitialized_file.delete | |
| 53419 
1c87e79bb838
main application entry point involves implicit Cygwin init, depending on "uninitialized" file indicator;
 wenzelm parents: 
52675diff
changeset | 151 | |
| 53461 | 152 | if (uninitialized) cygwin_init(system_dialog, isabelle_home, cygwin_root) | 
| 53419 
1c87e79bb838
main application entry point involves implicit Cygwin init, depending on "uninitialized" file indicator;
 wenzelm parents: 
52675diff
changeset | 153 | } | 
| 53459 | 154 | } | 
| 155 |       catch { case exn: Throwable => exit_error(exn) }
 | |
| 53462 
c531db093680
observe "stopped" after Cygwin init (which is itself uninterruptible);
 wenzelm parents: 
53461diff
changeset | 156 | |
| 
c531db093680
observe "stopped" after Cygwin init (which is itself uninterruptible);
 wenzelm parents: 
53461diff
changeset | 157 |       if (system_dialog.stopped) {
 | 
| 
c531db093680
observe "stopped" after Cygwin init (which is itself uninterruptible);
 wenzelm parents: 
53461diff
changeset | 158 | system_dialog.return_code(130) | 
| 
c531db093680
observe "stopped" after Cygwin init (which is itself uninterruptible);
 wenzelm parents: 
53461diff
changeset | 159 | system_dialog.join_exit | 
| 
c531db093680
observe "stopped" after Cygwin init (which is itself uninterruptible);
 wenzelm parents: 
53461diff
changeset | 160 | } | 
| 53459 | 161 | } | 
| 53445 
811db2b751ed
warm start of Isabelle/jEdit from Isabelle/Scala;
 wenzelm parents: 
53423diff
changeset | 162 | |
| 53459 | 163 | build | 
| 164 | val rc = system_dialog.join | |
| 165 | if (rc == 0) start else sys.exit(rc) | |
| 53445 
811db2b751ed
warm start of Isabelle/jEdit from Isabelle/Scala;
 wenzelm parents: 
53423diff
changeset | 166 | } | 
| 53461 | 167 | |
| 168 | ||
| 169 | ||
| 170 | /** Cygwin init (e.g. after extraction via 7zip) **/ | |
| 171 | ||
| 172 | private def cygwin_init(system_dialog: System_Dialog, isabelle_home: String, cygwin_root: String) | |
| 173 |   {
 | |
| 174 |     system_dialog.title("Isabelle system initialization")
 | |
| 53466 | 175 |     system_dialog.echo("Initializing Cygwin ...")
 | 
| 53461 | 176 | |
| 177 | def execute(args: String*): Int = | |
| 178 |     {
 | |
| 179 | val cwd = new JFile(isabelle_home) | |
| 180 |       val env = Map("CYGWIN" -> "nodosfilewarning")
 | |
| 181 | system_dialog.execute(cwd, env, args: _*) | |
| 182 | } | |
| 183 | ||
| 184 |     system_dialog.echo("symlinks ...")
 | |
| 185 | val symlinks = | |
| 186 |     {
 | |
| 187 | val path = (new JFile(cygwin_root + "\\isabelle\\symlinks")).toPath | |
| 188 | Files.readAllLines(path, UTF8.charset).toArray.toList.asInstanceOf[List[String]] | |
| 189 | } | |
| 190 | @tailrec def recover_symlinks(list: List[String]): Unit = | |
| 191 |     {
 | |
| 192 |       list match {
 | |
| 193 |         case Nil | List("") =>
 | |
| 194 | case link :: content :: rest => | |
| 195 | val path = (new JFile(isabelle_home, link)).toPath | |
| 196 | ||
| 197 | val writer = Files.newBufferedWriter(path, UTF8.charset) | |
| 198 |           try { writer.write("!<symlink>" + content + "\0") }
 | |
| 199 |           finally { writer.close }
 | |
| 200 | ||
| 201 | Files.setAttribute(path, "dos:system", true) | |
| 202 | ||
| 203 | recover_symlinks(rest) | |
| 204 |         case _ => error("Unbalanced symlinks list")
 | |
| 205 | } | |
| 206 | } | |
| 207 | recover_symlinks(symlinks) | |
| 208 | ||
| 209 |     system_dialog.echo("rebaseall ...")
 | |
| 210 | execute(cygwin_root + "\\bin\\dash.exe", "/isabelle/rebaseall") | |
| 211 | ||
| 212 |     system_dialog.echo("postinstall ...")
 | |
| 213 | execute(cygwin_root + "\\bin\\bash.exe", "/isabelle/postinstall") | |
| 214 | ||
| 215 |     system_dialog.echo("init ...")
 | |
| 216 | Isabelle_System.init() | |
| 217 | } | |
| 53965 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 218 | |
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 219 | |
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 220 | |
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 221 | /** adhoc update of JVM environment variables **/ | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 222 | |
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 223 | def update_environment() | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 224 |   {
 | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 225 | val update = | 
| 53966 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 226 |     {
 | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 227 |       val isabelle_home = Isabelle_System.getenv("ISABELLE_HOME")
 | 
| 54351 | 228 |       val isabelle_home_user = Isabelle_System.getenv("ISABELLE_HOME_USER")
 | 
| 53966 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 229 | val upd = | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 230 | if (Platform.is_windows) | 
| 54351 | 231 | List( | 
| 232 | "ISABELLE_HOME" -> Isabelle_System.jvm_path(isabelle_home), | |
| 233 | "ISABELLE_HOME_USER" -> Isabelle_System.jvm_path(isabelle_home_user), | |
| 234 | "INI_DIR" -> "") | |
| 53966 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 235 | else | 
| 54351 | 236 | List( | 
| 237 | "ISABELLE_HOME" -> isabelle_home, | |
| 238 | "ISABELLE_HOME_USER" -> isabelle_home_user) | |
| 53965 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 239 | |
| 53966 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 240 |       (env0: Any) => {
 | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 241 | val env = env0.asInstanceOf[java.util.Map[String, String]] | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 242 |         upd.foreach {
 | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 243 | case (x, "") => env.remove(x) | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 244 | case (x, y) => env.put(x, y) | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 245 | } | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 246 | } | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 247 | } | 
| 53965 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 248 | |
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 249 | classOf[java.util.Collections].getDeclaredClasses | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 250 | .find(c => c.getName == "java.util.Collections$UnmodifiableMap") match | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 251 |     {
 | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 252 | case Some(c) => | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 253 |         val m = c.getDeclaredField("m")
 | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 254 | m.setAccessible(true) | 
| 53966 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 255 | update(m.get(System.getenv())) | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 256 | |
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 257 |         if (Platform.is_windows) {
 | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 258 |           val ProcessEnvironment = Class.forName("java.lang.ProcessEnvironment")
 | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 259 |           val field = ProcessEnvironment.getDeclaredField("theCaseInsensitiveEnvironment")
 | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 260 | field.setAccessible(true) | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 261 | update(field.get(null)) | 
| 53965 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 262 | } | 
| 53966 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 263 | |
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 264 | case None => | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 265 |         error("Failed to update JVM environment -- platform incompatibility")
 | 
| 53965 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 266 | } | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 267 | } | 
| 47663 
20e0865ae9e7
default Isabelle application wrapper -- JVM entry point for Isabelle.exe;
 wenzelm parents: diff
changeset | 268 | } | 
| 
20e0865ae9e7
default Isabelle application wrapper -- JVM entry point for Isabelle.exe;
 wenzelm parents: diff
changeset | 269 |