You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ka...@apache.org on 2011/04/14 17:21:17 UTC

svn commit: r1092333 - /db/derby/code/trunk/java/build/org/apache/derbyPreBuild/PropertySetter.java

Author: kahatlen
Date: Thu Apr 14 15:21:17 2011
New Revision: 1092333

URL: http://svn.apache.org/viewvc?rev=1092333&view=rev
Log:
DERBY-5189: PropertySetter should ignore GCJ installations

Modified:
    db/derby/code/trunk/java/build/org/apache/derbyPreBuild/PropertySetter.java

Modified: db/derby/code/trunk/java/build/org/apache/derbyPreBuild/PropertySetter.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/build/org/apache/derbyPreBuild/PropertySetter.java?rev=1092333&r1=1092332&r2=1092333&view=diff
==============================================================================
--- db/derby/code/trunk/java/build/org/apache/derbyPreBuild/PropertySetter.java (original)
+++ db/derby/code/trunk/java/build/org/apache/derbyPreBuild/PropertySetter.java Thu Apr 14 15:21:17 2011
@@ -584,19 +584,49 @@ public class PropertySetter extends Task
 
         Arrays.sort( versions );
 
-        File        javadir = versions[ count - 1 ];
-        String      libStub = "";
+        // Search the versions backwards (highest first) until a usable one
+        // is found.
+        for (int i = count - 1; i >= 0; i--) {
+            File javadir = versions[i];
+
+            if (isExcludedJDK(javadir)) {
+                // This directory contains a JDK that we don't expect to
+                // work. Skip it.
+                continue;
+            }
 
-        //
-        // If the selected java dir is a JDK rather than a JRE, then it
-        // will have a jre subdirectory
-        //
-        File        jreSubdirectory = new File( javadir, "jre" );
-        if ( jreSubdirectory.exists() ) { libStub = libStub + File.separator + "jre"; }
+            String libStub = javadir.getAbsolutePath();
+
+            //
+            // If the selected java dir is a JDK rather than a JRE, then it
+            // will have a jre subdirectory
+            //
+            File jreSubdirectory = new File(javadir, "jre");
+            if (jreSubdirectory.exists()) {
+                libStub = libStub + File.separator + "jre";
+            }
+
+            libStub = libStub + File.separator + "lib";
 
-        libStub = libStub + File.separator + "lib";
+            return libStub;
+        }
+
+        return null;
+    }
 
-        return javadir.getAbsolutePath() + libStub;
+    /**
+     * Check if the specified directory should be excluded when searching for
+     * a usable set of Java libraries.
+     *
+     * @param dir the directory to check
+     * @return {@code true} if the libraries in the directory should not be
+     * used for constructing a compile classpath
+     */
+    private static boolean isExcludedJDK(File dir) {
+        // DERBY-5189: The libraries that come with GCJ lack some classes in
+        // the javax.management.remote package and cannot be used for building
+        // Derby.
+        return dir.getName().toLowerCase().contains("gcj");
     }
 
     // JDK heuristics based on inspecting JARs.