STXInstaller.st
changeset 678 4dd439ebf162
parent 277 935f9a055594
child 682 9fcd010d8fd3
--- a/STXInstaller.st	Wed Feb 25 18:20:32 1998 +0100
+++ b/STXInstaller.st	Wed Feb 25 19:43:54 1998 +0100
@@ -1,9 +1,9 @@
 Object subclass:#STXInstaller
 	instanceVariableNames:'stxLibDir stxLibBinDir stxBinDir installDocFiles
-		installSourceFiles installSTCFiles installGoodyFiles
+		installSourceFiles installSTCFiles installGoodyFiles fullDir
 		actionPercentageHolder actionTextHolder commandTraceView
-		resources'
-	classVariableNames:'LastBinDir LastLibBinDir LastLibDir'
+		resources fullInstallation dfHolder copyProcess'
+	classVariableNames:'LastBinDir LastLibBinDir LastLibDir LastFullDir'
 	poolDictionaries:''
 	category:'eXept-tools'
 !
@@ -50,6 +50,24 @@
     "Modified: 18.7.1996 / 19:45:08 / cg"
 !
 
+defaultFullDirs
+    |dirs|
+
+    dirs := OrderedCollection new.
+    dirs add:(Filename homeDirectory constructString:'stxDevelop').
+    dirs add:((Filename homeDirectory 
+                            construct:'stx')
+                            constructString:'develop').
+    ('/home' asFilename exists and:['/home' asFilename isDirectory]) ifTrue:[
+        dirs add:'/home/stx/develop'.
+    ].
+
+    ^ dirs sort
+
+    "Modified: / 18.7.1996 / 19:45:08 / cg"
+    "Created: / 25.2.1998 / 17:14:43 / cg"
+!
+
 defaultLibBinDirs
     |dirs|
 
@@ -104,23 +122,28 @@
     |dirsToMake|
 
     dirsToMake := OrderedCollection new.
-    dirsToMake add:stxBinDir.
-    dirsToMake add:stxLibDir.
-    dirsToMake add:stxLibBinDir.
-    dirsToMake add:(stxLibDir asFilename constructString:'configurations').
-    dirsToMake add:(stxLibDir asFilename constructString:'doc').
-    dirsToMake add:(stxLibDir asFilename constructString:'doc/online').
-    dirsToMake add:(stxLibDir asFilename constructString:'doc/online/english').
-    dirsToMake add:(stxLibDir asFilename constructString:'doc/online/german').
-    dirsToMake add:(stxLibDir asFilename constructString:'doc/online/french').
-    dirsToMake add:(stxLibDir asFilename constructString:'doc/online/italian').
-    dirsToMake add:(stxLibDir asFilename constructString:'include').
-    dirsToMake add:(stxLibDir asFilename constructString:'resources').
-    dirsToMake add:(stxLibDir asFilename constructString:'binary').
-    dirsToMake add:(stxLibDir asFilename constructString:'bitmaps').
-    dirsToMake add:(stxLibDir asFilename constructString:'goodies').
+    fullInstallation ifTrue:[
+        dirsToMake add:fullDir.
+    ] ifFalse:[
+        dirsToMake add:stxBinDir.
+        dirsToMake add:stxLibDir.
+        dirsToMake add:stxLibBinDir.
+        dirsToMake add:(stxLibDir asFilename constructString:'configurations').
+        dirsToMake add:(stxLibDir asFilename constructString:'doc').
+        dirsToMake add:(stxLibDir asFilename constructString:'doc/online').
+        dirsToMake add:(stxLibDir asFilename constructString:'doc/online/english').
+        dirsToMake add:(stxLibDir asFilename constructString:'doc/online/german').
+        dirsToMake add:(stxLibDir asFilename constructString:'doc/online/french').
+        dirsToMake add:(stxLibDir asFilename constructString:'doc/online/italian').
+        dirsToMake add:(stxLibDir asFilename constructString:'include').
+        dirsToMake add:(stxLibDir asFilename constructString:'resources').
+        dirsToMake add:(stxLibDir asFilename constructString:'binary').
+        dirsToMake add:(stxLibDir asFilename constructString:'bitmaps').
+        dirsToMake add:(stxLibDir asFilename constructString:'goodies').
+    ].
+    ^ dirsToMake
 
-    ^ dirsToMake
+    "Modified: / 25.2.1998 / 17:15:19 / cg"
 !
 
 listOfOptionalPackages
@@ -240,9 +263,31 @@
 !STXInstaller methodsFor:'installing'!
 
 copyFiles
-    |msg fileSpec filesToCopy numFiles nDone|
+    |msg fileSpec filesToCopy numFiles nDone cmd|
+
+     msg := (resources array:#('ST/X Installation' '' 'copying:' '' 'to:' '')) asStringCollection.
+
+    fullInstallation ifTrue:[
+        msg at:4 put:('    all from CD' asText allBold).
+        msg at:6 put:'    ' , (fullDir asText allBold).
+        actionTextHolder value:nil.
+        actionTextHolder value:msg.
 
-    msg := (resources array:#('ST/X Installation' '' 'copying:' '' 'to:' '')) asStringCollection.
+        cmd := 'cp -r ../../* ' , fullDir.
+        "/
+        "/ not all systems have cp -rv
+        "/
+        OperatingSystem getOSType = 'linux' ifTrue:[
+            cmd := 'cp -rv ../../* ' , fullDir.
+        ].
+        commandTraceView showCR:cmd , ' ...'.
+        commandTraceView endEntry.
+        cmd := cmd , ' 2>&1' .
+
+        self executeCommandAndShowOutput:cmd.
+
+        ^ true
+    ].
 
     fileSpec := self specOfFilesToCopy.
 
@@ -278,7 +323,7 @@
     nDone := 0.
 
     filesToCopy do:[:entry |
-        |fileName destDir cmd p text line doneSemaphore|
+        |fileName destDir cmd|
 
         fileName := entry key.
         destDir := entry value.
@@ -304,29 +349,7 @@
                 commandTraceView endEntry.
                 cmd := cmd , ' 2>&1' .
 
-                doneSemaphore := Semaphore new.
-
-                [   
-
-                    p := PipeStream readingFrom:cmd.
-                    p isNil ifTrue:[
-                        self warn:('command error. Could not execute:\\' , cmd) withCRs.
-                    ] ifFalse:[
-                        [p atEnd] whileFalse:[
-                            (p readWaitWithTimeout:0.1) ifFalse:[
-                                line := p nextLine.
-                                (line notNil and:[line notEmpty]) ifTrue:[
-                                    commandTraceView showCR:(('  ' , line) asText emphasizeAllWith:(#color->Color red)).
-                                    commandTraceView endEntry.
-                                ]
-                            ]
-                        ].
-                        p close.
-                    ].
-                    doneSemaphore signal.
-                ] forkAt:4.
-
-                doneSemaphore wait.
+                self executeCommandAndShowOutput:cmd
             ]
         ].
 
@@ -335,8 +358,12 @@
 
     ^ true
 
-    "Created: 17.7.1996 / 15:16:20 / cg"
-    "Modified: 22.5.1997 / 15:06:33 / cg"
+    "
+     STXInstaller open
+    "
+
+    "Created: / 17.7.1996 / 15:16:20 / cg"
+    "Modified: / 25.2.1998 / 18:30:53 / cg"
 !
 
 createDirectories
@@ -408,11 +435,51 @@
 
     commandTraceView showCR:(resources string:'setting up symbolic links in doc/online ...').
     commandTraceView endEntry.
-    OperatingSystem executeCommand:('(cd ' , stxLibDir , '/doc/online ; make links)').
+    fullInstallation ifTrue:[
+        OperatingSystem executeCommand:('(cd ' , fullDir , '/doc/online ; make links)').
+    ] ifFalse:[
+        OperatingSystem executeCommand:('(cd ' , stxLibDir , '/doc/online ; make links)').
+    ].
     ^ true
 
-    "Created: 17.7.1996 / 15:24:19 / cg"
-    "Modified: 22.5.1997 / 15:06:48 / cg"
+    "Created: / 17.7.1996 / 15:24:19 / cg"
+    "Modified: / 25.2.1998 / 19:20:59 / cg"
+!
+
+executeCommandAndShowOutput:cmd
+    |doneSemaphore line p|
+
+    doneSemaphore := Semaphore new.
+
+    copyProcess := [   
+
+        p := PipeStream readingFrom:cmd.
+        p isNil ifTrue:[
+            self warn:('command error. Could not execute:\\' , cmd) withCRs.
+        ] ifFalse:[
+            [
+                [p atEnd] whileFalse:[
+                    (p readWaitWithTimeout:0.1) ifFalse:[
+                        line := p nextLine.
+                        (line notNil and:[line notEmpty]) ifTrue:[
+                            commandTraceView showCR:(('  ' , line) asText emphasizeAllWith:(#color->Color red)).
+                            commandTraceView endEntry.
+                        ]
+                    ]
+                ].
+                p close.
+            ] valueOnUnwindDo:[
+                p shutDown
+            ]
+        ].
+        doneSemaphore signal.
+        copyProcess := nil.
+    ] forkAt:4.
+
+    doneSemaphore wait.
+
+    "Created: / 25.2.1998 / 17:46:06 / cg"
+    "Modified: / 25.2.1998 / 18:36:50 / cg"
 !
 
 outputInitialMessage
@@ -465,6 +532,8 @@
 askAndInstall
     "/ check, if we are in the projects/smalltalk directory
 
+    |answer|
+
     resources := ResourcePack for:self class.
 
     (Filename currentDirectory pathName endsWith:'projects/smalltalk') ifFalse:[
@@ -472,6 +541,9 @@
         ^ self
     ].
 
+    answer := self askForFullInstallation.
+    answer ifFalse:[^ self].
+
     [self askForDestination] whileTrue:[
         self checkForExistingInstallationAndConfirm ifTrue:[
             self preInstall.
@@ -486,23 +558,118 @@
         ]
     ].
 
-    "Modified: 2.3.1997 / 13:46:23 / cg"
+    "Modified: / 25.2.1998 / 16:54:51 / cg"
 !
 
 askForDestination
     "open a dialog to enter destination directories"
 
+    fullInstallation ifTrue:[
+        ^ self askForDestinationForFullInstallation
+    ] ifFalse:[
+        ^ self askForDestinationForPartialInstallation
+    ]
+
+    "
+     STXInstaller open
+    "
+
+    "Modified: / 25.2.1998 / 17:12:45 / cg"
+!
+
+askForDestinationForFullInstallation
+    "open a dialog to enter destination directories"
+
+    |d cm l green dark img
+     fullDirHolder|
+
+    LastFullDir isNil ifTrue:[
+        LastFullDir := (Filename homeDirectory 
+                            construct:'stx')
+                            constructString:'develop'
+    ].
+
+    fullDirHolder := LastFullDir asValue.
+
+    Screen current hasColors ifTrue:[
+        green := (Color red:0 green:80 blue:20) "darkened".
+        dark := Color grey:10.
+    ] ifFalse:[
+        green := Color white.
+        dark := Color black.
+    ].
+
+    d := DialogBox new.
+
+    d label:(resources string:'ST/X Full Installation').
+    img := Image fromFile:'SmalltalkX.xbm'.
+
+    l := d addTextLabel:img.
+    l adjust:#left; foregroundColor:green backgroundColor:dark.
+
+    l := d addTextLabel:(resources string:'Smalltalk/X CD installation (full).').
+    l adjust:#left; backgroundColor:dark; foregroundColor:Color white.
+    d addVerticalSpace.
+    d addVerticalSpace.
+
+    d addHorizontalLine.
+
+    l := d addTextLabel:(resources string:'ST/X development directory:').
+    l adjust:#left; backgroundColor:dark; foregroundColor:Color white.
+
+    cm := ComboBoxView on:fullDirHolder.
+    cm list:self defaultFullDirs.
+    d 
+        addLabelledField:cm 
+        label:(resources string:'stx develop')
+        adjust:#left 
+        tabable:true 
+        from:0.0 to:1.0 separateAtX:0.25
+        nameAs:'fullBox'.
+
+    (d componentAt:'fullBox.label') backgroundColor:dark; foregroundColor:Color white.
+
+    d addVerticalSpace.
+    d addHorizontalLine.
+
+    d addHelpButtonFor:'STXInstaller/installHelp.html';
+      addAbortButton; 
+      addOkButtonLabelled:(resources string:'install').
+    d extent:500@400.
+
+    d allViewBackground:dark.
+
+    d openAtCenter.
+    d accepted ifTrue:[
+        fullDir := LastFullDir := fullDirHolder value.
+        d destroy.
+        ^ true
+    ].
+    d destroy.
+    ^ false
+
+    "
+     STXInstaller open
+    "
+
+    "Created: / 25.2.1998 / 17:11:37 / cg"
+    "Modified: / 25.2.1998 / 17:29:07 / cg"
+!
+
+askForDestinationForPartialInstallation
+    "open a dialog to enter destination directories"
+
     |d cm l green dark img
      stxLibDirHolder stxLibBinDirHolder stxBinDirHolder
      installDocHolder installSourceHolder installSTCHolder installGoodiesHolder
      binMegabytes libMegabytes docMegabytes stcMegabytes srcMegabytes
     |
 
-    binMegabytes := 10.
+    binMegabytes := 12.
     libMegabytes := 30.
-    docMegabytes := 11.
+    docMegabytes := 15.
     stcMegabytes := 1.
-    srcMegabytes := 15.
+    srcMegabytes := 20.
 
     LastLibDir isNil ifTrue:[
         LastLibDir := '/usr/local/lib/smalltalk'
@@ -533,13 +700,13 @@
 
     d := DialogBox new.
 
-    d label:(resources string:'ST/X CD Installation').
+    d label:(resources string:'ST/X Partial Installation').
     img := Image fromFile:'SmalltalkX.xbm'.
 
     l := d addTextLabel:img.
     l adjust:#left; foregroundColor:green backgroundColor:dark.
 
-    l := d addTextLabel:(resources string:'Smalltalk/X CD installation.').
+    l := d addTextLabel:(resources string:'Smalltalk/X CD installation (partial).').
     l adjust:#left; backgroundColor:dark; foregroundColor:Color white.
     d addVerticalSpace.
     d addVerticalSpace.
@@ -549,6 +716,9 @@
     l := d addTextLabel:(resources string:'Destination directories:').
     l adjust:#left; backgroundColor:dark; foregroundColor:Color white.
 
+    l := d addTextLabel:(resources string:'(the defaults below are recommended)').
+    l adjust:#right; backgroundColor:dark; foregroundColor:Color white.
+
     cm := ComboBoxView on:stxBinDirHolder.
     cm list:self defaultBinDirs.
     d 
@@ -648,67 +818,262 @@
     d destroy.
     ^ false
 
-    "Modified: 22.5.1997 / 15:04:29 / cg"
+    "
+     STXInstaller open
+    "
+
+    "Created: / 25.2.1998 / 17:11:26 / cg"
+    "Modified: / 25.2.1998 / 19:43:30 / cg"
+!
+
+askForFullInstallation
+    "open a dialog to enter destination directories"
+
+    |d cm l green dark img|
+
+    Screen current hasColors ifTrue:[
+        green := (Color red:0 green:80 blue:20) "darkened".
+        dark := Color grey:10.
+    ] ifFalse:[
+        green := Color white.
+        dark := Color black.
+    ].
+
+    d := DialogBox new.
+
+    d label:(resources string:'ST/X CD Installation').
+    img := Image fromFile:'SmalltalkX.xbm'.
+
+    l := d addTextLabel:img.
+    l adjust:#left; foregroundColor:green backgroundColor:dark.
+
+    l := d addTextLabel:(resources string:'Smalltalk/X CD installation.').
+    l adjust:#left; backgroundColor:dark; foregroundColor:Color white.
+    d addVerticalSpace.
+    d addVerticalSpace.
+
+    d addHorizontalLine.
+
+    l := d addTextLabel:(resources string:
+'You can either perform a ' , 'full' asText allBold , ' installation, or a ' , 'partial' asText allBold ,' installation.').
+    l adjust:#left; backgroundColor:dark; foregroundColor:Color white.
+
+    d addVerticalSpace.
+    d addHorizontalLine.
+
+    d leftIndent:20.
+    l := d addTextLabel:(resources string:
+'The full installation is required if you want to build your own
+customized smalltalk executable. It allows you to include additional 
+precompiled classes or classLibraries. 
+This is also required if you want to link your own standalone executables.
+
+It consists of a directory hierachy, including makefiles for a customizeable 
+rebuild of the whole smalltalk system.
+(Actually, it simply copies the whole CD contents onto your disk).
+This requires roughly 120-200Mb of hard disk space.').
+    l adjust:#left; backgroundColor:dark; foregroundColor:Color white.
+
+    d addVerticalSpace.
+    d addHorizontalLine.
+
+    l := d addTextLabel:(resources string:
+'The partial installation requires less disk space and only copies the
+smalltalk executable, shared libraries and support files onto your hard disk.
+This requires roughly 70-90Mb of hard disk space.
+
+
+ ').
+    l adjust:#left; backgroundColor:dark; foregroundColor:Color white.
+
+
+    d leftIndent:0.
+    d addVerticalSpace.
+    d addHorizontalLine.
+
+
+    d addHelpButtonFor:'STXInstaller/installHelp.html';
+      addAbortButton; 
+      addOkButton:(Button label:(resources string:'install full') action:[fullInstallation:=true]);
+      addOkButtonLabelled:(resources string:'install partial').
+    d extent:500@400.
+
+    d allViewBackground:dark.
+
+    fullInstallation := false.
+    d openAtCenter.
+    d accepted ifTrue:[
+        d destroy.
+        ^ true
+    ].
+    d destroy.
+    ^ false
+
+    "
+     STXInstaller open
+    "
+
+    "Created: / 25.2.1998 / 16:50:16 / cg"
+    "Modified: / 25.2.1998 / 19:42:31 / cg"
 !
 
 checkForExistingInstallationAndConfirm
     "look if there is another installation and confirm
      reinstalling; return true if ok, false if not"
 
-    |whatToDo|
+    |whichDir canOverWrite whatToDo box|
+
+    fullInstallation ifTrue:[
+        whichDir := fullDir.
+        canOverWrite := false.
+    ] ifFalse:[
+        whichDir := stxLibDir.
+        canOverWrite := true.
+    ].
 
-    stxLibDir asFilename exists ifTrue:[
-        whatToDo := Dialog 
-                        choose:(resources 
-                                    string:'detected existing ST/X installation in %1' 
-                                      with:stxLibDir asText allBold)
-                        label:(resources string:'Attention')
-                        labels:(resources array:#('remove first' 'overwrite' 'cancel')) 
-                        values:#(remove over nil) 
-                        default:nil.     
+    whichDir asFilename exists ifTrue:[
+            whatToDo := Dialog 
+                            choose:(resources 
+                                        string:'detected existing ST/X installation in %1' 
+                                          with:whichDir asText allBold)
+                            label:(resources string:'Attention')
+                            labels:(resources array:(canOverWrite 
+                                                    ifFalse:[#('remove first' 'cancel')] 
+                                                    ifTrue:[#('remove first' 'overwrite' 'cancel')] )) 
+                            values:(canOverWrite ifFalse:[#(remove nil)] ifTrue:[#(remove over nil)])
+                            default:nil.     
 
-        whatToDo isNil ifTrue:[^false].
-        whatToDo == #remove ifTrue:[
-            ((stxLibDir findString:'stx') == 0
-            and:[(stxLibDir findString:'smalltalk') == 0]) ifTrue:[
-                "/ confirm again
-                (self confirm:(resources 
-                                string:'are you certain that the directory to remove
-(' , stxLibDir , ') is really a smalltalk directory ?
+            whatToDo isNil ifTrue:[^false].
+            whatToDo == #remove ifTrue:[
+                ((whichDir findString:'stx') == 0
+                and:[(whichDir findString:'smalltalk') == 0]) ifTrue:[
+                    "/ confirm again
+                    (self confirm:(resources 
+                                    string:'are you certain that the directory to remove
+(' , whichDir , ') is really a smalltalk directory ?
 
 Remove it now ?')) ifFalse:[ 
-                    (self confirm:(resources 
-                                     string:'overwrite ?')) ifTrue:[^ true].
-                    ^ false
-                ]
-            ].
+                        ^ false
+                    ]
+                ].
+
+                [
+                    box := DialogBox new label:'please wait'.
+                    box addTextLabel:'removing ' , whichDir , ' ...'.
+                    box showAtPointer.
+                ] forkAt:(Processor activePriority+1).
+                box waitUntilVisible.
 
-            (OperatingSystem recursiveRemoveDirectory:stxLibDir)
-            ifFalse:[
-                self warn:(resources string:'mhmh - could not remove old installation.')
+                (OperatingSystem recursiveRemoveDirectory:whichDir)
+                ifFalse:[
+                    self warn:(resources string:'mhmh - could not remove old installation.
+
+Please remove it manually (using root privileges if required) 
+and try again.').
+                    box destroy.
+                    ^ false
+                ].
+
+                box destroy
             ].
-        ].
-        ^ true
     ].
+
     ^ true
 
-    "Modified: 2.3.1997 / 13:45:13 / cg"
+    "
+     STXInstaller open
+    "
+
+    "Modified: / 25.2.1998 / 19:35:12 / cg"
 !
 
 doInstall
     "install ST/X; return true if ok, false if not"
 
-    |progressView ok textView|
+    |progressView ok v textView p l 
+     dirToMonitor doDfMonitoring dfMonitorProcess|
+
+    doDfMonitoring := false.
+
+    v := View new preferredExtent:(250 @ 350).
+
+    textView := HVScrollableView for:TextCollector in:v.
+    textView origin:0.0@0.0 corner:1.0@1.0.
+    textView bottomInset:30.
+    commandTraceView := textView scrolledView.
+
+    fullInstallation ifTrue:[
+        dirToMonitor := fullDir.
+    ] ifFalse:[
+        dirToMonitor := stxLibDir
+    ].
+
+    (OperatingSystem canExecuteCommand:'df ' , dirToMonitor) ifTrue:[
+        p := HorizontalPanelView in:v.
+        p origin:0.0@1.0 corner:1.0@1.0.
+        p topInset:-30.
+        p horizontalLayout:#fit.
+
+        l := Label label:'' in:p.
+        l labelChannel:(dfHolder := '' asValue).
+        l adjust:#left.
+        dfMonitorProcess := [
+            |ok p text keys values i l|
 
-    textView := HVScrollableView for:TextCollector.
-    textView preferredExtent:(200 @ 300).
-    commandTraceView := textView scrolledView.
+            ok := true.
+            [ok] whileTrue:[
+                doDfMonitoring ifTrue:[
+                    ok := false.
+                    p := PipeStream readingFrom:('df -k ' , dirToMonitor).
+                    p notNil ifTrue:[
+                       [
+                           text := p contentsOfEntireFile.
+                       ] valueNowOrOnUnwindDo:[
+                           p close.
+                       ].
+"/ Transcript showCR:text asString.
+                       text notNil ifTrue:[
+                           text := text asCollectionOfLines.
+                           text size >= 2 ifTrue:[
+                               keys := (text at:1) asCollectionOfWords.
+                               values := (text at:2) asCollectionOfWords.
+                               i := (keys indexOf:'Capacity').
+                               i == 0 ifTrue:[
+                                   i := (keys indexOf:'capacity').
+                               ].
+                               i ~~ 0 ifTrue:[
+                                   l := 'Used disk space: ' , (values at:i) withoutSeparators.
+                                   i := (keys indexOf:'Available').
+                                   i == 0 ifTrue:[
+                                       i := (keys indexOf:'available').
+                                       i == 0 ifTrue:[
+                                           i := (keys indexOf:'avail').
+                                           i == 0 ifTrue:[
+                                               i := (keys indexOf:'Avail').
+                                           ].
+                                       ].
+                                   ].
+                                   i ~~ 0 ifTrue:[
+                                        l := l , ' (' , (values at:i) withoutSeparators , 'k available)'.
+                                   ].
+                                   dfHolder value:l.
+                                   ok := true.
+                                   Delay waitForSeconds:9.
+                               ]
+                           ]
+                        ].
+                    ].
+                ].
+                Delay waitForSeconds:1.
+            ]
+        ] forkAt:(Processor activePriority+3)
+    ].
 
     progressView := ProgressIndicator
                         inBoxWithLabel:'ST/X Installation' icon:(Depth8Image fromImage:Launcher aboutIcon)
                         text:#('ST/X Installation' '' '' '' '' '' '' '') asStringCollection
                         abortable:true
-                        view:textView
+                        view:v
                         closeWhenDone:false.
     progressView topView extent:(640 min:Display width) @ (500 min:Display height).
 
@@ -721,9 +1086,12 @@
                   actionPercentageHolder := progressValue.
                   actionTextHolder := currentAction.
 
-                  self outputInitialMessage.
+                  fullInstallation ifFalse:[
+                        self outputInitialMessage.
+                  ].
 
                   (self createDirectories) ifTrue:[
+                      doDfMonitoring := true.
                       ok := self copyFiles
                   ].
                   self createSymbolicLinks.
@@ -740,10 +1108,21 @@
               ] 
             ].
 
+    dfMonitorProcess notNil ifTrue:[
+        dfMonitorProcess terminate
+    ].
+    copyProcess notNil ifTrue:[
+        copyProcess terminate.
+        copyProcess := nil.
+    ].
     ^ ok
 
-    "Created: 17.7.1996 / 15:11:27 / cg"
-    "Modified: 2.3.1997 / 12:59:47 / cg"
+    "
+     STXInstaller open
+    "
+
+    "Created: / 17.7.1996 / 15:11:27 / cg"
+    "Modified: / 25.2.1998 / 19:36:08 / cg"
 !
 
 open
@@ -759,64 +1138,78 @@
 
     |shInfo cshInfo msg havePath|
 
+    resources isNil ifTrue:[
+        resources := ResourcePack for:self class.
+    ].
+
     msg := (resources string:'ST/X Installation complete.\\') withCRs.
     shInfo := ''.
     cshInfo := ''.
 
-    havePath := true.
-    (((OperatingSystem getEnvironment:'PATH')
-        asCollectionOfSubstringsSeparatedBy:$:)
-            includes:stxBinDir) ifFalse:[
+    fullInstallation ifTrue:[
+        msg := msg , 'You will now find a development directory hierarchy
+in ''' , fullDir asText allBold , '''.
+
+To try it, ''cd'' to ''' , fullDir , '/projects/smalltalk''
+and start smalltalk with the command: ''./smalltalk''.
+
+To perform a partial installation of your customized smalltalk later,
+use the INSTALL script found in ''' , fullDir , ''''.
 
-        havePath := false.
-        shInfo  := 'PATH=$PATH:' , stxBinDir , ' ; export PATH\'.
-        cshInfo := 'set path=($path ' , stxBinDir , ')\'.
-        msg := msg , (resources string:'%1 is not in your PATH.\You should change your ".login" and/or ".profile" files to include it.\\'
-                                  with:stxBinDir asText allBold) withCRs.
-    ].
+    ] ifFalse:[
+        havePath := true.
+        (((OperatingSystem getEnvironment:'PATH')
+            asCollectionOfSubstringsSeparatedBy:$:)
+                includes:stxBinDir) ifFalse:[
 
-    (stxLibDir ~= '/usr/local/lib/smalltalk'
-    and:[stxLibDir ~= '/usr/lib/smalltalk']) ifTrue:[
-        msg := msg , (resources string:'The library directory is not a standard ST/X library directory\("/usr/local/lib/smalltalk" or "/usr/lib/smalltalk").\You have to define the %1 environment variable\as %2 before ST/X can be started.\'
-                                  with:'STX_LIBDIR' asText allBold 
-                                  with:stxLibDir asText allBold) withCRs.
-        havePath ifFalse:[
-            msg := msg , (resources string:'The above mentioned files are also a good place to do this.\') withCRs.
-        ] ifTrue:[
-            msg := msg , (resources string:'The ".login" and/or ".profile" files are a good place to do this.\') withCRs.
+            havePath := false.
+            shInfo  := 'PATH=$PATH:' , stxBinDir , ' ; export PATH\'.
+            cshInfo := 'set path=($path ' , stxBinDir , ')\'.
+            msg := msg , (resources string:'%1 is not in your PATH.\You should change your ".login" and/or ".profile" files to include it.\\'
+                                      with:stxBinDir asText allBold) withCRs.
         ].
 
-        shInfo := shInfo , 'STX_LIBDIR=' , stxLibDir , ' ; export STX_LIBDIR\'.
-        cshInfo := cshInfo , 'setenv STX_LIBDIR ' , stxLibDir , '\'.
-    ].
+        (stxLibDir ~= '/usr/local/lib/smalltalk'
+        and:[stxLibDir ~= '/usr/lib/smalltalk']) ifTrue:[
+            msg := msg , (resources string:'The library directory is not a standard ST/X library directory\("/usr/local/lib/smalltalk" or "/usr/lib/smalltalk").\You have to define the %1 environment variable\as %2 before ST/X can be started.\'
+                                      with:'STX_LIBDIR' asText allBold 
+                                      with:stxLibDir asText allBold) withCRs.
+            havePath ifFalse:[
+                msg := msg , (resources string:'The above mentioned files are also a good place to do this.\') withCRs.
+            ] ifTrue:[
+                msg := msg , (resources string:'The ".login" and/or ".profile" files are a good place to do this.\') withCRs.
+            ].
 
-    shInfo notEmpty ifTrue:[
-        '*********************************************************' errorPrintCR.
-        (resources string:'Message from the ST/X Installer:\\') withCRs errorPrintCR.
-        (resources string:'Please add the following to your ".profile" file:') withCRs errorPrintCR.
-        '' errorPrintCR.
-        shInfo withCRs errorPrintCR.
-        '' errorPrintCR.
-        (resources string:'or (if you use csh/tcsh), add to your ".login" file:') withCRs errorPrintCR.
-        '' errorPrintCR.
-        cshInfo withCRs errorPrintCR.
-        '' errorPrintCR.
-        '*********************************************************' errorPrintCR.
+            shInfo := shInfo , 'STX_LIBDIR=' , stxLibDir , ' ; export STX_LIBDIR\'.
+            cshInfo := cshInfo , 'setenv STX_LIBDIR ' , stxLibDir , '\'.
+        ].
+
+        shInfo notEmpty ifTrue:[
+            '*********************************************************' errorPrintCR.
+            (resources string:'Message from the ST/X Installer:\\') withCRs errorPrintCR.
+            (resources string:'Please add the following to your ".profile" file:') withCRs errorPrintCR.
+            '' errorPrintCR.
+            shInfo withCRs errorPrintCR.
+            '' errorPrintCR.
+            (resources string:'or (if you use csh/tcsh), add to your ".login" file:') withCRs errorPrintCR.
+            '' errorPrintCR.
+            cshInfo withCRs errorPrintCR.
+            '' errorPrintCR.
+            '*********************************************************' errorPrintCR.
+        ].
     ].
 
     msg := msg , '\\Have fun using ST/X !!'.
 
     self information:msg withCRs.
 
-    "
-     STXInstaller new postInstall
-    "
-
-    "Modified: 2.3.1997 / 13:28:18 / cg"
+    "Modified: / 25.2.1998 / 19:29:04 / cg"
 !
 
 preInstall
-    "clobber the doc directory, to avoid copying cyclic symbolic links"
+    "clobber the doc directory, to avoid copying cyclic symbolic links.
+     Notice, the CD does not contain symlinks, but checking for them
+     allows installing from a development dir."
 
     |f|
 
@@ -831,7 +1224,7 @@
      STXInstaller new preInstall
     "
 
-    "Modified: 18.7.1996 / 22:10:42 / cg"
+    "Modified: / 25.2.1998 / 17:39:55 / cg"
 ! !
 
 !STXInstaller class methodsFor:'documentation'!