./build.gradle

Print this page
rev 9457 : 8133750: Parse new JDK version string format in build.gradle
Reviewed-by:

@@ -208,10 +208,33 @@
     } finally {
         try { propStream.close() } catch (Exception e) { }
     }
 }
 
+String[] parseJavaVersion(String jRuntimeVersion) {
+    def jVersion = jRuntimeVersion.split("[-\\+]")[0]
+    def tmpBuildNumber = "0"
+    if (jVersion.startsWith("1.")) {
+        // This is a pre-JEP-223 version string
+        def dashbIdx = jRuntimeVersion.lastIndexOf("-b")
+        if (dashbIdx != -1) {
+            tmpBuildNumber = jRuntimeVersion.substring(dashbIdx + 2)
+        }
+    } else {
+        // This is a post-JEP-223 version string
+        def plusIdx = jRuntimeVersion.indexOf("+")
+        if (plusIdx != -1) {
+            tmpBuildNumber = jRuntimeVersion.substring(plusIdx + 1)
+        }
+    }
+    def jBuildNumber = tmpBuildNumber.split("[-\\+]")[0]
+    def versionInfo = new String[2];
+    versionInfo[0] = jVersion
+    versionInfo[1] = jBuildNumber
+    return versionInfo
+}
+
 /**
  * Fails the build with the specified error message
  *
  * @param msg the reason for the failure
  */

@@ -276,12 +299,13 @@
 defineProperty("JAVAH", cygpath("$JDK_HOME/bin/javah${IS_WINDOWS ? '.exe' : ''}"))
 defineProperty("JAVADOC", cygpath("$JDK_HOME/bin/javadoc${IS_WINDOWS ? '.exe' : ''}"))
 defineProperty("JDK_DOCS", "https://docs.oracle.com/javase/8/docs/api/")
 
 defineProperty("javaRuntimeVersion", System.getProperty("java.runtime.version"))
-defineProperty("javaVersion", javaRuntimeVersion.split("-")[0])
-defineProperty("javaBuildNumber", javaRuntimeVersion.substring(javaRuntimeVersion.lastIndexOf("-b") + 2))
+def javaVersionInfo = parseJavaVersion(javaRuntimeVersion)
+defineProperty("javaVersion", javaVersionInfo[0])
+defineProperty("javaBuildNumber", javaVersionInfo[1])
 
 loadProperties("$projectDir/build.properties")
 
 def String closedCacheStubRuntime = cygpath("$projectDir") + "/../caches/sdk/rt"
 defineProperty("STUB_RUNTIME", BUILD_CLOSED ? closedCacheStubRuntime : cygpath("$JDK_HOME/jre"))

@@ -751,23 +775,23 @@
 // java version "1.7.0_45"
 // Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
 // Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
 //
 // We need to parse the second line
-def inStream = new java.io.BufferedReader(new java.io.InputStreamReader(new java.lang.ProcessBuilder(JAVA, "-version").start().getErrorStream()));
+def inStream = new java.io.BufferedReader(new java.io.InputStreamReader(new java.lang.ProcessBuilder(JAVA, "-fullversion").start().getErrorStream()));
 try {
-    if (inStream.readLine() != null) {
-        String v = inStream.readLine();
+    String v = inStream.readLine().trim();
         if (v != null) {
-            int ib = v.indexOf(" (build ");
+        int ib = v.indexOf("full version \"");
             if (ib != -1) {
-                String ver = v.substring(ib + 8, v.size() - 1);
+            String str = v.substring(ib);
+            String ver = str.substring(str.indexOf("\"") + 1, str.size() - 1);
 
                 defineProperty("jdkRuntimeVersion", ver)
-                defineProperty("jdkVersion", jdkRuntimeVersion.split("-")[0])
-                defineProperty("jdkBuildNumber", jdkRuntimeVersion.substring(jdkRuntimeVersion.lastIndexOf("-b") + 2))
-            }
+            def jdkVersionInfo = parseJavaVersion(ver)
+            defineProperty("jdkVersion", jdkVersionInfo[0])
+            defineProperty("jdkBuildNumber", jdkVersionInfo[1])
         }
     }
 } finally {
     inStream.close();
 }

@@ -826,11 +850,12 @@
 logger.quiet("java version: ${javaVersion}")
 logger.quiet("java build number: ${javaBuildNumber}")
 logger.quiet("jdk.runtime.version: ${jdkRuntimeVersion}")
 logger.quiet("jdk version: ${jdkVersion}")
 logger.quiet("jdk build number: ${jdkBuildNumber}")
-logger.quiet("minimum java build number: ${jfxBuildJdkBuildnumMin}")
+logger.quiet("minimum jdk version: ${jfxBuildJdkVersion}")
+logger.quiet("minimum jdk build number: ${jfxBuildJdkBuildnumMin}")
 logger.quiet("CONF: $CONF")
 logger.quiet("NUM_COMPILE_THREADS: $NUM_COMPILE_THREADS")
 logger.quiet("COMPILE_TARGETS: $COMPILE_TARGETS")
 logger.quiet("COMPILE_FLAGS_FILES: $COMPILE_FLAGS_FILES")
 logger.quiet("HUDSON_JOB_NAME: $HUDSON_JOB_NAME")

@@ -1048,11 +1073,11 @@
  */
 List parseJdkVersion(String version) {
     def arr = version.split("[_\\.]");
     def intArr = [];
     arr.each { s -> intArr += Integer.parseInt(s); }
-    if (intArr.size() < 4) intArr += 0;
+    while (intArr.size() < 4) intArr += 0;
     return intArr;
 }
 
 /**
  * Returns -1, 0, or 1 depending on whether JDK version "a" is less than,

@@ -1076,11 +1101,11 @@
         if (status < 0) {
             fail("java version mismatch: JDK version (${jdkVersion}) < minimum version (${jfxBuildJdkVersion})")
         } else if (status == 0) {
             def buildNum = Integer.parseInt(jdkBuildNumber)
             def minBuildNum = Integer.parseInt(jfxBuildJdkBuildnumMin)
-            if (buildNum < minBuildNum) {
+            if (buildNum != 0 && buildNum < minBuildNum) {
                 fail("JDK build number ($buildNum) < minimum build number ($minBuildNum)")
             }
         }
     }
 }