📄 install.tcl
字号:
# install.tcl - Installation program for Unix/Windows platforms.## Copyright 1984-1997 Wind River Systems, Inc## Modification history:# ---------------------# 02s,12aug97,pdn moved version string to VERSION.TCL# 02r,04aug97,pdn merged fixed from qms1_0_x branch.# 02q,20jun97,pdn allowed native $(AR), and $(RANLIB) to be defined.# 02p,13jun97,pdn changed to use setup APIs as a DLL.# 02o,19may97,pdn fixed fileNameAppreviate() to handle the case that regexp# fails to match.# 02n,02may97,pdn added comments.# 02m,08apr97,pdn fixed fileDup() to handle file permission accordingly# 02l,28mar97,pdn added code to support correct uninstall# 02k,10mar97,pdn fixed library update routine.# 02j,08mar97,tcy undo last mod# 02i,07mar97,tcy moved needUpdateWlmd() from INSTTK.TCL to here# 02h,07mar97,pdn fixed uninstStart to allow patch uninstallation.# 02g,05mar97,pdn sorted the product list.# 02f,04mar97,pdn copy ZIP utility to bin directory.# added hook for patch installation.# 02e,25feb97,pdn added function byteToMbyte()# 02d,24feb97,pdn modified fileDup() to allow update/overwrite.# 02c,09feb97,pdn fixed cdInfoGet to return correct selected feature Id list# 02b,04feb97,pdn fixed library updating problem.# 02a,24jan97,pdn rounded up the product size upto 0.1 MB where needed# 01z,24jan97,pdn returned to the calling function when user hit cancel# 01y,22jan97,pdn fixed the ar so that console windows in Windows 95 won't show up.# 01x,21jan97,pdn fixed fileDup(), and execute().# 01w,20jan97,pdn fixed replicated feature id/name, better error hanlding# 01v,14jan97,pdn updated uninstBinCopy() to support Windows, fixed indentation# 01u,07jan97,pdn updated the pre/post install# implemented billboard cycling from product dir# 01t,18dec96,sks changed location of TCL and BITMAP files; renamed# TEXT.TCL to MESSAGES.TCL # 01s,13dec96,pdn updated postInstall()# 01r,12dec96,pdn added productName to the productObj# 01r,11dec96,pdn fixed cdInfoGet and productInfoGet to return correct# featureId list# 01q,09dec96,pdn added hierachy selection option# 01p,23nov96,sj incorporated post and presinstall mechanisms# 01o,18nov96,sj caught user removing CDROM when files are being # copied over and included the check for backuped# files into backup().# 01m,11nov96,pdn centralized all strings to TEXT.TCL # 01l,08nov96,pdn backup newer files in the same manner as older files.# 01k,06nov96,pdn added retry option for fileDup()# 01j,05nov96,pdn fixed the uninstall logging# 01i,24oct96,pdn added uninstLog()# 01h,21oct96,pdn added pageRemove()# 01g,18oct96,pdn updated uninstStart() to use new uninst dir, and added# uninstBinCopy()# 01f,01oct96,tcy moved umaskGet(), umaskSet(), getSelection() here # 01e,29aug96,pdn allowed non-tk specific installation# 01d,27aug96,pdn handle messages return from zip.# 01c,02jul96,pdn added directory creation, and implement lib update.# 01b,25jun96,pdn modified the GUI to meet the specification.# 01a,11jun96,jco translated to tk from the uitcl/Windows.#source [cdromRootDirGet]/RESOURCE/TCL/VERSION.TCL################################################################################ fileNameAppreviate - shorten the filename for GUI displaying purpose## This procedure shorten filename if it's longer than 40 chars. The shorten# filename will be in the form firstDir/.../lastDir/fileName. There is no# warranty that the resulted filename will be any shorter than the original one.## SYNOPSIS# fileNameAppreviate <fileName>## PARAMETERS: # fileName : a path filename## RETURNS: shorten filename## ERRORS: N/A#proc fileNameAppreviate {fileName} { set shortName $fileName if {[string length $fileName] > 40} { if [regexp {(^[^/]+)/.*/([^/]+/[^/]+$)} $fileName junk\ firstPart lastPart] { set shortName "$firstPart/.../$lastPart" } } return $shortName}################################################################################ archListPut - save the object filename ## This procedure checks the provided filename for a special pattent. If # matches, the filename will be saved in a global array for later archiving# step. The keys of this associated array are the object location, and product# index.## SYNOPSIS# archListPut <fileName> <index>## PARAMETERS: # fileName : a path filename# index : an index to a current product## RETURNS: N/A## ERRORS: N/A#proc archListPut {fileName index} { global objects # toolset and typeset can be a set of strings "|" together # "gnu|gnucoff|..." set toolset "gnu" set typeset "vx" if {[regexp "^.*/lib/obj(.*)($toolset)($typeset)(.*)/(.*$)" $fileName \ junk cpu tool type typex tailFileName] == "1"} { set objDir "$index,obj,$cpu,$tool,$type,$typex" if [info exists objects($objDir)] { if {[lsearch $objects($objDir) $tailFileName] == "-1"} { lappend objects($objDir) $tailFileName } } { set objects($objDir) [list $tailFileName] } }}################################################################################ backup - save the specified file into a zip file. ## This procedure zips the specified file into a zipfile. If the file is# previously backed up, nothing will be done.## SYNOPSIS# backup <fileName>## PARAMETERS: # fileName : a path filename## RETURNS: N/A## ERRORS: N/A#proc backup {fileName} { global setupVals backUpFileArray if ![info exists backUpFileArray($fileName)] { set saveDir [pwd] cd [destDirGet] # only interested in the existent of the array element, not the content set backUpFileArray($fileName) "" if [catch {exec ZIP $setupVals(uninstFile) -g -q -1 $fileName} error] { uninstLog setup "\twarning: $fileName : $error" if [debug] {puts "warning: $fileName: $error"} } { uninstLog backup "wind_base\t$fileName" } cd $saveDir }}################################################################################ fileBackupAndRemove - backup and remove## This procedure backups, then removes the specified file.## SYNOPSIS# fileBackupAndRemove <fileName>## PARAMETERS: # fileName : a path filename## RETURNS: N/A## ERRORS: N/A#proc fileBackupAndRemove {fileName} { backup $fileName catch {file delete $fileName}}################################################################################ fileRemove - remove the specified file## This procedure removes the specified file, and if fails to do so, it's then# popping up a dialog to query for the next action.## SYNOPSIS# fileRemove <fileName>## PARAMETERS: # fileName : a path filename## RETURNS: # OK : successful removing <filename># RETRY : failed to remove the file, and user wants to retry.# IGNORE : failed to remove the file, and user wants to ignore it.## ERRORS: N/A#proc fileRemove {fileName} { global setupVals if [catch {file delete $fileName} error] { set msg [strTableGet 1370_FILE_ACCESS_ERROR $fileName $error] switch [dialog re_ig_cancel "Setup" $msg question 0] { 0 { return "RETRY" } 1 { set logMsg "\terror: $fileName: $error" lastErrorSet $logMsg uninstLog setup $logMsg return "IGNORE" } default {quitCallback} } } return "OK"}################################################################################ uninstStart - obtains a zip filename## This procedure obtains a zip filename for use in sub-sequence calls to zip,# creates $WIND_BASE/.wind/uninst if not exist. Must be called prior any zip # function call.## SYNOPSIS# uninstStart [type]## PARAMETERS: # [type] : if 'license' is specified, zip filename w/ extension 001 returns.## RETURNS: zip filename.## ERRORS: N/A#proc uninstStart {{type Software}} { global setupVals uninstHomeDirSet [destDirGet]/.wind/uninst if ![file isdirectory [uninstHomeDirGet]] { file mkdir [uninstHomeDirGet] } if {"$type" == "license"} { set setupVals(uninstFile) "[uninstHomeDirGet]/data.001" } { set setupVals(uninstFile) \ "[uninstHomeDirGet]/data.[format "%03d" [expr 1 + \ [llength [glob -nocomplain [uninstHomeDirGet]/data.*]]]]" }}################################################################################ uninstFileClose - close uninstall file descriptions.## This procedure closes uninstall file descriptions if they are still opened.## SYNOPSIS# uninstFileClose## PARAMETERS: N/A## RETURNS: N/A## ERRORS: N/A#proc uninstFileClose {} { global setupVals if {"$setupVals(uninstFileOpen)" == "opened"} { close $setupVals(fInstallFile) close $setupVals(fInstallInfo) close $setupVals(fInstallBackup) close $setupVals(fInstallResource) puts $setupVals(fSetupLog) "" close $setupVals(fSetupLog) set setupVals(uninstFileOpen) closed }}################################################################################ uninstFileOpen - opens files for recording uninstall info.## This procedure opens disk files for writing the temporary uninstall records.# These files will be closed by calling uninstFileClose()## SYNOPSIS# uninstFileOpen## PARAMETERS: N/A## RETURNS: N/A## ERRORS: N/A#set setupVals(uninstFileOpen) ""proc uninstFileOpen {} { global setupVals if {"$setupVals(uninstFileOpen)" != "opened"} { set setupLog [tempDirGet]/setup.log.tmp set uninstFile [tempDirGet]/installFile.tmp set uninstResource [tempDirGet]/installResource.tmp set uninstBackup [tempDirGet]/installBackup.tmp set uninstInfo [tempDirGet]/installInfo.tmp set setupVals(fSetupLog) [open $setupLog "w"] set setupVals(fInstallFile) [open $uninstFile "w"] set setupVals(fInstallInfo) [open $uninstInfo "w"] set setupVals(fInstallBackup) [open $uninstBackup "w"] set setupVals(fInstallResource) [open $uninstResource "w"] set setupVals(uninstFileOpen) opened }}################################################################################ uninstBinCopy - copies uninstall agent## This procedure copies neccessary files from CDROM to the destination # directory for the uninstall program to work. No-op if patch installation# is detected.## SYNOPSIS# uninstBinCopy## PARAMETERS: N/A## RETURNS: N/A## ERRORS: N/A#proc uninstBinCopy {} { global setupVals if {[instTypeGet] == "patch"} { return } elseif {[windHostTypeGet] == "x86-win32"} { set winDir [setupWinDirGet] set cdBinDir [cdromRootDirGet]\\X86\\WIN32 set usrBinDir [destDirGet]\\host\\[windHostTypeGet]\\bin fileDup $cdBinDir\\ZIP.EXE $usrBinDir\\ZIP.EXE update fileDup $cdBinDir\\MFC42.DLL $usrBinDir\\MFC42.DLL fileDup $cdBinDir\\MSVCRT.DLL $usrBinDir\\MSVCRT.DLL fileDup $cdBinDir\\PCTREE32.DLL $usrBinDir\\PCTREE32.DLL fileDup $cdBinDir\\TCL.DLL $usrBinDir\\TCL.DLL fileDup $cdBinDir\\UITCL.DLL $usrBinDir\\UITCL.DLL fileDup $cdBinDir\\UITCLSH.EXE $usrBinDir\\UITCLSH.EXE fileDup $cdBinDir\\SETUPTCL.DLL $usrBinDir\\SETUPTCL.DLL update fileDup [cdromRootDirGet]\\RESOURCE\\BITMAPS\\UNINST.BMP \ [uninstHomeDirGet]\\UNINST.BMP update fileDup [cdromRootDirGet]\\RESOURCE\\TCL\\UNINST.TCL \ [uninstHomeDirGet]\\UNINST.TCL update } { set usrBinDir [destDirGet]/host/[windHostTypeGet]/bin fileDup [cdromRootDirGet]/RESOURCE/TCL/UNINST.TCL \ [uninstHomeDirGet]/UNINST.TCL update fileDup [cdromRootDirGet]/RESOURCE/TCL/LIB/TKLIB.TAR \ [uninstHomeDirGet]/TKLIB.TAR update fileDup [cdromRootDirGet]/RESOURCE/BITMAPS/UNINST.PPM \ [uninstHomeDirGet]/UNINST.PPM update fileDup [cdromBinDirGet]/INSTTCL2 $usrBinDir/INSTTCL2 update fileDup [cdromBinDirGet]/INSTTK2 $usrBinDir/INSTTK2 update fileDup [cdromRootDirGet]/UNINST $usrBinDir/UNINST update fileDup [cdromBinDirGet]/ZIP $usrBinDir/ZIP update fileDup [cdromBinDirGet]/SETUPTCL[string toupper \ [info sharedlibextension]] \ $usrBinDir/setuptcl[info sharedlibextension] update }}################################################################################ uninstStop - wraps up the uninstall process.## This procedure copies uninstall agent, executes all queued commands, closes # all tempfiles, saves the temporary uninstall records into a zip file.## SYNOPSIS# uninstStop## PARAMETERS: N/A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -