📄 filecopy.tcl
字号:
# substrings come last# defaultSet if the makefile directories do not exist or no# TOOL=<tool> lines are found. ## ERRORS: N/A#proc toolsetExtract {} { set toolPattern "TOOL\[ \t\]*=\[ \t\]*" set toolFamilyList {gnu diab} set toolset "" # this is the default toolset as of Tornado 2.2 CP1 set defaultSet "sfr3kdiab|sfdiable|diable|sfdiab|diabbe|diab|sfr3kgnu|sfgnule|sfgnu|gnule|gnube|gnu" # save the current directory set curDir [pwd] set toolDir [file join [destDirGet] target h tool] set toolDirExists 0 if {[file exists $toolDir]} { set makefileDir $toolDir # get the tool families, which are the directories # under target\h\tool except "common" if {[catch { # catch file operation errors just in case cd $toolDir set toolFamilyDirs [glob -nocomplain *] } error]} { dbgputs "toolsetExtract error: $error" uninstLog setupLog "archive error: $error" cd $curDir return $defaultSet } if {$toolFamilyDirs != ""} { set toolFamilyList "" foreach toolFamily $toolFamilyDirs { if {$toolFamily != "common"} { lappend toolFamilyList $toolFamily } } } cd $curDir set toolDirExists 1 } else { set makefileDir [file join [destDirGet] target h make] if {![file exists $makefileDir]} { set errorString "target makefile directories do not exist" dbgputs "toolsetExtract error: $errorString" uninstLog setupLog "archive error: $errorString" # if makefile directories do not exist, return a default toolset # so that Setup can continue return $defaultSet } } if {[catch { # catch file operation errors just in case foreach toolFamily $toolFamilyList { cd $makefileDir if {$toolDirExists == 1} { if {[file exists $toolFamily] && [file isdirectory $toolFamily]} { cd $toolFamily } else { continue } } foreach f [glob -nocomplain "make.*$toolFamily*"] { set fd [open $f r] foreach line [split [read $fd] \n] { # skip comments if {[string first \# [string trimleft $line]] == 0} { continue } if {[regexp "($toolPattern)(.*)" $line match toolstring tool]} { # the lsubstringAppend procedure is used to add the # tool string to the toolset list, to ensure that # substrings of any string in the list are added after # those strings. This is because the toolset is used # as a pattern matcher during archiving to strip out # any existing cpu variant from the "tool" string. # Regexp will match the first string found, so we # don't want only "sfgnu" extracted out of # "sfgnule_vr54xx" for example (refer to # newLibUpdateHelper in LIBUPDTE.TCL). set toolset [lsubstringAppend $toolset $tool] # make sure each tool in the set is unique set toolset [lunique $toolset] } } close $fd } } # end of catch } error]} { dbgputs "toolsetExtract error: $error" uninstLog setupLog "archive error: $error" cd $curDir return $defaultSet } # go back to the current directory cd $curDir regsub -all " " $toolset "|" toolset if {$toolset == ""} { set errorString "TOOL settings not found or target makefiles do not exist" dbgputs "toolsetExtract error: $errorString" uninstLog setupLog "archive error: $errorString" return $defaultSet } return $toolset}################################################################################ 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 setup_objects global setup_libraries global newArchive global setupVals # toolset and typeset can be a set of strings "|" together # "sfgnule|gnu..." if {$setupVals(toolset) == ""} { set setupVals(toolset) [toolsetExtract] } set toolset $setupVals(toolset) 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 setup_objects($objDir)] { if {[lsearch $setup_objects($objDir) $tailFileName] == "-1"} { lappend setup_objects($objDir) $tailFileName } } else { set setup_objects($objDir) [list $tailFileName] } } if {[regexp "^.*/lib/lib(.*)($toolset)($typeset)(.*).a" $fileName \ junk cpu tool type typex] == "1"} { set objLib "$index,obj,$cpu,$tool,$type,$typex" set setup_libraries($objLib) lib$cpu$tool$type$typex.a } # For archiving format target/lib/PPC/ppc604/gnu/objcplus/foo.o if {[regexp "^.*/lib/(.*)/(.*)/(.*)/obj(.*)/(.*$)" $fileName \ junk family cpu tool type tailFileName] == "1"} { set newArchive 1 set objDir "$index,obj,$family,$cpu,$tool,$type" if [info exists setup_objects($objDir)] { if {[lsearch $setup_objects($objDir) $tailFileName] == "-1"} { lappend setup_objects($objDir) $tailFileName } } else { set setup_objects($objDir) [list $tailFileName] } } if {[regexp "^.*/lib/(.*)/(.*)/(.*)/lib(.*).a" $fileName \ junk family cpu tool type] == "1"} { set objLib "$index,obj,$family,$cpu,$tool,$type" set setup_libraries($objLib) lib$type.a }}################################################################################ processInstall - process the return value from filesCopy routine## SYNOPSIS# processInstall <retVal>## PARAMETERS: The return value from call to setupFileExtract in filesCopy## RETURNS: string "break" if EOF encountered, else "NULL".## ERRORS: N/A#proc processInstall {retVal fileName prodIndex} { global ctrlVals setupVals global current_file multipleVersion global overwritePolicy donotOverwrite set f [destDirGet]/$fileName switch $retVal { OK { uninstLog file "wind_base\t$fileName" # Build archList for later updating the archirve. archListPut $fileName $prodIndex setupFileNext } EXIST_AND_SAME { # Workaround the problem that the base product is # reinstalled, and messup the libraries. archListPut $fileName $prodIndex setupFileNext } EXIST_AND_NEWER { if { [isGUImode] } { # do not overwrite if auto install if { $ctrlVals(useInputScript) } { archListPut $fileName $prodIndex; \ setupFileNext return NULL } } if { [info exists overwritePolicy(ALL)] && $overwritePolicy(ALL) } { backup $fileName; \ set newerFileArray($fileName) ""; \ set fileRm [fileRemove $f] if { $fileRm == "IGNORE"} { setupFileNext } elseif { $fileRm == 0 } { # for TEXT mode, if return value = 0, exit SETUP if { ![isGUImode] } { return 0 } } } elseif { [info exists donotOverwrite(ALL)] && $donotOverwrite(ALL) } { archListPut $fileName $prodIndex; \ setupFileNext } else { if { [isGUImode] } { messageBeep -exclamation set ret [dialog file_exists_newer_warn "Setup" \ [strTableGet FILESCOPY_FILE_EXISTS_NEWER_WARN] \ question 0] } else { puts "\n\n[strTableGet FILESCOPY_FILE_EXISTS_NEWER_WARN]\n\n\ Choose 0: overwrite the existing file.\n\ Choose 1: do not overwrite the existing file.\n\ Choose 2: overwrite ALL files, do not prompt about\ this again. Choose 3: do not overwrite ANY newer files, do not\ prompt about this again." set ret [prompt] } switch -regexp -- $ret { 0 {backup $fileName; \ set newerFileArray($fileName) ""; \ set fileRm [fileRemove $f] while { $fileRm == "RETRY" } { set fileRm [fileRemove $f] } if { $fileRm == "IGNORE" } { setupFileNext } elseif { $fileRm == 0 } { # for TEXT mode, if return value = 0, exit SETUP if { ![isGUImode] } { return 0 } } } 1 {archListPut $fileName $prodIndex; \ setupFileNext } 2 {set overwritePolicy(ALL) 1; \ backup $fileName; \ set newerFileArray($fileName) ""; \ set fileRm [fileRemove $f] if { $fileRm == "IGNORE"} { setupFileNext } elseif { $fileRm == 0 } { # for TEXT mode, if return value = 0, exit SETUP if { ![isGUImode] } { return 0 } } } 3 {set donotOverwrite(ALL) 1; \ archListPut $fileName $prodIndex; \ setupFileNext } "[eE][xX][iI][tT]" { return 0 } # TEXTmode exit } } } EXIST_AND_OLDER { backup $fileName; \ set fileRm [fileRemove $f] if { $fileRm == "IGNORE"} { setupFileNext } elseif { $fileRm == 0 } { # for TEXT mode, if return value = 0, exit SETUP if { ![isGUImode] } { return 0 } } } MULTIPLE_VERSION { # Setup detected that the file being install has more # than one versions on the CD-ROM. if ![file exists $f._${prodIndex}_] { uninstLog setup "\t$f._${prodIndex}_: does not exist" setupFileNext return NULL } if {![info exists multipleVersion($fileName)]} { set multipleVersion($fileName) $prodIndex } else { # Check to see if there is a duplicate prodIndex set indexLocate [lsearch -exact \ $multipleVersion($fileName) $prodIndex] if {$indexLocate == -1} { lappend multipleVersion($fileName) $prodIndex } } setupFileNext } NOT_FOUND { set msg [strTableGet FILESCOPY_DEFLATE_ERROR] set logMsg "\terror: cannot copy $fileName: not found" if { [isGUImode] } { if { $ctrlVals(useInputScript) } { autoSetupLog "$logMsg" autoSetupLog "Application Exit\n" set setupVals(cancel) 1 applicationExit return 0 } } if { [isGUImode] } { set ret [dialog re_ig_cancel "Setup" $msg question 0] } else { puts "\n\n$msg\n\nChoose 0: Retry\nChoose 1: Ignore\nChoose 2: Abort\n" set ret [prompt] } switch -- $ret { 0 { return NULL } 1 { lastErrorSet $logMsg uninstLog setup $logMsg setupFileNext } 2 { # if TEXT mode, exit if { ![isGUImode] } { return 0 } quitCallback } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -