src/Pure/Tools/main.scala
changeset 69188 2fd73a1a0937
parent 66577 6e35cf3ce869
child 69368 6f360600eabc
equal deleted inserted replaced
69187:d8849cfad60f 69188:2fd73a1a0937
    88             case _ => args
    88             case _ => args
    89           }
    89           }
    90         }
    90         }
    91 
    91 
    92 
    92 
    93         /* main startup */
    93         /* environment */
    94 
    94 
    95         update_environment()
    95         def putenv(name: String, value: String)
       
    96         {
       
    97           val misc =
       
    98             Class.forName("org.gjt.sp.jedit.MiscUtilities", true, ClassLoader.getSystemClassLoader)
       
    99           val putenv = misc.getMethod("putenv", classOf[String], classOf[String])
       
   100           putenv.invoke(null, name, value)
       
   101         }
       
   102 
       
   103         for (name <- List("ISABELLE_HOME", "ISABELLE_HOME_USER", "JEDIT_HOME", "JEDIT_SETTINGS")) {
       
   104           putenv(name, File.platform_path(Isabelle_System.getenv(name)))
       
   105         }
       
   106         putenv("ISABELLE_ROOT", null)
       
   107 
       
   108 
       
   109         /* properties */
    96 
   110 
    97         System.setProperty("jedit.home", File.platform_path(Path.explode("$JEDIT_HOME/dist")))
   111         System.setProperty("jedit.home", File.platform_path(Path.explode("$JEDIT_HOME/dist")))
    98         System.setProperty("scala.home", File.platform_path(Path.explode("$SCALA_HOME")))
   112         System.setProperty("scala.home", File.platform_path(Path.explode("$SCALA_HOME")))
    99         System.setProperty("scala.color", "false")
   113         System.setProperty("scala.color", "false")
       
   114 
       
   115 
       
   116         /* main startup */
   100 
   117 
   101         val jedit =
   118         val jedit =
   102           Class.forName("org.gjt.sp.jedit.jEdit", true, ClassLoader.getSystemClassLoader)
   119           Class.forName("org.gjt.sp.jedit.jEdit", true, ClassLoader.getSystemClassLoader)
   103         val jedit_main = jedit.getMethod("main", classOf[Array[String]])
   120         val jedit_main = jedit.getMethod("main", classOf[Array[String]])
   104 
   121 
   112           sys.exit(2)
   129           sys.exit(2)
   113       }
   130       }
   114     }
   131     }
   115     start()
   132     start()
   116   }
   133   }
   117 
       
   118 
       
   119   /* adhoc update of JVM environment variables */
       
   120 
       
   121   def update_environment()
       
   122   {
       
   123     val update =
       
   124     {
       
   125       val isabelle_home = Isabelle_System.getenv("ISABELLE_HOME")
       
   126       val isabelle_home_user = Isabelle_System.getenv("ISABELLE_HOME_USER")
       
   127       val jedit_home = Isabelle_System.getenv("JEDIT_HOME")
       
   128       val jedit_settings = Isabelle_System.getenv("JEDIT_SETTINGS")
       
   129 
       
   130       (env0: Any) => {
       
   131         val env = env0.asInstanceOf[java.util.Map[String, String]]
       
   132         env.put("ISABELLE_HOME", File.platform_path(isabelle_home))
       
   133         env.put("ISABELLE_HOME_USER", File.platform_path(isabelle_home_user))
       
   134         env.put("JEDIT_HOME", File.platform_path(jedit_home))
       
   135         env.put("JEDIT_SETTINGS", File.platform_path(jedit_settings))
       
   136         env.remove("ISABELLE_ROOT")
       
   137       }
       
   138     }
       
   139 
       
   140     classOf[java.util.Collections].getDeclaredClasses
       
   141       .find(c => c.getName == "java.util.Collections$UnmodifiableMap") match
       
   142     {
       
   143       case Some(c) =>
       
   144         val m = c.getDeclaredField("m")
       
   145         m.setAccessible(true)
       
   146         update(m.get(System.getenv()))
       
   147 
       
   148         if (Platform.is_windows) {
       
   149           val ProcessEnvironment = Class.forName("java.lang.ProcessEnvironment")
       
   150           val field = ProcessEnvironment.getDeclaredField("theCaseInsensitiveEnvironment")
       
   151           field.setAccessible(true)
       
   152           update(field.get(null))
       
   153         }
       
   154 
       
   155       case None =>
       
   156         error("Failed to update JVM environment -- platform incompatibility")
       
   157     }
       
   158   }
       
   159 }
   134 }