Merged 3621469cc5e8 and a34396484b3c (branch default - CVS HEAD) jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 13 Mar 2013 00:42:41 +0000
branchjv
changeset 18028 e39da2aa21bc
parent 18027 3621469cc5e8 (current diff)
parent 14858 a34396484b3c (diff)
child 18029 589d1088e0ee
Merged 3621469cc5e8 and a34396484b3c (branch default - CVS HEAD)
AbstractOperatingSystem.st
ApplicationDefinition.st
Class.st
Collection.st
ExternalStream.st
FileDoesNotExistException.st
FileStream.st
HashStream.st
IsDebuggingQuery.st
LibraryDefinition.st
ProjectDefinition.st
Smalltalk.st
UnixOperatingSystem.st
Win32OperatingSystem.st
stx_libbasic.st
--- 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