# HG changeset patch # User Claus Gittinger # Date 837696264 -7200 # Node ID ce9f4417b660655804c13586942a47d67f8e3f3d intitial checkin diff -r 000000000000 -r ce9f4417b660 STXInstaller.st --- /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$' +! !