Merged Claus's Java release definition for OS X into JavaRelease::AppleJDK6. development
authorJan Vrany <jan.vrany@fit.cvut.cz>
Thu, 06 Feb 2014 11:10:48 +0100
branchdevelopment
changeset 3009 024e71f1142e
parent 3008 414e6567b574
child 3010 8b3f1f16a660
Merged Claus's Java release definition for OS X into JavaRelease::AppleJDK6.
JavaRelease.st
--- a/JavaRelease.st	Thu Feb 06 10:48:39 2014 +0100
+++ b/JavaRelease.st	Thu Feb 06 11:10:48 2014 +0100
@@ -41,6 +41,13 @@
 	privateIn:JavaRelease
 !
 
+JavaRelease::OpenJDK6 subclass:#AppleJDK6
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:'JavaVMData'
+	privateIn:JavaRelease
+!
+
 JavaRelease::OpenJDK6 subclass:#OpenJDK7
 	instanceVariableNames:''
 	classVariableNames:''
@@ -137,18 +144,26 @@
 
 JDK6
     "Meta-release - return either OpenJDK or OracleJDK"
-    ^self openJDK6 isAvailable 
-        ifTrue:[self openJDK6]
-        ifFalse:[self oracleJDK6].
+
+    self openJDK6 isAvailable ifTrue:[^ self openJDK6].
+    self oracleJDK6 isAvailable ifTrue:[^ self oracleJDK6].
+    self allSubclassesDo:[:rel |
+        (rel isJDK6 and:[ rel isAvailable ]) ifTrue:[^ rel instance ].
+    ].
+    self error:'no JDK6 found'
 
     "Created: / 16-02-2013 / 09:21:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 JDK7
     "Meta-release - return either OpenJDK or OracleJDK"
-    ^self openJDK7 isAvailable 
-        ifTrue:[self openJDK7]
-        ifFalse:[self oracleJDK7].
+
+    self openJDK7 isAvailable ifTrue:[^ self openJDK7].
+    self oracleJDK7 isAvailable ifTrue:[^ self oracleJDK7].
+    self allSubclassesDo:[:rel |
+        (rel isJDK7 and:[ rel isAvailable ]) ifTrue:[^ rel instance ].
+    ].
+    self error:'no JDK7 found'
 
     "
         JavaRelease JDK6
@@ -159,6 +174,12 @@
     "Created: / 16-02-2013 / 09:21:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+appleJDK6
+    ^ AppleJDK6 instance
+
+    "Created: / 06-02-2014 / 11:01:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
 openJDK6
     ^ OpenJDK6 instance
 
@@ -185,8 +206,11 @@
     "Created: / 12-02-2013 / 03:03:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
-oracleJRE7
-    ^ OracleJRE7 instance
+osxJDK6
+    <resource: #obsolete>
+    ^ self appleJDK6
+
+    "Modified: / 06-02-2014 / 11:01:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 sunJDK122
@@ -243,10 +267,10 @@
             (OperatingSystem executeCommand:'java -version' outputTo:out) ifTrue:[
                 out := out contents.
                 releases := self all select:[:rel | rel validateJavaVersionString:out].
-                ('/System/Library/Java' asFilename) exists  
-                releases do:[:each |
-                    each javaHome:('/System/Library/Java/Home' asFilename).
-                ].
+"/                "/ ('/System/Library/Java' asFilename) exists.  
+"/                releases do:[:each |
+"/                    each javaHome:('/System/Library/Java/Home' asFilename).
+"/                ].
             ].
         ].
         releases isEmpty ifTrue: [ 
@@ -371,6 +395,14 @@
     ^self class == JavaRelease
 
     "Created: / 22-11-2010 / 13:33:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+isJDK6
+    ^ false
+!
+
+isJDK7
+    ^ false
 ! !
 
 !JavaRelease methodsFor:'accessing'!
@@ -381,16 +413,26 @@
     bootClassPath isNil ifTrue:[
         | jreHome libs |
 
-        jreHome := self jreHome.
-        libs := jreHome / 'lib'.
-        bootClassPath := OrderedCollection new.
-        libs directoryContentsAsFilenames do:[:each|
-            (each pathName endsWith:'.jar') ifTrue:[
-                (each pathName endsWith: 'rt.jar') ifTrue:[
-                    bootClassPath addFirst: each pathName
-                ] ifFalse:[
-                    bootClassPath addLast: each pathName
-                ]
+        jreHome := self jreHome.    
+        jreHome notNil ifTrue:[
+            libs := jreHome / (self libDirInJreHome).
+            bootClassPath := OrderedCollection new.
+            libs exists ifFalse:[
+                self error:'no lib found in jre home directory'
+            ] ifTrue:[
+                libs directoryContentsAsFilenames do:[:each|
+                    |pathName baseName|
+
+                    baseName := each baseName.
+                    (baseName endsWith:'.jar') ifTrue:[
+                        pathName := each pathName.
+                        (baseName endsWith: (self nameOf_rt_dot_jar)) ifTrue:[
+                            bootClassPath addFirst: pathName
+                        ] ifFalse:[
+                            bootClassPath addLast: pathName
+                        ]
+                    ].
+                ].
             ].
         ].
     ].
@@ -398,6 +440,7 @@
 
     "
     Java release bootClassPath
+    Java release jreHome
     "
 
     "Created: / 02-11-2011 / 12:19:43 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
@@ -520,8 +563,10 @@
 
     "Answer a set of possible java homes, those directories are searched"
 
-
-    OperatingSystem isUNIXlike ifTrue:[ ^ self javaHomesOnUNIX ].
+    OperatingSystem isUNIXlike ifTrue:[ 
+        OperatingSystem isOSXlike ifTrue:[ ^ self javaHomesOnOSX ].
+        ^ self javaHomesOnUNIX 
+    ].
     OperatingSystem isMSWINDOWSlike ifTrue:[ ^ self javaHomesOnWindows ].
     self error:'Unsupported platform'.
     ^ #()
@@ -529,6 +574,11 @@
     "Modified: / 22-11-2010 / 13:28:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+javaHomesOnOSX
+    "/ to be redefined in OSX release classes
+    ^ #()
+!
+
 javaHomesOnUNIX
     "raise an error: must be redefined in concrete subclass(es)"
 
@@ -574,10 +624,6 @@
 
     | jreHome |
 
-    OperatingSystem isOSXlike ifTrue:[
-        ^ '/System/Library/Java/Home' asFilename
-    ].
-
     self javaHome isNil ifTrue:[ ^ nil ].
 
     ^(jreHome := self javaHome asFilename / 'jre') exists
@@ -587,6 +633,14 @@
     "Created: / 27-10-2010 / 21:24:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+libDirInJreHome
+    "Returns the relative path to the lib directory, relative to the jreHome.
+     For all 'normal' systems, this is 'lib';
+     but under max-osx, this is 'Classes' - sigh"
+
+    ^ 'lib'
+!
+
 name
 
     "Answer a human readable name of the Java release such as Sun JDK 1.2.2 or OpenJDK 6"
@@ -596,6 +650,14 @@
     "Created: / 27-10-2010 / 18:53:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
+nameOf_rt_dot_jar
+    "Returns the name of the class library.
+     For all 'normal' systems, this is 'rt.jar';
+     but under max-osx, this is 'classes.jar' - sigh"
+
+    ^ 'rt.jar'
+!
+
 priority
 
     ^50
@@ -979,6 +1041,12 @@
     ^ 'Id::                                                                                                                        '
 ! !
 
+!JavaRelease::OpenJDK6 class methodsFor:'queries'!
+
+isJDK6
+    ^ true
+! !
+
 !JavaRelease::OpenJDK6 methodsFor:'accessing'!
 
 javaExtDirsOnUNIX
@@ -1149,6 +1217,9 @@
     "
         JavaRelease openJDK7 searchForSourcePath; sourcePath
         JavaRelease sunJDK6 searchForSourcePath; sourcePath
+        JavaRelease openJDK6 searchForSourcePath; sourcePath  
+        JavaRelease openJDK6 jdkHome  
+        JavaRelease openJDK6 jreHome  
     "
 
     "Created: / 03-09-2012 / 18:38:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -1183,6 +1254,154 @@
     ^ aVersionString matches: 'java version "1.6.*'
 ! !
 
+!JavaRelease::AppleJDK6 class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2014 by Claus Gittinger
+"
+!
+
+documentation
+"
+    JDK6 as installed on a mac, running osx
+"
+! !
+
+!JavaRelease::AppleJDK6 class methodsFor:'queries'!
+
+isJDK6
+    ^ true
+! !
+
+!JavaRelease::AppleJDK6 methodsFor:'accessing'!
+
+javaExtDirsOnUNIX
+
+    ^{
+        self jreHome asFilename / 'Extensions' .
+    }
+!
+
+javaExtDirsOnWindows
+    "/ never exists on windows
+    ^ #()
+!
+
+javaHomesOnOSX
+    ^ {
+        '/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents' .
+        '/System/Library/Java'
+      }
+
+    "
+    JavaRelease::OsxJDK6 new javaHomesOnUNIX
+    "
+!
+
+javaHomesOnWindows
+    "/ never exists on windows
+    ^ #()
+!
+
+javaNativeMethodsImplementation
+    "Returns an object that imolements native methods."
+
+    ^ JavaNativeMethodImpl_OpenJDK6
+
+    "Modified: / 16-01-2013 / 19:59:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+jreHome
+    "Answers the directory where the JRE lives"
+
+    OperatingSystem isOSXlike ifTrue:[
+        ^ '/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents' asFilename.
+    ].
+    ^ super jreHome
+!
+
+libDirInJreHome
+    "Returns the relative path to the lib directory, relative to the jreHome.
+     For all 'normal' systems, this is 'lib';
+     but under max-osx, this is 'Classes' - sigh"
+
+    ^ 'Classes'
+!
+
+name
+    "superclass JavaRelease says that I am responsible to implement this method"
+
+    ^ 'OSX JDK 6'
+
+    "Modified: / 27-10-2010 / 19:16:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+nameOf_rt_dot_jar
+    "Returns the name of the class library.
+     For all 'normal' systems, this is 'rt.jar';
+     but under max-osx, this is 'classes.jar' - sigh"
+
+    ^ 'classes.jar'
+!
+
+priority
+
+    ^80
+    "/^70
+
+    "Created: / 22-11-2010 / 13:35:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 04-02-2011 / 06:59:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+selector
+    "Returns instance-creation selector to get the receiver.
+     See JavaRelease class, protocol instance creation"
+
+    ^#osxJDK6
+! !
+
+!JavaRelease::AppleJDK6 methodsFor:'searching'!
+
+searchForSourcePath
+
+    | jdkHome src_zip |
+
+    super searchForSourcePath.
+
+    sourcePath := OrderedCollection new.
+    jdkHome := self jdkHome.
+    jdkHome notNil ifTrue:[
+        src_zip := jdkHome asFilename / 'src.zip'.
+        src_zip exists ifTrue:[sourcePath add: src_zip pathName].
+    ].
+
+    "
+        JavaRelease openJDK7 searchForSourcePath; sourcePath
+        JavaRelease sunJDK6 searchForSourcePath; sourcePath
+        JavaRelease openJDK6 searchForSourcePath; sourcePath  
+        JavaRelease openJDK6 jdkHome  
+        JavaRelease openJDK6 jreHome  
+    "
+
+    "Created: / 03-09-2012 / 18:38:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 23-01-2013 / 12:22:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified (comment): / 06-02-2013 / 12:55:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!JavaRelease::AppleJDK6 methodsFor:'validating'!
+
+validateJavaHome2: home
+    ^ true
+!
+
+validateJavaVersionString:aVersionString
+    "Return true if aVersionString (which is what 'java -version' returns)
+     matches what I expect."
+
+    ^ aVersionString matches: 'java version "1.6.*'
+! !
+
 !JavaRelease::OpenJDK7 class methodsFor:'documentation'!
 
 copyright
@@ -1213,6 +1432,12 @@
     ^ 'Id::                                                                                                                        '
 ! !
 
+!JavaRelease::OpenJDK7 class methodsFor:'queries'!
+
+isJDK7
+    ^ true
+! !
+
 !JavaRelease::OpenJDK7 methodsFor:'accessing'!
 
 javaHomesOnUNIX