--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/STXInstaller.st Thu Jul 18 15:24:24 1996 +0200
@@ -0,0 +1,341 @@
+Object subclass:#STXInstaller
+ instanceVariableNames:'stxLibDir stxBinDir actionPercentageHolder actionTextHolder'
+ classVariableNames:'LastBinDir LastLibDir'
+ poolDictionaries:''
+ category:'eXept-tools'
+!
+
+
+!STXInstaller class methodsFor:'startup'!
+
+open
+ ^ self new open
+
+ "Created: 17.7.1996 / 14:36:22 / cg"
+! !
+
+!STXInstaller methodsFor:'installing'!
+
+copyFiles
+ |msg fileSpec filesToCopy numFiles nDone|
+
+ msg := #('ST/X Installation' '' 'copying:' '' 'to:' '') asStringCollection.
+
+ fileSpec := #(
+ "/ name destination subDir required
+
+ ( 'stc/stc' #bin nil false)
+ ( 'rules/stmkmp' #bin nil false)
+ ( 'rules/stmkmf' #bin nil false)
+
+ ( 'librun/librun.a' #lib 'lib' false)
+ ( 'libbasic/libbasic.o' #lib 'lib' false)
+ ( 'libbasic2/libbasic2.o' #lib 'lib' false)
+ ( 'libbasic3/libbasic3.o' #lib 'lib' false)
+ ( 'libcomp/libcomp.o' #lib 'lib' false)
+ ( 'libview/libview.o' #lib 'lib' false)
+ ( 'libview2/libview2.o' #lib 'lib' false)
+ ( 'libwidg/libwidg.o' #lib 'lib' false)
+ ( 'libwidg2/libwidg2.o' #lib 'lib' false)
+ ( 'libwidg3/libwidg3.o' #lib 'lib' false)
+ ( 'libtool/libtool.o' #lib 'lib' false)
+
+ ( 'projects/smalltalk/*.rc' #lib nil false)
+ ( 'projects/smalltalk/patches' #lib nil false)
+
+ ( 'projects/smalltalk/bitmaps' #lib nil false)
+ ( 'projects/smalltalk/configurations' #lib nil false)
+ ( 'projects/smalltalk/doc' #lib nil false)
+ ( 'projects/smalltalk/include' #lib nil false)
+ ( 'projects/smalltalk/resources' #lib nil false)
+ ( 'projects/smalltalk/rules' #lib nil false)
+ ).
+
+ filesToCopy := OrderedCollection new.
+
+ fileSpec do:[:entry |
+ |fileName dest subDir required destDir|
+
+ fileName := entry at:1.
+ dest := entry at:2.
+ subDir := entry at:3.
+ required := entry at:4.
+
+ dest == #bin ifTrue:[
+ destDir := stxBinDir
+ ] ifFalse:[
+ destDir := stxLibDir
+ ].
+
+ destDir := destDir asFilename.
+ subDir notNil ifTrue:[
+ destDir := destDir construct:subDir
+ ].
+
+ filesToCopy add:(fileName -> destDir pathName)
+ ].
+
+ numFiles := filesToCopy size.
+ nDone := 0.
+
+ filesToCopy do:[:entry |
+ |fileName destDir|
+
+ actionPercentageHolder value:(nDone / numFiles * 100) rounded.
+
+ fileName := entry key.
+ destDir := entry value.
+
+ msg at:4 put:' ' , (fileName asText allBold).
+ msg at:6 put:' ' , (destDir asText allBold).
+ actionTextHolder value:nil.
+ actionTextHolder value:msg.
+
+ OperatingSystem executeCommand:('cp -r ../../' , fileName , ' ' , destDir).
+
+ nDone := nDone + 1
+ ].
+
+ ^ true
+
+ "Created: 17.7.1996 / 15:16:20 / cg"
+ "Modified: 17.7.1996 / 15:21:09 / cg"
+!
+
+createDirectories
+ |msg dirsToMake numDirs nDone|
+
+ msg := #('ST/X Installation' '' 'creating directory:' '' '' '') asStringCollection.
+
+ dirsToMake := OrderedCollection new.
+ dirsToMake add:stxBinDir.
+ dirsToMake add:stxLibDir.
+ dirsToMake add:(stxLibDir asFilename constructString:'lib').
+ dirsToMake add:(stxLibDir asFilename constructString:'doc').
+ dirsToMake add:(stxLibDir asFilename constructString:'include').
+ dirsToMake add:(stxLibDir asFilename constructString:'resources').
+ dirsToMake add:(stxLibDir asFilename constructString:'binary').
+ dirsToMake add:(stxLibDir asFilename constructString:'bitmaps').
+
+ numDirs := dirsToMake size.
+ nDone := 0.
+
+ dirsToMake do:[:dirName |
+ |d errMsg stop box|
+
+ actionPercentageHolder value:(nDone / numDirs * 100) rounded.
+
+ msg at:4 put:' ' , dirName.
+ actionTextHolder value:nil.
+ actionTextHolder value:msg.
+
+ d := dirName asFilename.
+
+ d exists ifFalse:[
+ OperatingSystem recursiveCreateDirectory:d pathName
+ ].
+
+ d exists ifFalse:[
+ errMsg := 'failed to create directory: ' , dirName.
+ stop := true
+ ] ifTrue:[
+ d isDirectory ifFalse:[
+ errMsg := 'not a directory: ' , dirName.
+ stop := true
+ ] ifTrue:[
+ (d isReadable
+ and:[d isWritable]) ifFalse:[
+ errMsg := 'no R/W access to directory: ' , dirName.
+ stop := false
+ ] ifTrue:[
+ errMsg := nil
+ ]
+ ]
+ ].
+
+ errMsg notNil ifTrue:[
+ box := WarningBox new.
+ box title:errMsg.
+ box showAtPointerNotCovering:(WindowGroup activeGroup topViews first).
+ ].
+
+ Delay waitForSeconds:0.25.
+ nDone := nDone + 1.
+ ].
+ ^ true
+
+ "Created: 17.7.1996 / 15:24:19 / cg"
+ "Modified: 17.7.1996 / 15:35:30 / cg"
+! !
+
+!STXInstaller methodsFor:'startup'!
+
+askAndInstall
+ "/ check, if we are in the projects/smalltalk directory
+
+ (Filename currentDirectory pathName endsWith:'projects/smalltalk') ifFalse:[
+ self warn:'must be in the projects/smalltalk directory'.
+ ^ self
+ ].
+
+ [self askForDestination] whileTrue:[
+ self checkForExistingInstallationAndConfirm ifFalse:[
+ ^ self
+ ].
+ self doInstall ifTrue:[
+ ^ self
+ ].
+ (self confirm:'installation failed or aborted - retry ?')
+ ifFalse:[
+ ^ self
+ ]
+ ].
+
+ "Modified: 17.7.1996 / 15:08:30 / cg"
+!
+
+askForDestination
+ "open a dialog to enter destination directories"
+
+ |d cm l green dark
+ stxLibDirHolder stxBinDirHolder
+ |
+
+ LastLibDir isNil ifTrue:[
+ LastLibDir := '/usr/local/lib/smalltalk'
+ ].
+ LastBinDir isNil ifTrue:[
+ LastBinDir := '/usr/local/bin'
+ ].
+
+ stxLibDirHolder := LastLibDir asValue.
+ stxBinDirHolder := LastBinDir 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:'ST/X CD Installation'.
+ l := d addTextLabel:'Smalltalk/X CD installation.'.
+ l adjust:#left; backgroundColor:dark; foregroundColor:Color white.
+ d addVerticalSpace.
+ d addVerticalSpace.
+
+ d addHorizontalLine.
+
+ l := d addTextLabel:'Destination directories:'.
+ l adjust:#left; backgroundColor:dark; foregroundColor:Color white.
+
+ cm := ComboBoxView on:stxBinDirHolder.
+ cm list:(Array
+ with:'/tmp/stxbin'
+ with:'/usr/local/bin'
+ with:'/usr/bin'
+ with:(Filename homeDirectory constructString:'bin')).
+ d
+ addLabelledField:cm
+ label:'binaries'
+ adjust:#left
+ tabable:true
+ from:0.0 to:1.0 separateAtX:0.25
+ nameAs:'binaryBox'.
+
+ (d componentAt:'binaryBox.label') backgroundColor:dark; foregroundColor:Color white.
+
+ cm := ComboBoxView on:stxLibDirHolder.
+ cm list:(Array
+ with:'/tmp/stxlib'
+ with:'/usr/local/lib/smalltalk'
+ with:'/usr/lib/smalltalk'
+ with:((Filename homeDirectory
+ construct:'lib')
+ constructString:'smalltalk')).
+ d
+ addLabelledField:cm
+ label:'libraries'
+ adjust:#left
+ tabable:true
+ from:0.0 to:1.0 separateAtX:0.25
+ nameAs:'libraryBox'.
+
+ (d componentAt:'libraryBox.label') backgroundColor:dark; foregroundColor:Color white.
+
+ d addAbortButton; addOkButtonLabelled:'install'.
+ d extent:400@300.
+
+ d allViewBackground:dark.
+
+ d openAtCenter.
+ d accepted ifTrue:[
+ stxLibDir := LastLibDir := stxLibDirHolder value.
+ stxBinDir := LastBinDir := stxBinDirHolder value.
+ ^ true
+ ].
+ ^ false
+
+ "Modified: 17.7.1996 / 15:08:30 / cg"
+!
+
+checkForExistingInstallationAndConfirm
+ "look if there is another installation and confirm
+ reinstalling; return true if ok, false if not"
+
+ stxLibDir asFilename exists ifTrue:[
+ ^ DialogBox
+ confirm:('detected existing installation in '
+ , stxLibDir asText allBold
+ , '\\continue & overwrite ?') withCRs
+ yesLabel:'overwrite' noLabel:'cancel'
+
+ ].
+ ^ true
+
+!
+
+doInstall
+ "install ST/X; return true if ok, false if not"
+
+ |progressView ok|
+
+ progressView := ProgressIndicator
+ inBoxWithLabel:'ST/X Installation'
+ text:#('ST/X Installation' '' '' '' '' '' '' '') asStringCollection
+ abortable:true.
+ progressView topView extent:400@300.
+
+ ok := false.
+
+ progressView showProgressOf:
+ [:progressValue :currentAction |
+
+ actionPercentageHolder := progressValue.
+ actionTextHolder := currentAction.
+
+ (self createDirectories) ifTrue:[
+ ok := self copyFiles
+ ]
+ ].
+
+ ^ ok
+
+ "Created: 17.7.1996 / 15:11:27 / cg"
+ "Modified: 17.7.1996 / 15:24:27 / cg"
+!
+
+open
+ self askAndInstall
+
+ "Created: 17.7.1996 / 14:37:14 / cg"
+! !
+
+!STXInstaller class methodsFor:'documentation'!
+
+version
+ ^ '$Header$'
+! !