Index: build.xml
===================================================================
--- build.xml	(revision 6379)
+++ build.xml	(working copy)
@@ -38,6 +38,7 @@
     <call-subproject subproject="dev" subtarget="build" />
     <call-subproject subproject="user" subtarget="build" />
     <call-subproject subproject="servlet" subtarget="build" />
+    <call-subproject subproject="jni" subtarget="build" />
   </target>
 
   <target name="dist" depends="build, doc" description="[action] Make all the distributions">
@@ -68,6 +69,10 @@
     <gwt.ant dir="servlet" />
   </target>
 
+  <target name="jni" description="[subdir] Builds (or runs ${target} if set) jni for all platforms">
+    <gwt.ant dir="jni" />
+  </target>
+
   <target name="doc" description="[subdir] Builds (or runs ${target} if set) the doc">
     <call-subproject subproject="user" subtarget="build" />
     <gwt.ant dir="doc" />
@@ -87,6 +92,7 @@
      <call-subproject subproject="user" subtarget="build"/>
      <call-subproject subproject="servlet" subtarget="build"/>
      <call-subproject subproject="tools" subtarget="build"/>
+     <call-subproject subproject="jni" subtarget="build"/>
      <call-subproject subproject="samples" subtarget="build"/>
   </target>
 
Index: dev/core/src/com/google/gwt/dev/shell/CheckForUpdates.java
===================================================================
--- dev/core/src/com/google/gwt/dev/shell/CheckForUpdates.java	(revision 6379)
+++ dev/core/src/com/google/gwt/dev/shell/CheckForUpdates.java	(working copy)
@@ -18,6 +18,7 @@
 import com.google.gwt.core.ext.TreeLogger;
 import com.google.gwt.core.ext.TreeLogger.HelpInfo;
 import com.google.gwt.dev.About;
+import com.google.gwt.dev.shell.ie.CheckForUpdatesIE6;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -34,7 +35,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintWriter;
-import java.lang.reflect.Constructor;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
@@ -190,15 +190,6 @@
   // The real URL that should be used.
   private static final String QUERY_URL = "http://tools.google.com/webtoolkit/currentversion.xml";
 
-  /**
-   * All of these classes must extend CheckForUpdates. Note that currently only
-   * IE has a custom implementation (to handle proxies) and that CheckForUpdates
-   * must be the last one in the list.
-   */
-  private static final String[] updaterClassNames = new String[] {
-      "com.google.gwt.dev.shell.ie.CheckForUpdatesIE6",
-      "com.google.gwt.dev.shell.CheckForUpdates"};
-
   public static FutureTask<UpdateResult> checkForUpdatesInBackgroundThread(
       final TreeLogger logger, final long minCheckMillis) {
     final String entryPoint = computeEntryPoint();
@@ -243,25 +234,12 @@
 
   public static CheckForUpdates createUpdateChecker(TreeLogger logger,
       String entryPoint) {
-    try {
-      for (int i = 0; i < updaterClassNames.length; i++) {
-        try {
-          Class<? extends CheckForUpdates> clazz = Class.forName(
-              updaterClassNames[i]).asSubclass(CheckForUpdates.class);
-          Constructor<? extends CheckForUpdates> ctor = clazz.getDeclaredConstructor(new Class[] {
-              TreeLogger.class, String.class});
-          CheckForUpdates checker = ctor.newInstance(new Object[] {
-              logger, entryPoint});
-          return checker;
-        } catch (Exception e) {
-          // Other exceptions can occur besides ClassNotFoundException,
-          // so ignore them all so we can find a functional updater.
-        }
-      }
-    } catch (Throwable e) {
-      // silently ignore any errors
+    // Windows has a custom implementation to handle proxies.
+    if (System.getProperty("os.name").toLowerCase().contains("win")) {
+      return new CheckForUpdatesIE6(logger, entryPoint);
+    } else {
+      return new CheckForUpdates(logger, entryPoint);
     }
-    return null;
   }
 
   public static void logUpdateAvailable(TreeLogger logger,
@@ -329,16 +307,6 @@
    * about an update if available.
    * 
    * @param logger TreeLogger to use
-   */
-  public CheckForUpdates(TreeLogger logger) {
-    this(logger, null);
-  }
-
-  /**
-   * Create an update checker which will poll a server URL and log a message
-   * about an update if available.
-   * 
-   * @param logger TreeLogger to use
    * @param entryPoint the name of the main entry point used for this execution
    */
   public CheckForUpdates(TreeLogger logger, String entryPoint) {

Property changes on: dev\core\src\com\google\gwt\dev\shell\ie
___________________________________________________________________
Added: svn:mergeinfo
   Merged /changes/bobv/elide_rpc_type_names_r4602/dev/windows/src/com/google/gwt/dev/shell/ie:r4603-4788
   Merged /releases/1.6/dev/windows/src/com/google/gwt/dev/shell/ie:r3684-4911,4963,5023
   Merged /changes/bobv/web_mode_stack_traces_r4761/dev/windows/src/com/google/gwt/dev/shell/ie:r4763-4764,4804
   Merged /changes/spoon/pending/dev/windows/src/com/google/gwt/dev/shell/ie:r4539
   Merged /changes/bobv/jso_single_impl_r4432/dev/windows/src/com/google/gwt/dev/shell/ie:r4433-4641
   Merged /changes/bobv/jso_single_impl_r4642/dev/windows/src/com/google/gwt/dev/shell/ie:r4643-4688
   Merged /changes/bobv/singlejsoimpl_sans_annotation_r4770/dev/windows/src/com/google/gwt/dev/shell/ie:r4771-4850

Index: dev/core/src/com/google/gwt/dev/shell/ie/CheckForUpdatesIE6.java
===================================================================
--- dev/core/src/com/google/gwt/dev/shell/ie/CheckForUpdatesIE6.java	(revision 6365)
+++ dev/core/src/com/google/gwt/dev/shell/ie/CheckForUpdatesIE6.java	(working copy)
@@ -25,14 +25,16 @@
 
   public CheckForUpdatesIE6(TreeLogger logger, String entryPoint) {
     super(logger, entryPoint);
-    LowLevelIE6.init();
   }
 
   @Override
   protected byte[] doHttpGet(TreeLogger branch, String userAgent, String url) {
-    byte[] response = LowLevelIE6.httpGet(branch, userAgent, url,
-        System.getProperty(PROPERTY_DEBUG_HTTP_GET) != null);
-    return response;
+    if (LowLevelIE6.init()) {
+      return LowLevelIE6.httpGet(branch, userAgent, url,
+          System.getProperty(PROPERTY_DEBUG_HTTP_GET) != null);
+    } else {
+      return super.doHttpGet(branch, userAgent, url);
+    }
   }
 
 }
Index: dev/core/src/com/google/gwt/dev/shell/ie/LowLevelIE6.java
===================================================================
--- dev/core/src/com/google/gwt/dev/shell/ie/LowLevelIE6.java	(revision 6365)
+++ dev/core/src/com/google/gwt/dev/shell/ie/LowLevelIE6.java	(working copy)
@@ -16,13 +16,18 @@
 package com.google.gwt.dev.shell.ie;
 
 import com.google.gwt.core.ext.TreeLogger;
-import com.google.gwt.dev.shell.LowLevel;
+import com.google.gwt.util.tools.Utility;
 
+import java.io.File;
+import java.io.IOException;
+
 /**
  * Various low-level helper methods for dealing with COM and such.
  */
 class LowLevelIE6 {
 
+  private static boolean sInitialized = false;
+
   /**
    * Does an HTTP GET that works with Windows proxy settings. Set the system
    * property <code>gwt.debugLowLevelHttpGet</code> to print failure status
@@ -35,7 +40,9 @@
    */
   public static byte[] httpGet(TreeLogger branch, String userAgent, String url,
       boolean debugFlag) {
-    init();
+    if (!init()) {
+      return null;
+    }
     byte[][] out = new byte[1][];
     int status = _httpGet(userAgent, url, out);
     if (status == 0) {
@@ -49,9 +56,23 @@
     }
   }
 
-  public static synchronized void init() {
-    // Force LowLevel initialization to load gwt-ll
-    LowLevel.init();
+  public static synchronized boolean init() {
+    if (!sInitialized) {
+      File lib = new File(Utility.getInstallPath(), "gwt-ll.dll");
+      if (!lib.exists()) {
+        return false;
+      }
+      try {
+        // Try to make canonical.
+        System.load(lib.getCanonicalPath());
+      } catch (IOException e) {
+        return false;
+      } catch (UnsatisfiedLinkError e) {
+        return false;
+      }
+      sInitialized = true;
+    }
+    return true;
   }
 
   // CHECKSTYLE_OFF
Index: distro-source/build.xml
===================================================================
--- distro-source/build.xml	(revision 6379)
+++ distro-source/build.xml	(working copy)
@@ -26,6 +26,9 @@
       <zipfileset file="${gwt.build.lib}/gwt-soyc-vis.jar" prefix="${project.distname}" />
       <zipfileset file="${gwt.build.lib}/gwt-api-checker.jar" prefix="${project.distname}" />
 
+      <!-- jni libs-->
+      <zipfileset dir="${gwt.build.jni}/windows" prefix="${project.distname}" />
+
       <!-- raw files -->
       <zipfileset dir="${dist.resources}" prefix="${project.distname}" />
       <zipfileset dir="src" prefix="${project.distname}" />

Property changes on: jni
___________________________________________________________________
Added: svn:mergeinfo
   Merged /changes/bobv/singlejsoimpl_sans_annotation_r4770/jni:r4771-4850
   Merged /changes/bobv/elide_rpc_type_names_r4602/jni:r4603-4788
   Merged /releases/1.6/jni:r3684-4911,4963,5023
   Merged /changes/bobv/web_mode_stack_traces_r4761/jni:r4763-4764,4804
   Merged /changes/spoon/pending/jni:r4539
   Merged /changes/bobv/jso_single_impl_r4432/jni:r4433-4641
   Merged /changes/bobv/jso_single_impl_r4642/jni:r4643-4688

Index: jni/build.xml
===================================================================
--- jni/build.xml	(revision 6365)
+++ jni/build.xml	(working copy)
@@ -1,10 +1,9 @@
 <project name="jni" default="build" basedir=".">
   <property name="gwt.root" location=".." />
   <property name="project.tail" value="jni" />
-  <import file="${gwt.root}/platforms.ant.xml" />
+  <import file="${gwt.root}/common.ant.xml" />
 
-  <target name="test" description="Tests this project, but only on this platform">
-    <gwt.ant dir="core" target="test"/>
-    <gwt.ant dir="${build.host.platform}" target="test"/>
-  </target>  
+  <target name="build" description="Build each platforms">
+    <gwt.ant dir="windows" target="build"/>
+  </target>
 </project>
