| author | wenzelm | 
| Fri, 27 Jun 2014 15:30:57 +0200 | |
| changeset 57413 | c14af83bd8db | 
| parent 56890 | 7f120d227ca5 | 
| child 59080 | 611914621edb | 
| 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))) | |
| 56667 
65e84b0ef974
more abstract Exn.Interrupt and POSIX return code;
 wenzelm parents: 
56661diff
changeset | 28 | system_dialog.return_code(Exn.return_code(exn, 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" | 
| 56890 | 44 |           val dirs = Path.split(Isabelle_System.getenv("JEDIT_SESSION_DIRS"))
 | 
| 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, | 
| 56890 | 50 | dirs = dirs, sessions = List(session)) == 0) | 
| 53519 
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 |                 ("",
 | 
| 56890 | 59 | Build.build(options = options, progress = system_dialog, build_heap = true, | 
| 60 | dirs = dirs, system_mode = system_mode, sessions = List(session))) | |
| 53519 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 61 | } | 
| 56671 
06853449cf0a
explicit Exn.error_message in accordance to Output.error_message in ML;
 wenzelm parents: 
56667diff
changeset | 62 |               catch {
 | 
| 56782 
433cf57550fa
more systematic Isabelle output, like in classic Isabelle/ML (without markup);
 wenzelm parents: 
56671diff
changeset | 63 | case exn: Throwable => | 
| 
433cf57550fa
more systematic Isabelle output, like in classic Isabelle/ML (without markup);
 wenzelm parents: 
56671diff
changeset | 64 | (Output.error_text(Exn.message(exn)) + "\n", Exn.return_code(exn, 2)) | 
| 56671 
06853449cf0a
explicit Exn.error_message in accordance to Output.error_message in ML;
 wenzelm parents: 
56667diff
changeset | 65 | } | 
| 53519 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 66 | |
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 67 | 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 | 68 | system_dialog.return_code(rc) | 
| 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 wenzelm parents: 
53466diff
changeset | 69 | } | 
| 53456 | 70 | } | 
| 71 | } | |
| 72 |       catch { case exn: Throwable => exit_error(exn) }
 | |
| 73 | } | |
| 53449 | 74 | |
| 53456 | 75 | def start | 
| 76 |     {
 | |
| 77 | val do_start = | |
| 78 |       {
 | |
| 79 |         try {
 | |
| 80 | /* settings directory */ | |
| 81 | ||
| 82 |           val settings_dir = Path.explode("$JEDIT_SETTINGS")
 | |
| 83 |           Isabelle_System.mkdirs(settings_dir + Path.explode("DockableWindowManager"))
 | |
| 84 | ||
| 85 |           if (!(settings_dir + Path.explode("perspective.xml")).is_file) {
 | |
| 86 |             File.write(settings_dir + Path.explode("DockableWindowManager/perspective-view0.xml"),
 | |
| 53772 | 87 | """<DOCKING LEFT="" TOP="" RIGHT="isabelle-documentation" BOTTOM="" LEFT_POS="0" TOP_POS="0" RIGHT_POS="250" BOTTOM_POS="250" />""") | 
| 53456 | 88 |             File.write(settings_dir + Path.explode("perspective.xml"),
 | 
| 89 | """<?xml version="1.0" encoding="UTF-8" ?> | |
| 90 | <!DOCTYPE PERSPECTIVE SYSTEM "perspective.dtd"> | |
| 91 | <PERSPECTIVE> | |
| 92 | <VIEW PLAIN="FALSE"> | |
| 93 | <GEOMETRY X="0" Y="35" WIDTH="1072" HEIGHT="787" EXT_STATE="0" /> | |
| 94 | </VIEW> | |
| 95 | </PERSPECTIVE>""") | |
| 96 | } | |
| 53449 | 97 | |
| 98 | ||
| 53456 | 99 | /* args */ | 
| 100 | ||
| 101 | val jedit_options = | |
| 102 |             Isabelle_System.getenv_strict("JEDIT_OPTIONS").split(" +")
 | |
| 103 | ||
| 104 | val jedit_settings = | |
| 105 |             Array("-settings=" + Isabelle_System.platform_path(Path.explode("$JEDIT_SETTINGS")))
 | |
| 106 | ||
| 107 | val more_args = | |
| 108 | if (args.isEmpty) | |
| 109 |               Array(Isabelle_System.platform_path(Path.explode("$USER_HOME/Scratch.thy")))
 | |
| 110 | else args | |
| 111 | ||
| 112 | ||
| 113 | /* startup */ | |
| 53445 
811db2b751ed
warm start of Isabelle/jEdit from Isabelle/Scala;
 wenzelm parents: 
53423diff
changeset | 114 | |
| 53965 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 115 | update_environment() | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 116 | |
| 53456 | 117 |           System.setProperty("jedit.home",
 | 
| 118 |             Isabelle_System.platform_path(Path.explode("$JEDIT_HOME/dist")))
 | |
| 119 | ||
| 120 |           System.setProperty("scala.home",
 | |
| 121 |             Isabelle_System.platform_path(Path.explode("$SCALA_HOME")))
 | |
| 122 | ||
| 53912 
f6fb8ca4517f
initialize class immediately (potentially more robust);
 wenzelm parents: 
53772diff
changeset | 123 | val jedit = | 
| 
f6fb8ca4517f
initialize class immediately (potentially more robust);
 wenzelm parents: 
53772diff
changeset | 124 |             Class.forName("org.gjt.sp.jedit.jEdit", true, ClassLoader.getSystemClassLoader)
 | 
| 53456 | 125 |           val jedit_main = jedit.getDeclaredMethod("main", classOf[Array[String]])
 | 
| 126 | ||
| 127 | () => jedit_main.invoke(null, jedit_options ++ jedit_settings ++ more_args) | |
| 128 | } | |
| 129 |         catch { case exn: Throwable => exit_error(exn) }
 | |
| 130 | } | |
| 131 | do_start() | |
| 132 | } | |
| 53419 
1c87e79bb838
main application entry point involves implicit Cygwin init, depending on "uninitialized" file indicator;
 wenzelm parents: 
52675diff
changeset | 133 | |
| 
1c87e79bb838
main application entry point involves implicit Cygwin init, depending on "uninitialized" file indicator;
 wenzelm parents: 
52675diff
changeset | 134 |     if (Platform.is_windows) {
 | 
| 53459 | 135 |       try {
 | 
| 136 | GUI.init_laf() | |
| 53419 
1c87e79bb838
main application entry point involves implicit Cygwin init, depending on "uninitialized" file indicator;
 wenzelm parents: 
52675diff
changeset | 137 | |
| 53967 
bfaae48b0ce0
simplified ISABELLE_HOME on Windows (see also 9c8a1b9c0630, 5a7903ba2dac);
 wenzelm parents: 
53966diff
changeset | 138 |         val isabelle_home0 = System.getenv("ISABELLE_HOME")
 | 
| 53459 | 139 |         val isabelle_home = System.getProperty("isabelle.home")
 | 
| 47663 
20e0865ae9e7
default Isabelle application wrapper -- JVM entry point for Isabelle.exe;
 wenzelm parents: diff
changeset | 140 | |
| 53459 | 141 |         if (isabelle_home0 == null || isabelle_home0 == "") {
 | 
| 142 | if (isabelle_home == null || isabelle_home == "") | |
| 143 |             error("Unknown Isabelle home directory")
 | |
| 144 | if (!(new JFile(isabelle_home)).isDirectory) | |
| 145 |             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 | 146 | |
| 53459 | 147 | val cygwin_root = isabelle_home + "\\contrib\\cygwin" | 
| 148 | if ((new JFile(cygwin_root)).isDirectory) | |
| 149 |             System.setProperty("cygwin.root", cygwin_root)
 | |
| 53422 | 150 | |
| 53459 | 151 | val uninitialized_file = new JFile(cygwin_root, "isabelle\\uninitialized") | 
| 152 | 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 | 153 | |
| 53461 | 154 | 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 | 155 | } | 
| 53459 | 156 | } | 
| 157 |       catch { case exn: Throwable => exit_error(exn) }
 | |
| 53462 
c531db093680
observe "stopped" after Cygwin init (which is itself uninterruptible);
 wenzelm parents: 
53461diff
changeset | 158 | |
| 
c531db093680
observe "stopped" after Cygwin init (which is itself uninterruptible);
 wenzelm parents: 
53461diff
changeset | 159 |       if (system_dialog.stopped) {
 | 
| 56667 
65e84b0ef974
more abstract Exn.Interrupt and POSIX return code;
 wenzelm parents: 
56661diff
changeset | 160 | system_dialog.return_code(Exn.Interrupt.return_code) | 
| 53462 
c531db093680
observe "stopped" after Cygwin init (which is itself uninterruptible);
 wenzelm parents: 
53461diff
changeset | 161 | system_dialog.join_exit | 
| 
c531db093680
observe "stopped" after Cygwin init (which is itself uninterruptible);
 wenzelm parents: 
53461diff
changeset | 162 | } | 
| 53459 | 163 | } | 
| 53445 
811db2b751ed
warm start of Isabelle/jEdit from Isabelle/Scala;
 wenzelm parents: 
53423diff
changeset | 164 | |
| 53459 | 165 | build | 
| 166 | val rc = system_dialog.join | |
| 167 | if (rc == 0) start else sys.exit(rc) | |
| 53445 
811db2b751ed
warm start of Isabelle/jEdit from Isabelle/Scala;
 wenzelm parents: 
53423diff
changeset | 168 | } | 
| 53461 | 169 | |
| 170 | ||
| 171 | ||
| 172 | /** Cygwin init (e.g. after extraction via 7zip) **/ | |
| 173 | ||
| 174 | private def cygwin_init(system_dialog: System_Dialog, isabelle_home: String, cygwin_root: String) | |
| 175 |   {
 | |
| 176 |     system_dialog.title("Isabelle system initialization")
 | |
| 53466 | 177 |     system_dialog.echo("Initializing Cygwin ...")
 | 
| 53461 | 178 | |
| 179 | def execute(args: String*): Int = | |
| 180 |     {
 | |
| 181 | val cwd = new JFile(isabelle_home) | |
| 182 |       val env = Map("CYGWIN" -> "nodosfilewarning")
 | |
| 183 | system_dialog.execute(cwd, env, args: _*) | |
| 184 | } | |
| 185 | ||
| 186 |     system_dialog.echo("symlinks ...")
 | |
| 187 | val symlinks = | |
| 188 |     {
 | |
| 189 | val path = (new JFile(cygwin_root + "\\isabelle\\symlinks")).toPath | |
| 190 | Files.readAllLines(path, UTF8.charset).toArray.toList.asInstanceOf[List[String]] | |
| 191 | } | |
| 192 | @tailrec def recover_symlinks(list: List[String]): Unit = | |
| 193 |     {
 | |
| 194 |       list match {
 | |
| 195 |         case Nil | List("") =>
 | |
| 196 | case link :: content :: rest => | |
| 197 | val path = (new JFile(isabelle_home, link)).toPath | |
| 198 | ||
| 199 | val writer = Files.newBufferedWriter(path, UTF8.charset) | |
| 56661 
ef623f6f036b
avoid octal escape literals -- deprecated in scala-2.11.0;
 wenzelm parents: 
55618diff
changeset | 200 |           try { writer.write("!<symlink>" + content + "\u0000") }
 | 
| 53461 | 201 |           finally { writer.close }
 | 
| 202 | ||
| 203 | Files.setAttribute(path, "dos:system", true) | |
| 204 | ||
| 205 | recover_symlinks(rest) | |
| 206 |         case _ => error("Unbalanced symlinks list")
 | |
| 207 | } | |
| 208 | } | |
| 209 | recover_symlinks(symlinks) | |
| 210 | ||
| 211 |     system_dialog.echo("rebaseall ...")
 | |
| 212 | execute(cygwin_root + "\\bin\\dash.exe", "/isabelle/rebaseall") | |
| 213 | ||
| 214 |     system_dialog.echo("postinstall ...")
 | |
| 215 | execute(cygwin_root + "\\bin\\bash.exe", "/isabelle/postinstall") | |
| 216 | ||
| 217 |     system_dialog.echo("init ...")
 | |
| 218 | Isabelle_System.init() | |
| 219 | } | |
| 53965 
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 | |
| 
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 | /** 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 | 224 | |
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 225 | def update_environment() | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 226 |   {
 | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 227 | val update = | 
| 53966 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 228 |     {
 | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 229 |       val isabelle_home = Isabelle_System.getenv("ISABELLE_HOME")
 | 
| 54351 | 230 |       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 | 231 | val upd = | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 232 | if (Platform.is_windows) | 
| 54351 | 233 | List( | 
| 234 | "ISABELLE_HOME" -> Isabelle_System.jvm_path(isabelle_home), | |
| 235 | "ISABELLE_HOME_USER" -> Isabelle_System.jvm_path(isabelle_home_user), | |
| 236 | "INI_DIR" -> "") | |
| 53966 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 237 | else | 
| 54351 | 238 | List( | 
| 239 | "ISABELLE_HOME" -> isabelle_home, | |
| 240 | "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 | 241 | |
| 53966 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 242 |       (env0: Any) => {
 | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 243 | val env = env0.asInstanceOf[java.util.Map[String, String]] | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 244 |         upd.foreach {
 | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 245 | case (x, "") => env.remove(x) | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 246 | case (x, y) => env.put(x, y) | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 247 | } | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 248 | } | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 249 | } | 
| 53965 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 250 | |
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 251 | classOf[java.util.Collections].getDeclaredClasses | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 252 | .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 | 253 |     {
 | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 254 | case Some(c) => | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 255 |         val m = c.getDeclaredField("m")
 | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 256 | m.setAccessible(true) | 
| 53966 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 257 | update(m.get(System.getenv())) | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 258 | |
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 259 |         if (Platform.is_windows) {
 | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 260 |           val ProcessEnvironment = Class.forName("java.lang.ProcessEnvironment")
 | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 261 |           val field = ProcessEnvironment.getDeclaredField("theCaseInsensitiveEnvironment")
 | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 262 | field.setAccessible(true) | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 263 | update(field.get(null)) | 
| 53965 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 264 | } | 
| 53966 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 265 | |
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 266 | case None => | 
| 
5a546a881f90
update second environment that is used for System.getenv(String);
 wenzelm parents: 
53965diff
changeset | 267 |         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 | 268 | } | 
| 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 wenzelm parents: 
53912diff
changeset | 269 | } | 
| 47663 
20e0865ae9e7
default Isabelle application wrapper -- JVM entry point for Isabelle.exe;
 wenzelm parents: diff
changeset | 270 | } | 
| 
20e0865ae9e7
default Isabelle application wrapper -- JVM entry point for Isabelle.exe;
 wenzelm parents: diff
changeset | 271 |