--- a/AbstractOperatingSystem.st Tue Mar 05 18:10:13 2013 +0000
+++ b/AbstractOperatingSystem.st Wed Mar 13 00:42:41 2013 +0000
@@ -189,19 +189,19 @@
osType := self getSystemType.
osType = 'win32' ifTrue:[
- ^ Win32OperatingSystem
+ ^ Win32OperatingSystem
].
osType = 'osx' ifTrue:[
- ^ OSXOperatingSystem
+ ^ OSXOperatingSystem
].
osType = 'os2' ifTrue:[
- ^ OS2OperatingSystem
+ ^ OS2OperatingSystem
].
osType = 'macos' ifTrue:[
- ^ MacOperatingSystem
+ ^ MacOperatingSystem
].
((osType = 'VMS') or:[osType = 'openVMS']) ifTrue:[
- ^ OpenVMSOperatingSystem
+ ^ OpenVMSOperatingSystem
].
^ UnixOperatingSystem
!
@@ -1169,228 +1169,228 @@
terminateLock := Semaphore forMutualExclusion.
((externalInStream := anInStream) notNil
and:[externalInStream isExternalStream not]) ifTrue:[
- pIn := NonPositionableExternalStream makePipe.
- inStreamToClose := externalInStream := pIn at:1.
- shuffledInStream := pIn at:2.
- anInStream isBinary ifTrue:[
- shuffledInStream binary
- ].
- lineWise ifFalse:[
- shuffledInStream blocking:false.
- ].
-
- "/ start a reader process, shuffling data from the given
- "/ inStream to the pipe (which is connected to the commands input)
- inputShufflerProcess :=
- [
- [
- [anInStream atEnd] whileFalse:[
- self shuffleFrom:anInStream to:shuffledInStream lineWise:lineWise.
- shuffledInStream flush
- ]
- ] ensure:[
- shuffledInStream close
- ]
- ] newProcess
- name:'cmd input shuffler';
+ pIn := NonPositionableExternalStream makePipe.
+ inStreamToClose := externalInStream := pIn at:1.
+ shuffledInStream := pIn at:2.
+ anInStream isBinary ifTrue:[
+ shuffledInStream binary
+ ].
+ lineWise ifFalse:[
+ shuffledInStream blocking:false.
+ ].
+
+ "/ start a reader process, shuffling data from the given
+ "/ inStream to the pipe (which is connected to the commands input)
+ inputShufflerProcess :=
+ [
+ [
+ [anInStream atEnd] whileFalse:[
+ self shuffleFrom:anInStream to:shuffledInStream lineWise:lineWise.
+ shuffledInStream flush
+ ]
+ ] ensure:[
+ shuffledInStream close
+ ]
+ ] newProcess
+ name:'cmd input shuffler';
"/ beSystemProcess;
- resume.
+ resume.
].
((externalOutStream := anOutStream) notNil
and:[externalOutStream isExternalStream not]) ifTrue:[
- pOut := NonPositionableExternalStream makePipe.
- shuffledOutStream := (pOut at:1).
- anOutStream isBinary ifTrue:[
- shuffledOutStream binary
- ].
- outStreamToClose := externalOutStream := pOut at:2.
- outputShufflerProcess :=
- [
- WriteError handle:[:ex |
- "/ ignored
- ] do:[
- self shuffleAllFrom:shuffledOutStream to:anOutStream lineWise:lineWise lockWith:terminateLock.
- ].
- ] newProcess
- name:'cmd output shuffler';
+ pOut := NonPositionableExternalStream makePipe.
+ shuffledOutStream := (pOut at:1).
+ anOutStream isBinary ifTrue:[
+ shuffledOutStream binary
+ ].
+ outStreamToClose := externalOutStream := pOut at:2.
+ outputShufflerProcess :=
+ [
+ WriteError handle:[:ex |
+ "/ ignored
+ ] do:[
+ self shuffleAllFrom:shuffledOutStream to:anOutStream lineWise:lineWise lockWith:terminateLock.
+ ].
+ ] newProcess
+ name:'cmd output shuffler';
"/ beSystemProcess;
- resume.
+ resume.
].
(externalErrStream := anErrStream) notNil ifTrue:[
- anErrStream == anOutStream ifTrue:[
- externalErrStream := externalOutStream
- ] ifFalse:[
- anErrStream isExternalStream ifFalse:[
- pErr := NonPositionableExternalStream makePipe.
- shuffledErrStream := (pErr at:1).
- anErrStream isBinary ifTrue:[
- shuffledErrStream binary
- ].
- errStreamToClose := externalErrStream := pErr at:2.
- errorShufflerProcess :=
- [
- self shuffleAllFrom:shuffledErrStream to:anErrStream lineWise:lineWise lockWith:terminateLock.
- ] newProcess
- name:'cmd err-output shuffler';
+ anErrStream == anOutStream ifTrue:[
+ externalErrStream := externalOutStream
+ ] ifFalse:[
+ anErrStream isExternalStream ifFalse:[
+ pErr := NonPositionableExternalStream makePipe.
+ shuffledErrStream := (pErr at:1).
+ anErrStream isBinary ifTrue:[
+ shuffledErrStream binary
+ ].
+ errStreamToClose := externalErrStream := pErr at:2.
+ errorShufflerProcess :=
+ [
+ self shuffleAllFrom:shuffledErrStream to:anErrStream lineWise:lineWise lockWith:terminateLock.
+ ] newProcess
+ name:'cmd err-output shuffler';
"/ beSystemProcess;
- resume.
- ]
- ]
+ resume.
+ ]
+ ]
].
((externalAuxStream := anAuxStream) notNil
and:[externalAuxStream isExternalStream not]) ifTrue:[
- pAux := NonPositionableExternalStream makePipe.
- auxStreamToClose := externalAuxStream := pAux at:1.
- shuffledAuxStream := pAux at:2.
- shuffledAuxStream blocking:false.
- anAuxStream isBinary ifTrue:[
- shuffledAuxStream binary
- ].
-
- "/ start a reader process, shuffling data from the given
- "/ auxStream to the pipe (which is connected to the commands aux)
- auxShufflerProcess :=
- [
- [
- [anAuxStream atEnd] whileFalse:[
- self shuffleFrom:anAuxStream to:shuffledAuxStream lineWise:false.
- shuffledAuxStream flush
- ]
- ] ensure:[
- shuffledAuxStream close
- ]
- ] newProcess
- name:'cmd aux shuffler';
+ pAux := NonPositionableExternalStream makePipe.
+ auxStreamToClose := externalAuxStream := pAux at:1.
+ shuffledAuxStream := pAux at:2.
+ shuffledAuxStream blocking:false.
+ anAuxStream isBinary ifTrue:[
+ shuffledAuxStream binary
+ ].
+
+ "/ start a reader process, shuffling data from the given
+ "/ auxStream to the pipe (which is connected to the commands aux)
+ auxShufflerProcess :=
+ [
+ [
+ [anAuxStream atEnd] whileFalse:[
+ self shuffleFrom:anAuxStream to:shuffledAuxStream lineWise:false.
+ shuffledAuxStream flush
+ ]
+ ] ensure:[
+ shuffledAuxStream close
+ ]
+ ] newProcess
+ name:'cmd aux shuffler';
"/ beSystemProcess;
- resume.
+ resume.
].
stopShufflers := [:shuffleRest |
- inputShufflerProcess notNil ifTrue:[
- terminateLock critical:[inputShufflerProcess terminate].
- inputShufflerProcess waitUntilTerminated
- ].
- auxShufflerProcess notNil ifTrue:[
- terminateLock critical:[auxShufflerProcess terminate].
- auxShufflerProcess waitUntilTerminated
- ].
- outputShufflerProcess notNil ifTrue:[
- terminateLock critical:[outputShufflerProcess terminate].
- outputShufflerProcess waitUntilTerminated.
- shuffleRest ifTrue:[ self shuffleRestFrom:shuffledOutStream to:anOutStream lineWise:lineWise ].
- shuffledOutStream close.
- ].
- errorShufflerProcess notNil ifTrue:[
- terminateLock critical:[errorShufflerProcess terminate].
- errorShufflerProcess waitUntilTerminated.
- shuffleRest ifTrue:[ self shuffleRestFrom:shuffledErrStream to:anErrStream lineWise:lineWise ].
- shuffledErrStream close.
- ].
+ inputShufflerProcess notNil ifTrue:[
+ terminateLock critical:[inputShufflerProcess terminate].
+ inputShufflerProcess waitUntilTerminated
+ ].
+ auxShufflerProcess notNil ifTrue:[
+ terminateLock critical:[auxShufflerProcess terminate].
+ auxShufflerProcess waitUntilTerminated
+ ].
+ outputShufflerProcess notNil ifTrue:[
+ terminateLock critical:[outputShufflerProcess terminate].
+ outputShufflerProcess waitUntilTerminated.
+ shuffleRest ifTrue:[ self shuffleRestFrom:shuffledOutStream to:anOutStream lineWise:lineWise ].
+ shuffledOutStream close.
+ ].
+ errorShufflerProcess notNil ifTrue:[
+ terminateLock critical:[errorShufflerProcess terminate].
+ errorShufflerProcess waitUntilTerminated.
+ shuffleRest ifTrue:[ self shuffleRestFrom:shuffledErrStream to:anErrStream lineWise:lineWise ].
+ shuffledErrStream close.
+ ].
].
closeStreams := [
- inStreamToClose notNil ifTrue:[
- inStreamToClose close
- ].
- errStreamToClose notNil ifTrue:[
- errStreamToClose close
- ].
- outStreamToClose notNil ifTrue:[
- outStreamToClose close
- ].
- auxStreamToClose notNil ifTrue:[
- auxStreamToClose close
- ].
+ inStreamToClose notNil ifTrue:[
+ inStreamToClose close
+ ].
+ errStreamToClose notNil ifTrue:[
+ errStreamToClose close
+ ].
+ outStreamToClose notNil ifTrue:[
+ outStreamToClose close
+ ].
+ auxStreamToClose notNil ifTrue:[
+ auxStreamToClose close
+ ].
].
sema := Semaphore new name:'OS command wait'.
[
- pid := Processor
- monitor:[
- self
- startProcess:aCommandString
- inputFrom:externalInStream
- outputTo:externalOutStream
- errorTo:externalErrStream
- auxFrom:externalAuxStream
- environment:environmentDictionary
- inDirectory:dirOrNil
- ]
- action:[:status |
- status stillAlive ifFalse:[
- exitStatus := status.
- sema signal.
- self closePid:pid
- ]
- ].
-
- pid isNil ifTrue:[
- exitStatus := self osProcessStatusClass processCreationFailure
- ] ifFalse:[
- sema wait.
- ].
+ pid := Processor
+ monitor:[
+ self
+ startProcess:aCommandString
+ inputFrom:externalInStream
+ outputTo:externalOutStream
+ errorTo:externalErrStream
+ auxFrom:externalAuxStream
+ environment:environmentDictionary
+ inDirectory:dirOrNil
+ ]
+ action:[:status |
+ status stillAlive ifFalse:[
+ exitStatus := status.
+ sema signal.
+ self closePid:pid
+ ]
+ ].
+
+ pid isNil ifTrue:[
+ exitStatus := self osProcessStatusClass processCreationFailure
+ ] ifFalse:[
+ sema wait.
+ ].
] ifCurtailed:[
- closeStreams value.
- pid notNil ifTrue:[
- "/ terminate the os-command (and all of its forked commands)
- self terminateProcessGroup:pid.
- self terminateProcess:pid.
- self closePid:pid.
- ].
- stopShufflers value:false.
+ closeStreams value.
+ pid notNil ifTrue:[
+ "/ terminate the os-command (and all of its forked commands)
+ self terminateProcessGroup:pid.
+ self terminateProcess:pid.
+ self closePid:pid.
+ ].
+ stopShufflers value:false.
].
closeStreams value.
stopShufflers value:true.
exitStatus success ifFalse:[
- ^ aBlock value:exitStatus
+ ^ aBlock value:exitStatus
].
^ true
"
- |outStream errStream|
-
- outStream := '' writeStream.
-
- OperatingSystem executeCommand:'ls -l'
- inputFrom:'abc' readStream
- outputTo:outStream
- errorTo:nil
- inDirectory:nil
- lineWise:true
- onError:[:exitStatus | ^ false].
- outStream contents
- "
-
- "
- |outStream errStream|
-
- outStream := #[] writeStream.
-
- OperatingSystem executeCommand:'cat'
- inputFrom:(ByteArray new:5000000) readStream
- outputTo:outStream
- errorTo:nil
- inDirectory:nil
- lineWise:false
- onError:[:exitStatus | ^ false].
- outStream size
- "
-
- "
- |outStream errStream|
-
- outStream := '' writeStream.
-
- OperatingSystem executeCommand:'gpg -s --batch --no-tty --passphrase-fd 0 /tmp/passwd'
- inputFrom:'bla' readStream
- outputTo:outStream
- errorTo:nil
- inDirectory:nil
- lineWise:true
- onError:[:exitStatus | false].
- outStream contents
+ |outStream errStream|
+
+ outStream := '' writeStream.
+
+ OperatingSystem executeCommand:'ls -l'
+ inputFrom:'abc' readStream
+ outputTo:outStream
+ errorTo:nil
+ inDirectory:nil
+ lineWise:true
+ onError:[:exitStatus | ^ false].
+ outStream contents
+ "
+
+ "
+ |outStream errStream|
+
+ outStream := #[] writeStream.
+
+ OperatingSystem executeCommand:'cat'
+ inputFrom:(ByteArray new:5000000) readStream
+ outputTo:outStream
+ errorTo:nil
+ inDirectory:nil
+ lineWise:false
+ onError:[:exitStatus | ^ false].
+ outStream size
+ "
+
+ "
+ |outStream errStream|
+
+ outStream := '' writeStream.
+
+ OperatingSystem executeCommand:'gpg -s --batch --no-tty --passphrase-fd 0 /tmp/passwd'
+ inputFrom:'bla' readStream
+ outputTo:outStream
+ errorTo:nil
+ inDirectory:nil
+ lineWise:true
+ onError:[:exitStatus | false].
+ outStream contents
"
"Modified: / 11-02-2007 / 20:54:39 / cg"
@@ -4354,7 +4354,7 @@
encodePath:pathName
"encode the pathName for use with system calls.
- E.g. linux system calls accept sigle byte strings only,
+ E.g. linux system calls accept single byte strings only,
so the pathName has been UTF-8 encoded, before using it in a system call."
^ pathName
@@ -4649,9 +4649,13 @@
break;
#endif
#ifdef AF_IPX
+# if defined(AF_NS) && (AF_NS == AF_IPX)
+// alias
+# else
case AF_IPX:
domainSymbol = @symbol(AF_IPX);
break;
+# endif
#endif
#ifdef AF_AX25
case AF_AX25:
@@ -4962,201 +4966,201 @@
%{
if (__isSmallInteger(domainCode)) {
switch (__intVal(domainCode)) {
-#ifdef AF_INET
+#ifdef WANT__AF_INET
case AF_INET:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_in) );
break;
#endif
-#ifdef AF_INET6
+#ifdef WANT__AF_INET6
case AF_INET6:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_in6) );
break;
#endif
-#ifdef AF_UNIX
+#ifdef WANT__AF_UNIX
case AF_UNIX:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_un) );
break;
#endif
-#ifdef AF_APPLETALK
+#ifdef WANT__AF_APPLETALK
case AF_APPLETALK:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_at) );
break;
#endif
-#ifdef AF_DECnet
+#ifdef WANT__AF_DECnet
case AF_DECnet:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_dn) );
break;
#endif
-#ifdef AF_NS
+#ifdef WANT__AF_NS
case AF_NS:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_ns) );
break;
#endif
-#ifdef AF_X25
+#ifdef WANT__AF_X25
case AF_X25:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_x25) );
break;
#endif
-#ifdef AF_SNA
+#ifdef WANT__AF_SNA
case AF_SNA:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_sna) );
break;
#endif
-#ifdef AF_RAW
+#ifdef WANT__AF_RAW
case AF_RAW:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_raw) );
break;
#endif
-#ifdef AF_ISO
+#ifdef WANT__AF_ISO
case AF_ISO:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_iso) );
break;
#endif
-#ifdef AF_ECMA
+#ifdef WANT__AF_ECMA
# if 0
case AF_ECMA:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_ecma) );
break;
# endif
#endif
-#ifdef AF_NETBIOS
+#ifdef WANT__AF_NETBIOS
case AF_NETBIOS:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_netbios) );
break;
#endif
-#ifdef AF_NETBEUI
+#ifdef WANT__AF_NETBEUI
case AF_NETBEUI:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_netbeui) );
break;
#endif
-#ifdef AF_IPX
+#ifdef WANT__AF_IPX
case AF_IPX:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_ipx) );
break;
#endif
-#ifdef AF_AX25
+#ifdef WANT__AF_AX25
case AF_AX25:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_ax25) );
break;
#endif
-#ifdef AF_NETROM
+#ifdef WANT__AF_NETROM
case AF_NETROM:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_netrom) );
break;
#endif
-#ifdef AF_BRIDGE
+#ifdef WANT__AF_BRIDGE
case AF_BRIDGE:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_bridge) );
break;
#endif
-#ifdef AF_BSC
+#ifdef WANT__AF_BSC
case AF_BSC:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_bsc) );
break;
#endif
-#ifdef AF_ROSE
+#ifdef WANT__AF_ROSE
case AF_ROSE:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_rose) );
break;
#endif
-#ifdef AF_IRDA
+#ifdef WANT__AF_IRDA
case AF_IRDA:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_irda) );
break;
#endif
-#ifdef AF_BAN
+#ifdef WANT__AF_BAN
case AF_BAN:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_ban) );
break;
#endif
-#ifdef AF_VOICEVIEW
+#ifdef WANT__AF_VOICEVIEW
case AF_VOICEVIEW:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_voiceview) );
break;
#endif
-#ifdef AF_ATM
+#ifdef WANT__AF_ATM
case AF_ATM:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_atm) );
break;
#endif
-#ifdef AF_ATMPVC
+#ifdef WANT__AF_ATMPVC
case AF_ATMPVC:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_atmpvc) );
break;
#endif
-#ifdef AF_ATMSVC
+#ifdef WANT__AF_ATMSVC
case AF_ATMSVC:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_atmsvc) );
break;
#endif
-#ifdef AF_NETLINK
+#ifdef WANT__AF_NETLINK
case AF_NETLINK:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_netlink) );
break;
#endif
-#ifdef AF_PACKET
+#ifdef WANT__AF_PACKET
case AF_PACKET:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_packet) );
break;
#endif
-#ifdef AF_ASH
+#ifdef WANT__AF_ASH
case AF_ASH:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_ash) );
break;
#endif
-#ifdef AF_ECONET
+#ifdef WANT__AF_ECONET
case AF_ECONET:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_eco) );
break;
#endif
-#ifdef AF_IMPLINK
+#ifdef WANT__AF_IMPLINK
case AF_IMPLINK:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_implink) );
break;
#endif
-#ifdef AF_PUP
+#ifdef WANT__AF_PUP
# if 0
case AF_PUP:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_pup) );
break;
# endif
#endif
-#ifdef AF_CHAOS
+#ifdef WANT__AF_CHAOS
case AF_CHAOS:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_chaos) );
break;
#endif
-#ifdef AF_DLI
+#ifdef WANT__AF_DLI
case AF_DLI:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_dli) );
break;
#endif
-#ifdef AF_LAT
+#ifdef WANT__AF_LAT
case AF_LAT:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_lat) );
break;
#endif
-#ifdef AF_HYLINK
+#ifdef WANT__AF_HYLINK
case AF_HYLINK:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_hylink) );
break;
#endif
-#ifdef AF_FIREFOX
+#ifdef WANT__AF_FIREFOX
case AF_FIREFOX:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_firefox) );
break;
#endif
-#ifdef AF_CLUSTER
+#ifdef WANT__AF_CLUSTER
case AF_CLUSTER:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_cluster) );
break;
#endif
-#ifdef AF_12844
+#ifdef WANT__AF_12844
case AF_12844:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_12844) );
break;
#endif
-#ifdef AF_NETDES
+#ifdef WANT__AF_NETDES
case AF_NETDES:
socketSize = __mkSmallInteger( sizeof(struct sockaddr_netdes) );
break;
@@ -7182,11 +7186,11 @@
!AbstractOperatingSystem class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/AbstractOperatingSystem.st,v 1.230 2013-03-04 15:16:51 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/AbstractOperatingSystem.st,v 1.233 2013-03-11 09:19:38 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/AbstractOperatingSystem.st,v 1.230 2013-03-04 15:16:51 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/AbstractOperatingSystem.st,v 1.233 2013-03-11 09:19:38 cg Exp $'
! !
--- a/ApplicationDefinition.st Tue Mar 05 18:10:13 2013 +0000
+++ b/ApplicationDefinition.st Wed Mar 13 00:42:41 2013 +0000
@@ -98,7 +98,7 @@
appSourcesProjects
"Returns only the application projects (which are included in the application module)"
- ^self preRequisites select:[:each |
+ ^ self effectivePreRequisites select:[:each |
(self moduleFor: each) = self module
].
@@ -128,8 +128,8 @@
stxSourcesProjects
"Returns only the required STX projects (which are included in the STX module)"
- ^self effectivePreRequisites select:[:each |
- (self moduleFor: each) = (self moduleFor: #'stx')
+ ^ self effectivePreRequisites select:[:each |
+ (self moduleFor: each) = (self moduleFor: #stx)
].
"
@@ -764,7 +764,7 @@
!
resourceFilename
- ^ (self rcFilename asFilename withSuffix:'res') name
+ ^ (self rcFilename asFilename withSuffix:'$(RES)') name
"Created: / 07-09-2006 / 17:12:53 / cg"
! !
@@ -1341,11 +1341,6 @@
].
s nextPutLine:(self libraryNameFor:projectID).
].
- self isGUIApplication ifTrue:[
- self guiClassFileNames_win32 do:[:eachFilename |
- s nextPutLine:(eachFilename asFilename withoutSuffix baseName)
- ].
- ].
].
"
@@ -1657,14 +1652,18 @@
ALLLIB=$(LIBFILES) $(APP_IMPORTLIBS) $(APP_RT_LIB)
REQUIRED_LIBS=librun.dll %(REQUIRED_LIBS)
-REQUIRED_FILES=cs3245.dll X11.dll Xext.dll symbols.stc $(REQUIRED_LIBS)
+# REQUIRED_FILES=cs3245.dll X11.dll Xext.dll symbols.stc $(REQUIRED_LIBS)
+REQUIRED_FILES=$(RT_DLL) $(X11_DLL) $(XEXT_DLL) symbols.stc $(REQUIRED_LIBS)
REQUIRED_SUPPORT_DIRS=%(REQUIRED_SUPPORT_DIRS)
target: %(BUILD_TARGET) postBuildCleanup
# the executable, all required files and a self-installing-installer-exe
-ALL:: prereq exe $(REQUIRED_SUPPORT_DIRS) %(ADDITIONAL_TARGETS) postBuildCleanup setup
+ALL:: prereq ALL2
+
+# all, but no prereqs
+ALL_NP:: exe $(REQUIRED_SUPPORT_DIRS) %(ADDITIONAL_TARGETS) postBuildCleanup setup
exe: newBuildDate %(NOCONSOLE_APPLICATION_OR_EMPTY) %(CONSOLE_APPLICATION_OR_EMPTY)
@@ -1795,7 +1794,7 @@
#
# additional rules
#
-%(APPLICATION)Win.res: %(APPLICATION)Win.rc %(APPLICATION).ico
+%(APPLICATION)Win.$(RES): %(APPLICATION)Win.rc %(APPLICATION).ico
main.$(O): buildDate.h main.c bc.mak
@@ -1838,7 +1837,7 @@
-del $(REQUIRED_FILES)
-del main.c
-del *.log
- -del *.res
+ -del *.$(RES)
-rmdir /S /Q resources
-rmdir /S /Q $(OBJDIR)
@@ -2222,6 +2221,9 @@
%(APPLICATION): $(APP_DIRS_TO_MAKE) $(APP_LIBOBJS) $(OBJS)
$(MAKE) link_%(APPLICATION)
+# like ALL, but not prereqs
+ALL_NP:: exe
+
link_%(APPLICATION):
$(MAKE) %(APPLICATION_TYPE) \
TARGET=%(APPLICATION) \
@@ -2475,7 +2477,7 @@
# by the application at the very beginning.
#
# All classes loaded at startup time will be present as precompiled classes.
-# Others might be autoloaded.
+# Others might be autoloaded or loaded explicit using "Smalltalk loadPackage:xxx".
#
%(ALLPREREQUISITE_LIBS)
%(SUBPROJECT_LIBS)
@@ -2919,11 +2921,11 @@
!ApplicationDefinition class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/ApplicationDefinition.st,v 1.214 2013-03-01 19:54:26 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/ApplicationDefinition.st,v 1.218 2013-03-11 20:18:44 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/ApplicationDefinition.st,v 1.214 2013-03-01 19:54:26 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/ApplicationDefinition.st,v 1.218 2013-03-11 20:18:44 cg Exp $'
!
version_SVN
--- a/Class.st Tue Mar 05 18:10:13 2013 +0000
+++ b/Class.st Wed Mar 13 00:42:41 2013 +0000
@@ -21,7 +21,7 @@
category:'Kernel-Classes'
!
-Array variableSubclass:#ArrayWithSequenceNumberValidation
+Array subclass:#ArrayWithSequenceNumberValidation
instanceVariableNames:'sequenceNumber'
classVariableNames:''
poolDictionaries:''
@@ -141,6 +141,7 @@
"
! !
+
!Class class methodsFor:'accessing-flags'!
tryLocalSourceFirst
@@ -189,6 +190,7 @@
^ UpdatingChanges
! !
+
!Class class methodsFor:'creating new classes'!
name:newName
@@ -296,6 +298,7 @@
"Created: / 08-11-2010 / 16:08:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+
!Class class methodsFor:'helpers'!
nameWithoutPrefix:name
@@ -385,6 +388,7 @@
"Modified: / 22-10-2008 / 20:29:50 / cg"
! !
+
!Class class methodsFor:'misc'!
template:aCategoryString
@@ -399,6 +403,7 @@
"Created: / 19.6.1998 / 02:09:06 / cg"
! !
+
!Class class methodsFor:'private'!
flushSubclassInfo
@@ -435,6 +440,7 @@
"Modified: / 06-12-2011 / 16:20:49 / cg"
! !
+
!Class class methodsFor:'queries'!
isBuiltInClass
@@ -502,6 +508,7 @@
"Modified: / 18.3.1999 / 18:16:11 / stefan"
! !
+
!Class methodsFor:'Compatibility-ST/V and V''Age'!
defaultCategoryForSTVorVAGEClasses
@@ -612,6 +619,7 @@
category:(self defaultCategoryForSTVorVAGEClasses)
! !
+
!Class methodsFor:'Compatibility-ST80'!
fileOutSourceOn:aStream
@@ -630,6 +638,7 @@
"Created: / 18.6.1998 / 22:08:45 / cg"
! !
+
!Class methodsFor:'accessing'!
addChangeRecordForClass:aClass andNotifyChangeOf:aspect
@@ -1665,18 +1674,18 @@
"/ for backward compatibility..
aCollection isString ifTrue:[
- Transcript showCR:'warning: string passed to sharedPools:'.
- self sharedPoolNames:(aCollection asCollectionOfWords collect:[:each | each asSymbol]).
- ^ self.
+ Transcript show:self name; showCR:' [warning]: string passed to sharedPools:'.
+ self sharedPoolNames:(aCollection asCollectionOfWords collect:[:each | each asSymbol]).
+ ^ self.
].
self sharedPoolNames:
- (aCollection
- collect:[:each |
- each isString
- ifTrue:[ each asSymbol ]
- ifFalse:[ each name ]
- ]
- ).
+ (aCollection
+ collect:[:each |
+ each isString
+ ifTrue:[ each asSymbol ]
+ ifFalse:[ each name ]
+ ]
+ ).
"Modified: / 03-10-2011 / 10:30:30 / cg"
!
@@ -1882,6 +1891,7 @@
"Created: / 18-07-2011 / 09:14:38 / cg"
! !
+
!Class methodsFor:'adding & removing'!
removeFromSystem
@@ -2257,6 +2267,7 @@
"Modified: / 18.3.1999 / 18:15:30 / stefan"
! !
+
!Class methodsFor:'enumerating'!
allPrivateClassesDo:aBlock
@@ -2296,6 +2307,7 @@
self allPrivateClasses do:aBlock
! !
+
!Class methodsFor:'fileIn interface'!
primitiveDefinitions
@@ -2337,6 +2349,7 @@
"Modified: 10.2.1996 / 12:47:28 / cg"
! !
+
!Class methodsFor:'fileOut'!
basicFileOutDefinitionOn:aStream withNameSpace:forceNameSpace
@@ -2885,6 +2898,7 @@
"Modified: 8.1.1997 / 17:45:51 / cg"
! !
+
!Class methodsFor:'fileOut-binary'!
binaryFileOut
@@ -2984,6 +2998,7 @@
"Created: / 29.12.1998 / 21:38:38 / cg"
! !
+
!Class methodsFor:'fileOut-xml'!
fileOutXML
@@ -3326,6 +3341,7 @@
"
! !
+
!Class methodsFor:'printOut'!
htmlDocumentation
@@ -3472,6 +3488,7 @@
aStream nextPutAll:self name
! !
+
!Class methodsFor:'private-accessing'!
attributes
@@ -3655,6 +3672,7 @@
"Created: / 28-04-2010 / 08:47:20 / cg"
! !
+
!Class methodsFor:'private-changes management'!
addChangeRecordForChangeCategory:category to:aStream
@@ -3767,6 +3785,7 @@
"Modified: 9.11.1996 / 00:10:10 / cg"
! !
+
!Class methodsFor:'queries'!
canHaveExtensions
@@ -4025,6 +4044,7 @@
"
! !
+
!Class methodsFor:'renaming'!
makePrivateIn:newOwner
@@ -4152,6 +4172,7 @@
"Modified: / 31.7.1998 / 15:21:34 / cg"
! !
+
!Class methodsFor:'signature checking'!
classinstSizeFromSignature:aSignature
@@ -4253,6 +4274,7 @@
"Created: 1.4.1997 / 15:23:24 / stefan"
! !
+
!Class methodsFor:'source management'!
binaryRevision
@@ -5101,7 +5123,7 @@
or:[Smalltalk isInitialized not
or: [(sourceCodeManager := self sourceCodeManagerFromBinaryRevision) isNil]])
ifTrue:[
- sourceStream := self localSourceStreamFor:source.
+ sourceStream := self localSourceStreamFor:source.
].
sourceStream isNil ifTrue:[
@@ -5333,6 +5355,7 @@
"Created: / 16-08-2009 / 12:57:53 / Jan Vrany <vranyj1@fel.cvut.cz>"
! !
+
!Class::ArrayWithSequenceNumberValidation methodsFor:'accessing'!
sequenceNumber
@@ -5343,6 +5366,7 @@
sequenceNumber := something.
! !
+
!Class::ArrayWithSequenceNumberValidation methodsFor:'checking'!
checkIfValidFor:aSequenceNumber
@@ -5351,6 +5375,7 @@
"Created: / 06-12-2011 / 16:01:16 / cg"
! !
+
!Class::ClassAttributes class methodsFor:'documentation'!
documentation
@@ -5362,6 +5387,7 @@
"
! !
+
!Class::ClassAttributes methodsFor:'accessing'!
fGuid
@@ -5450,6 +5476,7 @@
"Created: / 23-09-2011 / 10:23:26 / cg"
! !
+
!Class::ClassAttributes methodsFor:'conversion'!
fromSTCPrimitiveArray:anArray
@@ -5465,6 +5492,7 @@
].
! !
+
!Class::SimulatedClassPool class methodsFor:'documentation'!
documentation
@@ -5498,6 +5526,7 @@
! !
+
!Class::SimulatedClassPool methodsFor:'accessing'!
associationAt:aName
@@ -5577,12 +5606,14 @@
].
! !
+
!Class::SimulatedClassPool methodsFor:'accessing-private'!
setClass:aClass
class := aClass
! !
+
!Class::SimulatedClassPool::SimulatedVariableBinding class methodsFor:'documentation'!
documentation
@@ -5591,6 +5622,7 @@
"
! !
+
!Class::SimulatedClassPool::SimulatedVariableBinding methodsFor:'queries'!
isVariableBinding
@@ -5599,14 +5631,15 @@
"Created: / 4.2.2000 / 00:27:20 / cg"
! !
+
!Class class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Class.st,v 1.616 2013-01-24 17:06:21 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Class.st,v 1.617 2013-03-07 09:41:33 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/Class.st,v 1.616 2013-01-24 17:06:21 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Class.st,v 1.617 2013-03-07 09:41:33 cg Exp $'
!
version_SVN
--- a/Collection.st Tue Mar 05 18:10:13 2013 +0000
+++ b/Collection.st Wed Mar 13 00:42:41 2013 +0000
@@ -259,6 +259,7 @@
^ self withSize:n
! !
+
!Collection class methodsFor:'Signal constants'!
emptyCollectionSignal
@@ -509,6 +510,7 @@
].
! !
+
!Collection methodsFor:'accessing'!
anElement
@@ -4147,6 +4149,25 @@
].
graph notEmpty ifTrue:[
+ "search for cycle"
+ |startNode checkBlock|
+
+ checkBlock := [:graphEntry :backTrace|
+ 2 to:graphEntry size do:[:i|
+ |eachChild eachChildGraph|
+ eachChild := graphEntry at:i.
+ (backTrace includesIdentical:eachChild) ifTrue:[
+ backTrace add:eachChild.
+ self error:('cycle in ordering: %1 -> %2' bindWith:startNode with:backTrace reversed) mayProceed:true.
+ ].
+ eachChildGraph := graph at:eachChild.
+ checkBlock value:eachChildGraph value:(backTrace copyWith:eachChild).
+ ].
+ ].
+ graph keysAndValuesDo:[:eachNode :eachGraph|
+ startNode := eachNode.
+ checkBlock value:eachGraph value:(OrderedCollection with:startNode).
+ ].
self error:'cycle in ordering' mayProceed:true.
].
@@ -4459,11 +4480,11 @@
!Collection class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Collection.st,v 1.288 2013-01-25 10:14:44 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Collection.st,v 1.289 2013-03-08 22:36:32 stefan Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/Collection.st,v 1.288 2013-01-25 10:14:44 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Collection.st,v 1.289 2013-03-08 22:36:32 stefan Exp $'
! !
--- a/ExternalStream.st Tue Mar 05 18:10:13 2013 +0000
+++ b/ExternalStream.st Wed Mar 13 00:42:41 2013 +0000
@@ -127,7 +127,7 @@
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
-# include <winsock.h> /* */
+# include <winsock2.h>
# ifdef __DEF_Array
# define Array __DEF_Array
@@ -5735,11 +5735,11 @@
!ExternalStream class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.360 2013-02-08 16:57:45 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.361 2013-03-11 09:48:06 stefan Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.360 2013-02-08 16:57:45 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.361 2013-03-11 09:48:06 stefan Exp $'
! !
--- a/FileDoesNotExistException.st Tue Mar 05 18:10:13 2013 +0000
+++ b/FileDoesNotExistException.st Wed Mar 13 00:42:41 2013 +0000
@@ -1,3 +1,14 @@
+"
+ COPYRIGHT (c) 2011 by eXept Software AG
+ All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice. This software may not
+ be provided or otherwise made available to, or used by, any
+ other person. No title to or ownership of the software is
+ hereby transferred.
+"
"{ Package: 'stx:libbasic' }"
OpenError subclass:#FileDoesNotExistException
@@ -7,13 +18,30 @@
category:'Kernel-Exceptions-Errors'
!
+!FileDoesNotExistException class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2011 by eXept Software AG
+ All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice. This software may not
+ be provided or otherwise made available to, or used by, any
+ other person. No title to or ownership of the software is
+ hereby transferred.
+
+"
+! !
!FileDoesNotExistException class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/FileDoesNotExistException.st,v 1.1 2011-09-09 05:13:24 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/FileDoesNotExistException.st,v 1.2 2013-03-06 17:07:42 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/FileDoesNotExistException.st,v 1.1 2011-09-09 05:13:24 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/FileDoesNotExistException.st,v 1.2 2013-03-06 17:07:42 cg Exp $'
! !
+
--- a/FileStream.st Tue Mar 05 18:10:13 2013 +0000
+++ b/FileStream.st Wed Mar 13 00:42:41 2013 +0000
@@ -95,7 +95,6 @@
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
-# include <winsock.h> /* */
# if 1 // defined(__MINGW64__)
# include <fcntl.h>
@@ -181,6 +180,8 @@
# define HFILE FILE *
#endif /* ! WIN32 */
+#define xxDO_WRAP_CALL_FSEEK
+
#include "stxOSDefs.h"
#ifndef SEEK_SET
@@ -800,7 +801,7 @@
f = __FILEVal(fp);
do {
-#ifdef WIN32
+#if defined(DO_WRAP_CALL_FSEEK)
__threadErrno = 0;
if (__INST(buffered) == true) {
ret = STX_C_CALL3( "fseek", fseek, f, nP, SEEK_SET);
@@ -814,6 +815,7 @@
} else {
ret = lseek(fileno(f), nP, SEEK_SET);
}
+ __threadErrno = errno;
#endif
} while ((ret < 0) && (__threadErrno == EINTR));
if (ret >= 0) {
@@ -1705,11 +1707,11 @@
!FileStream class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.152 2013-01-10 11:43:30 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.155 2013-03-11 15:43:47 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.152 2013-01-10 11:43:30 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.155 2013-03-11 15:43:47 cg Exp $'
! !
FileStream initialize!
--- a/HashStream.st Tue Mar 05 18:10:13 2013 +0000
+++ b/HashStream.st Wed Mar 13 00:42:41 2013 +0000
@@ -240,7 +240,7 @@
self reset.
self nextPutAll:bytes.
- ^ self contents.
+ ^ self hashValue.
"
SHA1Stream new
@@ -389,9 +389,10 @@
!HashStream class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/HashStream.st,v 1.26 2012-10-31 15:57:49 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/HashStream.st,v 1.27 2013-03-08 23:37:43 stefan Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/HashStream.st,v 1.26 2012-10-31 15:57:49 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/HashStream.st,v 1.27 2013-03-08 23:37:43 stefan Exp $'
! !
+
--- a/IsDebuggingQuery.st Tue Mar 05 18:10:13 2013 +0000
+++ b/IsDebuggingQuery.st Wed Mar 13 00:42:41 2013 +0000
@@ -1,3 +1,14 @@
+"
+ COPYRIGHT (c) 2012 by eXept Software AG
+ All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice. This software may not
+ be provided or otherwise made available to, or used by, any
+ other person. No title to or ownership of the software is
+ hereby transferred.
+"
"{ Package: 'stx:libbasic' }"
Query subclass:#IsDebuggingQuery
@@ -7,6 +18,22 @@
category:'Interface-Debugger'
!
+!IsDebuggingQuery class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 2012 by eXept Software AG
+ All Rights Reserved
+
+ This software is furnished under a license and may be used
+ only in accordance with the terms of that license and with the
+ inclusion of the above copyright notice. This software may not
+ be provided or otherwise made available to, or used by, any
+ other person. No title to or ownership of the software is
+ hereby transferred.
+
+"
+! !
!IsDebuggingQuery methodsFor:'default values'!
@@ -17,9 +44,10 @@
!IsDebuggingQuery class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/IsDebuggingQuery.st,v 1.1 2012-10-18 13:31:55 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/IsDebuggingQuery.st,v 1.2 2013-03-06 17:09:36 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/IsDebuggingQuery.st,v 1.1 2012-10-18 13:31:55 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/IsDebuggingQuery.st,v 1.2 2013-03-06 17:09:36 cg Exp $'
! !
+
--- a/LibraryDefinition.st Tue Mar 05 18:10:13 2013 +0000
+++ b/LibraryDefinition.st Wed Mar 13 00:42:41 2013 +0000
@@ -135,16 +135,16 @@
bc_dot_mak_mappings
|d resFileName|
- resFileName := (self package copyFrom:(self package lastIndexOfAny:':/')+1),'.res'.
+ resFileName := (self package copyFrom:(self package lastIndexOfAny:':/')+1),'.$(RES)'.
d := super bc_dot_mak_mappings.
d
- at: 'LIBRARY_NAME' put: ( self libraryName );
- at: 'COMMONSYMFLAG' put: (self commonSymbolsFlag);
- at: 'HEADEROUTPUTARG' put: (self headerFileOutputArg);
- at: 'RESFILENAME' put: resFileName;
- at: 'DEPENDENCIES' put: (self generateDependencies_win32);
- yourself.
+ at: 'LIBRARY_NAME' put: ( self libraryName );
+ at: 'COMMONSYMFLAG' put: (self commonSymbolsFlag);
+ at: 'HEADEROUTPUTARG' put: (self headerFileOutputArg);
+ at: 'RESFILENAME' put: resFileName;
+ at: 'DEPENDENCIES' put: (self generateDependencies_win32);
+ yourself.
^ d.
"Created: / 09-08-2006 / 11:44:36 / fm"
@@ -735,10 +735,10 @@
!LibraryDefinition class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/LibraryDefinition.st,v 1.112 2013-02-28 11:15:51 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/LibraryDefinition.st,v 1.113 2013-03-11 20:49:52 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/LibraryDefinition.st,v 1.112 2013-02-28 11:15:51 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/LibraryDefinition.st,v 1.113 2013-03-11 20:49:52 cg Exp $'
! !
--- a/ProjectDefinition.st Tue Mar 05 18:10:13 2013 +0000
+++ b/ProjectDefinition.st Wed Mar 13 00:42:41 2013 +0000
@@ -227,149 +227,6 @@
!ProjectDefinition class methodsFor:'accessing'!
-allPreRequisites
- "answer all (recursive) prerequisite project ids of myself - in random order."
-
- ^ self allPreRequisitesWithParentDo:[:parent :prereq |
- prereq = self package ifTrue:[ Transcript showCR:('oops: %1 depends on itself' bindWith:prereq) ].
- ]
-
- "
- stx_libbasic allPreRequisites
- stx_libbasic2 allPreRequisites
- stx_libview2 allPreRequisites
- ubs_application allPreRequisites
- ubs_application allPreRequisitesSorted
- exept_expecco_application allPreRequisites
- exept_expeccoNET_application allPreRequisites
- alspa_batch_application allPreRequisites
- "
-
- "Modified: / 13-04-2011 / 15:30:45 / sr"
- "Modified (comment): / 06-09-2011 / 08:26:06 / cg"
-!
-
-allPreRequisitesSorted
- "answer all the prerequisites of this projects sorted in
- the order they are needed.
- Use this to e.g. compile packages in the dependency order"
-
- |allPreRequisites orderedTuples effective allPreRequisitesWithExtensions sortedPackages|
-
- orderedTuples := OrderedCollection new.
-
- allPreRequisites := self allPreRequisites.
- allPreRequisitesWithExtensions := allPreRequisites union:self extensionPackages.
-
- allPreRequisites do:[:eachPackageID |
- |def|
-
- self assert:(eachPackageID ~= self package).
- orderedTuples add:(Array with:eachPackageID with:self package).
-
- def := self definitionClassForPackage:eachPackageID.
- def isNil ifTrue:[
- Transcript showCR:'Warning: no definition class for package: ', eachPackageID.
- effective := (self searchForPreRequisites: eachPackageID) keys.
- ] ifFalse:[
- effective := def effectivePreRequisites union:def extensionPackages.
- effective notEmptyOrNil ifTrue:[
- effective do:[:eachPrerequisitePackageID|
- self assert:(eachPrerequisitePackageID ~= eachPackageID).
- orderedTuples add:(Array with:eachPrerequisitePackageID with:eachPackageID).
- ].
- ].
- ].
- ].
-
- (orderedTuples detect:[:el | el first = el second] ifNone:nil) notNil ifTrue:[self halt].
- sortedPackages := orderedTuples topologicalSort.
-
- "packages which only result from extension methods are used for computing the sort order,
- but they are not added, if not present in the first place"
- ^ sortedPackages select:[:eachProject| allPreRequisites includes:eachProject]
-
- "
- stx_libbasic allPreRequisitesSorted
- stx_libbasic2 allPreRequisitesSorted
- stx_libwidg2 allPreRequisitesSorted
- exept_expecco_application allPreRequisitesSorted
- alspa_batch_application allPreRequisitesSorted
- ubs_application allPreRequisitesSorted
- "
-
- "Modified: / 13-04-2011 / 15:19:13 / sr"
- "Modified: / 28-06-2011 / 14:04:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
-allPreRequisitesWithParentDo:aBlock
- "answer all (recursive) prerequisite project ids of myself - in random order.
- If we exclude a project, but one of our prerequisite projects depends on it,
- then what ????"
-
- |setOfAllPreRequisites toAdd|
-
- setOfAllPreRequisites := Set new.
- toAdd := Set new.
- toAdd addAll:self effectivePreRequisites.
-
- "is a subproject really a prerequisite??
- No, it works the other way: parent projects are prerequisites of sub projects,
- so the following line has been deleted.
- Unfortunately the meaning of 'subproject' has never been well defined. SV."
-"/ toAdd addAll:self effectiveSubProjects.
-
- [toAdd notEmpty] whileTrue:[
- |aPreRequisiteProjectID def|
-
- aPreRequisiteProjectID := toAdd removeFirst.
- (setOfAllPreRequisites includes:aPreRequisiteProjectID) ifFalse:[
- setOfAllPreRequisites add:aPreRequisiteProjectID.
-
- def := self definitionClassForPackage:aPreRequisiteProjectID.
- def isNil ifTrue:[
- Transcript showCR:'ProjectDefinition ', aPreRequisiteProjectID, ' is missing - cannot find its preRequisites.'.
- ] ifFalse:[
- def effectivePreRequisites
- select:[:eachSubPreRequisite | (setOfAllPreRequisites includes:eachSubPreRequisite) not]
- thenDo:[:eachSubPreRequisite |
- Verbose == true ifTrue:[
- Transcript show:'ProjectDefinition preRequisites: '; showCR:(aPreRequisiteProjectID, ' requires ', eachSubPreRequisite).
- ].
- aBlock value:def value:eachSubPreRequisite.
- toAdd add:eachSubPreRequisite
- ].
-
- "but subprojects of our prerequisites are also prerequisites"
- def effectiveSubProjects
- select:[:eachSubSubRequisite | eachSubSubRequisite ~= self package and:[ (setOfAllPreRequisites includes:eachSubSubRequisite) not ]]
- thenDo:[:eachSubSubRequisite |
- Verbose == true ifTrue:[
- Transcript show:'ProjectDefinition preRequisites: '; showCR:(aPreRequisiteProjectID, ' hasSub ', eachSubSubRequisite).
- ].
- aBlock value:def value:eachSubSubRequisite.
- toAdd add:eachSubSubRequisite
- ].
- ].
- ]
- ].
- ^ setOfAllPreRequisites.
-
- "
- stx_libbasic allPreRequisites
- stx_libbasic2 allPreRequisites
- stx_libview2 allPreRequisites
- ubs_application allPreRequisites
- ubs_application allPreRequisitesSorted
- exept_expecco_application allPreRequisites
- exept_expeccoNET_application allPreRequisites
- alspa_batch_application allPreRequisites
- "
-
- "Created: / 13-04-2011 / 15:23:21 / sr"
- "Modified: / 20-07-2012 / 18:29:31 / cg"
-!
-
directory
"for packageId compatibility"
@@ -854,7 +711,10 @@
!
requiredProjects
- ^ self effectivePreRequisites , self subProjects
+ ^ Set new
+ addAll:self effectivePreRequisites;
+ addAll:self subProjects;
+ yorself.
!
topRelativePathTo:aBaseFilename inPackage:aPackageID architecture:arch
@@ -1478,20 +1338,6 @@
"Modified: / 18-08-2006 / 16:16:24 / cg"
!
-effectivePreRequisites
- "get the preRequisites, that are not excluded"
-
- |preRequisites|
-
- preRequisites := self preRequisites asOrderedSet. "prerequisite order matters"
- preRequisites
- addAll:self includedInPreRequisites;
- removeAllFoundIn:self excludedFromPreRequisites;
- remove:self package ifAbsent:[].
-
- ^ preRequisites
-!
-
effectiveSubProjects
"get the subProjects, that are not excluded"
@@ -1603,7 +1449,11 @@
value: 'description - contents'.
aTwoArgBlock
- value: self preRequisites_code
+ value: self mandatoryPreRequisites_code
+ value: 'description'.
+
+ aTwoArgBlock
+ value: self referencedPreRequisites_code
value: 'description'.
((self class includesSelector:#excludedFromPreRequisites) not or:[ignoreOldDefinition]) ifTrue:[
@@ -1679,6 +1529,51 @@
"Created: / 18-08-2006 / 16:21:01 / cg"
!
+mandatoryPreRequisites_code
+ "generate the code of the #mandatoryPreRequisites method"
+
+ |preRequisites|
+
+ preRequisites := self searchForPreRequisites first.
+ preRequisites removeAllKeys:self excludedFromPreRequisites ifAbsent:[].
+
+ ^ String streamContents:[:s |
+ s nextPutLine:'mandatoryPreRequisites'.
+ s nextPutLine:' "list all required mandatory packages.'.
+ s nextPutLine:' Packages are mandatory, if they contain superclasses of the package''s classes'.
+ s nextPutLine:' or classes which are extended by this package.'.
+ s nextPutLine:' This list can be maintained manually or (better) generated and'.
+ s nextPutLine:' updated by scanning the superclass hierarchies'.
+ s nextPutLine:' (the browser has a menu function for that)'.
+ s nextPutLine:' However, often too much is found, and you may want to explicitely'.
+ s nextPutLine:' exclude individual packages in the #excludedFromPreRequisites method."'.
+ s nextPutLine:''.
+ s nextPutLine:' ^ #('.
+ preRequisites keys asSortedCollection do:[:eachPackageID |
+ |reason|
+
+ s spaces:8.
+ eachPackageID asSymbol storeOn:s.
+ reason := preRequisites at:eachPackageID ifAbsent:nil.
+ reason notEmptyOrNil ifTrue:[
+ s nextPutAll:' "'; nextPutAll:reason anElement; nextPutAll:' "'.
+ ].
+ s cr.
+ ].
+ s nextPutLine:' )'
+ ].
+
+ "
+ demo_demoApp1 mandatoryPreRequisites_code
+ stx_libbasic3 mandatoryPreRequisites_code
+ stx_libtool2 mandatoryPreRequisites_code
+ "
+
+ "Modified: / 08-08-2006 / 19:24:34 / fm"
+ "Created: / 17-08-2006 / 21:28:09 / cg"
+ "Modified: / 09-10-2006 / 14:27:20 / cg"
+!
+
preRequisites_code
"generate the code of the #preRequisites method"
@@ -1776,6 +1671,52 @@
"Created: / 18-08-2006 / 16:14:19 / cg"
!
+referencedPreRequisites_code
+ "generate the code of the #referencedPreRequisites method"
+
+ |preRequisitesColl preRequisites|
+
+ preRequisitesColl := self searchForPreRequisites.
+ preRequisites := self searchForPreRequisites second.
+ preRequisites
+ removeAllKeys:self excludedFromPreRequisites ifAbsent:[];
+ removeAllKeys:preRequisitesColl first keys ifAbsent:[]. "remove the mandatory prerequisites"
+
+ ^ String streamContents:[:s |
+ s nextPutLine:'referencedPreRequisites'.
+ s nextPutLine:' "list all packages containing classes referenced by the packages''s members.'.
+ s nextPutLine:' This list can be maintained manually or (better) generated and'.
+ s nextPutLine:' updated by looking for global variable accesses'.
+ s nextPutLine:' (the browser has a menu function for that)'.
+ s nextPutLine:' However, often too much is found, and you may want to explicitely'.
+ s nextPutLine:' exclude individual packages in the #excludedFromPreRequisites method."'.
+ s nextPutLine:''.
+ s nextPutLine:' ^ #('.
+ preRequisites keys asSortedCollection do:[:eachPackageID |
+ |reason|
+
+ s spaces:8.
+ eachPackageID asSymbol storeOn:s.
+ reason := preRequisites at:eachPackageID ifAbsent:nil.
+ reason notEmptyOrNil ifTrue:[
+ s nextPutAll:' "'; nextPutAll:reason anElement; nextPutAll:' "'.
+ ].
+ s cr.
+ ].
+ s nextPutLine:' )'
+ ].
+
+ "
+ demo_demoApp1 referencedPreRequisites_code
+ stx_libbasic3 referencedPreRequisites_code
+ stx_libtool2 referencedPreRequisites_code
+ "
+
+ "Modified: / 08-08-2006 / 19:24:34 / fm"
+ "Created: / 17-08-2006 / 21:28:09 / cg"
+ "Modified: / 09-10-2006 / 14:27:20 / cg"
+!
+
svnRevisionNr_code: revisionNrOrNil
^ String streamContents:[:s |
s nextPutLine:'svnRevisionNr'.
@@ -1906,50 +1847,63 @@
^ #()
!
-preRequisites
- "list packages which are required as a prerequisite. This method is generated automatically,
- by searching along the inheritance chain of all of my classes.
- However, when generating automatically, packages are only added - never removed, unless listed
- in excludedFromPreRequisites."
+mandatoryPreRequisites
+ "list packages which are mandatory as a prerequisite.
+ This are packages containing superclasses of my classes and classes which
+ are extended by myself.
+ They are mandatory, beacuse we need these packages as a prerequisite for loading and compiling.
+ This method is generated automatically,
+ by searching along the inheritance chain of all of my classes."
^ #()
+!
+
+preRequisites
+ "list packages which are required as a prerequisite."
+
+ "use an OrderedSet here, so that mandatory prerequisites come first"
+
+ ^ OrderedSet new
+ addAll:self mandatoryPreRequisites;
+ addAll:self referencedPreRequisites;
+ addAll:self includedInPreRequisites;
+ removeAllFoundIn:self excludedFromPreRequisites;
+ yourself.
"Modified: / 17-08-2006 / 19:54:21 / cg"
!
-preRequisitesFor: packageId
- | def |
+preRequisitesFor:packageId
+ |def|
def := self definitionClassForPackage:packageId.
def isNil ifTrue:[
"Maybe the package is not loaded? Try to load it..."
- (Smalltalk loadPackage: packageId) ifTrue:
- [def := self definitionClassForPackage:packageId]
+ (Smalltalk loadPackage:packageId) ifTrue:[
+ def := self definitionClassForPackage:packageId
+ ]
].
^ def isNil
- ifTrue:
- ["Still no project definition - maybe does not exists?"
- (ProjectDefinition searchForPreRequisites: packageId) keys]
- ifFalse:
- [def effectivePreRequisites]
+ ifTrue:[
+ "Still no project definition - maybe it does not exist?"
+ Transcript showCR:'Warning: no definition class for package: ', packageId.
+ (ProjectDefinition searchForPreRequisites:packageId) keys
+ ]
+ ifFalse:[ def effectivePreRequisites ]
"Created: / 24-02-2011 / 22:47:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 18-11-2011 / 14:52:43 / cg"
"Modified (format): / 19-11-2011 / 11:25:36 / cg"
!
-preRequisitesForBuilding
- "for now, there is only one list of prerequisites present;
- will be changed in the (near?) future"
-
- ^ self preRequisites
-!
-
-preRequisitesForLoading
- "for now, there is only one list of prerequisites present;
- will be changed in the (near?) future"
-
- ^ self preRequisites
+referencedPreRequisites
+ "list packages which are a prerequisite, because the contain
+ classes which are referenced by my classes.
+ We do not need these packages as a prerequisite for loading or compiling.
+ This method is generated automatically,
+ by searching along the inheritance chain of all of my classes."
+
+ ^ #()
!
siblingsAreSubProjects
@@ -2426,7 +2380,6 @@
"Created: / 18-08-2006 / 12:51:38 / cg"
! !
-
!ProjectDefinition class methodsFor:'description - project information'!
applicationAdditionalIconFileNames
@@ -3597,20 +3550,24 @@
!
package_dot_deps_dot_rake_mappings
- | dependencies |
-
- dependencies := String streamContents:
- [:s|
- self allPreRequisites do:
- [:package|
- (self preRequisitesFor: package) do:
- [:prereq|
- s nextPutAll: ('task "%1" => "%2"' bindWith: package with: prereq); cr].
- s cr].
- self effectivePreRequisites do:
- [:prereq|
- s nextPutAll: ('task "%1" => "%2"' bindWith: self package with: prereq); cr].
- ].
+ |dependencies|
+
+ dependencies := String
+ streamContents:[:s |
+ self allPreRequisites do:[:package |
+ (self preRequisitesFor:package) do:[:prereq |
+ s
+ nextPutAll:('task "%1" => "%2"' bindWith:package with:prereq);
+ cr
+ ].
+ s cr
+ ].
+ self effectivePreRequisites do:[:prereq |
+ s
+ nextPutAll:('task "%1" => "%2"' bindWith:self package with:prereq);
+ cr
+ ].
+ ].
^ (Dictionary new)
at:'DEPENDENCIES' put:dependencies;
@@ -4603,7 +4560,9 @@
@FOR /F "tokens=*" %%%%i in (''hg root'') do SET HGROOT=%%%%i
@IF "%HGROOT%" NEQ "" SET DEFINES=%DEFINES% "-DHGROOT=%HGROOT%"
-@call %(TOP)\rules\find_mingw.bat
+@pushd %(TOP)\rules
+@call find_mingw.bat
+@popd
make.exe -N -f bc.mak %%USEMINGW_ARG%% %%*
%(SUBPROJECT_MINGWMAKE_CALLS)
@@ -4713,7 +4672,9 @@
@REM -------
@if not defined VSINSTALLDIR (
- call %(TOP)\rules\vcsetup.bat
+ pushd %(TOP)\rules
+ call vcsetup.bat
+ popd
)
@SET DEFINES=
@REM Kludge got Mercurial, cannot be implemented in Borland make
@@ -4791,6 +4752,10 @@
^ false
].
thisContext isRecursive ifTrue:[self breakPoint:#cg. ^ false]. "/ avoid endless loops
+ (PackagesBeingLoaded notNil and:[PackagesBeingLoaded includes:self package]) ifTrue:[
+ "/ seems to be a recursive call
+ ^ false
+ ].
newStuffHasBeenLoaded := false.
@@ -5365,7 +5330,7 @@
].
"/ need them also...
- self preRequisites do:[:eachPreRequisitePackage |
+ self effectivePreRequisites do:[:eachPreRequisitePackage |
addPackage value:eachPreRequisitePackage
].
@@ -5968,7 +5933,7 @@
|prereq|
prereq := self effectivePreRequisites.
- prereq notEmptyOrNil ifTrue:[
+ prereq notEmpty ifTrue:[
Verbose ifTrue:[
Transcript showCR:(' %1 loading prerequisites...' bindWith:self name).
].
@@ -6216,6 +6181,167 @@
"Modified: / 30-05-2007 / 12:48:30 / cg"
!
+allPreRequisites
+ "answer all (recursive) prerequisite project ids of myself - in random order."
+
+ ^ self
+ allPreRequisitesWithParentDo:[:parent :prereq |
+ prereq = self package ifTrue:[
+ Transcript showCR:('oops: %1 depends on itself' bindWith:prereq)
+ ].
+ ]
+
+ "
+ stx_libbasic allPreRequisites
+ stx_libbasic2 allPreRequisites
+ stx_libview2 allPreRequisites
+ ubs_application allPreRequisites
+ ubs_application allPreRequisitesSorted
+ exept_expecco_application allPreRequisites
+ exept_expeccoNET_application allPreRequisites
+ alspa_batch_application allPreRequisites"
+ "Modified: / 13-04-2011 / 15:30:45 / sr"
+ "Modified (comment): / 06-09-2011 / 08:26:06 / cg"
+!
+
+allPreRequisitesSorted
+ "answer all the prerequisites of this projects sorted in
+ the order they are needed.
+ Use this to e.g. compile packages in the dependency order"
+
+ |allPreRequisites orderedTuples effective sortedPackages|
+
+ orderedTuples := OrderedCollection new.
+ allPreRequisites := self allPreRequisites.
+
+ allPreRequisites do:[:eachPackageID |
+ |def|
+
+ self assert:(eachPackageID ~= self package).
+ orderedTuples add:(Array with:eachPackageID with:self package).
+
+ def := self definitionClassForPackage:eachPackageID.
+ def isNil ifTrue:[
+ Transcript showCR:'Warning: no definition class for package: ', eachPackageID.
+ effective := (self searchForPreRequisites: eachPackageID) keys.
+ ] ifFalse:[
+ "extensionPackages should alread be in the #mandatoryPreRequisites"
+ effective := def effectivePreRequisites union:def extensionPackages.
+ effective do:[:eachPrerequisitePackageID|
+ self assert:(eachPrerequisitePackageID ~= eachPackageID).
+ orderedTuples add:(Array with:eachPrerequisitePackageID with:eachPackageID).
+ ].
+ ].
+ ].
+
+ (orderedTuples detect:[:el | el first = el second] ifNone:nil) notNil ifTrue:[self halt].
+ sortedPackages := orderedTuples topologicalSort.
+
+ "packages which only result from extension methods are used for computing the sort order,
+ but they are not added, if not present in the first place"
+ ^ sortedPackages select:[:eachProject| allPreRequisites includes:eachProject]
+
+ "
+ stx_libbasic allPreRequisitesSorted
+ stx_libbasic2 allPreRequisitesSorted
+ stx_libwidg2 allPreRequisitesSorted
+ exept_expecco_application allPreRequisitesSorted
+ alspa_batch_application allPreRequisitesSorted
+ ubs_application allPreRequisitesSorted
+ "
+
+ "Modified: / 13-04-2011 / 15:19:13 / sr"
+ "Modified: / 28-06-2011 / 14:04:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+allPreRequisitesWithParentDo:aBlock
+ "answer all (recursive) prerequisite project ids of myself - in random order.
+ If we exclude a project, but one of our prerequisite projects depends on it,
+ then what ????"
+
+ |setOfAllPreRequisites toAdd|
+
+ setOfAllPreRequisites := Set new.
+ toAdd := Set withAll:self effectivePreRequisites.
+
+ "is a subproject really a prerequisite??
+ No, it works the other way: parent projects are prerequisites of sub projects,
+ so the following line has been deleted.
+ Unfortunately the meaning of 'subproject' has never been well defined. SV."
+"/ toAdd addAll:self effectiveSubProjects.
+
+ [toAdd notEmpty] whileTrue:[
+ |aPreRequisiteProjectID def|
+
+ aPreRequisiteProjectID := toAdd removeFirst.
+ (setOfAllPreRequisites includes:aPreRequisiteProjectID) ifFalse:[
+ setOfAllPreRequisites add:aPreRequisiteProjectID.
+
+ def := self definitionClassForPackage:aPreRequisiteProjectID.
+ def isNil ifTrue:[
+ Transcript showCR:'ProjectDefinition ', aPreRequisiteProjectID, ' is missing - cannot find its preRequisites.'.
+ ] ifFalse:[
+ def effectivePreRequisites
+ select:[:eachSubPreRequisite | (setOfAllPreRequisites includes:eachSubPreRequisite) not]
+ thenDo:[:eachSubPreRequisite |
+ Verbose == true ifTrue:[
+ Transcript show:'ProjectDefinition preRequisites: '; showCR:(aPreRequisiteProjectID, ' requires ', eachSubPreRequisite).
+ ].
+ aBlock value:def value:eachSubPreRequisite.
+ toAdd add:eachSubPreRequisite
+ ].
+
+ "but subprojects of our prerequisites are also prerequisites"
+ def effectiveSubProjects
+ select:[:eachSubSubRequisite | eachSubSubRequisite ~= self package and:[ (setOfAllPreRequisites includes:eachSubSubRequisite) not ]]
+ thenDo:[:eachSubSubRequisite |
+ Verbose == true ifTrue:[
+ Transcript show:'ProjectDefinition preRequisites: '; showCR:(aPreRequisiteProjectID, ' hasSub ', eachSubSubRequisite).
+ ].
+ aBlock value:def value:eachSubSubRequisite.
+ toAdd add:eachSubSubRequisite
+ ].
+ ].
+ ]
+ ].
+ ^ setOfAllPreRequisites.
+
+ "
+ stx_libbasic allPreRequisites
+ stx_libbasic2 allPreRequisites
+ stx_libview2 allPreRequisites
+ ubs_application allPreRequisites
+ ubs_application allPreRequisitesSorted
+ exept_expecco_application allPreRequisites
+ exept_expeccoNET_application allPreRequisites
+ alspa_batch_application allPreRequisites
+ "
+
+ "Created: / 13-04-2011 / 15:23:21 / sr"
+ "Modified: / 20-07-2012 / 18:29:31 / cg"
+!
+
+effectivePreRequisites
+ "get the preRequisites, that are not excluded.
+ This method appears to be obsolete, because its functionality
+ is now included in #preRequisites.
+ But is hat to be kept for backward compatibilty with old
+ existant subclasses."
+
+ self mandatoryPreRequisites notEmpty ifTrue:[
+ "this is a new subclass - avoid overhead"
+ ^ self preRequisites.
+ ].
+
+ "I am an old sublclass, where #preRequisites returns a plain array"
+ ^ Set new
+ addAll:self preRequisites;
+ addAll:self includedInPreRequisites;
+ removeAllFoundIn:self excludedFromPreRequisites;
+ remove:self package ifAbsent:[];
+ yourself.
+!
+
searchForPreRequisites
"answer a Dictionary where the keys are the prerequisite package for this package
and the values are a Set of reasons, why each package is required"
@@ -6256,9 +6382,10 @@
"answer a Dictionary where the keys are the prerequisite package for this package
and the values are a Set of reasons, why each package is required"
- |requiredClasses requiredPackageReasons usedClassesWithReasons ignoredPackages|
-
- usedClassesWithReasons := Dictionary new.
+ |requiredClasses mandatoryClassesForLoadingWithReasons referencedClassesWithReasons ignoredPackages packageExtractionBlock|
+
+ mandatoryClassesForLoadingWithReasons := Dictionary new.
+ referencedClassesWithReasons := Dictionary new.
"my classes are required"
requiredClasses := (self searchForClassesWithProject: packageId) asSet.
@@ -6266,55 +6393,65 @@
withSubProjectsBoolean ifTrue:[
"my subproject's classes are required"
self subProjects do:[:eachProjectName |
- requiredClasses addAll: (self searchForClassesWithProject:eachProjectName asSymbol)
+ requiredClasses addAll:(self searchForClassesWithProject:eachProjectName asSymbol)
].
].
- "all superclasses of my classes and my subProject's classes are required"
+ "all superclasses of my classes and my subProject's classes are mandatory"
requiredClasses do:[:cls |
cls allSuperclassesDo:[:eachSuperclass |
- (usedClassesWithReasons at: eachSuperclass ifAbsentPut:[OrderedSet new])
+ (mandatoryClassesForLoadingWithReasons at: eachSuperclass ifAbsentPut:[OrderedSet new])
add: (eachSuperclass name, ' - superclass of ', cls name).
]
].
+ "all classes for which I define extensions are mandatory"
+ self allExtensionClasses do:[:eachExtendedClass |
+ (mandatoryClassesForLoadingWithReasons at:eachExtendedClass ifAbsentPut:[OrderedSet new])
+ add: (eachExtendedClass name, ' - extended').
+ eachExtendedClass allSuperclassesDo:[:eachSuperclass |
+ (mandatoryClassesForLoadingWithReasons at: eachSuperclass ifAbsentPut:[OrderedSet new])
+ add: (eachSuperclass name, ' - superclass of extended ', eachExtendedClass name).
+ ]
+ ].
"all classes referenced by my classes or my subproject's classes
are required. But:
only search for locals refered to by my methods (assuming that superclasses'
prerequisites are specified in their package)."
- self addReferencesToClassesFromGlobalsIn:requiredClasses to:usedClassesWithReasons.
- self addReferencesToClassesFromGlobalsInMethods:(self searchForExtensionsWithProject:self package) to:usedClassesWithReasons.
-
- "all classes for which I define extensions are required"
- self allExtensionClasses do:[:eachExtendedClass |
- (usedClassesWithReasons at:eachExtendedClass ifAbsentPut:[OrderedSet new])
- add: (eachExtendedClass name, ' - extended').
- eachExtendedClass allSuperclassesDo:[:eachSuperclass |
- (usedClassesWithReasons at: eachSuperclass ifAbsentPut:[OrderedSet new])
- add: (eachSuperclass name, ' - superclass of extended ', eachExtendedClass name).
- ]
- ].
+ self addReferencesToClassesFromGlobalsIn:requiredClasses to:referencedClassesWithReasons.
+ self addReferencesToClassesFromGlobalsInMethods:(self searchForExtensionsWithProject:self package) to:referencedClassesWithReasons.
+
"don't put classes from subProjects into the required list"
ignoredPackages := (self siblingsAreSubProjects
ifTrue:[ self searchForSiblingProjects ]
ifFalse:[ self searchForSubProjects ]) asSet.
- ignoredPackages add:self package.
- ignoredPackages add:PackageId noProjectID.
+ ignoredPackages
+ add:packageId;
+ add:PackageId noProjectID.
"now map classes to packages and collect the reasons"
- requiredPackageReasons := Dictionary new.
- usedClassesWithReasons keysAndValuesDo:[:usedClass :reasonsPerClass | |usedClassPackage|
- usedClassPackage := usedClass package.
- (ignoredPackages includes:usedClassPackage) ifFalse:[
- (requiredPackageReasons at:usedClassPackage ifAbsentPut:[OrderedSet new])
- addAll:reasonsPerClass.
+ packageExtractionBlock := [:classesWithReasons|
+ |requiredPackageReasons|
+ requiredPackageReasons := Dictionary new.
+ classesWithReasons keysAndValuesDo:[:usedClass :reasonsPerClass|
+ |usedClassPackage|
+
+ usedClassPackage := usedClass package.
+ (ignoredPackages includes:usedClassPackage) ifFalse:[
+ (requiredPackageReasons at:usedClassPackage ifAbsentPut:[OrderedSet new])
+ addAll:reasonsPerClass.
+ ].
+ ].
+ requiredPackageReasons
].
- ].
-
- ^ requiredPackageReasons
+
+
+ ^ Array
+ with:(packageExtractionBlock value:mandatoryClassesForLoadingWithReasons)
+ with:(packageExtractionBlock value:referencedClassesWithReasons)
"
self searchForPreRequisites
@@ -6759,9 +6896,14 @@
cls := Smalltalk at:nm asSymbol.
cls isNil ifTrue:[
- self error:'oops: missing class: ',nm.
- ].
- classesInDescription add:cls.
+ (self autoloaded_classNames includes:nm) ifTrue:[
+ Transcript showCR:'missing autoloaded class: ',nm.
+ ] ifFalse:[
+ self error:('missing class: ',nm) mayProceed:true.
+ ]
+ ] ifFalse:[
+ classesInDescription add:cls.
+ ]
].
missingPools := Set new.
@@ -6938,11 +7080,11 @@
!ProjectDefinition class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.420 2013-03-01 21:35:18 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.424 2013-03-11 12:47:59 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.420 2013-03-01 21:35:18 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/ProjectDefinition.st,v 1.424 2013-03-11 12:47:59 cg Exp $'
!
version_SVN
--- a/Smalltalk.st Tue Mar 05 18:10:13 2013 +0000
+++ b/Smalltalk.st Wed Mar 13 00:42:41 2013 +0000
@@ -2283,14 +2283,14 @@
|packageId packageString packageDir def sourceCodeManager|
packageId := aPackageStringArg asPackageId.
- packageString := aPackageStringArg asPackageId string.
+ packageString := packageId string.
"if I am here, so must my package"
packageString = 'stx:libbasic' ifTrue:[^ true].
"/ if there is a projectDefinition, let it load itself...
def := packageId projectDefinitionClass.
- def notNil ifTrue:[
+ (def notNil and:[def isLoaded]) ifTrue:[
def loadAsAutoloaded:doLoadAsAutoloaded.
^ true.
].
@@ -2419,9 +2419,8 @@
The package is either located in packageDirOrStringOrNil, or in the current directory (if nil).
Answer true, if the load succeeded, false if it failed"
- |packageDir packageName shLibName
- binaryClassLibraryFilename projectDefinitionFilename loadAllFilename
- projectDefinitionClass projectDefinitionClassName silent somethingHasBeenLoaded
+ |packageDir shLibName
+ binaryClassLibraryFilename projectDefinitionFilename projectDefinitionClass projectDefinitionClassName silent somethingHasBeenLoaded
loadOK loadErrorOccurred exePath|
packageDirOrStringOrNil notNil ifTrue:[
@@ -2436,12 +2435,12 @@
"For now: have to read the project definition first!!
The class library may contain subclasses of classes in prerequisite packages -
so the prerequisite packages have to be loaded first"
-
"normally there is a project definiton, use that one to pull in the rest"
"maybe, it is already in the image - autoloaded"
projectDefinitionClass := ProjectDefinition definitionClassForPackage:aPackageString.
+false ifTrue:[
"if not, file it in ..."
(projectDefinitionClass isNil and:[packageDir notNil]) ifTrue:[
projectDefinitionClassName := ProjectDefinition initialClassNameForDefinitionOf:aPackageString.
@@ -2462,7 +2461,6 @@
]
].
].
-
projectDefinitionClass notNil ifTrue:[
projectDefinitionClass autoload.
somethingHasBeenLoaded := projectDefinitionClass loadAsAutoloaded:doLoadAsAutoloaded.
@@ -2471,6 +2469,7 @@
].
^ true.
].
+].
"/ no project-definition class.
@@ -2496,33 +2495,58 @@
binaryClassLibraryFilename := packageDir / shLibName.
binaryClassLibraryFilename exists ifFalse:[
"/ mhmh - is this a good idea ? (temporary kludge)
- binaryClassLibraryFilename := packageDir / 'objbc' / shLibName.
- binaryClassLibraryFilename exists ifFalse:[
- binaryClassLibraryFilename := packageDir / 'objvc' / shLibName.
- ]
+ ExternalAddress pointerSize == 4 ifTrue:[
+ binaryClassLibraryFilename := packageDir / 'objbc' / shLibName.
+ binaryClassLibraryFilename exists ifFalse:[
+ binaryClassLibraryFilename := packageDir / 'objvc' / shLibName.
+ ]
+ ] ifFalse:[
+ binaryClassLibraryFilename := packageDir / 'objmingw' / shLibName.
+ ].
]
]
"/ ].
].
].
- ].
+ packageDir notNil ifTrue:[
+ binaryClassLibraryFilename exists ifFalse:[
+ "/ look in package directory
+ binaryClassLibraryFilename := packageDir / shLibName.
+ binaryClassLibraryFilename exists ifFalse:[
+ ExternalAddress pointerSize == 4 ifTrue:[
+ binaryClassLibraryFilename := packageDir / 'objbc' / shLibName.
+ binaryClassLibraryFilename exists ifFalse:[
+ binaryClassLibraryFilename := packageDir / 'objvc' / shLibName.
+ ]
+ ] ifFalse:[
+ binaryClassLibraryFilename := packageDir / 'objmingw' / shLibName.
+ ].
+ ].
+ ].
+ ].
+ ].
+
binaryClassLibraryFilename exists ifTrue:[
ObjectFileLoader::ObjectFileLoadErrorNotification handle:[:ex |
loadErrorOccurred := true.
ex proceedWith:true.
] do:[
- loadOK := self loadPackage:aPackageString fromClassLibrary:binaryClassLibraryFilename.
+ loadOK := (ObjectFileLoader loadObjectFile:binaryClassLibraryFilename) notNil.
+ "/ loadOK := self loadPackage:aPackageString fromClassLibrary:binaryClassLibraryFilename.
].
loadOK ifTrue:[
silent ifFalse:[
Transcript showCR:('loaded package: ' , aPackageString , ' from binary classLib file: ' , binaryClassLibraryFilename pathName).
].
- doLoadAsAutoloaded ifFalse:[
- "/ force autoloading...
- Smalltalk allClassesDo:[:eachClass |
- eachClass package == aPackageString ifTrue:[eachClass autoload].
- ].
- ].
+ "now, all compiled classes have been loaded.
+ keep classes in the package which are autoloaded as autoloaded.
+ (so the code below is disabled)"
+"/ doLoadAsAutoloaded ifFalse:[
+"/ "/ force autoloading...
+"/ Smalltalk allClassesDo:[:eachClass |
+"/ eachClass package == aPackageString ifTrue:[eachClass autoload].
+"/ ].
+"/ ].
^ true
].
loadErrorOccurred ifTrue:[
@@ -2540,22 +2564,50 @@
^ false.
].
- "/ loadAll ? - will be soon obsolete
- "/ mhmh - this will vanish soon...
- loadAllFilename := packageDir / 'loadAll'.
- loadAllFilename exists ifFalse:[
- loadAllFilename := packageDir / 'loadall'.
- ].
- loadAllFilename exists ifTrue:[
- (self loadPackage:aPackageString fromLoadAllFile:loadAllFilename) ifTrue:[
- silent ifFalse:[
- Transcript showCR:('loaded package: ' , aPackageString , ' from loadAll file: ' , loadAllFilename pathName).
+ "fallback - go through the project definition"
+ projectDefinitionClass isNil ifTrue:[
+ projectDefinitionClassName := ProjectDefinition initialClassNameForDefinitionOf:aPackageString.
+ "/ try to load the project definition class
+ projectDefinitionFilename := (packageDir / projectDefinitionClassName) withSuffix:'st'.
+ projectDefinitionFilename exists ifFalse:[
+ projectDefinitionFilename := (packageDir / 'source' / projectDefinitionClassName) withSuffix:'st'.
+ ].
+ projectDefinitionFilename exists ifTrue:[
+ Class withoutUpdatingChangesDo:[
+ Smalltalk silentlyLoadingDo:[
+ projectDefinitionFilename fileIn.
+ ].
].
- ^ true
- ]
- ].
-
- packageName := packageDir baseName.
+ projectDefinitionClass := ProjectDefinition definitionClassForPackage:aPackageString.
+ projectDefinitionClass notNil ifTrue:[
+ projectDefinitionClass loadDirectory:(projectDefinitionFilename asFilename directory)
+ ]
+ ].
+ ].
+ projectDefinitionClass notNil ifTrue:[
+ projectDefinitionClass autoload.
+ somethingHasBeenLoaded := projectDefinitionClass loadAsAutoloaded:doLoadAsAutoloaded.
+ (silent not and:[somethingHasBeenLoaded]) ifTrue:[
+ Transcript showCR:('Smalltalk [info]: loaded package: ' , aPackageString , ' from project definition').
+ ].
+ ^ true.
+ ].
+
+"/ loadAll no longer supported
+"/ loadAllFilename := packageDir / 'loadAll'.
+"/ loadAllFilename exists ifFalse:[
+"/ loadAllFilename := packageDir / 'loadall'.
+"/ ].
+"/ loadAllFilename exists ifTrue:[
+"/ (self loadPackage:aPackageString fromLoadAllFile:loadAllFilename) ifTrue:[
+"/ silent ifFalse:[
+"/ Transcript showCR:('loaded package: ' , aPackageString , ' from loadAll file: ' , loadAllFilename pathName).
+"/ ].
+"/ ^ true
+"/ ]
+"/ ].
+"/
+"/ packageName := packageDir baseName.
"/ zip-file loading no longer supported
"/ "/ .zip ?
@@ -7893,11 +7945,11 @@
!Smalltalk class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.1009 2013-03-01 13:47:22 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.1010 2013-03-05 09:41:57 stefan Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.1009 2013-03-01 13:47:22 stefan Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Smalltalk.st,v 1.1010 2013-03-05 09:41:57 stefan Exp $'
!
version_HG
--- a/UnixOperatingSystem.st Tue Mar 05 18:10:13 2013 +0000
+++ b/UnixOperatingSystem.st Wed Mar 13 00:42:41 2013 +0000
@@ -8308,7 +8308,7 @@
encodePath:pathName
"encode the pathName for use with system calls.
- E.g. linux system calls accept sigle byte strings only,
+ E.g. linux system calls accept single byte strings only,
so the pathName has been UTF-8 encoded, before using it in a system call."
pathName notNil ifTrue:[
@@ -13238,11 +13238,11 @@
!UnixOperatingSystem class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.305 2013-02-23 12:34:28 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.306 2013-03-08 09:25:33 stefan Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.305 2013-02-23 12:34:28 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.306 2013-03-08 09:25:33 stefan Exp $'
!
version_HG
--- a/Win32OperatingSystem.st Tue Mar 05 18:10:13 2013 +0000
+++ b/Win32OperatingSystem.st Wed Mar 13 00:42:41 2013 +0000
@@ -6803,9 +6803,9 @@
list size == 0 ifTrue:[^ self ].
processGroupHandleOrPid isInteger ifTrue:[
- pid := processGroupHandleOrPid
+ pid := processGroupHandleOrPid
] ifFalse:[
- pid := processGroupHandleOrPid pid.
+ pid := processGroupHandleOrPid pid.
].
groupsToTerminate := Set with:pid.
list := list asSet.
@@ -6813,19 +6813,19 @@
"/ Transcript show:'terminate group '; showCR:pid.
anyMore := true.
[anyMore] whileTrue:[
- anyMore := false.
- list do:[:anOSProcess |
- |pid|
-
- (groupsToTerminate includes:anOSProcess parentPid) ifTrue:[
- pid := anOSProcess pid.
- groupsToTerminate add:pid.
- "/ Transcript show:'terminate '; showCR:pid.
- self terminateProcess:( pid ).
- list remove:anOSProcess.
- anyMore := true.
- ].
- ].
+ anyMore := false.
+ list do:[:anOSProcess |
+ |pid|
+
+ (groupsToTerminate includes:anOSProcess parentPid) ifTrue:[
+ pid := anOSProcess pid.
+ groupsToTerminate add:pid.
+ "/ Transcript show:'terminate '; showCR:pid.
+ self terminateProcess:( pid ).
+ list remove:anOSProcess.
+ anyMore := true.
+ ].
+ ].
].
! !
@@ -15928,14 +15928,14 @@
# ifdef DO_WRAP_CALLS
do {
__threadErrno = 0;
- res = STX_WSA_NOINT_CALL4( "getaddrinfo", getaddrinfo, __hostName, __serviceName, &hints, &info);
- } while ((res < 0) && (__threadErrno == EINTR));
+ ret = STX_WSA_NOINT_CALL4( "getaddrinfo", getaddrinfo, __hostName, __serviceName, &hints, &info);
+ } while ((ret < 0) && (__threadErrno == EINTR));
# else
__BEGIN_INTERRUPTABLE__
ret = getaddrinfo(__hostName, __serviceName, &hints, &info);
__END_INTERRUPTABLE__
# endif
- } while (ret == EAI_SYSTEM && errno == EINTR);
+ } while (ret != 0 && __threadErrno == EINTR);
if (ret != 0) {
switch (ret) {
case EAI_FAMILY:
@@ -15953,12 +15953,6 @@
case EAI_SERVICE:
error = @symbol(unknownService);
break;
- case EAI_ADDRFAMILY :
- error = @symbol(unknownHostForProtocol);
- break;
- case EAI_NODATA:
- error = @symbol(noAddress);
- break;
case EAI_MEMORY:
error = @symbol(allocationFailure);
break;
@@ -15968,9 +15962,6 @@
case EAI_AGAIN:
error = @symbol(tryAgain);
break;
- case EAI_SYSTEM:
- error = @symbol(systemError);
- break;
default:
error = @symbol(unknownError);
}
@@ -16305,11 +16296,19 @@
{
bp = (char *)(__byteArrayVal(socketAddress));
bp += nInstBytes;
+# ifdef DO_WRAP_CALLS
+ do {
+ __threadErrno = 0;
+ ret = STX_WSA_NOINT_CALL7( "getnameinfo", getnameinfo, (struct sockaddr *)bp, sockAddrSize, hp, hsz, sp, ssz, __flags);
+ } while ((ret < 0) && (__threadErrno == EINTR));
+# else
__BEGIN_INTERRUPTABLE__
ret = getnameinfo((struct sockaddr *)bp, sockAddrSize,
hp, hsz, sp, ssz, __flags);
__END_INTERRUPTABLE__
- } while (ret == EAI_SYSTEM && errno == EINTR);
+# endif
+ } while (ret != 0 && __threadErrno == EINTR);
+
if (ret != 0) {
switch (ret) {
case EAI_FAMILY:
@@ -16327,12 +16326,6 @@
case EAI_SERVICE:
error = @symbol(unknownService);
break;
- case EAI_ADDRFAMILY :
- error = @symbol(unknownHostForProtocol);
- break;
- case EAI_NODATA:
- error = @symbol(noAddress);
- break;
case EAI_MEMORY:
error = @symbol(allocationFailure);
break;
@@ -16342,9 +16335,6 @@
case EAI_AGAIN:
error = @symbol(tryAgain);
break;
- case EAI_SYSTEM:
- error = @symbol(systemError);
- break;
default:
error = @symbol(unknownError);
}
@@ -16530,11 +16520,11 @@
!Win32OperatingSystem class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.453 2013-03-04 15:17:19 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.456 2013-03-11 16:00:39 cg Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.453 2013-03-04 15:17:19 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Win32OperatingSystem.st,v 1.456 2013-03-11 16:00:39 cg Exp $'
!
version_SVN
--- a/stx_libbasic.st Tue Mar 05 18:10:13 2013 +0000
+++ b/stx_libbasic.st Wed Mar 13 00:42:41 2013 +0000
@@ -49,18 +49,51 @@
preRequisites scan. See #preRequisites for more."
^ #(
- #'exept:ctypes' "CType - referenced by ExternalLibraryFunction>>ffiTypeSymbolForType: "
- #'exept:expecco' "Expecco::ExpeccoXMLDecoder - referenced by ClassDescription>>iconInBrowserForVariableNamed: "
+ #'exept:ctypes' "CType - referenced by ExternalLibraryFunction>>ffiTypeSymbolForType: "
+ #'exept:expecco' "Expecco::ExpeccoXMLDecoder - referenced by ClassDescription>>iconInBrowserForVariableNamed: "
+ #'exept:libcrypt' "HashRandom - referenced by HashStream class>>random "
+ #'stx:goodies' "LockedFileStream - referenced by ClassDescription>>changesStream "
+ #'stx:goodies/simpleServices' "STXScriptingServer - referenced by StandaloneStartup class>>handleScriptingOptionsFromArguments: "
+ #'stx:goodies/sunit' "TestRunner - referenced by UserPreferences>>testRunnerClass "
+ #'stx:goodies/xml/stx' "XMLCoder - referenced by ClassDescription>>fileOutXMLString:on: "
+ #'stx:goodies/xml/vw' "XML::XMLParser - referenced by PeekableStream>>fileInXMLNotifying:passChunk: "
+ #'stx:libbasic2' "List - referenced by Collection>>asList "
+ #'stx:libbasic3' "ClassOrganizer - referenced by ClassDescription>>organization "
+ #'stx:libboss' "BinaryObjectStorage - referenced by PeekableStream>>fileInBinary "
+ #'stx:libcomp' "Parser - referenced by CharacterArray>>isValidSmalltalkIdentifier "
+ #'stx:libcompat' "Dolphin::ClassCategoriesReader - referenced by ClassDescription>>categoriesForClass "
+ #'stx:libhtml' "URL - referenced by CharacterArray>>asURL "
+ #'stx:libtool' "Tools::ToDoListBrowser - referenced by ClassBuilder>>checkInstvarRedefsWith:subclassOf:old:name: "
+ #'stx:libview' "Image - referenced by UserPreferences class>>saveSettings:in: "
+ #'stx:libview2' "ApplicationModel - referenced by ApplicationDefinition class>>startupClassName_code "
+ #'stx:libwidg' "Button - referenced by UserPreferences class>>saveSettings:in: "
+ #'stx:libwidg2' "ProgressNotification - referenced by UserNotification class>>notify:progress: "
)
!
-preRequisites
- "list all required packages.
+mandatoryPreRequisites
+ "list all required mandatory packages.
+ Packages are mandatory, if they contain superclasses of the package's classes
+ or classes which are extended by this package.
This list can be maintained manually or (better) generated and
- updated by scanning the superclass hierarchies and looking for
- global variable accesses. (the browser has a menu function for that)
- Howevery, often too much is found, and you may want to explicitely
- exclude individual packages in the #excludedFromPrerequisites method."
+ updated by scanning the superclass hierarchies
+ (the browser has a menu function for that)
+ However, often too much is found, and you may want to explicitely
+ exclude individual packages in the #excludedFromPreRequisites method."
+
+ ^ #(
+ )
+!
+
+
+
+referencedPreRequisites
+ "list all packages containing classes referenced by the packages's members.
+ This list can be maintained manually or (better) generated and
+ updated by looking for global variable accesses
+ (the browser has a menu function for that)
+ However, often too much is found, and you may want to explicitely
+ exclude individual packages in the #excludedFromPreRequisites method."
^ #(
)
@@ -509,6 +542,13 @@
!stx_libbasic class methodsFor:'description - project information'!
+applicationIconFileName
+ "Return the name (without suffix) of an icon-file (the app's icon); will be included in the rc-resource file"
+
+ ^ nil
+ "/ ^ self applicationName
+!
+
companyName
"Return a companyname which will appear in <lib>.rc"
@@ -527,6 +567,19 @@
^ 'Copyright Claus Gittinger 1988-2012\nCopyright eXept Software AG 1998-2012'
"Modified: / 18-07-2012 / 19:10:19 / cg"
+!
+
+productInstallDirBaseName
+ "Returns a default installDir which will appear in <app>.nsi.
+ This is usually not the one you want to keep"
+
+ ^ (self package asCollectionOfSubstringsSeparatedByAny:':/') last
+!
+
+productName
+ "Return a product name which will appear in <lib>.rc"
+
+ ^ 'Smalltalk/X'
! !
@@ -543,11 +596,11 @@
!stx_libbasic class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/stx_libbasic.st,v 1.110 2013-03-04 12:43:32 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/stx_libbasic.st,v 1.111 2013-03-08 23:54:15 stefan Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/stx_libbasic.st,v 1.110 2013-03-04 12:43:32 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/stx_libbasic.st,v 1.111 2013-03-08 23:54:15 stefan Exp $'
!
version_SVN