--- a/JavaRelease.st Thu Jan 16 15:31:51 2014 +0100
+++ b/JavaRelease.st Wed Jan 22 16:59:42 2014 +0100
@@ -63,6 +63,13 @@
privateIn:JavaRelease
!
+JavaRelease subclass:#OsxJDK6
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:'JavaVMData'
+ privateIn:JavaRelease
+!
+
JavaRelease subclass:#SunJDK122
instanceVariableNames:''
classVariableNames:''
@@ -138,18 +145,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
@@ -190,6 +205,10 @@
^ OracleJRE7 instance
!
+osxJDK6
+ ^ OsxJDK6 instance
+!
+
sunJDK122
^ SunJDK122 instance
@@ -287,6 +306,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'!
@@ -297,16 +324,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
+ ]
+ ].
+ ].
].
].
].
@@ -314,6 +351,7 @@
"
Java release bootClassPath
+ Java release jreHome
"
"Created: / 02-11-2011 / 12:19:43 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
@@ -436,8 +474,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'.
^ #()
@@ -445,6 +485,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)"
@@ -490,10 +535,6 @@
| jreHome |
- OperatingSystem isOSXlike ifTrue:[
- ^ '/System/Library/Java/Home' asFilename
- ].
-
self javaHome isNil ifTrue:[ ^ nil ].
^(jreHome := self javaHome asFilename / 'jre') exists
@@ -503,6 +544,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"
@@ -512,6 +561,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
@@ -951,7 +1008,13 @@
!
version_SVN
- ^ '$Id: JavaRelease.st,v 1.13 2013-11-24 22:34:10 cg Exp $'
+ ^ '$Id: JavaRelease.st,v 1.14 2014-01-22 15:59:42 cg Exp $'
+! !
+
+!JavaRelease::OpenJDK6 class methodsFor:'queries'!
+
+isJDK6
+ ^ true
! !
!JavaRelease::OpenJDK6 methodsFor:'accessing'!
@@ -1014,6 +1077,15 @@
"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' asFilename.
+ ].
+ ^ super jreHome
+!
+
name
"superclass JavaRelease says that I am responsible to implement this method"
@@ -1124,6 +1196,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>"
@@ -1177,7 +1252,13 @@
!
version_SVN
- ^ '$Id: JavaRelease.st,v 1.13 2013-11-24 22:34:10 cg Exp $'
+ ^ '$Id: JavaRelease.st,v 1.14 2014-01-22 15:59:42 cg Exp $'
+! !
+
+!JavaRelease::OpenJDK7 class methodsFor:'queries'!
+
+isJDK7
+ ^ true
! !
!JavaRelease::OpenJDK7 methodsFor:'accessing'!
@@ -1322,7 +1403,7 @@
!
version_SVN
- ^ '$Id: JavaRelease.st,v 1.13 2013-11-24 22:34:10 cg Exp $'
+ ^ '$Id: JavaRelease.st,v 1.14 2014-01-22 15:59:42 cg Exp $'
! !
!JavaRelease::OracleJDK6 methodsFor:'accessing'!
@@ -1767,6 +1848,226 @@
^ aVersionString matches: 'java version "1.7.*'
! !
+!JavaRelease::OsxJDK6 class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2014 by Claus Gittinger
+"
+!
+
+documentation
+"
+ JDK6 as installed on a mac, running osx
+"
+! !
+
+!JavaRelease::OsxJDK6 class methodsFor:'queries'!
+
+isJDK6
+ ^ true
+! !
+
+!JavaRelease::OsxJDK6 methodsFor:'accessing'!
+
+javaExtDirsOnUNIX
+
+ ^{
+ self jreHome asFilename / 'Extensions' .
+ }
+!
+
+javaExtDirsOnWindows
+ "/ never exists on windows
+ ^ #()
+!
+
+javaHomesOnOSX
+ ^ {
+ '/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"
+
+ ^ 'Open 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::OsxJDK6 methodsFor:'object conversions'!
+
+as_ST_String: aJavaString
+ "Given a java.lang.String instance, returns a coresponfing
+ Smalltalk String"
+
+ | str count offs start stop |
+
+ aJavaString isNil ifTrue: [ ^ nil ].
+self halt:'check if the stuf below is ok'.
+ "/ count := aJavaString instVarNamed:'count'.
+
+ count := aJavaString instVarAt: 3+1"lockWord".
+
+ "/ str := aJavaString instVarNamed:'value'
+
+ str := aJavaString instVarAt: 1+1"lockWord".
+ str size == count
+ ifTrue:
+ [ "cos I don't see any reason to do this"
+ "/ ^ str asOneByteString.
+ ^ str ].
+
+ "/ offs := (aJavaString instVarNamed:'offset').
+
+ offs := aJavaString instVarAt: 2+1"lockWord".
+
+ "/ start := offs + 1.
+
+ start := offs + 1.
+
+ "/ stop := start + (aJavaString instVarNamed:'count') - 1.
+
+ stop := start + count - 1.
+
+ "/ ^ ((aJavaString instVarNamed:'value') copyFrom:start to:stop) asString
+
+ ^ (str copyFrom: start to: stop) asOneByteString
+
+ "Created: / 08-08-1997 / 12:02:55 / cg"
+ "Modified: / 04-01-1999 / 23:55:08 / cg"
+ "Modified: / 22-03-2011 / 17:21:19 / Marcel Hlopko <hlopkmar@fel.cvut.cz>"
+ "Modified: / 08-02-2013 / 00:56:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+as_String:aString
+ "Given a Smalltalk string, returns corresponsing instance of
+ java.lang.String"
+
+ "hard-coding internas of java.lang.String here is bad ..."
+
+ |s|
+
+self halt:'check if the stuf below is ok'.
+ s := Java java_lang_String basicNew.
+ s instVarAt:1+1"_lockWord_" put: aString.
+ s instVarAt:3+1"_lockWord_" put: aString size.
+ ^ s
+
+ "
+ Java as_String:'hello world'
+ "
+
+ "Created: / 07-08-1997 / 21:15:49 / cg"
+ "Modified: / 08-02-2013 / 00:58:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!JavaRelease::OsxJDK6 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::OsxJDK6 methodsFor:'validating'!
+
+validateJavaHome2: home
+ "Bit of a hack, but..."
+ ^OperatingSystem isUNIXlike
+ and: [(home asString includesString: 'oracle') not
+ and: [(home asString includesString: 'sun') not]]
+
+ "Created: / 12-02-2013 / 02:52:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 11-04-2013 / 14:22:19 / Marcel Hlopko <marcel.hlopko@fit.cvut.cz>"
+!
+
+validateJavaVersionString:aVersionString
+ "Return true if aVersionString (which is what 'java -version' returns)
+ matches what I expect."
+
+ ^ aVersionString matches: 'java version "1.6.*'
+! !
+
!JavaRelease::SunJDK122 class methodsFor:'documentation'!
copyright
@@ -1794,7 +2095,7 @@
!
version_SVN
- ^ '$Id: JavaRelease.st,v 1.13 2013-11-24 22:34:10 cg Exp $'
+ ^ '$Id: JavaRelease.st,v 1.14 2014-01-22 15:59:42 cg Exp $'
! !
!JavaRelease::SunJDK122 methodsFor:'accessing'!
@@ -1874,14 +2175,14 @@
!JavaRelease class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libjava/JavaRelease.st,v 1.13 2013-11-24 22:34:10 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libjava/JavaRelease.st,v 1.14 2014-01-22 15:59:42 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libjava/JavaRelease.st,v 1.13 2013-11-24 22:34:10 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libjava/JavaRelease.st,v 1.14 2014-01-22 15:59:42 cg Exp $'
!
version_SVN
- ^ '$Id: JavaRelease.st,v 1.13 2013-11-24 22:34:10 cg Exp $'
+ ^ '$Id: JavaRelease.st,v 1.14 2014-01-22 15:59:42 cg Exp $'
! !