Artifact a3240f621e218d1ce28894001d415679ed68aeec:
- File
kitsh/buildsrc/kitsh-0.0/boot.tcl
— part of check-in
[096098536d]
at
2010-09-26 04:42:20
on branch trunk
— Updated to implement "vfs::mkcl" using Readkit
Updated local Readkit implementation to not attempt to replace Mk4tcl (user: rkeene, size: 2884) [annotate] [blame] [check-ins using]
0000: 70 72 6f 63 20 74 63 6c 49 6e 69 74 20 7b 7d 20 proc tclInit {} 0010: 7b 0a 20 20 72 65 6e 61 6d 65 20 74 63 6c 49 6e {. rename tclIn 0020: 69 74 20 7b 7d 0a 0a 20 20 67 6c 6f 62 61 6c 20 it {}.. global 0030: 61 75 74 6f 5f 70 61 74 68 20 74 63 6c 5f 6c 69 auto_path tcl_li 0040: 62 72 61 72 79 20 74 63 6c 5f 6c 69 62 50 61 74 brary tcl_libPat 0050: 68 0a 20 20 67 6c 6f 62 61 6c 20 74 63 6c 5f 76 h. global tcl_v 0060: 65 72 73 69 6f 6e 20 74 63 6c 5f 72 63 46 69 6c ersion tcl_rcFil 0070: 65 4e 61 6d 65 0a 20 20 0a 20 20 73 65 74 20 6e eName. . set n 0080: 6f 65 20 5b 69 6e 66 6f 20 6e 61 6d 65 6f 66 65 oe [info nameofe 0090: 78 65 63 75 74 61 62 6c 65 5d 0a 0a 20 20 23 20 xecutable].. # 00a0: 52 65 73 6f 6c 76 65 20 73 79 6d 6c 69 6e 6b 73 Resolve symlinks 00b0: 0a 20 20 73 65 74 20 6e 6f 65 20 5b 66 69 6c 65 . set noe [file 00c0: 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 6e dirname [file n 00d0: 6f 72 6d 61 6c 69 7a 65 20 5b 66 69 6c 65 20 6a ormalize [file j 00e0: 6f 69 6e 20 24 6e 6f 65 20 5f 5f 64 75 6d 6d 79 oin $noe __dummy 00f0: 5f 5f 5d 5d 5d 0a 0a 20 20 73 65 74 20 74 63 6c __]]].. set tcl 0100: 5f 6c 69 62 72 61 72 79 20 5b 66 69 6c 65 20 6a _library [file j 0110: 6f 69 6e 20 24 6e 6f 65 20 6c 69 62 20 74 63 6c oin $noe lib tcl 0120: 24 74 63 6c 5f 76 65 72 73 69 6f 6e 5d 0a 20 20 $tcl_version]. 0130: 73 65 74 20 74 63 6c 5f 6c 69 62 50 61 74 68 20 set tcl_libPath 0140: 5b 6c 69 73 74 20 24 74 63 6c 5f 6c 69 62 72 61 [list $tcl_libra 0150: 72 79 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6e ry [file join $n 0160: 6f 65 20 6c 69 62 5d 5d 0a 0a 20 20 23 20 67 65 oe lib]].. # ge 0170: 74 20 72 69 64 20 6f 66 20 61 20 62 75 69 6c 64 t rid of a build 0180: 20 72 65 73 69 64 75 65 0a 20 20 75 6e 73 65 74 residue. unset 0190: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 74 -nocomplain ::t 01a0: 63 6c 44 65 66 61 75 6c 74 4c 69 62 72 61 72 79 clDefaultLibrary 01b0: 0a 0a 20 20 23 20 74 68 65 20 66 6f 6c 6c 6f 77 .. # the follow 01c0: 69 6e 67 20 63 6f 64 65 20 6f 6e 6c 79 20 67 65 ing code only ge 01d0: 74 73 20 65 78 65 63 75 74 65 64 20 6f 6e 63 65 ts executed once 01e0: 20 6f 6e 20 73 74 61 72 74 75 70 0a 20 20 69 66 on startup. if 01f0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 74 {[info exists t 0200: 63 6c 5f 72 63 46 69 6c 65 4e 61 6d 65 5d 7d 20 cl_rcFileName]} 0210: 7b 0a 20 20 20 20 6c 6f 61 64 20 7b 7d 20 76 66 {. load {} vf 0220: 73 0a 0a 20 20 20 20 23 20 6c 6f 6f 6b 75 70 20 s.. # lookup 0230: 61 6e 64 20 65 6d 75 6c 61 74 65 20 22 73 6f 75 and emulate "sou 0240: 72 63 65 22 20 6f 66 20 6c 69 62 2f 76 66 73 2f rce" of lib/vfs/ 0250: 7b 76 66 73 2a 2e 74 63 6c 2c 6d 6b 34 76 66 73 {vfs*.tcl,mk4vfs 0260: 2e 74 63 6c 7d 0a 20 20 20 20 23 20 6d 75 73 74 .tcl}. # must 0270: 20 75 73 65 20 72 61 77 20 4d 65 74 61 4b 69 74 use raw MetaKit 0280: 20 63 61 6c 6c 73 20 62 65 63 61 75 73 65 20 56 calls because V 0290: 46 53 20 69 73 20 6e 6f 74 20 79 65 74 20 69 6e FS is not yet in 02a0: 20 70 6c 61 63 65 0a 20 20 20 20 73 65 74 20 64 place. set d 02b0: 20 5b 24 7b 3a 3a 74 63 6c 6b 69 74 4d 6b 4e 61 [${::tclkitMkNa 02c0: 6d 65 73 70 61 63 65 7d 3a 3a 73 65 6c 65 63 74 mespace}::select 02d0: 20 65 78 65 2e 64 69 72 73 20 70 61 72 65 6e 74 exe.dirs parent 02e0: 20 30 20 6e 61 6d 65 20 6c 69 62 5d 0a 20 20 20 0 name lib]. 02f0: 20 73 65 74 20 64 20 5b 24 7b 3a 3a 74 63 6c 6b set d [${::tclk 0300: 69 74 4d 6b 4e 61 6d 65 73 70 61 63 65 7d 3a 3a itMkNamespace}:: 0310: 73 65 6c 65 63 74 20 65 78 65 2e 64 69 72 73 20 select exe.dirs 0320: 70 61 72 65 6e 74 20 24 64 20 6e 61 6d 65 20 76 parent $d name v 0330: 66 73 5d 0a 20 20 20 20 0a 20 20 20 20 66 6f 72 fs]. . for 0340: 65 61 63 68 20 78 20 7b 76 66 73 55 74 69 6c 73 each x {vfsUtils 0350: 20 76 66 73 6c 69 62 20 6d 6b 34 76 66 73 7d 20 vfslib mk4vfs} 0360: 7b 0a 20 20 20 20 20 20 73 65 74 20 6e 20 5b 24 {. set n [$ 0370: 7b 3a 3a 74 63 6c 6b 69 74 4d 6b 4e 61 6d 65 73 {::tclkitMkNames 0380: 70 61 63 65 7d 3a 3a 73 65 6c 65 63 74 20 65 78 pace}::select ex 0390: 65 2e 64 69 72 73 21 24 64 2e 66 69 6c 65 73 20 e.dirs!$d.files 03a0: 6e 61 6d 65 20 24 78 2e 74 63 6c 5d 0a 20 20 20 name $x.tcl]. 03b0: 20 20 20 73 65 74 20 73 20 5b 24 7b 3a 3a 74 63 set s [${::tc 03c0: 6c 6b 69 74 4d 6b 4e 61 6d 65 73 70 61 63 65 7d lkitMkNamespace} 03d0: 3a 3a 67 65 74 20 65 78 65 2e 64 69 72 73 21 24 ::get exe.dirs!$ 03e0: 64 2e 66 69 6c 65 73 21 24 6e 20 63 6f 6e 74 65 d.files!$n conte 03f0: 6e 74 73 5d 0a 20 20 20 20 20 20 63 61 74 63 68 nts]. catch 0400: 20 7b 73 65 74 20 73 20 5b 7a 6c 69 62 20 64 65 {set s [zlib de 0410: 63 6f 6d 70 72 65 73 73 20 24 73 5d 7d 0a 20 20 compress $s]}. 0420: 20 20 20 20 75 70 6c 65 76 65 6c 20 23 30 20 24 uplevel #0 $ 0430: 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 75 s. }.. # u 0440: 73 65 20 6f 6e 2d 74 68 65 2d 66 6c 79 20 64 65 se on-the-fly de 0450: 63 6f 6d 70 72 65 73 73 69 6f 6e 2c 20 69 66 20 compression, if 0460: 6d 6b 34 76 66 73 20 75 6e 64 65 72 73 74 61 6e mk4vfs understan 0470: 64 73 20 74 68 61 74 0a 20 20 20 20 73 77 69 74 ds that. swit 0480: 63 68 20 2d 2d 20 24 3a 3a 74 63 6c 6b 69 74 4d ch -- $::tclkitM 0490: 6b 4e 61 6d 65 73 70 61 63 65 20 7b 0a 20 20 20 kNamespace {. 04a0: 20 20 20 20 20 22 6d 6b 22 20 7b 0a 20 20 20 20 "mk" {. 04b0: 20 20 20 20 20 20 20 20 73 65 74 20 6d 6b 34 76 set mk4v 04c0: 66 73 3a 3a 7a 73 74 72 65 61 6d 65 64 20 31 0a fs::zstreamed 1. 04d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set 04e0: 76 66 73 69 6d 70 6c 20 22 6d 6b 34 22 0a 20 20 vfsimpl "mk4". 04f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 }. 0500: 22 72 65 61 64 6b 69 74 22 20 7b 0a 20 20 20 20 "readkit" {. 0510: 20 20 20 20 20 20 20 20 73 65 74 20 6d 6b 63 6c set mkcl 0520: 5f 76 66 73 3a 3a 7a 73 74 72 65 61 6d 65 64 20 _vfs::zstreamed 0530: 31 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 1. se 0540: 74 20 76 66 73 69 6d 70 6c 20 22 6d 6b 63 6c 22 t vfsimpl "mkcl" 0550: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d . }. } 0560: 0a 0a 20 20 20 20 23 20 6d 6f 75 6e 74 20 74 68 .. # mount th 0570: 65 20 65 78 65 63 75 74 61 62 6c 65 2c 20 69 2e e executable, i. 0580: 65 2e 20 6d 61 6b 65 20 61 6c 6c 20 72 75 6e 74 e. make all runt 0590: 69 6d 65 20 66 69 6c 65 73 20 61 76 61 69 6c 61 ime files availa 05a0: 62 6c 65 0a 20 20 20 20 76 66 73 3a 3a 66 69 6c ble. vfs::fil 05b0: 65 73 79 73 74 65 6d 20 6d 6f 75 6e 74 20 24 6e esystem mount $n 05c0: 6f 65 20 5b 6c 69 73 74 20 3a 3a 76 66 73 3a 3a oe [list ::vfs:: 05d0: 24 7b 76 66 73 69 6d 70 6c 7d 3a 3a 68 61 6e 64 ${vfsimpl}::hand 05e0: 6c 65 72 20 65 78 65 5d 0a 0a 20 20 20 20 23 20 ler exe].. # 05f0: 61 6c 74 65 72 20 70 61 74 68 20 74 6f 20 66 69 alter path to fi 0600: 6e 64 20 65 6e 63 6f 64 69 6e 67 73 0a 20 20 20 nd encodings. 0610: 20 69 66 20 7b 5b 69 6e 66 6f 20 74 63 6c 76 65 if {[info tclve 0620: 72 73 69 6f 6e 5d 20 65 71 20 22 38 2e 34 22 7d rsion] eq "8.4"} 0630: 20 7b 0a 20 20 20 20 20 20 6c 6f 61 64 20 7b 7d {. load {} 0640: 20 70 77 62 0a 20 20 20 20 20 20 6c 69 62 72 61 pwb. libra 0650: 72 79 70 61 74 68 20 5b 69 6e 66 6f 20 6c 69 62 rypath [info lib 0660: 72 61 72 79 5d 0a 20 20 20 20 7d 20 65 6c 73 65 rary]. } else 0670: 20 7b 0a 20 20 20 20 20 20 65 6e 63 6f 64 69 6e {. encodin 0680: 67 20 64 69 72 73 20 5b 6c 69 73 74 20 5b 66 69 g dirs [list [fi 0690: 6c 65 20 6a 6f 69 6e 20 5b 69 6e 66 6f 20 6c 69 le join [info li 06a0: 62 72 61 72 79 5d 20 65 6e 63 6f 64 69 6e 67 5d brary] encoding] 06b0: 5d 20 3b 23 20 54 49 50 20 32 35 38 0a 20 20 20 ] ;# TIP 258. 06c0: 20 7d 0a 0a 20 20 20 20 23 20 66 69 78 20 73 79 }.. # fix sy 06d0: 73 74 65 6d 20 65 6e 63 6f 64 69 6e 67 2c 20 69 stem encoding, i 06e0: 66 20 69 74 20 77 61 73 6e 27 74 20 70 72 6f 70 f it wasn't prop 06f0: 65 72 6c 79 20 73 65 74 20 75 70 20 28 32 30 30 erly set up (200 0700: 32 30 37 2e 30 30 34 20 62 75 67 29 0a 20 20 20 207.004 bug). 0710: 20 69 66 20 7b 5b 65 6e 63 6f 64 69 6e 67 20 73 if {[encoding s 0720: 79 73 74 65 6d 5d 20 65 71 20 22 69 64 65 6e 74 ystem] eq "ident 0730: 69 74 79 22 7d 20 7b 0a 20 20 20 20 20 20 73 77 ity"} {. sw 0740: 69 74 63 68 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 itch $::tcl_plat 0750: 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29 20 7b form(platform) { 0760: 0a 20 20 20 20 20 20 20 20 77 69 6e 64 6f 77 73 . windows 0770: 09 09 7b 20 65 6e 63 6f 64 69 6e 67 20 73 79 73 ..{ encoding sys 0780: 74 65 6d 20 63 70 31 32 35 32 20 7d 0a 20 20 20 tem cp1252 }. 0790: 20 20 20 20 20 6d 61 63 69 6e 74 6f 73 68 09 7b macintosh.{ 07a0: 20 65 6e 63 6f 64 69 6e 67 20 73 79 73 74 65 6d encoding system 07b0: 20 6d 61 63 52 6f 6d 61 6e 20 7d 0a 20 20 20 20 macRoman }. 07c0: 20 20 20 20 64 65 66 61 75 6c 74 09 09 7b 20 65 default..{ e 07d0: 6e 63 6f 64 69 6e 67 20 73 79 73 74 65 6d 20 69 ncoding system i 07e0: 73 6f 38 38 35 39 2d 31 20 7d 0a 20 20 20 20 20 so8859-1 }. 07f0: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 }. }.. # 0800: 6e 6f 77 20 72 65 6d 6f 75 6e 74 20 74 68 65 20 now remount the 0810: 65 78 65 63 75 74 61 62 6c 65 20 77 69 74 68 20 executable with 0820: 74 68 65 20 63 6f 72 72 65 63 74 20 65 6e 63 6f the correct enco 0830: 64 69 6e 67 0a 20 20 20 20 23 76 66 73 3a 3a 66 ding. #vfs::f 0840: 69 6c 65 73 79 73 74 65 6d 20 75 6e 6d 6f 75 6e ilesystem unmoun 0850: 74 20 24 6e 6f 65 0a 20 20 20 20 76 66 73 3a 3a t $noe. vfs:: 0860: 66 69 6c 65 73 79 73 74 65 6d 20 75 6e 6d 6f 75 filesystem unmou 0870: 6e 74 20 5b 6c 69 6e 64 65 78 20 5b 3a 3a 76 66 nt [lindex [::vf 0880: 73 3a 3a 66 69 6c 65 73 79 73 74 65 6d 20 69 6e s::filesystem in 0890: 66 6f 5d 20 30 5d 0a 0a 20 20 20 20 73 65 74 20 fo] 0].. set 08a0: 6e 6f 65 20 5b 69 6e 66 6f 20 6e 61 6d 65 6f 66 noe [info nameof 08b0: 65 78 65 63 75 74 61 62 6c 65 5d 0a 0a 20 20 09 executable].. . 08c0: 23 20 52 65 73 6f 6c 76 65 20 73 79 6d 6c 69 6e # Resolve symlin 08d0: 6b 73 0a 20 20 09 73 65 74 20 6e 6f 65 20 5b 66 ks. .set noe [f 08e0: 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c ile dirname [fil 08f0: 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 66 69 6c e normalize [fil 0900: 65 20 6a 6f 69 6e 20 24 6e 6f 65 20 5f 5f 64 75 e join $noe __du 0910: 6d 6d 79 5f 5f 5d 5d 5d 0a 0a 20 20 20 20 73 65 mmy__]]].. se 0920: 74 20 74 63 6c 5f 6c 69 62 72 61 72 79 20 5b 66 t tcl_library [f 0930: 69 6c 65 20 6a 6f 69 6e 20 24 6e 6f 65 20 6c 69 ile join $noe li 0940: 62 20 74 63 6c 24 74 63 6c 5f 76 65 72 73 69 6f b tcl$tcl_versio 0950: 6e 5d 0a 20 20 20 20 73 65 74 20 74 63 6c 5f 6c n]. set tcl_l 0960: 69 62 50 61 74 68 20 5b 6c 69 73 74 20 24 74 63 ibPath [list $tc 0970: 6c 5f 6c 69 62 72 61 72 79 20 5b 66 69 6c 65 20 l_library [file 0980: 6a 6f 69 6e 20 24 6e 6f 65 20 6c 69 62 5d 5d 0a join $noe lib]]. 0990: 20 20 20 20 76 66 73 3a 3a 66 69 6c 65 73 79 73 vfs::filesys 09a0: 74 65 6d 20 6d 6f 75 6e 74 20 24 6e 6f 65 20 5b tem mount $noe [ 09b0: 6c 69 73 74 20 3a 3a 76 66 73 3a 3a 24 7b 76 66 list ::vfs::${vf 09c0: 73 69 6d 70 6c 7d 3a 3a 68 61 6e 64 6c 65 72 20 simpl}::handler 09d0: 65 78 65 5d 0a 20 20 7d 0a 20 20 0a 20 20 23 20 exe]. }. . # 09e0: 6c 6f 61 64 20 63 6f 6e 66 69 67 20 73 65 74 74 load config sett 09f0: 69 6e 67 73 20 66 69 6c 65 20 69 66 20 70 72 65 ings file if pre 0a00: 73 65 6e 74 0a 20 20 6e 61 6d 65 73 70 61 63 65 sent. namespace 0a10: 20 65 76 61 6c 20 3a 3a 76 66 73 20 7b 20 76 61 eval ::vfs { va 0a20: 72 69 61 62 6c 65 20 74 63 6c 6b 69 74 5f 76 65 riable tclkit_ve 0a30: 72 73 69 6f 6e 20 31 20 7d 0a 20 20 63 61 74 63 rsion 1 }. catc 0a40: 68 20 7b 20 75 70 6c 65 76 65 6c 20 23 30 20 5b h { uplevel #0 [ 0a50: 6c 69 73 74 20 73 6f 75 72 63 65 20 5b 66 69 6c list source [fil 0a60: 65 20 6a 6f 69 6e 20 24 6e 6f 65 20 63 6f 6e 66 e join $noe conf 0a70: 69 67 2e 74 63 6c 5d 5d 20 7d 0a 0a 20 20 75 70 ig.tcl]] }.. up 0a80: 6c 65 76 65 6c 20 23 30 20 5b 6c 69 73 74 20 73 level #0 [list s 0a90: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ource [file join 0aa0: 20 24 74 63 6c 5f 6c 69 62 72 61 72 79 20 69 6e $tcl_library in 0ab0: 69 74 2e 74 63 6c 5d 5d 0a 20 20 0a 23 20 72 65 it.tcl]]. .# re 0ac0: 73 65 74 20 61 75 74 6f 5f 70 61 74 68 2c 20 73 set auto_path, s 0ad0: 6f 20 74 68 61 74 20 69 6e 69 74 2e 74 63 6c 27 o that init.tcl' 0ae0: 73 20 73 65 61 72 63 68 20 6f 75 74 73 69 64 65 s search outside 0af0: 20 6f 66 20 74 63 6c 6b 69 74 20 69 73 20 63 61 of tclkit is ca 0b00: 6e 63 65 6c 6c 65 64 0a 20 20 73 65 74 20 61 75 ncelled. set au 0b10: 74 6f 5f 70 61 74 68 20 24 74 63 6c 5f 6c 69 62 to_path $tcl_lib 0b20: 50 61 74 68 0a 0a 20 20 75 6e 73 65 74 20 3a 3a Path.. unset :: 0b30: 74 63 6c 6b 69 74 4d 6b 4e 61 6d 65 73 70 61 63 tclkitMkNamespac 0b40: 65 0a 7d 0a e.}.