| author | wenzelm | 
| Mon, 06 Jul 2015 20:19:29 +0200 | |
| changeset 60675 | a997fcb75d08 | 
| parent 60518 | a79f89a36dff | 
| child 60988 | 1d7a7e33fd67 | 
| 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: 
52675 
diff
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: 
52675 
diff
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: 
56661 
diff
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: 
53466 
diff
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: 
53466 
diff
changeset
 | 
48  | 
|
| 
 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 
wenzelm 
parents: 
53466 
diff
changeset
 | 
49  | 
if (Build.build(options = options, build_heap = true, no_build = true,  | 
| 
60518
 
a79f89a36dff
uniform system_mode for build test: avoid spurious output_dir/log that is not required later;
 
wenzelm 
parents: 
59080 
diff
changeset
 | 
50  | 
dirs = dirs, system_mode = system_mode, sessions = List(session)) == 0)  | 
| 
53519
 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 
wenzelm 
parents: 
53466 
diff
changeset
 | 
51  | 
system_dialog.return_code(0)  | 
| 
 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 
wenzelm 
parents: 
53466 
diff
changeset
 | 
52  | 
          else {
 | 
| 
 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 
wenzelm 
parents: 
53466 
diff
changeset
 | 
53  | 
            system_dialog.title("Isabelle build (" + Isabelle_System.getenv("ML_IDENTIFIER") + ")")
 | 
| 
 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 
wenzelm 
parents: 
53466 
diff
changeset
 | 
54  | 
            system_dialog.echo("Build started for Isabelle/" + session + " ...")
 | 
| 
 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 
wenzelm 
parents: 
53466 
diff
changeset
 | 
55  | 
|
| 
 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 
wenzelm 
parents: 
53466 
diff
changeset
 | 
56  | 
val (out, rc) =  | 
| 
 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 
wenzelm 
parents: 
53466 
diff
changeset
 | 
57  | 
              try {
 | 
| 
 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 
wenzelm 
parents: 
53466 
diff
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: 
53466 
diff
changeset
 | 
61  | 
}  | 
| 
56671
 
06853449cf0a
explicit Exn.error_message in accordance to Output.error_message in ML;
 
wenzelm 
parents: 
56667 
diff
changeset
 | 
62  | 
              catch {
 | 
| 
56782
 
433cf57550fa
more systematic Isabelle output, like in classic Isabelle/ML (without markup);
 
wenzelm 
parents: 
56671 
diff
changeset
 | 
63  | 
case exn: Throwable =>  | 
| 
 
433cf57550fa
more systematic Isabelle output, like in classic Isabelle/ML (without markup);
 
wenzelm 
parents: 
56671 
diff
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: 
56667 
diff
changeset
 | 
65  | 
}  | 
| 
53519
 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 
wenzelm 
parents: 
53466 
diff
changeset
 | 
66  | 
|
| 
 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 
wenzelm 
parents: 
53466 
diff
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: 
53466 
diff
changeset
 | 
68  | 
system_dialog.return_code(rc)  | 
| 
 
3c977c570e20
discontinued obsolete command-line tool "isabelle build_dialog";
 
wenzelm 
parents: 
53466 
diff
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: 
53423 
diff
changeset
 | 
114  | 
|
| 
53965
 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 
wenzelm 
parents: 
53912 
diff
changeset
 | 
115  | 
update_environment()  | 
| 
 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 
wenzelm 
parents: 
53912 
diff
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: 
53772 
diff
changeset
 | 
123  | 
val jedit =  | 
| 
 
f6fb8ca4517f
initialize class immediately (potentially more robust);
 
wenzelm 
parents: 
53772 
diff
changeset
 | 
124  | 
            Class.forName("org.gjt.sp.jedit.jEdit", true, ClassLoader.getSystemClassLoader)
 | 
| 
59080
 
611914621edb
added Untyped.method convenience (for *this* class only);
 
wenzelm 
parents: 
56890 
diff
changeset
 | 
125  | 
          val jedit_main = jedit.getMethod("main", classOf[Array[String]])
 | 
| 53456 | 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: 
52675 
diff
changeset
 | 
133  | 
|
| 
 
1c87e79bb838
main application entry point involves implicit Cygwin init, depending on "uninitialized" file indicator;
 
wenzelm 
parents: 
52675 
diff
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: 
52675 
diff
changeset
 | 
137  | 
|
| 
53967
 
bfaae48b0ce0
simplified ISABELLE_HOME on Windows (see also 9c8a1b9c0630, 5a7903ba2dac);
 
wenzelm 
parents: 
53966 
diff
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: 
52675 
diff
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: 
52675 
diff
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: 
52675 
diff
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: 
53461 
diff
changeset
 | 
158  | 
|
| 
 
c531db093680
observe "stopped" after Cygwin init (which is itself uninterruptible);
 
wenzelm 
parents: 
53461 
diff
changeset
 | 
159  | 
      if (system_dialog.stopped) {
 | 
| 
56667
 
65e84b0ef974
more abstract Exn.Interrupt and POSIX return code;
 
wenzelm 
parents: 
56661 
diff
changeset
 | 
160  | 
system_dialog.return_code(Exn.Interrupt.return_code)  | 
| 
53462
 
c531db093680
observe "stopped" after Cygwin init (which is itself uninterruptible);
 
wenzelm 
parents: 
53461 
diff
changeset
 | 
161  | 
system_dialog.join_exit  | 
| 
 
c531db093680
observe "stopped" after Cygwin init (which is itself uninterruptible);
 
wenzelm 
parents: 
53461 
diff
changeset
 | 
162  | 
}  | 
| 53459 | 163  | 
}  | 
| 
53445
 
811db2b751ed
warm start of Isabelle/jEdit from Isabelle/Scala;
 
wenzelm 
parents: 
53423 
diff
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: 
53423 
diff
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: 
55618 
diff
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: 
53912 
diff
changeset
 | 
220  | 
|
| 
 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 
wenzelm 
parents: 
53912 
diff
changeset
 | 
221  | 
|
| 
 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 
wenzelm 
parents: 
53912 
diff
changeset
 | 
222  | 
|
| 
 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 
wenzelm 
parents: 
53912 
diff
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: 
53912 
diff
changeset
 | 
224  | 
|
| 
 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 
wenzelm 
parents: 
53912 
diff
changeset
 | 
225  | 
def update_environment()  | 
| 
 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 
wenzelm 
parents: 
53912 
diff
changeset
 | 
226  | 
  {
 | 
| 
 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 
wenzelm 
parents: 
53912 
diff
changeset
 | 
227  | 
val update =  | 
| 
53966
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
228  | 
    {
 | 
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
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: 
53965 
diff
changeset
 | 
231  | 
val upd =  | 
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
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: 
53965 
diff
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: 
53912 
diff
changeset
 | 
241  | 
|
| 
53966
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
242  | 
      (env0: Any) => {
 | 
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
243  | 
val env = env0.asInstanceOf[java.util.Map[String, String]]  | 
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
244  | 
        upd.foreach {
 | 
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
245  | 
case (x, "") => env.remove(x)  | 
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
246  | 
case (x, y) => env.put(x, y)  | 
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
247  | 
}  | 
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
248  | 
}  | 
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
249  | 
}  | 
| 
53965
 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 
wenzelm 
parents: 
53912 
diff
changeset
 | 
250  | 
|
| 
 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 
wenzelm 
parents: 
53912 
diff
changeset
 | 
251  | 
classOf[java.util.Collections].getDeclaredClasses  | 
| 
 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 
wenzelm 
parents: 
53912 
diff
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: 
53912 
diff
changeset
 | 
253  | 
    {
 | 
| 
 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 
wenzelm 
parents: 
53912 
diff
changeset
 | 
254  | 
case Some(c) =>  | 
| 
 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 
wenzelm 
parents: 
53912 
diff
changeset
 | 
255  | 
        val m = c.getDeclaredField("m")
 | 
| 
 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 
wenzelm 
parents: 
53912 
diff
changeset
 | 
256  | 
m.setAccessible(true)  | 
| 
53966
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
257  | 
update(m.get(System.getenv()))  | 
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
258  | 
|
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
259  | 
        if (Platform.is_windows) {
 | 
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
260  | 
          val ProcessEnvironment = Class.forName("java.lang.ProcessEnvironment")
 | 
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
261  | 
          val field = ProcessEnvironment.getDeclaredField("theCaseInsensitiveEnvironment")
 | 
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
262  | 
field.setAccessible(true)  | 
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
263  | 
update(field.get(null))  | 
| 
53965
 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 
wenzelm 
parents: 
53912 
diff
changeset
 | 
264  | 
}  | 
| 
53966
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
265  | 
|
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
changeset
 | 
266  | 
case None =>  | 
| 
 
5a546a881f90
update second environment that is used for System.getenv(String);
 
wenzelm 
parents: 
53965 
diff
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: 
53912 
diff
changeset
 | 
268  | 
}  | 
| 
 
cca95e9055ba
adhoc update of JVM environment variables, which is relevant for cold start of jEdit;
 
wenzelm 
parents: 
53912 
diff
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  |