changeset 20965:05e1ab8c5c6a

relax expectations on JDK library locations
author Doug Simon <doug.simon@oracle.com>
date Wed, 15 Apr 2015 14:06:17 +0200
parents 56a30cfcefaf
children 05a2b72c071f
files mxtool/mx.py
diffstat 1 files changed, 44 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/mxtool/mx.py	Wed Apr 15 03:14:27 2015 +0200
+++ b/mxtool/mx.py	Wed Apr 15 14:06:17 2015 +0200
@@ -2097,7 +2097,9 @@
         return cmp(self.parts, other.parts)
 
 def _filter_non_existant_paths(paths):
-    return os.pathsep.join([path for path in _separatedCygpathW2U(paths).split(os.pathsep) if exists(path)])
+    if paths:
+        return os.pathsep.join([path for path in _separatedCygpathW2U(paths).split(os.pathsep) if exists(path)])
+    return None
 
 """
 A JavaConfig object encapsulates info on how Java commands are run.
@@ -2161,11 +2163,14 @@
         if not exists(outDir):
             os.makedirs(outDir)
         javaSource = join(myDir, 'ClasspathDump.java')
-        if not exists(join(outDir, 'ClasspathDump.class')):
+        javaClass = join(outDir, 'ClasspathDump.class')
+        if not exists(javaClass) or getmtime(javaClass) < getmtime(javaSource):
             subprocess.check_call([self.javac, '-d', _cygpathU2W(outDir), _cygpathU2W(javaSource)], stderr=subprocess.PIPE, stdout=subprocess.PIPE)
         self._bootclasspath, self._extdirs, self._endorseddirs = [x if x != 'null' else None for x in subprocess.check_output([self.java, '-cp', _cygpathU2W(outDir), 'ClasspathDump'], stderr=subprocess.PIPE).split('|')]
-        if not self._bootclasspath or not self._extdirs or not self._endorseddirs:
-            warn("Could not find all classpaths: boot='" + str(self._bootclasspath) + "' extdirs='" + str(self._extdirs) + "' endorseddirs='" + str(self._endorseddirs) + "'")
+        if self.javaCompliance <= JavaCompliance('1.8'):
+            # All 3 system properties accessed by ClasspathDump are expected to exist
+            if not self._bootclasspath or not self._extdirs or not self._endorseddirs:
+                warn("Could not find all classpaths: boot='" + str(self._bootclasspath) + "' extdirs='" + str(self._extdirs) + "' endorseddirs='" + str(self._endorseddirs) + "'")
         self._bootclasspath = _filter_non_existant_paths(self._bootclasspath)
         self._extdirs = _filter_non_existant_paths(self._extdirs)
         self._endorseddirs = _filter_non_existant_paths(self._endorseddirs)
@@ -2214,6 +2219,33 @@
             self._init_classpaths()
         return _separatedCygpathU2W(self._endorseddirs)
 
+    """
+    Add javadoc style options for the library paths of this JDK.
+    """
+    def javadocLibOptions(self, args):
+        if args is None:
+            args = []
+        if self.bootclasspath():
+            args.append('-bootclasspath')
+            args.append(self.bootclasspath())
+        if self.endorseddirs():
+            args.append('-endorseddirs')
+            args.append(self.endorseddirs())
+        if self.extdirs():
+            args.append('-extdirs')
+            args.append(self.extdirs())
+        return args
+
+    """
+    Add javac style options for the library paths of this JDK.
+    """
+    def javacLibOptions(self, args):
+        args = self.javadocLibOptions(args)
+        if self.endorseddirs():
+            args.append('-endorseddirs')
+            args.append(self.endorseddirs())
+        return args
+
     def containsJar(self, jar):
         if self._bootclasspath is None:
             self._init_classpaths()
@@ -2447,7 +2479,8 @@
                 if not args.error_prone:
                     javac = args.alt_javac if args.alt_javac else mainJava.javac
                     self.logCompilation('javac' if not args.alt_javac else args.alt_javac)
-                    javacCmd = [javac, '-g', '-J-Xmx1g', '-source', compliance, '-target', compliance, '-classpath', cp, '-d', outputDir, '-bootclasspath', jdk.bootclasspath(), '-endorseddirs', jdk.endorseddirs(), '-extdirs', jdk.extdirs()]
+                    javacCmd = [javac, '-g', '-J-Xmx1g', '-source', compliance, '-target', compliance, '-classpath', cp, '-d', outputDir]
+                    jdk.javacLibOptions(javacCmd)
                     if jdk.debug_port is not None:
                         javacCmd += ['-J-Xdebug', '-J-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=' + str(jdk.debug_port)]
                     javacCmd += processorArgs
@@ -2459,7 +2492,8 @@
                 else:
                     self.logCompilation('javac (with error-prone)')
                     javaArgs = ['-Xmx1g']
-                    javacArgs = ['-g', '-source', compliance, '-target', compliance, '-classpath', cp, '-d', outputDir, '-bootclasspath', jdk.bootclasspath(), '-endorseddirs', jdk.endorseddirs(), '-extdirs', jdk.extdirs()]
+                    javacArgs = ['-g', '-source', compliance, '-target', compliance, '-classpath', cp, '-d', outputDir]
+                    jdk.javacLibOptions(javacCmd)
                     javacArgs += processorArgs
                     javacArgs += ['@' + argfile.name]
                     if not args.warnAPI:
@@ -2472,10 +2506,8 @@
 
                 jdtArgs = ['-' + compliance,
                          '-cp', cp, '-g', '-enableJavadoc',
-                         '-d', outputDir,
-                         '-bootclasspath', jdk.bootclasspath(),
-                         '-endorseddirs', jdk.endorseddirs(),
-                         '-extdirs', jdk.extdirs()]
+                         '-d', outputDir]
+                jdk.javacLibOptions(jdtArgs)
                 jdtArgs += processorArgs
 
                 jdtProperties = join(self.proj.dir, '.settings', 'org.eclipse.jdt.core.prefs')
@@ -4840,9 +4872,8 @@
                      '-d', out,
                      '-overview', overviewFile,
                      '-sourcepath', sp,
-                     '-source', str(projectJava.javaCompliance),
-                     '-bootclasspath', projectJava.bootclasspath(),
-                     '-extdirs', projectJava.extdirs()] +
+                     '-source', str(projectJava.javaCompliance)] +
+                     projectJava.javadocLibOptions() +
                      ([] if projectJava.javaCompliance < JavaCompliance('1.8') else ['-Xdoclint:none']) +
                      links +
                      extraArgs +