⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 libupdte.tcl

📁 这是vxworks 的图形界面开发软件windML2.0和另一个CP2可以构成完整的界面开发。
💻 TCL
字号:
# LIBUPDTE.TCL  - Setup procedures for implementing library-update wizard page
#
# Copyright 1999 Wind River Systems, Inc
#
# modification history
# --------------------
# 01c,19mar99,wmd  Output to a file any debug messages.
# 01b,28jan99,tcy  moved procs here from INSTALL.TCL
# 01a,26jan99,tcy  extracted from INSTW32.TCL.
#

#############################################################################
#
# pageCreate(libUpdate) - update the library archives and displays progess in
#                         updating libraries
#
# This procedure will update the library archives and displays progess in
# updating libraries
#
# SYNOPSIS
# .tS
# pageCreate(libUpdate)
# .tE
#
# PARAMETERS: N/A
#
# RETURNS: N/A
#
# ERRORS: N/A
#

proc pageCreate(libUpdate) {} {
    global ctrlVals

    set ctrlVals(numBbrd) 0
    meterCreate [strTableGet 1180_LIB_UPDATE]
    set w [dlgFrmCreate [strTableGet 1480_TITLE_LIBUPDATE]]

    controlPropertySet $ctrlVals(meterWindow).$ctrlVals(meterWg) \
                            -background Blue -foreground Black

    controlEnable $w.backButt 0
    controlEnable $w.nextButt 0

    librariesUpdate

    meterDestroy $ctrlVals(meterWindow)

    controlEnable $w.backButt 1
    controlEnable $w.nextButt 1

    # test automation

    if { $ctrlVals(useInputScript) } {
        autoSetupLog "Library update page:"
        autoSetupLog "\tUpdated library"
    }

    nextCallback
}

#############################################################################
#
# pageProcess(libUpdate) - process inputs from libUpdate page if necessary
#
# This procedure will process inputs from libUpdate page if necessary
#
# SYNOPSIS
# .tS
# pageProcess(libUpdate)
# .tE
#
# PARAMETERS: N/A
#
# RETURNS: 1 when successful
#
# ERRORS: N/A
#

proc pageProcess(libUpdate) {} {
    return 1
}

##############################################################################
#
# libUpdateHelper - invokes make to carry out the requested action.
#
# a -n option is used to obtain a list of commands that 'make' supposes to
# carry out.  Each command is then evaluated separately.  Asking make to carry
# out the real action will cause many console windows to pop up.
#
# SYNOPSIS
# libUpdateHelper <cpu> <tool> <type> <action> [arFlags] [objs]
#
# PARAMETERS:
#    <cpu> : CPU family, i.e. MC68000
#    <tool>: compiler family, i.e 'gnu'
#    <type>: library type, i.e. 'vx'
#    <action>: build target, i.e. 'ar' or 'ranlib'
#    [arFlags] : the default value is -cru
#    [objs] : object file list separated by space, needed when <action> is ar
#
# RETURNS: N/A
#
# ERRORS: N/A
#

proc libUpdateHelper {cpu tool type action {arFlags "-cru"} {objs ""}} {

    set binDir [file join [destDirGet] host [windHostTypeGet] bin]
    regsub -all {\\} $binDir {/} binDir

    if {![catch {exec $binDir/make -n -f [makefileCreate] CPU=$cpu \
                              TOOL=$tool TYPE=$type \
                              OBJS=$objs \
                              ARFLAGS=$arFlags $action} retVal]} {

        regsub -all {\\} $retVal {/} retVal

        if {[catch {eval "exec $binDir/$retVal"} error1]} {
            if {[catch {eval "exec $retVal"} error2]} {
                puts "$error1\n$error2"
                uninstLog setup "\t$error1"
                uninstLog setup "\t$error2"
            } else {
                dbgputs "\n$retVal"
            }
        } else {
            dbgputs "\n$binDir/$retVal"
        }
    } else {
        puts $retVal
        uninstLog setup "\t$retVal"
    }
}

##############################################################################
#
# librariesUpdate - updating the vxWorks libraries.
#
# This routine walks thru each product, updates the vxWorks libraries w/ the
# object list which was obtained and saved by the archListPut() function.  The
# default updating flag is -cru.  A particular product can override this
# default setting by provide a postInstall.tcl file that contains a call to
# the arFlagsSet() function.  To speed up the archiving process, a minimum
# amount of AR invocations is made. This is achieved by grouping the object
# list into smaller lists of distinct flags and libraries, then archiving
# each list of objects via an AR invocation.
#
#
# SYNOPSIS
# librariesUpdate
#
# PARAMETERS: N/A
#
# RETURNS: N/A
#
# ERRORS: N/A
#

proc librariesUpdate {} {
    global setupVals
    global objects

    set setupVals(cancel) 0

    # Determine the total number of new object files for GUI updating purpose.

    set totalObjFile 0

    foreach objDir [array names objects] {
        incr totalObjFile [llength $objects($objDir)]
    }

    set percent 0

    # Updating the libraries.

    if {$totalObjFile != "0"} {
        meterUpdate $percent ""
        foreach prodIndex [cdInfoGet selectedProdIndexList] {

            searchAndProcessSection ArFlags [chooseInfFile $prodIndex] \
               $prodIndex
            set prodARFlag [arFlagsGet $prodIndex]

            foreach archKey [array names objects] {

                # typex is useful when updating special component.
                # ex: windview,...

                if {[regexp {^(.*),(.*),(.*),(.*),(.*),(.*)$} $archKey \
                    junk index obj cpu tool type typex] && \
                    "$prodIndex" == "$index"} {

                    # An arPassId is characterized by the following variables:
                    # "$prodARFlag,$cpu,$tool,$type,$typex,". It corresponds
                    # to one AR call. For example,
                    # prodARFlag,   cpu, tool, type, typex,
                    #       -cru, R4650,  gnu,   vx,    wv,

                    set arPassId $prodARFlag,$cpu,$tool,$type,$typex,

                    # Any objects that have these properties are "AR"ed
                    # together. typex is optional.

                    #initialize objs and objsArchived if necessary
                    if ![info exists objs($arPassId)] {
                        set objs($arPassId) ""
                    }

                    if ![info exists objsArchived($arPassId) ] {
                        set objsArchived($arPassId) 0
                    }

                    # now group objects by arPassId and update the
                    # number of objects archived for each arPassId
                    foreach objFile $objects($archKey) {
                        set objs($arPassId) "$objFile $objs($arPassId)"
                        incr objsArchived($arPassId)
                    }
                }
            }
        }

        set numArchivedSoFar 0
        foreach arPassId [array name objsArchived] {

            if {"$setupVals(cancel)" == "1"} { return }

            # extract elements from arPassId
            if {[regexp {^(.*),(.*),(.*),(.*),(.*),(.*)$} $arPassId \
                junk prodARFlag cpu tool type typex] } {

                set archiveFile [file join [destDirGet] target lib \
                        lib$cpu$tool$type.a]

                if {[file exists $archiveFile]} {
                    meterUpdate $percent "Updating lib$cpu$tool${type}.a"

                    # don't backup library if this is the first installation
                    if {[file extension $setupVals(uninstFile)] != ".001"} {
                        backup target/lib/lib$cpu$tool$type.a
                        # immediately flush the queue; otherwise we may not
                        # be backing up the old archive
                        backupFileQueueFlush
                    }

                    cd [file join [destDirGet] target lib \
                        obj$cpu$tool$type$typex]

                    set numArchivedSoFar \
                        [expr $numArchivedSoFar + $objsArchived($arPassId)]

                    set percent [expr $numArchivedSoFar * 100 / $totalObjFile]

                    libUpdateHelper $cpu $tool $type ar \
                        $prodARFlag $objs($arPassId)

                    # Ranlib to update the lib table of content.
                    libUpdateHelper $cpu $tool $type ranlib

                    meterUpdate $percent "Updating lib$cpu$tool${type}.a"

                    dbgputs "                       AR pass Id: $arPassId"
                    dbgputs "                          Library:\
                         lib$cpu$tool$type.a"
                    dbgputs "                 Object directory: [pwd]"
                    dbgputs "                          ARFLAGS: $prodARFlag"
                    dbgputs "Number of objects in this AR pass: \
                            $objsArchived($arPassId)"
                    dbgputs "Number of objects archived so far: \
                            $numArchivedSoFar"
                    dbgputs "          Percent archived so far: \
                            $percent% of $totalObjFile objects"
                    dbgputs "------------------------------------------------"

                } else {
                    dbgputs "skip updating $archiveFile : no such file"
                }
            } else {
                puts "librariesUpdate: cannot get arPassId"
            }
        }
        meterUpdate 100 ""
    }
}

##############################################################################
#
# makefileCreate - creating a make file for use in the updating library step.
#
# SYNOPSIS
# makefileCreate
#
# PARAMETERS: N/A
#
# RETURNS: N/A
#
# ERRORS: N/A
#

proc makefileCreate {} {

    if {[windHostTypeGet] == "x86-win32"} {
        set Makefile "[tempDirGet]\\Makefile"
    } else {
        set Makefile "[tempDirGet]/Makefile"
    }

    if ![file exists $Makefile] {
        set f [open $Makefile "w"]

        if {"[windHostTypeGet]" == "x86-win32"} {
            puts $f "include [destDirGet]\\target\\h\\make\\make.$(CPU)$(TOOL)"
            puts $f "ARFLAGS = -cru"
            puts $f "ar:"
            puts $f "\t- $(AR) $(ARFLAGS) ..\\lib$(CPU)$(TOOL)$(TYPE).a $(OBJS)"
            puts $f "ranlib:"
            puts $f "\t- $(RANLIB) ..\\lib$(CPU)$(TOOL)$(TYPE).a"
        } else {
            puts $f "include [destDirGet]/target/h/make/make.$(CPU)$(TOOL)"
            puts $f "ARFLAGS = -cru"
            puts $f "ar:"
            puts $f "\t- $(AR) $(ARFLAGS) ../lib$(CPU)$(TOOL)$(TYPE).a $(OBJS)"
            puts $f "ranlib:"
            puts $f "\t- $(RANLIB) ../lib$(CPU)$(TOOL)$(TYPE).a"
        }
        close $f
    }

    return $Makefile
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -