Annotation of micropolis/src/tclx/tclsrc/install.tcl, revision 1.1.1.1

1.1       root        1: #
                      2: # installTcl.tcl -- 
                      3: #
                      4: # Tcl program to install Tcl onto the system.
                      5: #
                      6: #------------------------------------------------------------------------------
                      7: # Copyright 1992 Karl Lehenbauer and Mark Diekhans.
                      8: #
                      9: # Permission to use, copy, modify, and distribute this software and its
                     10: # documentation for any purpose and without fee is hereby granted, provided
                     11: # that the above copyright notice appear in all copies.  Karl Lehenbauer and
                     12: # Mark Diekhans make no representations about the suitability of this
                     13: # software for any purpose.  It is provided "as is" without express or
                     14: # implied warranty.
                     15: #------------------------------------------------------------------------------
                     16: # $Id: installTcl.tcl,v 2.0 1992/10/16 04:52:08 markd Rel $
                     17: #------------------------------------------------------------------------------
                     18: #
                     19: # It is run in the following manner:
                     20: #
                     21: #     tcl installTcl.tcl
                     22: #
                     23: # This script reads the Extended Tcl Makefile confiugation file (Config.mk)
                     24: # and converts the Makefile macros in Tcl variables that control the
                     25: # installation.  The following variables are currently used:
                     26: #
                     27: #   TCL_UCB_DIR             TCL_DEFAULT             TCL_OWNER
                     28: #   TCL_GROUP               TCL_BINDIR              TCL_LIBDIR
                     29: #   TCL_INCLUDEDIR          TCL_TCLDIR              TCL_MAN_INSTALL
                     30: #   TCL_MAN_BASEDIR         TCL_MAN_CMD_SECTION     TCL_MAN_FUNC_SECTION
                     31: #   TK_MAN_CMD_SECTION      TK_MAN_FUNC_SECTION     TCL_MAN_STYLE*
                     32: #   TCL_MAN_INDEX*          TCL_TK_SHELL*
                     33: #
                     34: # (ones marked with * are optional)
                     35: #
                     36: # Notes:
                     37: #   o Must be run in the Extended Tcl top level directory.
                     38: #   o The routine InstallManPages has code to determine if a manual page
                     39: #     belongs to a command or function.  For Tcl the commands are assumed
                     40: #     to be in "Tcl.man",  for TclX functions are in TclX.man.  All others
                     41: #     are assumed to be functions.  For Tk, all manuals starting with Tk_
                     42: #     are assumed to be functions, all others are assumed to be commands.
                     43: #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
                     44: 
                     45: #------------------------------------------------------------------------------
                     46: # ParseConfigFile --
                     47: #
                     48: #  Parse a configure file in the current directory and convert all make
                     49: #  macros to global Tcl variables.
                     50: 
                     51: proc ParseConfigFile {configFile} {
                     52:    set cfgFH [open $configFile]
                     53:  
                     54:    while {[gets $cfgFH line] >= 0} {
                     55:       if {[string match {[A-Za-z]*} $line]} {
                     56:           set idx [string first "=" $line]
                     57:           if {$idx < 0} {
                     58:               error "no `=' in: $line"}
                     59:           set name  [string trim [csubstr $line 0 $idx]]
                     60:           set value [string trim [crange  $line [expr $idx+1] end]]
                     61:           global $name
                     62:           set $name $value
                     63:       }
                     64:    }
                     65:    close $cfgFH
                     66: 
                     67: }
                     68: 
                     69: #------------------------------------------------------------------------------
                     70: # GiveAwayFile --
                     71: #   Give away a file to the Tcl owner and group and set its permissions.
                     72: #
                     73: # Globals:
                     74: #    TCL_OWNER - Owner name for Tcl files.
                     75: #    TCL_GROUP - Group nmae for Tcl file.
                     76: #------------------------------------------------------------------------------
                     77: 
                     78: proc GiveAwayFile {file} {
                     79:     global TCL_OWNER TCL_GROUP
                     80: 
                     81:     if {[file isdirectory $file]} {
                     82:         chmod a+rx,go-w $file
                     83:     } else {
                     84:         chmod a+r,go-w $file
                     85:     }    
                     86:     chown [list $TCL_OWNER $TCL_GROUP] $file
                     87: 
                     88: } ;# GiveAwayFile
                     89: 
                     90: #------------------------------------------------------------------------------
                     91: # MakePath --
                     92: #
                     93: # Make sure all directories in a directory path exists, if not, create them.
                     94: #------------------------------------------------------------------------------
                     95: proc MakePath {pathlist} {
                     96:     foreach path $pathlist {
                     97:         set exploded_path [split $path /]
                     98:         set thisdir {}
                     99:         foreach element $exploded_path {
                    100:             append thisdir $element
                    101:             if {![file isdirectory $thisdir]} {
                    102:                 mkdir $thisdir
                    103:                 GiveAwayFile $thisdir
                    104:             }
                    105:             append thisdir /
                    106:         }
                    107:     }
                    108: }
                    109: 
                    110: #------------------------------------------------------------------------------
                    111: # CopyFile -- 
                    112: #
                    113: # Copy the specified file and change the ownership.  If target is a directory,
                    114: # then the file is copied to it, otherwise target is a new file name.
                    115: #------------------------------------------------------------------------------
                    116: 
                    117: proc CopyFile {sourceFile target} {
                    118: 
                    119:     if {[file isdirectory $target]} {
                    120:         set targetFile "$target/[file tail $sourceFile]"
                    121:     } else {
                    122:         set targetFile $target
                    123:     }
                    124: 
                    125:     unlink -nocomplain $targetFile
                    126:     set sourceFH [open $sourceFile r]
                    127:     set targetFH [open $targetFile w]
                    128:     copyfile $sourceFH $targetFH
                    129:     close $sourceFH
                    130:     close $targetFH
                    131:     GiveAwayFile $targetFile
                    132: 
                    133: } ;# CopyFile
                    134: 
                    135: #------------------------------------------------------------------------------
                    136: # CopyManPage -- 
                    137: #
                    138: # Copy the specified manual page and change the ownership.  The manual page
                    139: # is edited to remove change bars (.VS and .VE macros). If target is a
                    140: # directory, then the file is copied to it, otherwise target is a new file
                    141: # name.
                    142: #------------------------------------------------------------------------------
                    143: 
                    144: proc CopyManPage {sourceFile target} {
                    145: 
                    146:     if {[file isdirectory $target]} {
                    147:         set targetFile "$target/[file tail $sourceFile]"
                    148:     } else {
                    149:         set targetFile $target
                    150:     }
                    151: 
                    152:     unlink -nocomplain $targetFile
                    153:     set sourceFH [open $sourceFile r]
                    154:     set targetFH [open $targetFile w]
                    155:     while {[gets $sourceFH line] >= 0} {
                    156:         if [string match {.V[SE]*} $line] continue
                    157:         puts $targetFH $line
                    158:     }
                    159:     close $sourceFH
                    160:     close $targetFH
                    161:     GiveAwayFile $targetFile
                    162: 
                    163: } ;# CopyManPage
                    164: 
                    165: #------------------------------------------------------------------------------
                    166: # CopySubDir --
                    167: #
                    168: # Recursively copy part of a directory tree, changing ownership and 
                    169: # permissions.  This is a utility routine that actually does the copying.
                    170: #------------------------------------------------------------------------------
                    171: 
                    172: proc CopySubDir {sourceDir destDir} {
                    173:     foreach sourceFile [glob -nocomplain $sourceDir/*] {
                    174: 
                    175:         if [file isdirectory $sourceFile] {
                    176:             set destFile $destDir/[file tail $sourceFile]
                    177:             if {![file exists $destFile]} {
                    178:                 mkdir $destFile}
                    179:             GiveAwayFile $destFile
                    180:             CopySubDir $sourceFile $destFile
                    181:         } else {
                    182:             CopyFile $sourceFile $destDir
                    183:         }
                    184:     }
                    185: } ;# CopySubDir
                    186: 
                    187: #------------------------------------------------------------------------------
                    188: # CopyDir --
                    189: #
                    190: # Recurisvely copy a directory tree.
                    191: #------------------------------------------------------------------------------
                    192: 
                    193: proc CopyDir {sourceDir destDir} {
                    194: 
                    195:     set cwd [pwd]
                    196:     if ![file exists $sourceDir] {
                    197:         error "\"$sourceDir\" does not exist"
                    198:     }
                    199:     if ![file isdirectory $sourceDir] {
                    200:         error "\"$sourceDir\" isn't a directory"
                    201:     }
                    202:     if {![file exists $destDir]} {
                    203:         mkdir $destDir
                    204:         GiveAwayFile $destDir
                    205:     }
                    206:     if ![file isdirectory $destDir] {
                    207:         error "\"$destDir\" isn't a directory"
                    208:     }
                    209:     cd $sourceDir
                    210:     set status [catch {CopySubDir . $destDir} msg]
                    211:     cd $cwd
                    212:     if {$status != 0} {
                    213:         global errorInfo errorCode
                    214:         error $msg $errorInfo $errorCode
                    215:     }
                    216: }
                    217: 
                    218: #------------------------------------------------------------------------------
                    219: # GenDefaultFile -- 
                    220: #
                    221: # Generate the tcl defaults file.
                    222: #------------------------------------------------------------------------------
                    223: 
                    224: proc GenDefaultFile {defaultFileBase sourceDir} {
                    225: 
                    226:     set defaultFile "$defaultFileBase[infox version]"
                    227: 
                    228:     if ![file writable [file dirname $defaultFile]] {
                    229:         puts stderr "Can't create $defaultFile -- directory is not writable"
                    230:         puts stderr "Please reinstall with correct permissions or rebuild"
                    231:         puts stderr "Tcl to select a default file where the directory path"
                    232:         puts stderr "you specify is writable by you."
                    233:         puts stderr ""
                    234:         exit 1
                    235:     }
                    236: 
                    237:     set fp [open $defaultFile w]
                    238: 
                    239:     puts $fp "# Extended Tcl [infox version] default file"
                    240:     puts $fp ""
                    241:     puts $fp "set TCLINIT $sourceDir/TclInit.tcl"
                    242:     puts $fp ""
                    243:     puts $fp "set TCLPATH $sourceDir"
                    244: 
                    245:     close $fp
                    246:     GiveAwayFile $defaultFile
                    247: 
                    248: } ;# GenDefaultFile
                    249: 
                    250: #------------------------------------------------------------------------------
                    251: # GetManNames --
                    252: #
                    253: #   Search a manual page (nroff source) for the name line.  Parse the name
                    254: # line into all of the functions or commands that it references.  This isn't
                    255: # comprehensive, but it works for all of the Tcl, TclX and Tk man pages.
                    256: #
                    257: # Parameters:
                    258: #   o manFile (I) - The path to the  manual page file.
                    259: # Returns:
                    260: #   A list contain the functions or commands or {} if the name line can't be
                    261: # found or parsed.
                    262: #------------------------------------------------------------------------------
                    263: 
                    264: proc GetManNames {manFile} {
                    265: 
                    266:    set manFH [open $manFile]
                    267: 
                    268:    #
                    269:    # Search for name line.  Once found, grab the next line that is not a
                    270:    # nroff macro.  If we end up with a blank line, we didn't find it.
                    271:    #
                    272:    while {[gets $manFH line] >= 0} {
                    273:        if [regexp {^.SH NAME.*$} $line] {
                    274:            break
                    275:        }
                    276:    }
                    277:    while {[gets $manFH line] >= 0} {
                    278:        if {![string match ".*" $line]} break
                    279:    }
                    280:    close $manFH
                    281: 
                    282:    set line [string trim $line]
                    283:    if {$line == ""} return
                    284: 
                    285:    #
                    286:    # Lets try and parse the name list out of the line
                    287:    #
                    288:    if {![regexp {^(.*)(\\-)} $line {} namePart]} {
                    289:        if {![regexp {^(.*)(-)} $line {} namePart]} return
                    290:    }
                    291: 
                    292:    #
                    293:    # This magic converts the name line into a list
                    294:    #
                    295: 
                    296:    if {[catch {join [split $namePart ,] " "} namePart] != 0} return
                    297: 
                    298:    return $namePart
                    299: 
                    300: }
                    301: 
                    302: #------------------------------------------------------------------------------
                    303: # SetUpManIndex --
                    304: #   Setup generation of manual page index for short manual pages, if required.
                    305: # Globals:
                    306: #   o TCL_MAN_INDEX - Boolean indicating if a manual page is to be created.
                    307: #     If it does not exists, false is assumed.
                    308: #   o TCL_MAN_BASEDIR - Base manual directory where all of the man.* and cat.* 
                    309: #     directories live.
                    310: # Returns:
                    311: #   The manual index file handle, or {} if the manual index is not to be
                    312: #  generated.
                    313: #------------------------------------------------------------------------------
                    314: 
                    315: proc SetUpManIndex {} {
                    316:     global TCL_MAN_BASEDIR TCL_MAN_INDEX
                    317: 
                    318:     if {!([info exists TCL_MAN_INDEX] && [set TCL_MAN_INDEX])} {
                    319:         return {}
                    320:     }
                    321:     set tclIndexFile $TCL_MAN_BASEDIR/index.TCL
                    322:     return [open $tclIndexFile w]
                    323: }
                    324: 
                    325: #------------------------------------------------------------------------------
                    326: # FinishUpManIndex --
                    327: #   Finish generation of manual page index for short manual pages, if required.
                    328: # Parameters:
                    329: #   o indexFileHdl - The file handle returned by SetUpManIndex, maybe {}.
                    330: # Globals:
                    331: #   o TCL_MAN_BASEDIR - Base manual directory where all of the man.* and cat.* 
                    332: #     directories live.
                    333: #------------------------------------------------------------------------------
                    334: 
                    335: proc FinishUpManIndex {indexFileHdl} {
                    336:     global TCL_MAN_BASEDIR TCL_MAN_INDEX_MERGE
                    337: 
                    338:     if [lempty $indexFileHdl] return
                    339: 
                    340:     set tclIndexFile $TCL_MAN_BASEDIR/index.TCL
                    341:     close $indexFileHdl
                    342:     GiveAwayFile $tclIndexFile
                    343: 
                    344: }
                    345: 
                    346: #------------------------------------------------------------------------------
                    347: # InstallShortMan --
                    348: #   Install a manual page on a system that does not have long file names,
                    349: #   optionally adding an entry to the man index.
                    350: #
                    351: # Parameters:
                    352: #   o sourceFile - Manual page source file path.
                    353: #   o section - Section to install the manual page in.
                    354: #   o indexFileHdl - File handle of the current index file being created, or
                    355: #     empty if no index is to be created.
                    356: # Globals:
                    357: #   o TCL_MAN_BASEDIR - Base manual directory where all of the man.* and cat.* 
                    358: #     directories live.
                    359: #   o TCL_MAN_SEPARATOR - The name separator between the directory and the
                    360: #     section.
                    361: #------------------------------------------------------------------------------
                    362: 
                    363: proc InstallShortMan {sourceFile section indexFileHdl} {
                    364:     global TCL_MAN_BASEDIR TCL_MAN_SEPARATOR
                    365: 
                    366:     set manNames [GetManNames $sourceFile]
                    367:     if [lempty $manNames] {
                    368:         set baseName [file tail [file root $sourceFile]]
                    369:         puts stderr "Warning: can't parse NAME line for man page: $sourceFile."
                    370:         puts stderr "         Manual page only available as: $baseName"
                    371:     }
                    372: 
                    373:     set manFileBase [file tail [file root $sourceFile]]
                    374:     set manFileName "$manFileBase.$section"
                    375: 
                    376:     set destManDir "$TCL_MAN_BASEDIR/man$TCL_MAN_SEPARATOR$section"
                    377:     set destCatDir "$TCL_MAN_BASEDIR/cat$TCL_MAN_SEPARATOR$section"
                    378: 
                    379:     CopyManPage $sourceFile "$destManDir/$manFileName"
                    380:     unlink -nocomplain  "$destCatDir/$manFileName"
                    381: 
                    382:     if {![lempty $indexFileHdl]} {
                    383:         foreach name $manNames {
                    384:             puts $indexFileHdl "$name\t$manFileBase\t$section"
                    385:         }
                    386:     }    
                    387: }
                    388: 
                    389: #------------------------------------------------------------------------------
                    390: # InstallLongMan --
                    391: #   Install a manual page on a system that does have long file names.
                    392: #
                    393: # Parameters:
                    394: #   o sourceFile - Manual page source file path.
                    395: #   o section - Section to install the manual page in.
                    396: # Globals:
                    397: #   o TCL_MAN_BASEDIR - Base manual directory where all of the man.* and cat.* 
                    398: #     directories live.
                    399: #   o TCL_MAN_SEPARATOR - The name separator between the directory and the
                    400: #     section.
                    401: #------------------------------------------------------------------------------
                    402: 
                    403: proc InstallLongMan {sourceFile section} {
                    404:     global TCL_MAN_BASEDIR TCL_MAN_SEPARATOR
                    405: 
                    406:     set manNames [GetManNames $sourceFile]
                    407:     if [lempty $manNames] {
                    408:         set baseName [file tail [file root $sourceFile]]
                    409:         puts stderr "Warning: can't parse NAME line for man page: $sourceFile."
                    410:         puts stderr "         Manual page only available as: $baseName"
                    411:         set manNames $baseName
                    412:     }
                    413: 
                    414:     set destManDir "$TCL_MAN_BASEDIR/man$TCL_MAN_SEPARATOR$section"
                    415:     set destCatDir "$TCL_MAN_BASEDIR/cat$TCL_MAN_SEPARATOR$section"
                    416: 
                    417:     # Copy file to the first name in the list.
                    418: 
                    419:     set firstFile [lvarpop manNames]
                    420:     set firstFilePath "$destManDir/$firstFile.$section"
                    421: 
                    422:     CopyManPage $sourceFile $firstFilePath
                    423:     unlink -nocomplain   "$destCatDir/$firstFile.$section"
                    424: 
                    425:     # Link it to the rest of the names in the list.
                    426: 
                    427:     foreach manEntry $manNames {
                    428:         set destFilePath "$destManDir/$manEntry.$section"
                    429:         unlink -nocomplain  $destFilePath
                    430:         if {[catch {
                    431:                 link $firstFilePath $destFilePath
                    432:             } msg] != 0} {
                    433:             puts stderr "error from: link $firstFilePath $destFilePath"
                    434:             puts stderr "    $msg"
                    435:         }
                    436:         unlink -nocomplain "$destCatDir/$manEntry.$section"
                    437:     }
                    438: 
                    439: }
                    440: 
                    441: #------------------------------------------------------------------------------
                    442: # InstallManPage --
                    443: #   Install a manual page on a system.
                    444: #
                    445: # Parameters:
                    446: #   o sourceFile - Manual page source file path.
                    447: #   o section - Section to install the manual page in.
                    448: #   o indexFileHdl - File handle of the current index file being created, or
                    449: #     empty if no index is to be created.
                    450: # Globals
                    451: #   o TCL_MAN_STYLE - SHORT if short manual page names are being used,
                    452: #     LONG if long manual pages are being used.
                    453: #------------------------------------------------------------------------------
                    454: 
                    455: proc InstallManPage {sourceFile section indexFileHdl} {
                    456:     global TCL_MAN_STYLE
                    457: 
                    458:     if {"$TCL_MAN_STYLE" == "SHORT"} {
                    459:         InstallShortMan $sourceFile $section $indexFileHdl
                    460:     } else {
                    461:         InstallLongMan $sourceFile $section
                    462:     }
                    463: }
                    464: 
                    465: #------------------------------------------------------------------------------
                    466: # InstallManPages --
                    467: #   Install the manual pages.
                    468: #------------------------------------------------------------------------------
                    469: 
                    470: proc InstallManPages {} {
                    471:     global TCL_UCB_DIR          TCL_TK_SHELL         TCL_TK_DIR
                    472:     global TCL_MAN_BASEDIR      TCL_MAN_SEPARATOR    TCL_MAN_STYLE
                    473:     global TCL_MAN_CMD_SECTION  TCL_MAN_FUNC_SECTION
                    474:     global TK_MAN_CMD_SECTION   TK_MAN_FUNC_SECTION
                    475: 
                    476:     if {![info exists TCL_MAN_STYLE]} {
                    477:         set TCL_MAN_STYLE LONG
                    478:     }
                    479:     set TCL_MAN_STYLE [string toupper $TCL_MAN_STYLE]
                    480:     case $TCL_MAN_STYLE in {
                    481:         {SHORT} {}
                    482:         {LONG}  {}
                    483:         default {error "invalid value for TCL_MAN_STYLE: `$TCL_MAN_STYLE'"}
                    484:     }
                    485: 
                    486:     MakePath $TCL_MAN_BASEDIR 
                    487:     MakePath "$TCL_MAN_BASEDIR/man$TCL_MAN_SEPARATOR$TCL_MAN_CMD_SECTION"
                    488:     MakePath "$TCL_MAN_BASEDIR/cat$TCL_MAN_SEPARATOR$TCL_MAN_CMD_SECTION"
                    489:     MakePath "$TCL_MAN_BASEDIR/man$TCL_MAN_SEPARATOR$TCL_MAN_FUNC_SECTION"
                    490:     MakePath "$TCL_MAN_BASEDIR/cat$TCL_MAN_SEPARATOR$TCL_MAN_FUNC_SECTION"
                    491: 
                    492:     set indexFileHdl [SetUpManIndex]
                    493: 
                    494:     # Install all of the actual files.
                    495: 
                    496:     echo "    Installing Tcl [info tclversion] man files"
                    497:     foreach fileName [glob $TCL_UCB_DIR/doc/*.man] {
                    498:         if {[file root $fileName] == "Tcl.man"} {
                    499:             set section $TCL_MAN_CMD_SECTION
                    500:         } else {
                    501:             set section $TCL_MAN_FUNC_SECTION
                    502:         }
                    503:         InstallManPage $fileName $section $indexFileHdl
                    504:     }
                    505: 
                    506:     echo "    Installing Extended Tcl [infox version] man files"
                    507: 
                    508:     foreach fileName [glob man/*.man] {
                    509:         if {[file root $fileName] == "TclX.man"} {
                    510:             set section $TCL_MAN_CMD_SECTION
                    511:         } else {
                    512:             set section $TCL_MAN_FUNC_SECTION
                    513:         }
                    514:         InstallManPage $fileName $section $indexFileHdl
                    515:     }
                    516: 
                    517:     if {![info exists TCL_TK_SHELL]} {
                    518:         FinishUpManIndex $indexFileHdl
                    519:         return
                    520:     }
                    521: 
                    522:     MakePath "$TCL_MAN_BASEDIR/man$TCL_MAN_SEPARATOR$TK_MAN_CMD_SECTION"
                    523:     MakePath "$TCL_MAN_BASEDIR/cat$TCL_MAN_SEPARATOR$TK_MAN_CMD_SECTION"
                    524:     MakePath "$TCL_MAN_BASEDIR/man$TCL_MAN_SEPARATOR$TK_MAN_FUNC_SECTION"
                    525:     MakePath "$TCL_MAN_BASEDIR/cat$TCL_MAN_SEPARATOR$TK_MAN_FUNC_SECTION"
                    526: 
                    527:     echo "    Installing Tk man files"
                    528: 
                    529:     foreach fileName [glob $TCL_TK_DIR/doc/*.man] {
                    530:         if {![string match "Tk_*" [file root $fileName]]} {
                    531:             set section $TK_MAN_CMD_SECTION
                    532:         } else {
                    533:             set section $TK_MAN_FUNC_SECTION
                    534:         }
                    535:         InstallManPage $fileName $section $indexFileHdl
                    536:     }
                    537: 
                    538:     FinishUpManIndex $indexFileHdl
                    539: 
                    540: } ;# InstallLongManPages
                    541: 
                    542: #------------------------------------------------------------------------------
                    543: # Main program code.
                    544: #------------------------------------------------------------------------------
                    545: 
                    546: echo ""
                    547: echo ">>> Installing Extended Tcl [infox version] <<<"
                    548: 
                    549: set argc [llength $argv]
                    550: if {$argc != 0} {
                    551:     puts stderr "usage: tcl installTcl.tcl"
                    552:     exit 1
                    553: }
                    554: 
                    555: #
                    556: # Bring in all of the macros defined bu the configuration file.
                    557: #
                    558: ParseConfigFile Config.mk
                    559: ParseConfigFile config/$TCL_CONFIG_FILE
                    560: 
                    561: #
                    562: # Make sure all directories exists that we will be installing in.
                    563: #
                    564: 
                    565: MakePath [list $TCL_TCLDIR [file dirname $TCL_DEFAULT] $TCL_BINDIR]
                    566: MakePath [list $TCL_LIBDIR $TCL_INCLUDEDIR $TCL_TCLDIR]
                    567: 
                    568: echo "    Creating default file: $TCL_DEFAULT[infox version]"
                    569: GenDefaultFile $TCL_DEFAULT $TCL_TCLDIR
                    570: 
                    571: echo "    Installing `tcl' program in: $TCL_BINDIR"
                    572: CopyFile tcl $TCL_BINDIR
                    573: chmod +rx $TCL_BINDIR/tcl
                    574: 
                    575: echo "    Installing `libtcl.a' library in: $TCL_LIBDIR"
                    576: CopyFile libtcl.a $TCL_LIBDIR
                    577: 
                    578: echo "    Installing Tcl .h files in: $TCL_INCLUDEDIR"
                    579: CopyFile $TCL_UCB_DIR/tcl.h $TCL_INCLUDEDIR
                    580: CopyFile $TCL_UCB_DIR/tclHash.h $TCL_INCLUDEDIR
                    581: CopyFile src/tclExtend.h $TCL_INCLUDEDIR
                    582: CopyFile src/tcl++.h $TCL_INCLUDEDIR
                    583: 
                    584: echo "    Installing Tcl run-time files in: $TCL_TCLDIR"
                    585: foreach srcFile [glob tcllib/*] {
                    586:     if {![file isdirectory $srcFile]} {
                    587:         CopyFile $srcFile $TCL_TCLDIR
                    588:     }
                    589: }
                    590: 
                    591: echo "    Installing Tcl help files in: $TCL_TCLDIR/help"
                    592: if [file exists $TCL_TCLDIR/help] {
                    593:      echo "       Purging old help tree"
                    594:      exec rm -rf $TCL_TCLDIR/help
                    595: }
                    596: CopyDir tcllib/help          $TCL_TCLDIR/help
                    597: 
                    598: if [info exists TCL_TK_SHELL] {
                    599:     echo "    Installing `wish' program in: $TCL_BINDIR"
                    600:     CopyFile wish $TCL_BINDIR
                    601:     chmod +rx $TCL_BINDIR/wish
                    602: 
                    603:     echo "    Installing `libtk.a' library in: $TCL_LIBDIR"
                    604:     CopyFile libtk.a $TCL_LIBDIR
                    605: 
                    606:     echo "    Installing `tk.h' in: $TCL_INCLUDEDIR"
                    607:     CopyFile $TCL_TK_DIR/tk.h $TCL_INCLUDEDIR
                    608: }
                    609: 
                    610: foreach file [glob $TCL_TCLDIR/*.tlib] {
                    611:     buildpackageindex $file
                    612: }
                    613: 
                    614: if {$TCL_MAN_INSTALL} {
                    615:     InstallManPages
                    616: }
                    617: 
                    618: echo "     *** TCL IS NOW INSTALLED ***"
                    619: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.