System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact d3170b76d41c24e0688a9fa9a8a9b136ece20e81:


0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 63 6f 6e 73 74 72 61 69 6e 74  .#..# constraint
0060: 73 2e 65 61 67 6c 65 20 2d 2d 0d 0a 23 0d 0a 23  s.eagle --..#..#
0070: 20 45 78 74 65 6e 73 69 62 6c 65 20 41 64 61 70   Extensible Adap
0080: 74 61 62 6c 65 20 47 65 6e 65 72 61 6c 69 7a 65  table Generalize
0090: 64 20 4c 6f 67 69 63 20 45 6e 67 69 6e 65 20 28  d Logic Engine (
00a0: 45 61 67 6c 65 29 0d 0a 23 20 54 65 73 74 20 43  Eagle)..# Test C
00b0: 6f 6e 73 74 72 61 69 6e 74 73 20 46 69 6c 65 0d  onstraints File.
00c0: 0a 23 0d 0a 23 20 43 6f 70 79 72 69 67 68 74 20  .#..# Copyright 
00d0: 28 63 29 20 32 30 30 37 2d 32 30 31 30 20 62 79  (c) 2007-2010 by
00e0: 20 4a 6f 65 20 4d 69 73 74 61 63 68 6b 69 6e 2e   Joe Mistachkin.
00f0: 20 20 41 6c 6c 20 72 69 67 68 74 73 20 72 65 73    All rights res
0100: 65 72 76 65 64 2e 0d 0a 23 0d 0a 23 20 53 65 65  erved...#..# See
0110: 20 74 68 65 20 66 69 6c 65 20 22 6c 69 63 65 6e   the file "licen
0120: 73 65 2e 74 65 72 6d 73 22 20 66 6f 72 20 69 6e  se.terms" for in
0130: 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 75 73 61  formation on usa
0140: 67 65 20 61 6e 64 20 72 65 64 69 73 74 72 69 62  ge and redistrib
0150: 75 74 69 6f 6e 20 6f 66 0d 0a 23 20 74 68 69 73  ution of..# this
0160: 20 66 69 6c 65 2c 20 61 6e 64 20 66 6f 72 20 61   file, and for a
0170: 20 44 49 53 43 4c 41 49 4d 45 52 20 4f 46 20 41   DISCLAIMER OF A
0180: 4c 4c 20 57 41 52 52 41 4e 54 49 45 53 2e 0d 0a  LL WARRANTIES...
0190: 23 0d 0a 23 20 52 43 53 3a 20 40 28 23 29 20 24  #..# RCS: @(#) $
01a0: 49 64 3a 20 24 0d 0a 23 0d 0a 23 23 23 23 23 23  Id: $..#..######
01b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
01f0: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 23 0d 0a  #########....#..
0200: 23 20 4e 4f 54 45 3a 20 55 73 65 20 6f 75 72 20  # NOTE: Use our 
0210: 6f 77 6e 20 6e 61 6d 65 73 70 61 63 65 20 68 65  own namespace he
0220: 72 65 20 62 65 63 61 75 73 65 20 65 76 65 6e 20  re because even 
0230: 74 68 6f 75 67 68 20 77 65 20 64 6f 20 6e 6f 74  though we do not
0240: 20 64 69 72 65 63 74 6c 79 0d 0a 23 20 20 20 20   directly..#    
0250: 20 20 20 73 75 70 70 6f 72 74 20 6e 61 6d 65 73     support names
0260: 70 61 63 65 73 20 6f 75 72 73 65 6c 76 65 73 2c  paces ourselves,
0270: 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20   we do not want 
0280: 74 6f 20 70 6f 6c 6c 75 74 65 20 74 68 65 20 67  to pollute the g
0290: 6c 6f 62 61 6c 0d 0a 23 20 20 20 20 20 20 20 6e  lobal..#       n
02a0: 61 6d 65 73 70 61 63 65 20 69 66 20 74 68 69 73  amespace if this
02b0: 20 73 63 72 69 70 74 20 61 63 74 75 61 6c 6c 79   script actually
02c0: 20 65 6e 64 73 20 75 70 20 62 65 69 6e 67 20 65   ends up being e
02d0: 76 61 6c 75 61 74 65 64 20 69 6e 20 54 63 6c 2e  valuated in Tcl.
02e0: 0d 0a 23 0d 0a 6e 61 6d 65 73 70 61 63 65 20 65  ..#..namespace e
02f0: 76 61 6c 20 3a 3a 45 61 67 6c 65 20 7b 0d 0a 20  val ::Eagle {.. 
0300: 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 50 6c   proc checkForPl
0310: 61 74 66 6f 72 6d 20 7b 20 63 68 61 6e 6e 65 6c  atform { channel
0320: 20 7d 20 7b 0d 0a 20 20 20 20 74 70 75 74 73 20   } {..    tputs 
0330: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63  $channel "---- c
0340: 68 65 63 6b 69 6e 67 20 66 6f 72 20 70 6c 61 74  hecking for plat
0350: 66 6f 72 6d 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  form... "....   
0360: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 24   addConstraint $
0370: 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70  ::tcl_platform(p
0380: 6c 61 74 66 6f 72 6d 29 0d 0a 0d 0a 20 20 20 20  latform)....    
0390: 69 66 20 7b 21 5b 69 73 45 61 67 6c 65 5d 7d 20  if {![isEagle]} 
03a0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 23 0d  then {..      #.
03b0: 0a 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a  .      # BUGFIX:
03c0: 20 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20   We do not want 
03d0: 74 6f 20 73 6b 69 70 20 61 6e 79 20 4d 6f 6e 6f  to skip any Mono
03e0: 20 62 75 67 73 20 69 6e 20 54 63 6c 2e 0d 0a 20   bugs in Tcl... 
03f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 41       #         A
0400: 6c 73 6f 2c 20 66 61 6b 65 20 74 68 65 20 63 75  lso, fake the cu
0410: 6c 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d  lture...      #.
0420: 0a 20 20 20 20 20 20 73 65 74 20 63 6f 6e 73 74  .      set const
0430: 72 61 69 6e 74 73 20 5b 6c 69 73 74 20 6d 6f 6e  raints [list mon
0440: 6f 54 6f 44 6f 20 6d 6f 6e 6f 42 75 67 20 6d 6f  oToDo monoBug mo
0450: 6e 6f 43 72 61 73 68 20 63 75 6c 74 75 72 65 2e  noCrash culture.
0460: 65 6e 5f 55 53 5d 0d 0a 0d 0a 20 20 20 20 20 20  en_US]....      
0470: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
0480: 20 41 64 64 20 74 68 65 20 6e 65 63 65 73 73 61   Add the necessa
0490: 72 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66  ry constraints f
04a0: 6f 72 20 65 61 63 68 20 76 65 72 73 69 6f 6e 0d  or each version.
04b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f  .      #       o
04c0: 66 20 4d 6f 6e 6f 20 77 65 20 6b 6e 6f 77 20 61  f Mono we know a
04d0: 62 6f 75 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  bout...      #..
04e0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 76 65        foreach ve
04f0: 72 73 69 6f 6e 20 5b 6c 69 73 74 20 32 30 20 32  rsion [list 20 2
0500: 32 20 32 34 20 32 36 20 32 38 20 32 31 30 20 33  2 24 26 28 210 3
0510: 30 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64  0] {..        ad
0520: 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  dConstraint [app
0530: 65 6e 64 41 72 67 73 20 6d 6f 6e 6f 54 6f 44 6f  endArgs monoToDo
0540: 20 24 76 65 72 73 69 6f 6e 5d 0d 0a 20 20 20 20   $version]..    
0550: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
0560: 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 6d 6f  t [appendArgs mo
0570: 6e 6f 42 75 67 20 24 76 65 72 73 69 6f 6e 5d 0d  noBug $version].
0580: 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73  .        addCons
0590: 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
05a0: 67 73 20 6d 6f 6e 6f 43 72 61 73 68 20 24 76 65  gs monoCrash $ve
05b0: 72 73 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d  rsion]..      }.
05c0: 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  ...      foreach
05d0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 24 63 6f 6e   constraint $con
05e0: 73 74 72 61 69 6e 74 73 20 7b 0d 0a 20 20 20 20  straints {..    
05f0: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
0600: 74 20 24 63 6f 6e 73 74 72 61 69 6e 74 3b 20 23  t $constraint; #
0610: 20 72 75 6e 6e 69 6e 67 20 69 6e 20 54 63 6c 2e   running in Tcl.
0620: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
0630: 0d 0a 0d 0a 20 20 20 20 74 70 75 74 73 20 24 63  ....    tputs $c
0640: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
0650: 67 73 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f  gs $::tcl_platfo
0660: 72 6d 28 70 6c 61 74 66 6f 72 6d 29 20 5c 6e 5d  rm(platform) \n]
0670: 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 70 72 6f 63  ..  }.....  proc
0680: 20 63 68 65 63 6b 46 6f 72 45 61 67 6c 65 20 7b   checkForEagle {
0690: 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20   channel } {..  
06a0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel
06b0: 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking 
06c0: 66 6f 72 20 45 61 67 6c 65 2e 2e 2e 20 22 0d 0a  for Eagle... "..
06d0: 0d 0a 20 20 20 20 69 66 20 7b 5b 69 73 45 61 67  ..    if {[isEag
06e0: 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  le]} then {..   
06f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
0700: 54 45 3a 20 57 65 20 61 72 65 20 72 75 6e 6e 69  TE: We are runni
0710: 6e 67 20 69 6e 73 69 64 65 20 45 61 67 6c 65 2e  ng inside Eagle.
0720: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..     
0730: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 65   addConstraint e
0740: 61 67 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  agle....      #.
0750: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57  .      # NOTE: W
0760: 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f  e do not want to
0770: 20 73 6b 69 70 20 62 75 67 73 20 6f 72 20 63 72   skip bugs or cr
0780: 61 73 68 69 6e 67 0d 0a 20 20 20 20 20 20 23 20  ashing..      # 
0790: 20 20 20 20 20 20 69 73 73 75 65 73 20 66 6f 72        issues for
07a0: 20 54 63 6c 20 73 69 6e 63 65 20 77 65 20 61 72   Tcl since we ar
07b0: 65 20 6e 6f 74 20 72 75 6e 6e 69 6e 67 0d 0a 20  e not running.. 
07c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20       #       in 
07d0: 54 63 6c 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  Tcl...      #.. 
07e0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
07f0: 6e 74 20 74 63 6c 42 75 67 0d 0a 20 20 20 20 20  nt tclBug..     
0800: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 74   addConstraint t
0810: 63 6c 43 72 61 73 68 0d 0a 0d 0a 20 20 20 20 20  clCrash....     
0820: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
0830: 3a 20 41 64 64 20 74 68 65 20 6e 65 63 65 73 73  : Add the necess
0840: 61 72 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ary constraints 
0850: 66 6f 72 20 65 61 63 68 0d 0a 20 20 20 20 20 20  for each..      
0860: 23 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20  #       version 
0870: 6f 66 20 54 63 6c 20 77 65 20 6b 6e 6f 77 20 61  of Tcl we know a
0880: 62 6f 75 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  bout...      #..
0890: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 76 65        foreach ve
08a0: 72 73 69 6f 6e 20 5b 6c 69 73 74 20 38 34 20 38  rsion [list 84 8
08b0: 35 20 38 36 5d 20 7b 0d 0a 20 20 20 20 20 20 20  5 86] {..       
08c0: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b   addConstraint [
08d0: 61 70 70 65 6e 64 41 72 67 73 20 74 63 6c 42 75  appendArgs tclBu
08e0: 67 20 24 76 65 72 73 69 6f 6e 5d 0d 0a 20 20 20  g $version]..   
08f0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
0900: 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 74  nt [appendArgs t
0910: 63 6c 43 72 61 73 68 20 24 76 65 72 73 69 6f 6e  clCrash $version
0920: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....  
0930: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann
0940: 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 7d 20  el yes\n..    } 
0950: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 23 0d  else {..      #.
0960: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57  .      # NOTE: W
0970: 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 69 6e  e are running in
0980: 73 69 64 65 20 54 63 6c 2e 0d 0a 20 20 20 20 20  side Tcl...     
0990: 20 23 0d 0a 20 20 20 20 20 20 61 64 64 43 6f 6e   #..      addCon
09a0: 73 74 72 61 69 6e 74 20 74 63 6c 0d 0a 0d 0a 20  straint tcl.... 
09b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      # 
09c0: 4e 4f 54 45 3a 20 45 61 63 68 20 54 63 6c 20 62  NOTE: Each Tcl b
09d0: 75 67 20 61 6e 64 20 63 72 61 73 68 20 63 6f 6e  ug and crash con
09e0: 73 74 72 61 69 6e 74 20 69 73 20 73 65 74 0d 0a  straint is set..
09f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 61        #       ba
0a00: 73 65 64 20 6f 6e 20 74 68 65 20 65 78 61 63 74  sed on the exact
0a10: 20 54 63 6c 20 76 65 72 73 69 6f 6e 20 28 69 2e   Tcl version (i.
0a20: 65 2e 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23 20  e. not..      # 
0a30: 20 20 20 20 20 20 67 72 65 61 74 65 72 20 74 68        greater th
0a40: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 29 2e  an or equal to).
0a50: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..     
0a60: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
0a70: 73 20 3a 3a 74 63 6c 5f 76 65 72 73 69 6f 6e 5d  s ::tcl_version]
0a80: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
0a90: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
0aa0: 4f 54 45 3a 20 46 6f 72 20 65 61 63 68 20 54 63  OTE: For each Tc
0ab0: 6c 20 76 65 72 73 69 6f 6e 20 77 65 20 6b 6e 6f  l version we kno
0ac0: 77 20 61 62 6f 75 74 2c 0d 0a 20 20 20 20 20 20  w about,..      
0ad0: 20 20 23 20 20 20 20 20 20 20 63 68 65 63 6b 20    #       check 
0ae0: 69 74 20 61 67 61 69 6e 73 74 20 74 68 65 20 63  it against the c
0af0: 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67  urrently running
0b00: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #     
0b10: 20 20 54 63 6c 20 76 65 72 73 69 6f 6e 2e 20 20    Tcl version.  
0b20: 49 66 20 74 68 65 20 74 77 6f 20 61 72 65 20 6e  If the two are n
0b30: 6f 74 20 65 71 75 61 6c 2c 0d 0a 20 20 20 20 20  ot equal,..     
0b40: 20 20 20 23 20 20 20 20 20 20 20 61 64 64 20 74     #       add t
0b50: 68 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69  he test constrai
0b60: 6e 74 73 20 74 68 61 74 20 70 72 65 76 65 6e 74  nts that prevent
0b70: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #     
0b80: 20 20 73 6b 69 70 70 69 6e 67 20 74 68 6f 73 65    skipping those
0b90: 20 74 65 73 74 73 20 74 68 61 74 20 61 72 65 20   tests that are 
0ba0: 62 75 67 67 79 0d 0a 20 20 20 20 20 20 20 20 23  buggy..        #
0bb0: 20 20 20 20 20 20 20 6f 6e 6c 79 20 66 6f 72 20         only for 
0bc0: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
0bd0: 65 72 73 69 6f 6e 20 6f 66 20 54 63 6c 2e 0d 0a  ersion of Tcl...
0be0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..     
0bf0: 20 20 20 66 6f 72 65 61 63 68 20 64 6f 74 56 65     foreach dotVe
0c00: 72 73 69 6f 6e 20 5b 6c 69 73 74 20 38 2e 34 20  rsion [list 8.4 
0c10: 38 2e 35 20 38 2e 36 5d 20 7b 0d 0a 20 20 20 20  8.5 8.6] {..    
0c20: 20 20 20 20 20 20 69 66 20 7b 24 3a 3a 74 63 6c        if {$::tcl
0c30: 5f 76 65 72 73 69 6f 6e 20 6e 65 20 24 64 6f 74  _version ne $dot
0c40: 56 65 72 73 69 6f 6e 7d 20 74 68 65 6e 20 7b 0d  Version} then {.
0c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
0c60: 20 76 65 72 73 69 6f 6e 20 5b 73 74 72 69 6e 67   version [string
0c70: 20 6d 61 70 20 5b 6c 69 73 74 20 2e 20 22 22 5d   map [list . ""]
0c80: 20 24 64 6f 74 56 65 72 73 69 6f 6e 5d 0d 0a 0d   $dotVersion]...
0c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64  .            add
0ca0: 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
0cb0: 6e 64 41 72 67 73 20 74 63 6c 42 75 67 20 24 76  ndArgs tclBug $v
0cc0: 65 72 73 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20  ersion]..       
0cd0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
0ce0: 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 74  nt [appendArgs t
0cf0: 63 6c 43 72 61 73 68 20 24 76 65 72 73 69 6f 6e  clCrash $version
0d00: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
0d10: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
0d20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #.. 
0d30: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20       # NOTE: We 
0d40: 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 20 73  do not want to s
0d50: 6b 69 70 20 62 75 67 73 20 6f 72 20 63 72 61 73  kip bugs or cras
0d60: 68 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 20  hing..      #   
0d70: 20 20 20 20 69 73 73 75 65 73 20 66 6f 72 20 45      issues for E
0d80: 61 67 6c 65 20 73 69 6e 63 65 20 77 65 20 61 72  agle since we ar
0d90: 65 20 6e 6f 74 20 72 75 6e 6e 69 6e 67 0d 0a 20  e not running.. 
0da0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20       #       in 
0db0: 45 61 67 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d  Eagle...      #.
0dc0: 0a 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72  .      addConstr
0dd0: 61 69 6e 74 20 65 61 67 6c 65 42 75 67 0d 0a 20  aint eagleBug.. 
0de0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
0df0: 6e 74 20 65 61 67 6c 65 43 72 61 73 68 0d 0a 0d  nt eagleCrash...
0e00: 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68  .      tputs $ch
0e10: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20  annel no\n..    
0e20: 7d 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 70 72 6f  }..  }.....  pro
0e30: 63 20 63 68 65 63 6b 46 6f 72 47 61 72 75 64 61  c checkForGaruda
0e40: 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a   { channel } {..
0e50: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann
0e60: 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e  el "---- checkin
0e70: 67 20 66 6f 72 20 47 61 72 75 64 61 2e 2e 2e 20  g for Garuda... 
0e80: 22 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 68 61  "....    if {[ha
0e90: 76 65 47 61 72 75 64 61 20 70 61 63 6b 61 67 65  veGaruda package
0ea0: 49 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  Id]} then {..   
0eb0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
0ec0: 54 45 3a 20 57 65 20 61 72 65 20 72 75 6e 6e 69  TE: We are runni
0ed0: 6e 67 20 77 69 74 68 20 6f 72 20 76 69 61 20 47  ng with or via G
0ee0: 61 72 75 64 61 2e 0d 0a 20 20 20 20 20 20 23 0d  aruda...      #.
0ef0: 0a 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72  .      addConstr
0f00: 61 69 6e 74 20 67 61 72 75 64 61 0d 0a 0d 0a 20  aint garuda.... 
0f10: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan
0f20: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs 
0f30: 22 79 65 73 20 28 22 20 24 70 61 63 6b 61 67 65  "yes (" $package
0f40: 49 64 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 7d  Id ")\n"]..    }
0f50: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 74   else {..      t
0f60: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no
0f70: 5c 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a  \n..    }..  }..
0f80: 0c 0d 0a 20 20 70 72 6f 63 20 63 68 65 63 6b 46  ...  proc checkF
0f90: 6f 72 53 68 65 6c 6c 20 7b 20 63 68 61 6e 6e 65  orShell { channe
0fa0: 6c 20 7d 20 7b 0d 0a 20 20 20 20 74 70 75 74 73  l } {..    tputs
0fb0: 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- 
0fc0: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 73 68 65  checking for she
0fd0: 6c 6c 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 73  ll... "....    s
0fe0: 65 74 20 6e 61 6d 65 20 5b 66 69 6c 65 20 72 6f  et name [file ro
0ff0: 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69  otname [file tai
1000: 6c 20 5b 69 6e 66 6f 20 6e 61 6d 65 6f 66 65 78  l [info nameofex
1010: 65 63 75 74 61 62 6c 65 5d 5d 5d 0d 0a 0d 0a 20  ecutable]]].... 
1020: 20 20 20 69 66 20 7b 5b 69 73 45 61 67 6c 65 5d     if {[isEagle]
1030: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
1040: 69 66 20 7b 24 6e 61 6d 65 20 65 71 20 22 45 61  if {$name eq "Ea
1050: 67 6c 65 53 68 65 6c 6c 22 7d 20 74 68 65 6e 20  gleShell"} then 
1060: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..  
1070: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65        # NOTE: We
1080: 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 69 6e 20   are running in 
1090: 45 61 67 6c 65 20 76 69 61 20 74 68 65 20 45 61  Eagle via the Ea
10a0: 67 6c 65 53 68 65 6c 6c 2e 0d 0a 20 20 20 20 20  gleShell...     
10b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64     #..        ad
10c0: 64 43 6f 6e 73 74 72 61 69 6e 74 20 73 68 65 6c  dConstraint shel
10d0: 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  l....        tpu
10e0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 79 65 73  ts $channel "yes
10f0: 20 28 45 61 67 6c 65 29 5c 6e 22 0d 0a 0d 0a 20   (Eagle)\n".... 
1100: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..      
1110: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 61 72 65    # NOTE: We are
1120: 20 64 6f 6e 65 20 68 65 72 65 2c 20 72 65 74 75   done here, retu
1130: 72 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20  rn now...       
1140: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
1150: 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  rn..      }..   
1160: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
1170: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74   if {[string mat
1180: 63 68 20 74 63 6c 73 68 2a 20 24 6e 61 6d 65 5d  ch tclsh* $name]
1190: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
11a0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
11b0: 4f 54 45 3a 20 57 65 20 61 72 65 20 72 75 6e 6e  OTE: We are runn
11c0: 69 6e 67 20 69 6e 20 54 63 6c 20 76 69 61 20 74  ing in Tcl via t
11d0: 63 6c 73 68 2e 0d 0a 20 20 20 20 20 20 20 20 23  clsh...        #
11e0: 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e  ..        addCon
11f0: 73 74 72 61 69 6e 74 20 73 68 65 6c 6c 0d 0a 0d  straint shell...
1200: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $
1210: 63 68 61 6e 6e 65 6c 20 22 79 65 73 20 28 54 63  channel "yes (Tc
1220: 6c 29 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20  l)\n"....       
1230: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1240: 54 45 3a 20 57 65 20 61 72 65 20 64 6f 6e 65 20  TE: We are done 
1250: 68 65 72 65 2c 20 72 65 74 75 72 6e 20 6e 6f 77  here, return now
1260: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..  
1270: 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20        return..  
1280: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
1290: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann
12a0: 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 7d 0d 0a 0c 0d  el no\n..  }....
12b0: 0a 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72  .  proc checkFor
12c0: 44 65 62 75 67 20 7b 20 63 68 61 6e 6e 65 6c 20  Debug { channel 
12d0: 7d 20 7b 0d 0a 20 20 20 20 74 70 75 74 73 20 24  } {..    tputs $
12e0: 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68  channel "---- ch
12f0: 65 63 6b 69 6e 67 20 66 6f 72 20 64 65 62 75 67  ecking for debug
1300: 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 69 66 20  ... "....    if 
1310: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
1320: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 64 65 62  tcl_platform(deb
1330: 75 67 29 5d 20 26 26 20 24 3a 3a 74 63 6c 5f 70  ug)] && $::tcl_p
1340: 6c 61 74 66 6f 72 6d 28 64 65 62 75 67 29 7d 20  latform(debug)} 
1350: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 61 64  then {..      ad
1360: 64 43 6f 6e 73 74 72 61 69 6e 74 20 64 65 62 75  dConstraint debu
1370: 67 0d 0a 0d 0a 20 20 20 20 20 20 74 70 75 74 73  g....      tputs
1380: 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d   $channel yes\n.
1390: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20  .    } else {.. 
13a0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan
13b0: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 7d 0d  nel no\n..    }.
13c0: 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 70 72 6f 63 20  .  }.....  proc 
13d0: 63 68 65 63 6b 46 6f 72 56 65 72 73 69 6f 6e 20  checkForVersion 
13e0: 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20  { channel } {.. 
13f0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe
1400: 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67  l "---- checking
1410: 20 66 6f 72 20 6c 61 6e 67 75 61 67 65 20 76 65   for language ve
1420: 72 73 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  rsion... "....  
1430: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
1440: 74 73 20 3a 3a 74 63 6c 5f 76 65 72 73 69 6f 6e  ts ::tcl_version
1450: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..     
1460: 20 23 0d 0a 20 20 20 20 20 20 23 20 54 4f 44 4f   #..      # TODO
1470: 3a 20 43 6c 65 61 6e 75 70 20 74 68 65 20 73 65  : Cleanup the se
1480: 6d 61 6e 74 69 63 73 20 66 6f 72 20 61 64 64 69  mantics for addi
1490: 6e 67 20 74 65 73 74 0d 0a 20 20 20 20 20 20 23  ng test..      #
14a0: 20 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e         constrain
14b0: 74 73 20 68 65 72 65 2e 0d 0a 20 20 20 20 20 20  ts here...      
14c0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 3a 3a  #..      if {$::
14d0: 74 63 6c 5f 76 65 72 73 69 6f 6e 20 65 71 20 22  tcl_version eq "
14e0: 38 2e 34 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  8.4"} then {..  
14f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..       
1500: 20 23 20 4e 4f 54 45 3a 20 42 61 73 65 6c 69 6e   # NOTE: Baselin
1510: 65 20 72 65 70 6f 72 74 65 64 20 6c 61 6e 67 75  e reported langu
1520: 61 67 65 20 61 6e 64 20 66 65 61 74 75 72 65 0d  age and feature.
1530: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #      
1540: 20 76 65 72 73 69 6f 6e 2e 0d 0a 20 20 20 20 20   version...     
1550: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64     #..        ad
1560: 64 43 6f 6e 73 74 72 61 69 6e 74 20 74 63 6c 38  dConstraint tcl8
1570: 34 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  4..        addCo
1580: 6e 73 74 72 61 69 6e 74 20 74 63 6c 38 34 4f 72  nstraint tcl84Or
1590: 48 69 67 68 65 72 0d 0a 20 20 20 20 20 20 20 20  Higher..        
15a0: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 74 63  addConstraint tc
15b0: 6c 38 34 46 65 61 74 75 72 65 0d 0a 0d 0a 20 20  l84Feature....  
15c0: 20 20 20 20 20 20 69 66 20 7b 5b 69 73 45 61 67        if {[isEag
15d0: 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  le]} then {..   
15e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..      
15f0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 2a 45 41 47      # NOTE: *EAG
1600: 4c 45 2a 20 57 65 20 64 6f 20 77 61 6e 74 20 74  LE* We do want t
1610: 6f 20 69 6e 63 6c 75 64 65 20 61 6e 79 0d 0a 20  o include any.. 
1620: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #      
1630: 20 74 65 73 74 73 20 74 68 61 74 20 74 61 72 67   tests that targ
1640: 65 74 20 22 54 63 6c 20 38 2e 35 20 6f 72 20 68  et "Tcl 8.5 or h
1650: 69 67 68 65 72 22 0d 0a 20 20 20 20 20 20 20 20  igher"..        
1660: 20 20 23 20 20 20 20 20 20 20 66 65 61 74 75 72    #       featur
1670: 65 73 20 61 6e 64 2f 6f 72 20 22 54 63 6c 20 38  es and/or "Tcl 8
1680: 2e 36 20 6f 72 20 68 69 67 68 65 72 22 0d 0a 20  .6 or higher".. 
1690: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #      
16a0: 20 66 65 61 74 75 72 65 73 20 62 65 63 61 75 73   features becaus
16b0: 65 20 74 68 65 79 20 77 6f 75 6c 64 20 6e 6f 74  e they would not
16c0: 20 62 65 20 69 6e 0d 0a 20 20 20 20 20 20 20 20   be in..        
16d0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 74 65    #       the te
16e0: 73 74 20 73 75 69 74 65 20 69 66 20 77 65 20 64  st suite if we d
16f0: 69 64 20 6e 6f 74 20 73 75 70 70 6f 72 74 0d 0a  id not support..
1700: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #     
1710: 20 20 74 68 61 74 20 70 61 72 74 69 63 75 6c 61    that particula
1720: 72 20 66 65 61 74 75 72 65 2c 20 72 65 67 61 72  r feature, regar
1730: 64 6c 65 73 73 0d 0a 20 20 20 20 20 20 20 20 20  dless..         
1740: 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 20   #       of the 
1750: 6c 61 6e 67 75 61 67 65 20 76 65 72 73 69 6f 6e  language version
1760: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
1770: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e            addCon
1780: 73 74 72 61 69 6e 74 20 74 63 6c 38 35 46 65 61  straint tcl85Fea
1790: 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  ture..          
17a0: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 74 63  addConstraint tc
17b0: 6c 38 36 46 65 61 74 75 72 65 0d 0a 20 20 20 20  l86Feature..    
17c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
17d0: 6c 73 65 69 66 20 7b 24 3a 3a 74 63 6c 5f 76 65  lseif {$::tcl_ve
17e0: 72 73 69 6f 6e 20 65 71 20 22 38 2e 35 22 7d 20  rsion eq "8.5"} 
17f0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
1800: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1810: 45 3a 20 42 61 73 65 6c 69 6e 65 20 72 65 70 6f  E: Baseline repo
1820: 72 74 65 64 20 6c 61 6e 67 75 61 67 65 20 61 6e  rted language an
1830: 64 20 66 65 61 74 75 72 65 0d 0a 20 20 20 20 20  d feature..     
1840: 20 20 20 23 20 20 20 20 20 20 20 76 65 72 73 69     #       versi
1850: 6f 6e 2e 20 20 54 63 6c 20 38 2e 35 20 69 6e 63  on.  Tcl 8.5 inc
1860: 6c 75 64 65 73 20 61 6c 6c 20 74 68 65 0d 0a 20  ludes all the.. 
1870: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66         #       f
1880: 65 61 74 75 72 65 73 20 66 72 6f 6d 20 69 74 73  eatures from its
1890: 65 6c 66 20 61 6e 64 20 54 63 6c 20 38 2e 34 2e  elf and Tcl 8.4.
18a0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..   
18b0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
18c0: 6e 74 20 74 63 6c 38 35 0d 0a 20 20 20 20 20 20  nt tcl85..      
18d0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint 
18e0: 74 63 6c 38 34 4f 72 48 69 67 68 65 72 0d 0a 20  tcl84OrHigher.. 
18f0: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
1900: 61 69 6e 74 20 74 63 6c 38 35 4f 72 48 69 67 68  aint tcl85OrHigh
1910: 65 72 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43  er..        addC
1920: 6f 6e 73 74 72 61 69 6e 74 20 74 63 6c 38 34 46  onstraint tcl84F
1930: 65 61 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20  eature..        
1940: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 74 63  addConstraint tc
1950: 6c 38 35 46 65 61 74 75 72 65 0d 0a 0d 0a 20 20  l85Feature....  
1960: 20 20 20 20 20 20 69 66 20 7b 5b 69 73 45 61 67        if {[isEag
1970: 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  le]} then {..   
1980: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..      
1990: 20 20 20 20 23 20 4e 4f 54 45 3a 20 2a 45 41 47      # NOTE: *EAG
19a0: 4c 45 2a 20 57 65 20 64 6f 20 77 61 6e 74 20 74  LE* We do want t
19b0: 6f 20 69 6e 63 6c 75 64 65 20 61 6e 79 0d 0a 20  o include any.. 
19c0: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #      
19d0: 20 74 65 73 74 73 20 74 68 61 74 20 74 61 72 67   tests that targ
19e0: 65 74 20 22 54 63 6c 20 38 2e 35 20 6f 72 20 68  et "Tcl 8.5 or h
19f0: 69 67 68 65 72 22 0d 0a 20 20 20 20 20 20 20 20  igher"..        
1a00: 20 20 23 20 20 20 20 20 20 20 66 65 61 74 75 72    #       featur
1a10: 65 73 20 61 6e 64 2f 6f 72 20 22 54 63 6c 20 38  es and/or "Tcl 8
1a20: 2e 36 20 6f 72 20 68 69 67 68 65 72 22 0d 0a 20  .6 or higher".. 
1a30: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #      
1a40: 20 66 65 61 74 75 72 65 73 20 62 65 63 61 75 73   features becaus
1a50: 65 20 74 68 65 79 20 77 6f 75 6c 64 20 6e 6f 74  e they would not
1a60: 20 62 65 20 69 6e 0d 0a 20 20 20 20 20 20 20 20   be in..        
1a70: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 74 65    #       the te
1a80: 73 74 20 73 75 69 74 65 20 69 66 20 77 65 20 64  st suite if we d
1a90: 69 64 20 6e 6f 74 20 73 75 70 70 6f 72 74 0d 0a  id not support..
1aa0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #     
1ab0: 20 20 74 68 61 74 20 70 61 72 74 69 63 75 6c 61    that particula
1ac0: 72 20 66 65 61 74 75 72 65 2c 20 72 65 67 61 72  r feature, regar
1ad0: 64 6c 65 73 73 0d 0a 20 20 20 20 20 20 20 20 20  dless..         
1ae0: 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 20   #       of the 
1af0: 6c 61 6e 67 75 61 67 65 20 76 65 72 73 69 6f 6e  language version
1b00: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
1b10: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e            addCon
1b20: 73 74 72 61 69 6e 74 20 74 63 6c 38 36 46 65 61  straint tcl86Fea
1b30: 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ture..        }.
1b40: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20  .      } elseif 
1b50: 7b 24 3a 3a 74 63 6c 5f 76 65 72 73 69 6f 6e 20  {$::tcl_version 
1b60: 65 71 20 22 38 2e 36 22 7d 20 74 68 65 6e 20 7b  eq "8.6"} then {
1b70: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..   
1b80: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 61 73       # NOTE: Bas
1b90: 65 6c 69 6e 65 20 72 65 70 6f 72 74 65 64 20 6c  eline reported l
1ba0: 61 6e 67 75 61 67 65 20 61 6e 64 20 66 65 61 74  anguage and feat
1bb0: 75 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ure..        #  
1bc0: 20 20 20 20 20 76 65 72 73 69 6f 6e 2e 20 20 54       version.  T
1bd0: 63 6c 20 38 2e 36 20 69 6e 63 6c 75 64 65 73 20  cl 8.6 includes 
1be0: 61 6c 6c 20 74 68 65 0d 0a 20 20 20 20 20 20 20  all the..       
1bf0: 20 23 20 20 20 20 20 20 20 66 65 61 74 75 72 65   #       feature
1c00: 73 20 66 72 6f 6d 20 69 74 73 65 6c 66 20 54 63  s from itself Tc
1c10: 6c 20 38 2e 34 2c 20 61 6e 64 20 54 63 6c 0d 0a  l 8.4, and Tcl..
1c20: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #       
1c30: 38 2e 35 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  8.5...        #.
1c40: 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73  .        addCons
1c50: 74 72 61 69 6e 74 20 74 63 6c 38 36 0d 0a 20 20  traint tcl86..  
1c60: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
1c70: 69 6e 74 20 74 63 6c 38 34 4f 72 48 69 67 68 65  int tcl84OrHighe
1c80: 72 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  r..        addCo
1c90: 6e 73 74 72 61 69 6e 74 20 74 63 6c 38 35 4f 72  nstraint tcl85Or
1ca0: 48 69 67 68 65 72 0d 0a 20 20 20 20 20 20 20 20  Higher..        
1cb0: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 74 63  addConstraint tc
1cc0: 6c 38 36 4f 72 48 69 67 68 65 72 0d 0a 20 20 20  l86OrHigher..   
1cd0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
1ce0: 6e 74 20 74 63 6c 38 34 46 65 61 74 75 72 65 0d  nt tcl84Feature.
1cf0: 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73  .        addCons
1d00: 74 72 61 69 6e 74 20 74 63 6c 38 35 46 65 61 74  traint tcl85Feat
1d10: 75 72 65 0d 0a 20 20 20 20 20 20 20 20 61 64 64  ure..        add
1d20: 43 6f 6e 73 74 72 61 69 6e 74 20 74 63 6c 38 36  Constraint tcl86
1d30: 46 65 61 74 75 72 65 0d 0a 20 20 20 20 20 20 7d  Feature..      }
1d40: 0d 0a 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20  ....      tputs 
1d50: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append
1d60: 41 72 67 73 20 24 3a 3a 74 63 6c 5f 76 65 72 73  Args $::tcl_vers
1d70: 69 6f 6e 20 5c 6e 5d 0d 0a 20 20 20 20 7d 20 65  ion \n]..    } e
1d80: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 74 70 75  lse {..      tpu
1d90: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e  ts $channel no\n
1da0: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0c 0d  ..    }..  }....
1db0: 0a 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72  .  proc checkFor
1dc0: 43 6f 6d 6d 61 6e 64 20 7b 20 63 68 61 6e 6e 65  Command { channe
1dd0: 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20  l name } {..    
1de0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [
1df0: 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d  appendArgs "----
1e00: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 63 6f   checking for co
1e10: 6d 6d 61 6e 64 20 5c 22 22 20 24 6e 61 6d 65 20  mmand \"" $name 
1e20: 5c 0d 0a 20 20 20 20 20 20 20 20 22 5c 22 2e 2e  \..        "\"..
1e30: 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20  . "]....    #.. 
1e40: 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68     # NOTE: Is th
1e50: 65 20 63 6f 6d 6d 61 6e 64 20 61 76 61 69 6c 61  e command availa
1e60: 62 6c 65 3f 0d 0a 20 20 20 20 23 0d 0a 20 20 20  ble?..    #..   
1e70: 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69   if {[llength [i
1e80: 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 24 6e 61  nfo commands $na
1e90: 6d 65 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  me]] > 0} then {
1ea0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..     
1eb0: 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 69 74   # NOTE: Yes, it
1ec0: 20 61 70 70 65 61 72 73 20 74 68 61 74 20 69 74   appears that it
1ed0: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a   is available...
1ee0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 61        #..      a
1ef0: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 63 6f 6d  ddConstraint com
1f00: 6d 61 6e 64 2e 24 6e 61 6d 65 0d 0a 0d 0a 20 20  mand.$name....  
1f10: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann
1f20: 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 7d 20  el yes\n..    } 
1f30: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 74 70  else {..      tp
1f40: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c  uts $channel no\
1f50: 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0c  n..    }..  }...
1f60: 0d 0a 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f  ..  proc checkFo
1f70: 72 46 69 6c 65 20 7b 20 63 68 61 6e 6e 65 6c 20  rFile { channel 
1f80: 6e 61 6d 65 20 7b 63 6f 6e 73 74 72 61 69 6e 74  name {constraint
1f90: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 74 70   ""} } {..    tp
1fa0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap
1fb0: 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63  pendArgs "---- c
1fc0: 68 65 63 6b 69 6e 67 20 66 6f 72 20 66 69 6c 65  hecking for file
1fd0: 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a 20 20   \"" $name \..  
1fe0: 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d        "\"... "].
1ff0: 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 66 69 6c 65  ...    if {[file
2000: 20 65 78 69 73 74 73 20 24 6e 61 6d 65 5d 7d 20   exists $name]} 
2010: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 23 0d  then {..      #.
2020: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59  .      # NOTE: Y
2030: 65 73 2c 20 69 74 20 61 70 70 65 61 72 73 20 74  es, it appears t
2040: 68 61 74 20 69 74 20 69 73 20 61 76 61 69 6c 61  hat it is availa
2050: 62 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ble...      #.. 
2060: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
2070: 20 6c 65 6e 67 74 68 20 24 63 6f 6e 73 74 72 61   length $constra
2080: 69 6e 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  int] > 0} then {
2090: 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e  ..        addCon
20a0: 73 74 72 61 69 6e 74 20 66 69 6c 65 5f 24 63 6f  straint file_$co
20b0: 6e 73 74 72 61 69 6e 74 0d 0a 20 20 20 20 20 20  nstraint..      
20c0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..      
20d0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint 
20e0: 66 69 6c 65 5f 5b 66 69 6c 65 20 74 61 69 6c 20  file_[file tail 
20f0: 24 6e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d  $name]..      }.
2100: 0a 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24  ...      tputs $
2110: 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20  channel yes\n.. 
2120: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..   
2130: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe
2140: 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 7d 0d 0a 20  l no\n..    }.. 
2150: 20 7d 0d 0a 0c 0d 0a 20 20 70 72 6f 63 20 63 68   }.....  proc ch
2160: 65 63 6b 46 6f 72 50 61 74 68 46 69 6c 65 20 7b  eckForPathFile {
2170: 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 20 7b 63   channel name {c
2180: 6f 6e 73 74 72 61 69 6e 74 20 22 22 7d 20 7d 20  onstraint ""} } 
2190: 7b 0d 0a 20 20 20 20 74 70 75 74 73 20 24 63 68  {..    tputs $ch
21a0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
21b0: 73 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67  s "---- checking
21c0: 20 66 6f 72 20 66 69 6c 65 20 5c 22 22 20 24 6e   for file \"" $n
21d0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 22  ame \..        "
21e0: 5c 22 20 61 6c 6f 6e 67 20 50 41 54 48 2e 2e 2e  \" along PATH...
21f0: 20 22 5d 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 5b   "]....    if {[
2200: 66 69 6c 65 20 65 78 69 73 74 73 20 24 6e 61 6d  file exists $nam
2210: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..    
2220: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
2230: 45 3a 20 59 65 73 2c 20 69 74 20 61 70 70 65 61  E: Yes, it appea
2240: 72 73 20 74 68 61 74 20 69 74 20 69 73 20 61 76  rs that it is av
2250: 61 69 6c 61 62 6c 65 20 5b 69 6e 20 74 68 65 20  ailable [in the 
2260: 65 78 61 63 74 20 6c 6f 63 61 74 69 6f 6e 20 74  exact location t
2270: 68 65 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  hey..      #    
2280: 20 20 20 73 70 65 63 69 66 69 65 64 5d 2e 0d 0a     specified]...
2290: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
22a0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
22b0: 68 20 24 63 6f 6e 73 74 72 61 69 6e 74 5d 20 3e  h $constraint] >
22c0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..    
22d0: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
22e0: 74 20 66 69 6c 65 5f 24 63 6f 6e 73 74 72 61 69  t file_$constrai
22f0: 6e 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  nt..      } else
2300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43   {..        addC
2310: 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c 65 5f 5b  onstraint file_[
2320: 66 69 6c 65 20 74 61 69 6c 20 24 6e 61 6d 65 5d  file tail $name]
2330: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
2340: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe
2350: 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20  l yes\n....     
2360: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
2370: 3a 20 57 65 20 61 72 65 20 64 6f 6e 65 20 68 65  : We are done he
2380: 72 65 2c 20 72 65 74 75 72 6e 20 6e 6f 77 2e 0d  re, return now..
2390: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..      
23a0: 72 65 74 75 72 6e 0d 0a 20 20 20 20 7d 20 65 6c  return..    } el
23b0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  se {..      #.. 
23c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
23d0: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
23e0: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72   environment var
23f0: 69 61 62 6c 65 20 66 6f 72 20 74 68 65 20 70 6c  iable for the pl
2400: 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23  atform...      #
2410: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 3a 3a 74  ..      if {$::t
2420: 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74  cl_platform(plat
2430: 66 6f 72 6d 29 20 65 71 20 22 77 69 6e 64 6f 77  form) eq "window
2440: 73 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  s"} then {..    
2450: 20 20 20 20 73 65 74 20 70 61 74 68 4e 61 6d 65      set pathName
2460: 20 50 41 54 48 0d 0a 20 20 20 20 20 20 7d 20 65   PATH..      } e
2470: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
2480: 0d 0a 20 20 20 20 20 20 20 20 23 20 48 41 43 4b  ..        # HACK
2490: 3a 20 46 6f 72 20 73 68 61 72 65 64 20 6c 69 62  : For shared lib
24a0: 72 61 72 69 65 73 2c 20 75 73 65 20 74 68 65 20  raries, use the 
24b0: 4c 44 5f 4c 49 42 52 41 52 59 5f 50 41 54 48 2e  LD_LIBRARY_PATH.
24c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..   
24d0: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
24e0: 78 74 65 6e 73 69 6f 6e 20 24 6e 61 6d 65 5d 20  xtension $name] 
24f0: 65 71 20 5b 69 6e 66 6f 20 73 68 61 72 65 64 6c  eq [info sharedl
2500: 69 62 65 78 74 65 6e 73 69 6f 6e 5d 7d 20 74 68  ibextension]} th
2510: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
2520: 73 65 74 20 70 61 74 68 4e 61 6d 65 20 4c 44 5f  set pathName LD_
2530: 4c 49 42 52 41 52 59 5f 50 41 54 48 0d 0a 20 20  LIBRARY_PATH..  
2540: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
2550: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 61            set pa
2560: 74 68 4e 61 6d 65 20 50 41 54 48 0d 0a 20 20 20  thName PATH..   
2570: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
2580: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..    
2590: 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65    # NOTE: Is the
25a0: 20 72 65 71 75 69 72 65 64 20 65 6e 76 69 72 6f   required enviro
25b0: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 61  nment variable a
25c0: 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20  vailable?..     
25d0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
25e0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76  nfo exists ::env
25f0: 28 24 70 61 74 68 4e 61 6d 65 29 5d 7d 20 74 68  ($pathName)]} th
2600: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
2610: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
2620: 20 4f 6b 2c 20 67 72 61 62 20 69 74 20 6e 6f 77   Ok, grab it now
2630: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..  
2640: 20 20 20 20 20 20 73 65 74 20 70 61 74 68 20 24        set path $
2650: 3a 3a 65 6e 76 28 24 70 61 74 68 4e 61 6d 65 29  ::env($pathName)
2660: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #.. 
2670: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55         # NOTE: U
2680: 73 65 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  se the appropria
2690: 74 65 20 70 61 74 68 20 73 65 70 61 72 61 74 6f  te path separato
26a0: 72 20 66 6f 72 20 74 68 65 20 70 6c 61 74 66 6f  r for the platfo
26b0: 72 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  rm...        #..
26c0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
26d0: 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70  o exists ::tcl_p
26e0: 6c 61 74 66 6f 72 6d 28 70 61 74 68 53 65 70 61  latform(pathSepa
26f0: 72 61 74 6f 72 29 5d 7d 20 74 68 65 6e 20 7b 0d  rator)]} then {.
2700: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73  .          set s
2710: 65 70 61 72 61 74 6f 72 20 24 3a 3a 74 63 6c 5f  eparator $::tcl_
2720: 70 6c 61 74 66 6f 72 6d 28 70 61 74 68 53 65 70  platform(pathSep
2730: 61 72 61 74 6f 72 29 0d 0a 20 20 20 20 20 20 20  arator)..       
2740: 20 7d 20 65 6c 73 65 69 66 20 7b 24 3a 3a 74 63   } elseif {$::tc
2750: 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66  l_platform(platf
2760: 6f 72 6d 29 20 65 71 20 22 77 69 6e 64 6f 77 73  orm) eq "windows
2770: 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  "} then {..     
2780: 20 20 20 20 20 73 65 74 20 73 65 70 61 72 61 74       set separat
2790: 6f 72 20 5c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  or \;..        }
27a0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..       
27b0: 20 20 20 73 65 74 20 73 65 70 61 72 61 74 6f 72     set separator
27c0: 20 3a 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   :..        }...
27d0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..    
27e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62      # NOTE: Grab
27f0: 20 6a 75 73 74 20 74 68 65 20 66 69 6c 65 20 6e   just the file n
2800: 61 6d 65 20 66 72 6f 6d 20 74 68 65 20 70 6f 73  ame from the pos
2810: 73 69 62 6c 79 20 66 75 6c 6c 79 20 71 75 61 6c  sibly fully qual
2820: 69 66 69 65 64 20 66 69 6c 65 0d 0a 20 20 20 20  ified file..    
2830: 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65      #       name
2840: 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65   provided by the
2850: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...      
2860: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
2870: 20 74 61 69 6c 20 5b 66 69 6c 65 20 74 61 69 6c   tail [file tail
2880: 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20   $name]....     
2890: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        # 
28a0: 4e 4f 54 45 3a 20 43 68 65 63 6b 20 65 61 63 68  NOTE: Check each
28b0: 20 64 69 72 65 63 74 6f 72 79 20 69 6e 20 74 68   directory in th
28c0: 65 20 50 41 54 48 20 66 6f 72 20 74 68 65 20 66  e PATH for the f
28d0: 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ile...        #.
28e0: 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
28f0: 20 64 69 72 65 63 74 6f 72 79 20 5b 73 70 6c 69   directory [spli
2900: 74 20 24 70 61 74 68 20 24 73 65 70 61 72 61 74  t $path $separat
2910: 6f 72 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  or] {..         
2920: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          # 
2930: 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20  NOTE: Check for 
2940: 74 68 65 20 66 69 6c 65 20 69 6e 20 74 68 69 73  the file in this
2950: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61   directory conta
2960: 69 6e 65 64 20 69 6e 20 74 68 65 20 50 41 54 48  ined in the PATH
2970: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  ...          #  
2980: 20 20 20 20 20 54 68 69 73 20 73 74 72 69 70 73       This strips
2990: 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 70   the directory p
29a0: 6f 72 74 69 6f 6e 20 6f 66 66 20 74 68 65 20 66  ortion off the f
29b0: 69 6c 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69  ile name specifi
29c0: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  ed..          # 
29d0: 20 20 20 20 20 20 62 79 20 74 68 65 20 63 61 6c        by the cal
29e0: 6c 65 72 2c 20 69 66 20 61 6e 79 2c 20 62 65 66  ler, if any, bef
29f0: 6f 72 65 20 6a 6f 69 6e 69 6e 67 20 74 68 61 74  ore joining that
2a00: 20 66 69 6c 65 20 6e 61 6d 65 20 74 6f 20 74 68   file name to th
2a10: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  e..          #  
2a20: 20 20 20 20 20 63 75 72 72 65 6e 74 20 64 69 72       current dir
2a30: 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 50 41  ectory of the PA
2a40: 54 48 20 62 65 69 6e 67 20 73 65 61 72 63 68 65  TH being searche
2a50: 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  d...          #.
2a60: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
2a70: 66 69 6c 65 20 65 78 69 73 74 73 20 5b 66 69 6c  file exists [fil
2a80: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72  e join $director
2a90: 79 20 24 74 61 69 6c 5d 5d 7d 20 74 68 65 6e 20  y $tail]]} then 
2aa0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
2ab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            # 
2ac0: 4e 4f 54 45 3a 20 59 65 73 2c 20 69 74 20 61 70  NOTE: Yes, it ap
2ad0: 70 65 61 72 73 20 74 68 61 74 20 69 74 20 69 73  pears that it is
2ae0: 20 61 76 61 69 6c 61 62 6c 65 20 69 6e 20 74 68   available in th
2af0: 65 20 50 41 54 48 2e 0d 0a 20 20 20 20 20 20 20  e PATH...       
2b00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
2b10: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string 
2b20: 6c 65 6e 67 74 68 20 24 63 6f 6e 73 74 72 61 69  length $constrai
2b30: 6e 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  nt] > 0} then {.
2b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  .              a
2b50: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c  ddConstraint fil
2b60: 65 5f 24 63 6f 6e 73 74 72 61 69 6e 74 0d 0a 20  e_$constraint.. 
2b70: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
2b80: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..           
2b90: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
2ba0: 20 66 69 6c 65 5f 5b 66 69 6c 65 20 74 61 69 6c   file_[file tail
2bb0: 20 24 6e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20   $name]..       
2bc0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2bd0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha
2be0: 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20  nnel yes\n....  
2bf0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..   
2c00: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
2c10: 20 57 65 20 61 72 65 20 64 6f 6e 65 20 68 65 72   We are done her
2c20: 65 2c 20 72 65 74 75 72 6e 20 6e 6f 77 2e 0d 0a  e, return now...
2c30: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #.. 
2c40: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2c50: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  n..          }..
2c60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2c70: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
2c80: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 
2c90: 6e 6f 5c 6e 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20 20  no\n..  }.....  
2ca0: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 4e 61 74  proc checkForNat
2cb0: 69 76 65 43 6f 64 65 20 7b 20 63 68 61 6e 6e 65  iveCode { channe
2cc0: 6c 20 7d 20 7b 0d 0a 20 20 20 20 74 70 75 74 73  l } {..    tputs
2cd0: 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- 
2ce0: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 6e 61 74  checking for nat
2cf0: 69 76 65 20 63 6f 64 65 2e 2e 2e 20 22 0d 0a 0d  ive code... "...
2d00: 0a 20 20 20 20 69 66 20 7b 5b 69 73 45 61 67 6c  .    if {[isEagl
2d10: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..    
2d20: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
2d30: 74 73 20 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66  ts ::eagle_platf
2d40: 6f 72 6d 28 63 6f 6d 70 69 6c 65 4f 70 74 69 6f  orm(compileOptio
2d50: 6e 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ns)] && \..     
2d60: 20 20 20 20 20 5b 69 6e 66 6f 20 65 78 69 73 74       [info exist
2d70: 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d  s ::tcl_platform
2d80: 28 70 6c 61 74 66 6f 72 6d 29 5d 20 26 26 20 5c  (platform)] && \
2d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 73 65  ..          [lse
2da0: 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63  arch -exact -noc
2db0: 61 73 65 20 24 3a 3a 65 61 67 6c 65 5f 70 6c 61  ase $::eagle_pla
2dc0: 74 66 6f 72 6d 28 63 6f 6d 70 69 6c 65 4f 70 74  tform(compileOpt
2dd0: 69 6f 6e 73 29 20 5c 0d 0a 20 20 20 20 20 20 20  ions) \..       
2de0: 20 20 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f     $::tcl_platfo
2df0: 72 6d 28 70 6c 61 74 66 6f 72 6d 29 5d 20 21 3d  rm(platform)] !=
2e00: 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20   -1} then {..   
2e10: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
2e20: 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 65  # NOTE: Yes, the
2e30: 20 62 69 6e 61 72 79 20 6d 61 74 63 68 65 73 20   binary matches 
2e40: 74 68 65 20 63 75 72 72 65 6e 74 20 70 6c 61 74  the current plat
2e50: 66 6f 72 6d 2c 0d 0a 20 20 20 20 20 20 20 20 23  form,..        #
2e60: 20 20 20 20 20 20 20 6e 61 74 69 76 65 20 63 6f         native co
2e70: 64 65 20 63 61 6e 20 62 65 20 75 73 65 64 2e 0d  de can be used..
2e80: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..    
2e90: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
2ea0: 74 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 20 20 20  t native....    
2eb0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann
2ec0: 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20  el yes\n..      
2ed0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..      
2ee0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel
2ef0: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a   no\n..      }..
2f00: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..  
2f10: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
2f20: 4f 54 45 3a 20 54 63 6c 20 69 73 20 61 6c 77 61  OTE: Tcl is alwa
2f30: 79 73 20 6e 61 74 69 76 65 20 63 6f 64 65 20 61  ys native code a
2f40: 6e 64 20 63 61 6e 20 61 6c 77 61 79 73 20 65 78  nd can always ex
2f50: 65 63 75 74 65 20 6e 61 74 69 76 65 20 63 6f 64  ecute native cod
2f60: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..   
2f70: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
2f80: 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 20 20 20 20   native....     
2f90: 20 23 0d 0a 20 20 20 20 20 20 23 20 48 41 43 4b   #..      # HACK
2fa0: 3a 20 4e 65 65 64 65 64 20 62 79 20 74 65 73 74  : Needed by test
2fb0: 20 22 62 65 6e 63 68 6d 61 72 6b 2d 31 2e 32 32   "benchmark-1.22
2fc0: 22 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  "...      #..   
2fd0: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
2fe0: 20 63 6f 6d 70 69 6c 65 2e 4e 41 54 49 56 45 0d   compile.NATIVE.
2ff0: 0a 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24  ...      tputs $
3000: 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20  channel yes\n.. 
3010: 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20 20     }..  }.....  
3020: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 54 69 70  proc checkForTip
3030: 31 32 37 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20  127 { channel } 
3040: 7b 0d 0a 20 20 20 20 74 70 75 74 73 20 24 63 68  {..    tputs $ch
3050: 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63  annel "---- chec
3060: 6b 69 6e 67 20 66 6f 72 20 54 49 50 20 23 31 32  king for TIP #12
3070: 37 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 23 0d  7... "....    #.
3080: 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20  .    # NOTE: Is 
3090: 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20  the interpreter 
30a0: 54 49 50 20 23 31 32 37 20 72 65 61 64 79 3f 0d  TIP #127 ready?.
30b0: 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66 20 7b  .    #..    if {
30c0: 5b 63 61 74 63 68 20 7b 6c 73 65 61 72 63 68 20  [catch {lsearch 
30d0: 2d 69 6e 64 65 78 20 30 20 30 20 30 7d 5d 20 3d  -index 0 0 0}] =
30e0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..   
30f0: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
3100: 20 74 69 70 31 32 37 0d 0a 0d 0a 20 20 20 20 20   tip127....     
3110: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 
3120: 79 65 73 5c 6e 0d 0a 20 20 20 20 7d 20 65 6c 73  yes\n..    } els
3130: 65 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73  e {..      tputs
3140: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a   $channel no\n..
3150: 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20      }..  }..... 
3160: 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 54 69   proc checkForTi
3170: 70 31 39 34 20 7b 20 63 68 61 6e 6e 65 6c 20 7d  p194 { channel }
3180: 20 7b 0d 0a 20 20 20 20 74 70 75 74 73 20 24 63   {..    tputs $c
3190: 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65  hannel "---- che
31a0: 63 6b 69 6e 67 20 66 6f 72 20 54 49 50 20 23 31  cking for TIP #1
31b0: 39 34 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 23  94... "....    #
31c0: 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 73  ..    # NOTE: Is
31d0: 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72   the interpreter
31e0: 20 54 49 50 20 23 31 39 34 20 72 65 61 64 79 3f   TIP #194 ready?
31f0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 63 61 74  ..    #..    cat
3200: 63 68 20 7b 61 70 70 6c 79 7d 20 65 72 72 6f 72  ch {apply} error
3210: 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 24 65 72 72  ....    if {$err
3220: 6f 72 20 6e 65 20 7b 69 6e 76 61 6c 69 64 20 63  or ne {invalid c
3230: 6f 6d 6d 61 6e 64 20 6e 61 6d 65 20 22 61 70 70  ommand name "app
3240: 6c 79 22 7d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ly"}} then {..  
3250: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
3260: 74 20 74 69 70 31 39 34 0d 0a 0d 0a 20 20 20 20  t tip194....    
3270: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel
3280: 20 79 65 73 5c 6e 0d 0a 20 20 20 20 7d 20 65 6c   yes\n..    } el
3290: 73 65 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74  se {..      tput
32a0: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d  s $channel no\n.
32b0: 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0c 0d 0a  .    }..  }.....
32c0: 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 54    proc checkForT
32d0: 69 70 32 34 31 20 7b 20 63 68 61 6e 6e 65 6c 20  ip241 { channel 
32e0: 7d 20 7b 0d 0a 20 20 20 20 74 70 75 74 73 20 24  } {..    tputs $
32f0: 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68  channel "---- ch
3300: 65 63 6b 69 6e 67 20 66 6f 72 20 54 49 50 20 23  ecking for TIP #
3310: 32 34 31 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  241... "....    
3320: 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  #..    # NOTE: I
3330: 73 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65  s the interprete
3340: 72 20 54 49 50 20 23 32 34 31 20 72 65 61 64 79  r TIP #241 ready
3350: 3f 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66  ?..    #..    if
3360: 20 7b 5b 63 61 74 63 68 20 7b 6c 73 65 61 72 63   {[catch {lsearc
3370: 68 20 2d 6e 6f 63 61 73 65 20 30 20 30 7d 5d 20  h -nocase 0 0}] 
3380: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..  
3390: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
33a0: 74 20 74 69 70 32 34 31 0d 0a 0d 0a 20 20 20 20  t tip241....    
33b0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel
33c0: 20 79 65 73 5c 6e 0d 0a 20 20 20 20 7d 20 65 6c   yes\n..    } el
33d0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74  se {..      tput
33e0: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d  s $channel no\n.
33f0: 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0c 0d 0a  .    }..  }.....
3400: 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 54    proc checkForT
3410: 69 70 32 38 35 20 7b 20 63 68 61 6e 6e 65 6c 20  ip285 { channel 
3420: 7d 20 7b 0d 0a 20 20 20 20 74 70 75 74 73 20 24  } {..    tputs $
3430: 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68  channel "---- ch
3440: 65 63 6b 69 6e 67 20 66 6f 72 20 54 49 50 20 23  ecking for TIP #
3450: 32 38 35 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  285... "....    
3460: 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  #..    # NOTE: I
3470: 73 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65  s the interprete
3480: 72 20 54 49 50 20 23 32 38 35 20 72 65 61 64 79  r TIP #285 ready
3490: 3f 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 63 61  ?..    #..    ca
34a0: 74 63 68 20 7b 69 6e 74 65 72 70 20 63 61 6e 63  tch {interp canc
34b0: 65 6c 7d 20 65 72 72 6f 72 0d 0a 0d 0a 20 20 20  el} error....   
34c0: 20 69 66 20 7b 24 65 72 72 6f 72 20 65 71 20 22   if {$error eq "
34d0: 65 76 61 6c 20 63 61 6e 63 65 6c 65 64 22 7d 20  eval canceled"} 
34e0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 61 64  then {..      ad
34f0: 64 43 6f 6e 73 74 72 61 69 6e 74 20 74 69 70 32  dConstraint tip2
3500: 38 35 0d 0a 0d 0a 20 20 20 20 20 20 74 70 75 74  85....      tput
3510: 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e  s $channel yes\n
3520: 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a  ..    } else {..
3530: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha
3540: 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 7d  nnel no\n..    }
3550: 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 70 72 6f 63  ..  }.....  proc
3560: 20 63 68 65 63 6b 46 6f 72 54 69 6d 69 6e 67 20   checkForTiming 
3570: 7b 20 63 68 61 6e 6e 65 6c 20 74 68 72 65 73 68  { channel thresh
3580: 6f 6c 64 20 7d 20 7b 0d 0a 20 20 20 20 74 70 75  old } {..    tpu
3590: 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "---
35a0: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 70  - checking for p
35b0: 72 65 63 69 73 69 6f 6e 20 74 69 6d 69 6e 67 2e  recision timing.
35c0: 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20  .. "....    #.. 
35d0: 20 20 20 23 20 4e 4f 54 45 3a 20 41 72 65 20 77     # NOTE: Are w
35e0: 65 20 61 6c 6c 6f 77 65 64 20 74 6f 20 64 6f 20  e allowed to do 
35f0: 70 72 65 63 69 73 69 6f 6e 20 74 69 6d 69 6e 67  precision timing
3600: 20 74 65 73 74 73 3f 0d 0a 20 20 20 20 23 0d 0a   tests?..    #..
3610: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
3620: 78 69 73 74 73 20 3a 3a 6e 6f 28 74 69 6d 69 6e  xists ::no(timin
3630: 67 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  g)]} then {..   
3640: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
3650: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 62  TE: Attempt to b
3660: 6c 6f 63 6b 20 66 6f 72 20 65 78 61 63 74 6c 79  lock for exactly
3670: 20 6f 6e 65 20 73 65 63 6f 6e 64 2e 0d 0a 20 20   one second...  
3680: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
3690: 20 73 74 61 72 74 20 5b 65 78 70 72 20 7b 5b 63   start [expr {[c
36a0: 6c 6f 63 6b 20 63 6c 69 63 6b 73 20 2d 6d 69 6c  lock clicks -mil
36b0: 6c 69 73 65 63 6f 6e 64 73 5d 20 26 20 30 78 37  liseconds] & 0x7
36c0: 66 66 66 66 66 66 66 7d 5d 0d 0a 20 20 20 20 20  fffffff}]..     
36d0: 20 61 66 74 65 72 20 31 30 30 30 3b 20 23 20 77   after 1000; # w
36e0: 61 69 74 20 66 6f 72 20 22 65 78 61 63 74 6c 79  ait for "exactly
36f0: 22 20 6f 6e 65 20 73 65 63 6f 6e 64 2e 0d 0a 20  " one second... 
3700: 20 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b 65       set stop [e
3710: 78 70 72 20 7b 5b 63 6c 6f 63 6b 20 63 6c 69 63  xpr {[clock clic
3720: 6b 73 20 2d 6d 69 6c 6c 69 73 65 63 6f 6e 64 73  ks -milliseconds
3730: 5d 20 26 20 30 78 37 66 66 66 66 66 66 66 7d 5d  ] & 0x7fffffff}]
3740: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..   
3750: 20 20 20 23 20 4e 4f 54 45 3a 20 43 61 6c 63 75     # NOTE: Calcu
3760: 6c 61 74 65 20 74 68 65 20 64 69 66 66 65 72 65  late the differe
3770: 6e 63 65 20 62 65 74 77 65 65 6e 20 74 68 65 20  nce between the 
3780: 61 63 74 75 61 6c 20 61 6e 64 20 65 78 70 65 63  actual and expec
3790: 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ted..      #    
37a0: 20 20 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 6c     number of mil
37b0: 6c 69 73 65 63 6f 6e 64 73 2e 0d 0a 20 20 20 20  liseconds...    
37c0: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64    #..      set d
37d0: 69 66 66 65 72 65 6e 63 65 20 5b 65 78 70 72 20  ifference [expr 
37e0: 7b 61 62 73 28 24 73 74 6f 70 20 2d 20 24 73 74  {abs($stop - $st
37f0: 61 72 74 20 2d 20 31 30 30 30 29 7d 5d 0d 0a 0d  art - 1000)}]...
3800: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..      
3810: 23 20 4e 4f 54 45 3a 20 41 72 65 20 77 65 20 77  # NOTE: Are we w
3820: 69 74 68 69 6e 20 74 68 65 20 74 68 72 65 73 68  ithin the thresh
3830: 6f 6c 64 20 73 70 65 63 69 66 69 65 64 20 62 79  old specified by
3840: 20 74 68 65 20 63 61 6c 6c 65 72 3f 0d 0a 20 20   the caller?..  
3850: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if 
3860: 7b 24 64 69 66 66 65 72 65 6e 63 65 20 3e 3d 20  {$difference >= 
3870: 30 20 26 26 20 24 64 69 66 66 65 72 65 6e 63 65  0 && $difference
3880: 20 3c 3d 20 24 74 68 72 65 73 68 6f 6c 64 7d 20   <= $threshold} 
3890: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
38a0: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 74 69  addConstraint ti
38b0: 6d 69 6e 67 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ming....        
38c0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [
38d0: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20  appendArgs "yes 
38e0: 28 30 20 3c 3d 20 22 20 24 64 69 66 66 65 72 65  (0 <= " $differe
38f0: 6e 63 65 20 22 20 3c 3d 20 22 20 5c 0d 0a 20 20  nce " <= " \..  
3900: 20 20 20 20 20 20 20 20 20 20 24 74 68 72 65 73            $thres
3910: 68 6f 6c 64 20 22 20 6d 69 6c 6c 69 73 65 63 6f  hold " milliseco
3920: 6e 64 73 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  nds)\n"]..      
3930: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..      
3940: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel
3950: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6e 6f   [appendArgs "no
3960: 20 28 30 20 3c 3d 20 22 20 24 64 69 66 66 65 72   (0 <= " $differ
3970: 65 6e 63 65 20 22 20 3e 20 22 20 5c 0d 0a 20 20  ence " > " \..  
3980: 20 20 20 20 20 20 20 20 20 20 24 74 68 72 65 73            $thres
3990: 68 6f 6c 64 20 22 20 6d 69 6c 6c 69 73 65 63 6f  hold " milliseco
39a0: 6e 64 73 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  nds)\n"]..      
39b0: 7d 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  }..    } else {.
39c0: 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68  .      tputs $ch
39d0: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20  annel no\n..    
39e0: 7d 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 70 72 6f  }..  }.....  pro
39f0: 63 20 63 68 65 63 6b 46 6f 72 50 65 72 66 6f 72  c checkForPerfor
3a00: 6d 61 6e 63 65 20 7b 20 63 68 61 6e 6e 65 6c 20  mance { channel 
3a10: 7d 20 7b 0d 0a 20 20 20 20 74 70 75 74 73 20 24  } {..    tputs $
3a20: 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68  channel "---- ch
3a30: 65 63 6b 69 6e 67 20 66 6f 72 20 70 65 72 66 6f  ecking for perfo
3a40: 72 6d 61 6e 63 65 20 74 65 73 74 69 6e 67 2e 2e  rmance testing..
3a50: 2e 20 22 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20 20  . "....    #..  
3a60: 20 20 23 20 4e 4f 54 45 3a 20 41 72 65 20 77 65    # NOTE: Are we
3a70: 20 61 6c 6c 6f 77 65 64 20 74 6f 20 64 6f 20 70   allowed to do p
3a80: 65 72 66 6f 72 6d 61 6e 63 65 20 74 65 73 74 69  erformance testi
3a90: 6e 67 3f 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  ng?..    #..    
3aa0: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
3ab0: 73 20 3a 3a 6e 6f 28 70 65 72 66 6f 72 6d 61 6e  s ::no(performan
3ac0: 63 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ce)]} then {..  
3ad0: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
3ae0: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 0d 0a 0d  t performance...
3af0: 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68  .      tputs $ch
3b00: 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20  annel yes\n..   
3b10: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
3b20: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 
3b30: 6e 6f 5c 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d  no\n..    }..  }
3b40: 0d 0a 0c 0d 0a 20 20 70 72 6f 63 20 63 68 65 63  .....  proc chec
3b50: 6b 46 6f 72 49 6e 74 65 72 61 63 74 69 76 65 20  kForInteractive 
3b60: 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20  { channel } {.. 
3b70: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe
3b80: 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67  l "---- checking
3b90: 20 66 6f 72 20 69 6e 74 65 72 61 63 74 69 76 65   for interactive
3ba0: 20 75 73 65 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20   user... "....  
3bb0: 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a    #..    # NOTE:
3bc0: 20 49 73 20 74 68 65 72 65 20 61 6e 20 69 6e 74   Is there an int
3bd0: 65 72 61 63 74 69 76 65 20 75 73 65 72 3f 0d 0a  eractive user?..
3be0: 20 20 20 20 23 0d 0a 20 20 20 20 69 66 20 7b 5b      #..    if {[
3bf0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63  info exists ::tc
3c00: 6c 5f 69 6e 74 65 72 61 63 74 69 76 65 5d 20 26  l_interactive] &
3c10: 26 20 24 3a 3a 74 63 6c 5f 69 6e 74 65 72 61 63  & $::tcl_interac
3c20: 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  tive} then {..  
3c30: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
3c40: 74 20 69 6e 74 65 72 61 63 74 69 76 65 0d 0a 0d  t interactive...
3c50: 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68  .      tputs $ch
3c60: 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20  annel yes\n..   
3c70: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
3c80: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 
3c90: 6e 6f 5c 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d  no\n..    }..  }
3ca0: 0d 0a 0c 0d 0a 20 20 70 72 6f 63 20 63 68 65 63  .....  proc chec
3cb0: 6b 46 6f 72 55 73 65 72 49 6e 74 65 72 61 63 74  kForUserInteract
3cc0: 69 6f 6e 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20  ion { channel } 
3cd0: 7b 0d 0a 20 20 20 20 74 70 75 74 73 20 24 63 68  {..    tputs $ch
3ce0: 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63  annel "---- chec
3cf0: 6b 69 6e 67 20 66 6f 72 20 75 73 65 72 20 69 6e  king for user in
3d00: 74 65 72 61 63 74 69 6f 6e 2e 2e 2e 20 22 0d 0a  teraction... "..
3d10: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 48  ..    #..    # H
3d20: 41 43 4b 3a 20 46 6f 72 20 6e 6f 77 2c 20 64 6f  ACK: For now, do
3d30: 20 74 68 65 20 65 78 61 63 74 20 73 61 6d 65 20   the exact same 
3d40: 63 68 65 63 6b 20 61 73 20 63 68 65 63 6b 46 6f  check as checkFo
3d50: 72 49 6e 74 65 72 61 63 74 69 76 65 3b 20 68 6f  rInteractive; ho
3d60: 77 65 76 65 72 2c 0d 0a 20 20 20 20 23 20 20 20  wever,..    #   
3d70: 20 20 20 20 74 68 69 73 20 69 73 20 73 74 69 6c      this is stil
3d80: 6c 20 75 73 65 66 75 6c 20 61 73 20 61 20 73 65  l useful as a se
3d90: 70 61 72 61 74 65 20 63 6f 6e 73 74 72 61 69 6e  parate constrain
3da0: 74 20 62 65 63 61 75 73 65 20 69 74 20 63 61 6e  t because it can
3db0: 20 62 65 0d 0a 20 20 20 20 23 20 20 20 20 20 20   be..    #      
3dc0: 20 69 6e 64 69 76 69 64 75 61 6c 6c 79 20 64 69   individually di
3dd0: 73 61 62 6c 65 64 20 69 6e 20 22 70 72 6f 6c 6f  sabled in "prolo
3de0: 67 75 65 2e 65 61 67 6c 65 22 2e 0d 0a 20 20 20  gue.eagle"...   
3df0: 20 23 0d 0a 20 20 20 20 69 66 20 7b 5b 69 6e 66   #..    if {[inf
3e00: 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 69  o exists ::tcl_i
3e10: 6e 74 65 72 61 63 74 69 76 65 5d 20 26 26 20 24  nteractive] && $
3e20: 3a 3a 74 63 6c 5f 69 6e 74 65 72 61 63 74 69 76  ::tcl_interactiv
3e30: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..     
3e40: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 75   addConstraint u
3e50: 73 65 72 49 6e 74 65 72 61 63 74 69 6f 6e 0d 0a  serInteraction..
3e60: 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63  ..      tputs $c
3e70: 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20  hannel yes\n..  
3e80: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..    
3e90: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel
3ea0: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20   no\n..    }..  
3eb0: 7d 0d 0a 0c 0d 0a 20 20 70 72 6f 63 20 63 68 65  }.....  proc che
3ec0: 63 6b 46 6f 72 4e 65 74 77 6f 72 6b 20 7b 20 63  ckForNetwork { c
3ed0: 68 61 6e 6e 65 6c 20 68 6f 73 74 20 74 69 6d 65  hannel host time
3ee0: 6f 75 74 20 7d 20 7b 0d 0a 20 20 20 20 74 70 75  out } {..    tpu
3ef0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app
3f00: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
3f10: 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e     "---- checkin
3f20: 67 20 66 6f 72 20 6e 65 74 77 6f 72 6b 20 63 6f  g for network co
3f30: 6e 6e 65 63 74 69 76 69 74 79 20 74 6f 20 68 6f  nnectivity to ho
3f40: 73 74 20 5c 22 22 20 24 68 6f 73 74 20 22 5c 22  st \"" $host "\"
3f50: 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 69 66  ... "]....    if
3f60: 20 7b 5b 69 73 45 61 67 6c 65 5d 7d 20 74 68 65   {[isEagle]} the
3f70: 6e 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  n {..      #..  
3f80: 20 20 20 20 23 20 42 55 47 42 55 47 3a 20 54 63      # BUGBUG: Tc
3f90: 6c 20 38 2e 34 20 64 6f 65 73 20 6e 6f 74 20 6c  l 8.4 does not l
3fa0: 69 6b 65 20 74 68 69 73 20 65 78 70 72 65 73 73  ike this express
3fb0: 69 6f 6e 20 28 61 6e 64 20 54 63 6c 20 74 72 69  ion (and Tcl tri
3fc0: 65 73 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20  es to..      #  
3fd0: 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 20 69         compile i
3fe0: 74 20 65 76 65 6e 20 74 68 6f 75 67 68 20 69 74  t even though it
3ff0: 20 77 69 6c 6c 20 6f 6e 6c 79 20 61 63 74 75 61   will only actua
4000: 6c 6c 79 20 65 76 65 72 20 62 65 0d 0a 20 20 20  lly ever be..   
4010: 20 20 20 23 20 20 20 20 20 20 20 20 20 65 76 61     #         eva
4020: 6c 75 61 74 65 64 20 69 6e 20 45 61 67 6c 65 29  luated in Eagle)
4030: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..    
4040: 20 20 73 65 74 20 65 78 70 72 20 7b 5b 6c 6c 65    set expr {[lle
4050: 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61  ngth [info comma
4060: 6e 64 73 20 75 72 69 5d 5d 20 3e 20 30 20 26 26  nds uri]] > 0 &&
4070: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 63   \..          [c
4080: 61 74 63 68 20 7b 75 72 69 20 70 69 6e 67 20 24  atch {uri ping $
4090: 68 6f 73 74 20 24 74 69 6d 65 6f 75 74 7d 20 72  host $timeout} r
40a0: 65 73 70 6f 6e 73 65 5d 20 3d 3d 20 30 20 26 26  esponse] == 0 &&
40b0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c   \..          [l
40c0: 69 6e 64 65 78 20 24 72 65 73 70 6f 6e 73 65 20  index $response 
40d0: 30 5d 20 69 6e 20 5b 6c 69 73 74 20 53 75 63 63  0] in [list Succ
40e0: 65 73 73 20 54 69 6d 65 64 4f 75 74 5d 20 26 26  ess TimedOut] &&
40f0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
4100: 74 72 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72  tring is integer
4110: 20 2d 73 74 72 69 63 74 20 5b 6c 69 6e 64 65 78   -strict [lindex
4120: 20 24 72 65 73 70 6f 6e 73 65 20 31 5d 5d 20 26   $response 1]] &
4130: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
4140: 6c 69 6e 64 65 78 20 24 72 65 73 70 6f 6e 73 65  lindex $response
4150: 20 31 5d 20 3c 3d 20 24 74 69 6d 65 6f 75 74 7d   1] <= $timeout}
4160: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..   
4170: 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20     # NOTE: Does 
4180: 69 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 77 65 20  it look like we 
4190: 61 72 65 20 61 62 6c 65 20 74 6f 20 63 6f 6e 74  are able to cont
41a0: 61 63 74 20 74 68 65 20 6e 65 74 77 6f 72 6b 20  act the network 
41b0: 68 6f 73 74 3f 0d 0a 20 20 20 20 20 20 23 0d 0a  host?..      #..
41c0: 20 20 20 20 20 20 69 66 20 7b 5b 65 78 70 72 20        if {[expr 
41d0: 24 65 78 70 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a  $expr]} then {..
41e0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..     
41f0: 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20     # NOTE: Yes, 
4200: 69 74 20 61 70 70 65 61 72 73 20 74 68 61 74 20  it appears that 
4210: 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  it is available.
4220: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..   
4230: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
4240: 6e 74 20 6e 65 74 77 6f 72 6b 5f 24 68 6f 73 74  nt network_$host
4250: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74  ....        tput
4260: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe
4270: 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24  ndArgs "yes (" $
4280: 72 65 73 70 6f 6e 73 65 20 22 29 5c 6e 22 5d 0d  response ")\n"].
4290: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
42a0: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $
42b0: 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20  channel no\n..  
42c0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 20 65 6c 73      }..    } els
42d0: 65 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  e {..      #..  
42e0: 20 20 20 20 23 20 48 41 43 4b 3a 20 52 75 6e 6e      # HACK: Runn
42f0: 69 6e 67 20 69 6e 20 54 63 6c 2c 20 6a 75 73 74  ing in Tcl, just
4300: 20 61 73 73 75 6d 65 20 77 65 20 68 61 76 65 20   assume we have 
4310: 6e 65 74 77 6f 72 6b 20 61 63 63 65 73 73 2e 0d  network access..
4320: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..      
4330: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 6e 65  addConstraint ne
4340: 74 77 6f 72 6b 5f 24 68 6f 73 74 0d 0a 0d 0a 20  twork_$host.... 
4350: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan
4360: 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 7d  nel yes\n..    }
4370: 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 69 66 20 7b  ..  }.....  if {
4380: 5b 69 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20  [isEagle]} then 
4390: 7b 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  {..    #########
43a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
43b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
43c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
43d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
43e0: 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23  ##..    ########
43f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4400: 23 23 23 23 20 42 45 47 49 4e 20 45 61 67 6c 65  #### BEGIN Eagle
4410: 20 4f 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23   ONLY ##########
4420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4430: 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23  ###..    #######
4440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4480: 23 23 23 23 0d 0a 0d 0a 20 20 20 20 70 72 6f 63  ####....    proc
4490: 20 63 68 65 63 6b 46 6f 72 53 6f 66 74 77 61 72   checkForSoftwar
44a0: 65 55 70 64 61 74 65 54 72 75 73 74 20 7b 20 63  eUpdateTrust { c
44b0: 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20  hannel } {..    
44c0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel
44d0: 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking 
44e0: 66 6f 72 20 73 6f 66 74 77 61 72 65 20 75 70 64  for software upd
44f0: 61 74 65 20 74 72 75 73 74 2e 2e 2e 20 22 0d 0a  ate trust... "..
4500: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65  ..      if {[lle
4510: 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61  ngth [info comma
4520: 6e 64 73 20 75 72 69 5d 5d 20 3e 20 30 20 26 26  nds uri]] > 0 &&
4530: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 63   \..          [c
4540: 61 74 63 68 20 7b 75 72 69 20 73 6f 66 74 77 61  atch {uri softwa
4550: 72 65 75 70 64 61 74 65 73 7d 20 72 65 73 75 6c  reupdates} resul
4560: 74 5d 20 3d 3d 20 30 20 26 26 20 5c 0d 0a 20 20  t] == 0 && \..  
4570: 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20          $result 
4580: 65 71 20 22 73 6f 66 74 77 61 72 65 20 75 70 64  eq "software upd
4590: 61 74 65 20 63 65 72 74 69 66 69 63 61 74 65 20  ate certificate 
45a0: 69 73 20 74 72 75 73 74 65 64 22 7d 20 74 68 65  is trusted"} the
45b0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
45c0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE: 
45d0: 59 65 73 2c 20 69 74 20 61 70 70 65 61 72 73 20  Yes, it appears 
45e0: 74 68 61 74 20 77 65 20 74 72 75 73 74 20 6f 75  that we trust ou
45f0: 72 20 73 6f 66 74 77 61 72 65 20 75 70 64 61 74  r software updat
4600: 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20  es...        #  
4610: 20 20 20 20 20 53 69 6e 63 65 20 74 68 69 73 20       Since this 
4620: 73 65 74 74 69 6e 67 20 69 73 20 6f 66 66 20 62  setting is off b
4630: 79 20 64 65 66 61 75 6c 74 2c 20 74 68 65 20 75  y default, the u
4640: 73 65 72 20 28 6f 72 0d 0a 20 20 20 20 20 20 20  ser (or..       
4650: 20 23 20 20 20 20 20 20 20 61 20 73 63 72 69 70   #       a scrip
4660: 74 20 65 76 61 6c 75 61 74 65 64 20 62 79 20 74  t evaluated by t
4670: 68 65 20 75 73 65 72 29 20 6d 75 73 74 20 68 61  he user) must ha
4680: 76 65 20 6d 61 6e 75 61 6c 6c 79 0d 0a 20 20 20  ve manually..   
4690: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 75 72       #       tur
46a0: 6e 65 64 20 69 74 20 6f 6e 2e 0d 0a 20 20 20 20  ned it on...    
46b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61      #..        a
46c0: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 73 6f 66  ddConstraint sof
46d0: 74 77 61 72 65 55 70 64 61 74 65 0d 0a 0d 0a 20  twareUpdate.... 
46e0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch
46f0: 61 6e 6e 65 6c 20 22 74 72 75 73 74 65 64 5c 6e  annel "trusted\n
4700: 22 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  "..      } else 
4710: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
4720: 20 24 63 68 61 6e 6e 65 6c 20 22 75 6e 74 72 75   $channel "untru
4730: 73 74 65 64 5c 6e 22 0d 0a 20 20 20 20 20 20 7d  sted\n"..      }
4740: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....    
4750: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 41 64 6d  proc checkForAdm
4760: 69 6e 69 73 74 72 61 74 6f 72 20 7b 20 63 68 61  inistrator { cha
4770: 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20  nnel } {..      
4780: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22  tputs $channel "
4790: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
47a0: 72 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 2e  r administrator.
47b0: 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66  .. "....      if
47c0: 20 7b 5b 69 73 41 64 6d 69 6e 69 73 74 72 61 74   {[isAdministrat
47d0: 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..   
47e0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
47f0: 6e 74 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72  nt administrator
4800: 3b 20 23 20 72 75 6e 6e 69 6e 67 20 61 73 20 66  ; # running as f
4810: 75 6c 6c 20 61 64 6d 69 6e 2e 0d 0a 0d 0a 20 20  ull admin.....  
4820: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha
4830: 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20  nnel yes\n..    
4840: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..    
4850: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann
4860: 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d  el no\n..      }
4870: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....    
4880: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 48 6f 73  proc checkForHos
4890: 74 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d  t { channel } {.
48a0: 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68  .      tputs $ch
48b0: 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63  annel "---- chec
48c0: 6b 69 6e 67 20 66 6f 72 20 68 6f 73 74 2e 2e 2e  king for host...
48d0: 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   "....      if {
48e0: 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68  [set code [catch
48f0: 20 7b 68 6f 73 74 20 69 73 6f 70 65 6e 7d 20 72   {host isopen} r
4900: 65 73 75 6c 74 5d 5d 20 3d 3d 20 30 20 26 26 20  esult]] == 0 && 
4910: 24 72 65 73 75 6c 74 7d 20 74 68 65 6e 20 7b 0d  $result} then {.
4920: 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73  .        addCons
4930: 74 72 61 69 6e 74 20 68 6f 73 74 49 73 4f 70 65  traint hostIsOpe
4940: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  n....        tpu
4950: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6f 70 65 6e  ts $channel open
4960: 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  \n..      } else
4970: 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 30 7d 20  if {$code == 0} 
4980: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
4990: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 63  tputs $channel c
49a0: 6c 6f 73 65 64 5c 6e 0d 0a 20 20 20 20 20 20 7d  losed\n..      }
49b0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..       
49c0: 20 74 6c 6f 67 20 24 72 65 73 75 6c 74 3b 20 74   tlog $result; t
49d0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 72  puts $channel er
49e0: 72 6f 72 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d  ror\n]..      }.
49f0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
4a00: 72 6f 63 20 63 68 65 63 6b 46 6f 72 50 72 69 6d  roc checkForPrim
4a10: 61 72 79 54 68 72 65 61 64 20 7b 20 63 68 61 6e  aryThread { chan
4a20: 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74  nel } {..      t
4a30: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d  puts $channel "-
4a40: 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
4a50: 20 70 72 69 6d 61 72 79 20 74 68 72 65 61 64 2e   primary thread.
4a60: 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 73 65  .. "....      se
4a70: 74 20 74 68 72 65 61 64 49 64 20 5b 6f 62 6a 65  t threadId [obje
4a80: 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70  ct invoke Interp
4a90: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20  reter.GetActive 
4aa0: 54 68 72 65 61 64 49 64 5d 0d 0a 0d 0a 20 20 20  ThreadId]....   
4ab0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 74 69 64     if {[info tid
4ac0: 5d 20 3d 3d 20 24 74 68 72 65 61 64 49 64 7d 20  ] == $threadId} 
4ad0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
4ae0: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 70 72  addConstraint pr
4af0: 69 6d 61 72 79 54 68 72 65 61 64 0d 0a 0d 0a 20  imaryThread.... 
4b00: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch
4b10: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
4b20: 73 20 22 79 65 73 20 28 22 20 24 74 68 72 65 61  s "yes (" $threa
4b30: 64 49 64 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20  dId ")\n"]..    
4b40: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..    
4b50: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann
4b60: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
4b70: 6e 6f 20 28 22 20 24 74 68 72 65 61 64 49 64 20  no (" $threadId 
4b80: 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 0d  ")\n"]..      }.
4b90: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
4ba0: 72 6f 63 20 63 68 65 63 6b 46 6f 72 52 75 6e 74  roc checkForRunt
4bb0: 69 6d 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20  ime { channel } 
4bc0: 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24  {..      tputs $
4bd0: 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68  channel "---- ch
4be0: 65 63 6b 69 6e 67 20 66 6f 72 20 72 75 6e 74 69  ecking for runti
4bf0: 6d 65 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  me... "....     
4c00: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
4c10: 3a 20 41 72 65 20 77 65 20 72 75 6e 6e 69 6e 67  : Are we running
4c20: 20 69 6e 73 69 64 65 20 4d 6f 6e 6f 20 28 72 65   inside Mono (re
4c30: 67 61 72 64 6c 65 73 73 20 6f 66 20 6f 70 65 72  gardless of oper
4c40: 61 74 69 6e 67 20 73 79 73 74 65 6d 29 3f 0d 0a  ating system)?..
4c50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
4c60: 66 20 7b 5b 69 73 4d 6f 6e 6f 5d 7d 20 74 68 65  f {[isMono]} the
4c70: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
4c80: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE: 
4c90: 59 65 73 2c 20 69 74 20 61 70 70 65 61 72 73 20  Yes, it appears 
4ca0: 74 68 61 74 20 77 65 20 61 72 65 20 72 75 6e 6e  that we are runn
4cb0: 69 6e 67 20 69 6e 73 69 64 65 20 4d 6f 6e 6f 2e  ing inside Mono.
4cc0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..   
4cd0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
4ce0: 6e 74 20 6d 6f 6e 6f 3b 20 23 20 72 75 6e 6e 69  nt mono; # runni
4cf0: 6e 67 20 6f 6e 20 4d 6f 6e 6f 2e 0d 0a 0d 0a 20  ng on Mono..... 
4d00: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch
4d10: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
4d20: 73 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65  s [expr {[info e
4d30: 78 69 73 74 73 20 5c 0d 0a 20 20 20 20 20 20 20  xists \..       
4d40: 20 20 20 20 20 3a 3a 65 61 67 6c 65 5f 70 6c 61       ::eagle_pla
4d50: 74 66 6f 72 6d 28 72 75 6e 74 69 6d 65 29 5d 20  tform(runtime)] 
4d60: 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ? \..           
4d70: 20 24 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f   $::eagle_platfo
4d80: 72 6d 28 72 75 6e 74 69 6d 65 29 20 3a 20 22 4d  rm(runtime) : "M
4d90: 6f 6e 6f 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20  ono"}] \n]..    
4da0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..    
4db0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
4dc0: 20 4e 4f 54 45 3a 20 4e 6f 2c 20 69 74 20 61 70   NOTE: No, it ap
4dd0: 70 65 61 72 73 20 74 68 61 74 20 77 65 20 61 72  pears that we ar
4de0: 65 20 6e 6f 74 20 72 75 6e 6e 69 6e 67 20 69 6e  e not running in
4df0: 73 69 64 65 20 4d 6f 6e 6f 2e 0d 0a 20 20 20 20  side Mono...    
4e00: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61      #..        a
4e10: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 64 6f 74  ddConstraint dot
4e20: 4e 65 74 3b 20 23 20 72 75 6e 6e 69 6e 67 20 6f  Net; # running o
4e30: 6e 20 2e 4e 45 54 2e 0d 0a 0d 0a 20 20 20 20 20  n .NET.....     
4e40: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        # 
4e50: 4e 4f 54 45 3a 20 57 65 20 64 6f 20 6e 6f 74 20  NOTE: We do not 
4e60: 77 61 6e 74 20 74 6f 20 73 6b 69 70 20 4d 6f 6e  want to skip Mon
4e70: 6f 20 62 75 67 73 20 6f 6e 20 2e 4e 45 54 2e 0d  o bugs on .NET..
4e80: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..    
4e90: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
4ea0: 74 20 6d 6f 6e 6f 54 6f 44 6f 3b 20 23 20 72 75  t monoToDo; # ru
4eb0: 6e 6e 69 6e 67 20 6f 6e 20 2e 4e 45 54 2e 0d 0a  nning on .NET...
4ec0: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
4ed0: 72 61 69 6e 74 20 6d 6f 6e 6f 42 75 67 3b 20 23  raint monoBug; #
4ee0: 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 2e 4e 45 54   running on .NET
4ef0: 2e 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  ...        addCo
4f00: 6e 73 74 72 61 69 6e 74 20 6d 6f 6e 6f 43 72 61  nstraint monoCra
4f10: 73 68 3b 20 23 20 72 75 6e 6e 69 6e 67 20 6f 6e  sh; # running on
4f20: 20 2e 4e 45 54 2e 0d 0a 0d 0a 20 20 20 20 20 20   .NET.....      
4f30: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel
4f40: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 65 78   [appendArgs [ex
4f50: 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  pr {[info exists
4f60: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
4f70: 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d  ::eagle_platform
4f80: 28 72 75 6e 74 69 6d 65 29 5d 20 3f 20 5c 0d 0a  (runtime)] ? \..
4f90: 20 20 20 20 20 20 20 20 20 20 20 20 24 3a 3a 65              $::e
4fa0: 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d 28 72 75  agle_platform(ru
4fb0: 6e 74 69 6d 65 29 20 3a 20 22 4d 69 63 72 6f 73  ntime) : "Micros
4fc0: 6f 66 74 2e 4e 45 54 22 7d 5d 20 5c 6e 5d 0d 0a  oft.NET"}] \n]..
4fd0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
4fe0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63  ...    proc chec
4ff0: 6b 46 6f 72 49 6d 61 67 65 52 75 6e 74 69 6d 65  kForImageRuntime
5000: 56 65 72 73 69 6f 6e 20 7b 20 63 68 61 6e 6e 65  Version { channe
5010: 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75  l } {..      tpu
5020: 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "---
5030: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 69  - checking for i
5040: 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72  mage runtime ver
5050: 73 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  sion... "....   
5060: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
5070: 73 74 73 20 3a 3a 65 61 67 6c 65 5f 70 6c 61 74  sts ::eagle_plat
5080: 66 6f 72 6d 28 69 6d 61 67 65 52 75 6e 74 69 6d  form(imageRuntim
5090: 65 56 65 72 73 69 6f 6e 29 5d 20 26 26 20 5c 0d  eVersion)] && \.
50a0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
50b0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 61 67  ng length $::eag
50c0: 6c 65 5f 70 6c 61 74 66 6f 72 6d 28 69 6d 61 67  le_platform(imag
50d0: 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
50e0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {.. 
50f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..      
5100: 20 20 23 20 4e 4f 54 45 3a 20 47 65 74 20 74 68    # NOTE: Get th
5110: 65 20 6d 61 6a 6f 72 20 61 6e 64 20 6d 69 6e 6f  e major and mino
5120: 72 20 70 6f 72 74 69 6f 6e 73 20 6f 66 20 74 68  r portions of th
5130: 65 20 76 65 72 73 69 6f 6e 20 6f 6e 6c 79 2e 0d  e version only..
5140: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..    
5150: 20 20 20 20 73 65 74 20 64 6f 74 56 65 72 73 69      set dotVersi
5160: 6f 6e 20 5b 6a 6f 69 6e 20 5b 6c 72 61 6e 67 65  on [join [lrange
5170: 20 5b 73 70 6c 69 74 20 5c 0d 0a 20 20 20 20 20   [split \..     
5180: 20 20 20 20 20 20 20 24 3a 3a 65 61 67 6c 65 5f         $::eagle_
5190: 70 6c 61 74 66 6f 72 6d 28 69 6d 61 67 65 52 75  platform(imageRu
51a0: 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 20 2e 5d  ntimeVersion) .]
51b0: 20 30 20 31 5d 20 2e 5d 0d 0a 0d 0a 20 20 20 20   0 1] .]....    
51c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
51d0: 20 4e 4f 54 45 3a 20 4e 6f 77 20 63 72 65 61 74   NOTE: Now creat
51e0: 65 20 61 20 76 65 72 73 69 6f 6e 20 73 74 72 69  e a version stri
51f0: 6e 67 20 66 6f 72 20 75 73 65 20 69 6e 20 74 68  ng for use in th
5200: 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 6e 61 6d  e constraint nam
5210: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #    
5220: 20 20 20 28 72 65 6d 6f 76 65 20 74 68 65 20 70     (remove the p
5230: 65 72 69 6f 64 73 29 2e 0d 0a 20 20 20 20 20 20  eriods)...      
5240: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
5250: 20 76 65 72 73 69 6f 6e 20 5b 73 74 72 69 6e 67   version [string
5260: 20 6d 61 70 20 5b 6c 69 73 74 20 76 20 22 22 20   map [list v "" 
5270: 2e 20 22 22 5d 20 24 64 6f 74 56 65 72 73 69 6f  . ""] $dotVersio
5280: 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
5290: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
52a0: 20 4b 65 65 70 20 74 72 61 63 6b 20 6f 66 20 74   Keep track of t
52b0: 68 65 20 73 70 65 63 69 66 69 63 20 69 6d 61 67  he specific imag
52c0: 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f  e runtime versio
52d0: 6e 20 66 6f 72 20 75 73 61 67 65 20 69 6e 0d 0a  n for usage in..
52e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #       
52f0: 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  test constraints
5300: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..  
5310: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
5320: 69 6e 74 20 69 6d 61 67 65 52 75 6e 74 69 6d 65  int imageRuntime
5330: 24 76 65 72 73 69 6f 6e 0d 0a 0d 0a 20 20 20 20  $version....    
5340: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann
5350: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $
5360: 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d  ::eagle_platform
5370: 28 69 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  (imageRuntimeVer
5380: 73 69 6f 6e 29 20 5c 0d 0a 20 20 20 20 20 20 20  sion) \..       
5390: 20 20 20 20 20 22 20 22 20 28 20 24 64 6f 74 56       " " ( $dotV
53a0: 65 72 73 69 6f 6e 20 29 20 5c 6e 5d 0d 0a 20 20  ersion ) \n]..  
53b0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..  
53c0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha
53d0: 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20  nnel no\n..     
53e0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....  
53f0: 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 52    proc checkForR
5400: 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 7b 20  untimeVersion { 
5410: 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20  channel } {..   
5420: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe
5430: 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67  l "---- checking
5440: 20 66 6f 72 20 72 75 6e 74 69 6d 65 20 76 65 72   for runtime ver
5450: 73 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  sion... "....   
5460: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
5470: 73 74 73 20 3a 3a 65 61 67 6c 65 5f 70 6c 61 74  sts ::eagle_plat
5480: 66 6f 72 6d 28 72 75 6e 74 69 6d 65 56 65 72 73  form(runtimeVers
5490: 69 6f 6e 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  ion)] && \..    
54a0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
54b0: 6e 67 74 68 20 24 3a 3a 65 61 67 6c 65 5f 70 6c  ngth $::eagle_pl
54c0: 61 74 66 6f 72 6d 28 72 75 6e 74 69 6d 65 56 65  atform(runtimeVe
54d0: 72 73 69 6f 6e 29 5d 20 3e 20 30 7d 20 74 68 65  rsion)] > 0} the
54e0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
54f0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE: 
5500: 47 65 74 20 74 68 65 20 6d 61 6a 6f 72 20 61 6e  Get the major an
5510: 64 20 6d 69 6e 6f 72 20 70 6f 72 74 69 6f 6e 73  d minor portions
5520: 20 6f 66 20 74 68 65 20 76 65 72 73 69 6f 6e 20   of the version 
5530: 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23  only...        #
5540: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 6f  ..        set do
5550: 74 56 65 72 73 69 6f 6e 20 5b 6a 6f 69 6e 20 5b  tVersion [join [
5560: 6c 72 61 6e 67 65 20 5b 73 70 6c 69 74 20 5c 0d  lrange [split \.
5570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 3a 3a  .            $::
5580: 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d 28 72  eagle_platform(r
5590: 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 20 2e  untimeVersion) .
55a0: 5d 20 30 20 31 5d 20 2e 5d 0d 0a 0d 0a 20 20 20  ] 0 1] .]....   
55b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
55c0: 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 63 72 65 61  # NOTE: Now crea
55d0: 74 65 20 61 20 76 65 72 73 69 6f 6e 20 73 74 72  te a version str
55e0: 69 6e 67 20 66 6f 72 20 75 73 65 20 69 6e 20 74  ing for use in t
55f0: 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 6e 61  he constraint na
5600: 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  me..        #   
5610: 20 20 20 20 28 72 65 6d 6f 76 65 20 74 68 65 20      (remove the 
5620: 70 65 72 69 6f 64 73 29 2e 0d 0a 20 20 20 20 20  periods)...     
5630: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
5640: 74 20 76 65 72 73 69 6f 6e 20 5b 73 74 72 69 6e  t version [strin
5650: 67 20 6d 61 70 20 5b 6c 69 73 74 20 2e 20 22 22  g map [list . ""
5660: 5d 20 24 64 6f 74 56 65 72 73 69 6f 6e 5d 0d 0a  ] $dotVersion]..
5670: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69  ..        if {[i
5680: 73 4d 6f 6e 6f 5d 7d 20 74 68 65 6e 20 7b 0d 0a  sMono]} then {..
5690: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
56a0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65  tring length $ve
56b0: 72 73 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e  rsion] > 0} then
56c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
56d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..           
56e0: 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 61 72     # NOTE: We ar
56f0: 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 4d 6f 6e  e running on Mon
5700: 6f 2e 20 20 4b 65 65 70 20 74 72 61 63 6b 20 6f  o.  Keep track o
5710: 66 20 74 68 65 20 73 70 65 63 69 66 69 63 0d 0a  f the specific..
5720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                # 
5730: 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 66 6f        version fo
5740: 72 20 75 73 61 67 65 20 69 6e 20 74 65 73 74 20  r usage in test 
5750: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20  constraints...  
5760: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #.. 
5770: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
5780: 43 6f 6e 73 74 72 61 69 6e 74 20 6d 6f 6e 6f 24  Constraint mono$
5790: 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20  version..       
57a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
57b0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
57c0: 6e 67 74 68 20 24 64 6f 74 56 65 72 73 69 6f 6e  ngth $dotVersion
57d0: 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20  ] > 0 && \..    
57e0: 20 20 20 20 20 20 20 20 20 20 5b 72 65 67 65 78            [regex
57f0: 70 20 2d 2d 20 7b 5e 28 5c 64 2b 29 5c 2e 28 5c  p -- {^(\d+)\.(\
5800: 64 2b 29 24 7d 20 24 64 6f 74 56 65 72 73 69 6f  d+)$} $dotVersio
5810: 6e 20 64 75 6d 6d 79 20 5c 0d 0a 20 20 20 20 20  n dummy \..     
5820: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 6a               maj
5830: 6f 72 56 65 72 73 69 6f 6e 20 6d 69 6e 6f 72 56  orVersion minorV
5840: 65 72 73 69 6f 6e 5d 7d 20 74 68 65 6e 20 7b 0d  ersion]} then {.
5850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
5860: 20 6d 6f 6e 6f 56 65 72 73 69 6f 6e 73 20 5b 6c   monoVersions [l
5870: 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ist]....        
5880: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..         
5890: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
58a0: 20 66 6f 72 20 61 6e 79 20 4d 6f 6e 6f 20 76 65   for any Mono ve
58b0: 72 73 69 6f 6e 20 32 2e 78 20 6f 72 20 68 69 67  rsion 2.x or hig
58c0: 68 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  her...          
58d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..           
58e0: 20 69 66 20 7b 24 6d 61 6a 6f 72 56 65 72 73 69   if {$majorVersi
58f0: 6f 6e 20 3e 3d 20 32 7d 20 74 68 65 6e 20 7b 0d  on >= 2} then {.
5900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
5910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5920: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f  # NOTE: Check fo
5930: 72 20 61 6e 79 20 4d 6f 6e 6f 20 76 65 72 73 69  r any Mono versi
5940: 6f 6e 20 68 69 67 68 65 72 20 74 68 61 6e 20 32  on higher than 2
5950: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .0...           
5960: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..          
5970: 20 20 20 20 69 66 20 7b 24 6d 61 6a 6f 72 56 65      if {$majorVe
5980: 72 73 69 6f 6e 20 3e 20 32 20 7c 7c 20 24 6d 69  rsion > 2 || $mi
5990: 6e 6f 72 56 65 72 73 69 6f 6e 20 3e 20 30 7d 20  norVersion > 0} 
59a0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
59b0: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
59c0: 6d 6f 6e 6f 56 65 72 73 69 6f 6e 73 20 32 30 0d  monoVersions 20.
59d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
59e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
59f0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..           
5a00: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
5a10: 20 66 6f 72 20 61 6e 79 20 4d 6f 6e 6f 20 76 65   for any Mono ve
5a20: 72 73 69 6f 6e 20 68 69 67 68 65 72 20 74 68 61  rsion higher tha
5a30: 6e 20 32 2e 32 2e 0d 0a 20 20 20 20 20 20 20 20  n 2.2...        
5a40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..       
5a50: 20 20 20 20 20 20 20 69 66 20 7b 24 6d 61 6a 6f         if {$majo
5a60: 72 56 65 72 73 69 6f 6e 20 3e 20 32 20 7c 7c 20  rVersion > 2 || 
5a70: 24 6d 69 6e 6f 72 56 65 72 73 69 6f 6e 20 3e 20  $minorVersion > 
5a80: 32 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  2} then {..     
5a90: 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65             lappe
5aa0: 6e 64 20 6d 6f 6e 6f 56 65 72 73 69 6f 6e 73 20  nd monoVersions 
5ab0: 32 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  22..            
5ac0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5ad0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
5ae0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
5af0: 65 63 6b 20 66 6f 72 20 61 6e 79 20 4d 6f 6e 6f  eck for any Mono
5b00: 20 76 65 72 73 69 6f 6e 20 68 69 67 68 65 72 20   version higher 
5b10: 74 68 61 6e 20 32 2e 34 2e 0d 0a 20 20 20 20 20  than 2.4...     
5b20: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..    
5b30: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 6d            if {$m
5b40: 61 6a 6f 72 56 65 72 73 69 6f 6e 20 3e 20 32 20  ajorVersion > 2 
5b50: 7c 7c 20 24 6d 69 6e 6f 72 56 65 72 73 69 6f 6e  || $minorVersion
5b60: 20 3e 20 34 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 4} then {..  
5b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 61                la
5b80: 70 70 65 6e 64 20 6d 6f 6e 6f 56 65 72 73 69 6f  ppend monoVersio
5b90: 6e 73 20 32 34 0d 0a 20 20 20 20 20 20 20 20 20  ns 24..         
5ba0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5bb0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..     
5bc0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
5bd0: 20 43 68 65 63 6b 20 66 6f 72 20 61 6e 79 20 4d   Check for any M
5be0: 6f 6e 6f 20 76 65 72 73 69 6f 6e 20 68 69 67 68  ono version high
5bf0: 65 72 20 74 68 61 6e 20 32 2e 36 2e 0d 0a 20 20  er than 2.6...  
5c00: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #.. 
5c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
5c20: 7b 24 6d 61 6a 6f 72 56 65 72 73 69 6f 6e 20 3e  {$majorVersion >
5c30: 20 32 20 7c 7c 20 24 6d 69 6e 6f 72 56 65 72 73   2 || $minorVers
5c40: 69 6f 6e 20 3e 20 36 7d 20 74 68 65 6e 20 7b 0d  ion > 6} then {.
5c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5c60: 20 6c 61 70 70 65 6e 64 20 6d 6f 6e 6f 56 65 72   lappend monoVer
5c70: 73 69 6f 6e 73 20 32 36 0d 0a 20 20 20 20 20 20  sions 26..      
5c80: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5c90: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..  
5ca0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
5cb0: 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 61 6e  TE: Check for an
5cc0: 79 20 4d 6f 6e 6f 20 76 65 72 73 69 6f 6e 20 68  y Mono version h
5cd0: 69 67 68 65 72 20 74 68 61 6e 20 32 2e 38 2e 0d  igher than 2.8..
5ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
5cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5d00: 69 66 20 7b 24 6d 61 6a 6f 72 56 65 72 73 69 6f  if {$majorVersio
5d10: 6e 20 3e 20 32 20 7c 7c 20 24 6d 69 6e 6f 72 56  n > 2 || $minorV
5d20: 65 72 73 69 6f 6e 20 3e 20 38 7d 20 74 68 65 6e  ersion > 8} then
5d30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5d40: 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 6f 6e 6f      lappend mono
5d50: 56 65 72 73 69 6f 6e 73 20 32 38 0d 0a 20 20 20  Versions 28..   
5d60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
5d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
5d90: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72   NOTE: Check for
5da0: 20 61 6e 79 20 4d 6f 6e 6f 20 76 65 72 73 69 6f   any Mono versio
5db0: 6e 20 68 69 67 68 65 72 20 74 68 61 6e 20 32 2e  n higher than 2.
5dc0: 31 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10...           
5dd0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..          
5de0: 20 20 20 20 69 66 20 7b 24 6d 61 6a 6f 72 56 65      if {$majorVe
5df0: 72 73 69 6f 6e 20 3e 20 32 20 7c 7c 20 24 6d 69  rsion > 2 || $mi
5e00: 6e 6f 72 56 65 72 73 69 6f 6e 20 3e 20 31 30 7d  norVersion > 10}
5e10: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
5e20: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
5e30: 20 6d 6f 6e 6f 56 65 72 73 69 6f 6e 73 20 32 31   monoVersions 21
5e40: 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0..             
5e50: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5e60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
5e70: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..            
5e80: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f  # NOTE: Check fo
5e90: 72 20 61 6e 79 20 4d 6f 6e 6f 20 76 65 72 73 69  r any Mono versi
5ea0: 6f 6e 20 33 2e 78 20 6f 72 20 68 69 67 68 65 72  on 3.x or higher
5eb0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
5ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
5ed0: 20 7b 24 6d 61 6a 6f 72 56 65 72 73 69 6f 6e 20   {$majorVersion 
5ee0: 3e 3d 20 33 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  >= 3} then {..  
5ef0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #.. 
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
5f10: 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 61  OTE: Check for a
5f20: 6e 79 20 4d 6f 6e 6f 20 76 65 72 73 69 6f 6e 20  ny Mono version 
5f30: 68 69 67 68 65 72 20 74 68 61 6e 20 33 2e 30 2e  higher than 3.0.
5f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5f50: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..             
5f60: 20 69 66 20 7b 24 6d 61 6a 6f 72 56 65 72 73 69   if {$majorVersi
5f70: 6f 6e 20 3e 20 33 20 7c 7c 20 24 6d 69 6e 6f 72  on > 3 || $minor
5f80: 56 65 72 73 69 6f 6e 20 3e 20 30 7d 20 74 68 65  Version > 0} the
5f90: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..           
5fa0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 6f 6e       lappend mon
5fb0: 6f 56 65 72 73 69 6f 6e 73 20 33 30 0d 0a 20 20  oVersions 30..  
5fc0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5fd0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5fe0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #.. 
5ff0: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
6000: 45 3a 20 41 64 64 20 74 68 65 20 6e 65 63 65 73  E: Add the neces
6010: 73 61 72 79 20 63 6f 6e 73 74 72 61 69 6e 74 73  sary constraints
6020: 20 66 6f 72 20 65 61 63 68 20 76 65 72 73 69 6f   for each versio
6030: 6e 20 6f 66 20 4d 6f 6e 6f 20 77 65 0d 0a 20 20  n of Mono we..  
6040: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #     
6050: 20 20 73 68 6f 75 6c 64 20 4e 4f 54 20 73 6b 69    should NOT ski
6060: 70 20 62 75 67 73 20 66 6f 72 2e 0d 0a 20 20 20  p bugs for...   
6070: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..    
6080: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
6090: 6d 6f 6e 6f 56 65 72 73 69 6f 6e 20 24 6d 6f 6e  monoVersion $mon
60a0: 6f 56 65 72 73 69 6f 6e 73 20 7b 0d 0a 20 20 20  oVersions {..   
60b0: 20 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f             addCo
60c0: 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
60d0: 41 72 67 73 20 6d 6f 6e 6f 54 6f 44 6f 20 24 6d  Args monoToDo $m
60e0: 6f 6e 6f 56 65 72 73 69 6f 6e 5d 0d 0a 20 20 20  onoVersion]..   
60f0: 20 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f             addCo
6100: 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
6110: 41 72 67 73 20 6d 6f 6e 6f 42 75 67 20 24 6d 6f  Args monoBug $mo
6120: 6e 6f 56 65 72 73 69 6f 6e 5d 0d 0a 20 20 20 20  noVersion]..    
6130: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e            addCon
6140: 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
6150: 72 67 73 20 6d 6f 6e 6f 43 72 61 73 68 20 24 6d  rgs monoCrash $m
6160: 6f 6e 6f 56 65 72 73 69 6f 6e 5d 0d 0a 20 20 20  onoVersion]..   
6170: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6180: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6190: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
61a0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
61b0: 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e   length $version
61c0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {.. 
61d0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..  
61e0: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
61f0: 3a 20 57 65 20 61 72 65 20 72 75 6e 6e 69 6e 67  : We are running
6200: 20 6f 6e 20 74 68 65 20 2e 4e 45 54 20 46 72 61   on the .NET Fra
6210: 6d 65 77 6f 72 6b 2e 20 20 4b 65 65 70 20 74 72  mework.  Keep tr
6220: 61 63 6b 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ack of the..    
6230: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #       
6240: 73 70 65 63 69 66 69 63 20 76 65 72 73 69 6f 6e  specific version
6250: 20 66 6f 72 20 75 73 61 67 65 20 69 6e 20 74 65   for usage in te
6260: 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d  st constraints..
6270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
6280: 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 43              addC
6290: 6f 6e 73 74 72 61 69 6e 74 20 64 6f 74 4e 65 74  onstraint dotNet
62a0: 24 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20  $version..      
62b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
62c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..          
62d0: 23 20 4e 4f 54 45 3a 20 57 65 20 64 6f 20 6e 6f  # NOTE: We do no
62e0: 74 20 77 61 6e 74 20 74 6f 20 73 6b 69 70 20 61  t want to skip a
62f0: 6e 79 20 4d 6f 6e 6f 20 62 75 67 73 20 6f 6e 20  ny Mono bugs on 
6300: 2e 4e 45 54 2e 20 20 41 64 64 20 74 68 65 0d 0a  .NET.  Add the..
6310: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #     
6320: 20 20 6e 65 63 65 73 73 61 72 79 20 63 6f 6e 73    necessary cons
6330: 74 72 61 69 6e 74 73 20 66 6f 72 20 65 61 63 68  traints for each
6340: 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 6f 6e 6f   version of Mono
6350: 20 77 65 20 6b 6e 6f 77 0d 0a 20 20 20 20 20 20   we know..      
6360: 20 20 20 20 23 20 20 20 20 20 20 20 61 62 6f 75      #       abou
6370: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  t...          #.
6380: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
6390: 63 68 20 6d 6f 6e 6f 56 65 72 73 69 6f 6e 20 5b  ch monoVersion [
63a0: 6c 69 73 74 20 32 30 20 32 32 20 32 34 20 32 36  list 20 22 24 26
63b0: 20 32 38 20 32 31 30 20 33 30 5d 20 7b 0d 0a 20   28 210 30] {.. 
63c0: 20 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f             addCo
63d0: 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
63e0: 41 72 67 73 20 6d 6f 6e 6f 54 6f 44 6f 20 24 6d  Args monoToDo $m
63f0: 6f 6e 6f 56 65 72 73 69 6f 6e 5d 0d 0a 20 20 20  onoVersion]..   
6400: 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73           addCons
6410: 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
6420: 67 73 20 6d 6f 6e 6f 42 75 67 20 24 6d 6f 6e 6f  gs monoBug $mono
6430: 56 65 72 73 69 6f 6e 5d 0d 0a 20 20 20 20 20 20  Version]..      
6440: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
6450: 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs 
6460: 6d 6f 6e 6f 43 72 61 73 68 20 24 6d 6f 6e 6f 56  monoCrash $monoV
6470: 65 72 73 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20  ersion]..       
6480: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
6490: 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  ...        tputs
64a0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen
64b0: 64 41 72 67 73 20 24 3a 3a 65 61 67 6c 65 5f 70  dArgs $::eagle_p
64c0: 6c 61 74 66 6f 72 6d 28 72 75 6e 74 69 6d 65 56  latform(runtimeV
64d0: 65 72 73 69 6f 6e 29 20 5c 0d 0a 20 20 20 20 20  ersion) \..     
64e0: 20 20 20 20 20 20 20 22 20 22 20 28 20 24 64 6f         " " ( $do
64f0: 74 56 65 72 73 69 6f 6e 20 29 20 5c 6e 5d 0d 0a  tVersion ) \n]..
6500: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
6510: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c
6520: 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20  hannel no\n..   
6530: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
6540: 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f      proc checkFo
6550: 72 4d 61 63 68 69 6e 65 20 7b 20 63 68 61 6e 6e  rMachine { chann
6560: 65 6c 20 62 69 74 73 20 6d 61 63 68 69 6e 65 20  el bits machine 
6570: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73  } {..      tputs
6580: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen
6590: 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 68 65 63  dArgs "---- chec
65a0: 6b 69 6e 67 20 66 6f 72 20 6d 61 63 68 69 6e 65  king for machine
65b0: 20 5c 22 22 20 24 62 69 74 73 20 5c 0d 0a 20 20   \"" $bits \..  
65c0: 20 20 20 20 20 20 20 20 22 2d 62 69 74 20 22 20          "-bit " 
65d0: 24 6d 61 63 68 69 6e 65 20 22 5c 22 2e 2e 2e 20  $machine "\"... 
65e0: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  "]....      #.. 
65f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 61       # NOTE: Wha
6600: 74 20 61 72 65 20 74 68 65 20 6d 61 63 68 69 6e  t are the machin
6610: 65 20 61 72 63 68 69 74 65 63 74 75 72 65 20 61  e architecture a
6620: 6e 64 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  nd the..      # 
6630: 20 20 20 20 20 20 6e 75 6d 62 65 72 20 6f 66 20        number of 
6640: 62 69 74 73 20 66 6f 72 20 74 68 69 73 20 6f 70  bits for this op
6650: 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 3f 0d  erating system?.
6660: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..      
6670: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
6680: 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28   ::tcl_platform(
6690: 6d 61 63 68 69 6e 65 29 5d 20 26 26 20 5c 0d 0a  machine)] && \..
66a0: 20 20 20 20 20 20 20 20 20 20 5b 69 6e 66 6f 20            [info 
66b0: 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61  exists ::tcl_pla
66c0: 74 66 6f 72 6d 28 6f 73 42 69 74 73 29 5d 7d 20  tform(osBits)]} 
66d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
66e0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
66f0: 45 3a 20 44 6f 65 73 20 74 68 65 20 6d 61 63 68  E: Does the mach
6700: 69 6e 65 20 61 6e 64 20 6e 75 6d 62 65 72 20 6f  ine and number o
6710: 66 20 62 69 74 73 20 6d 61 74 63 68 0d 0a 20 20  f bits match..  
6720: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68        #       wh
6730: 61 74 20 74 68 65 20 63 61 6c 6c 65 72 20 73 70  at the caller sp
6740: 65 63 69 66 69 65 64 3f 0d 0a 20 20 20 20 20 20  ecified?..      
6750: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if 
6760: 7b 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d  {$::tcl_platform
6770: 28 6d 61 63 68 69 6e 65 29 20 65 71 20 24 6d 61  (machine) eq $ma
6780: 63 68 69 6e 65 20 26 26 20 5c 0d 0a 20 20 20 20  chine && \..    
6790: 20 20 20 20 20 20 20 20 24 3a 3a 74 63 6c 5f 70          $::tcl_p
67a0: 6c 61 74 66 6f 72 6d 28 6f 73 42 69 74 73 29 20  latform(osBits) 
67b0: 65 71 20 24 62 69 74 73 7d 20 74 68 65 6e 20 7b  eq $bits} then {
67c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #.. 
67d0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
67e0: 20 59 65 73 2c 20 69 74 20 6d 61 74 63 68 65 73   Yes, it matches
67f0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
6800: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e            addCon
6810: 73 74 72 61 69 6e 74 20 24 6d 61 63 68 69 6e 65  straint $machine
6820: 2e 24 7b 62 69 74 73 7d 62 69 74 0d 0a 0d 0a 20  .${bits}bit.... 
6830: 20 20 20 20 20 20 20 20 20 73 65 74 20 72 65 73           set res
6840: 75 6c 74 20 79 65 73 0d 0a 20 20 20 20 20 20 20  ult yes..       
6850: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
6860: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20       set result 
6870: 6e 6f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  no..        }...
6880: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $
6890: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
68a0: 72 67 73 20 24 72 65 73 75 6c 74 20 22 2c 20 22  rgs $result ", "
68b0: 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d   $::tcl_platform
68c0: 28 6f 73 42 69 74 73 29 20 2d 62 69 74 20 5c 0d  (osBits) -bit \.
68d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 20 22  .            " "
68e0: 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d   $::tcl_platform
68f0: 28 6d 61 63 68 69 6e 65 29 5c 6e 5d 0d 0a 20 20  (machine)\n]..  
6900: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..  
6910: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha
6920: 6e 6e 65 6c 20 22 6e 6f 2c 20 75 6e 6b 6e 6f 77  nnel "no, unknow
6930: 6e 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  n\n"..      }.. 
6940: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
6950: 63 20 63 68 65 63 6b 46 6f 72 47 61 72 75 64 61  c checkForGaruda
6960: 44 6c 6c 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20  Dll { channel } 
6970: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..    
6980: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check 
6990: 66 6f 72 20 74 68 65 20 47 61 72 75 64 61 20 44  for the Garuda D
69a0: 4c 4c 20 6f 66 20 74 68 65 20 73 61 6d 65 20 70  LL of the same p
69b0: 6c 61 74 66 6f 72 6d 20 28 69 2e 65 2e 20 6d 61  latform (i.e. ma
69c0: 63 68 69 6e 65 0d 0a 20 20 20 20 20 20 23 20 20  chine..      #  
69d0: 20 20 20 20 20 74 79 70 65 29 20 61 73 20 74 68       type) as th
69e0: 65 20 6e 61 74 69 76 65 20 54 63 6c 20 73 68 65  e native Tcl she
69f0: 6c 6c 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ll...      #..  
6a00: 20 20 20 20 72 65 74 75 72 6e 20 5b 63 68 65 63      return [chec
6a10: 6b 46 6f 72 46 69 6c 65 20 24 63 68 61 6e 6e 65  kForFile $channe
6a20: 6c 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 3a 3a  l [file join $::
6a30: 62 61 73 65 5f 70 61 74 68 20 62 69 6e 20 5c 0d  base_path bin \.
6a40: 0a 20 20 20 20 20 20 20 20 20 20 5b 6d 61 63 68  .          [mach
6a50: 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 5b 67  ineToPlatform [g
6a60: 65 74 4d 61 63 68 69 6e 65 46 6f 72 54 63 6c 53  etMachineForTclS
6a70: 68 65 6c 6c 5d 5d 20 5c 0d 0a 20 20 20 20 20 20  hell]] \..      
6a80: 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20      [appendArgs 
6a90: 24 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72  $::eagle_platfor
6aa0: 6d 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29  m(configuration)
6ab0: 20 44 6c 6c 5d 20 5c 0d 0a 20 20 20 20 20 20 20   Dll] \..       
6ac0: 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 47     [appendArgs G
6ad0: 61 72 75 64 61 20 5b 69 6e 66 6f 20 73 68 61 72  aruda [info shar
6ae0: 65 64 6c 69 62 65 78 74 65 6e 73 69 6f 6e 5d 5d  edlibextension]]
6af0: 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  ]]..    }.....  
6b00: 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 43    proc checkForC
6b10: 75 6c 74 75 72 65 20 7b 20 63 68 61 6e 6e 65 6c  ulture { channel
6b20: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74   } {..      tput
6b30: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "----
6b40: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 63 75   checking for cu
6b50: 6c 74 75 72 65 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  lture... "....  
6b60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
6b70: 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 63 75  OTE: Grab the cu
6b80: 72 72 65 6e 74 20 63 75 6c 74 75 72 65 2e 0d 0a  rrent culture...
6b90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
6ba0: 65 74 20 63 75 6c 74 75 72 65 20 5b 69 6e 66 6f  et culture [info
6bb0: 20 63 75 6c 74 75 72 65 5d 0d 0a 0d 0a 20 20 20   culture]....   
6bc0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
6bd0: 65 6e 67 74 68 20 24 63 75 6c 74 75 72 65 5d 20  ength $culture] 
6be0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..   
6bf0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
6c00: 23 20 4e 4f 54 45 3a 20 54 68 65 20 63 75 6c 74  # NOTE: The cult
6c10: 75 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ure information 
6c20: 69 73 20 70 72 65 73 65 6e 74 2c 20 75 73 65 20  is present, use 
6c30: 69 74 20 61 6e 64 20 73 68 6f 77 20 69 74 2e 0d  it and show it..
6c40: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..    
6c50: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
6c60: 74 20 63 75 6c 74 75 72 65 2e 5b 73 74 72 69 6e  t culture.[strin
6c70: 67 20 6d 61 70 20 5b 6c 69 73 74 20 2d 20 5f 5d  g map [list - _]
6c80: 20 24 63 75 6c 74 75 72 65 5d 0d 0a 0d 0a 20 20   $culture]....  
6c90: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha
6ca0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
6cb0: 20 24 63 75 6c 74 75 72 65 20 5c 6e 5d 0d 0a 20   $culture \n].. 
6cc0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {.. 
6cd0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch
6ce0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
6cf0: 73 20 75 6e 6b 6e 6f 77 6e 20 5c 6e 5d 0d 0a 20  s unknown \n].. 
6d00: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
6d10: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
6d20: 46 6f 72 52 65 66 65 72 65 6e 63 65 43 6f 75 6e  ForReferenceCoun
6d30: 74 54 72 61 63 6b 69 6e 67 20 7b 20 63 68 61 6e  tTracking { chan
6d40: 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74  nel } {..      t
6d50: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d  puts $channel "-
6d60: 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
6d70: 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63   object referenc
6d80: 65 20 63 6f 75 6e 74 20 74 72 61 63 6b 69 6e 67  e count tracking
6d90: 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69  ... "....      i
6da0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists 
6db0: 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d  ::eagle_platform
6dc0: 28 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 29  (compileOptions)
6dd0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..        
6de0: 20 20 28 5b 6c 73 65 61 72 63 68 20 2d 65 78 61    ([lsearch -exa
6df0: 63 74 20 2d 6e 6f 63 61 73 65 20 24 3a 3a 65 61  ct -nocase $::ea
6e00: 67 6c 65 5f 70 6c 61 74 66 6f 72 6d 28 63 6f 6d  gle_platform(com
6e10: 70 69 6c 65 4f 70 74 69 6f 6e 73 29 20 5c 0d 0a  pileOptions) \..
6e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 4f                NO
6e30: 54 49 46 59 5d 20 21 3d 20 2d 31 20 7c 7c 20 5c  TIFY] != -1 || \
6e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 5b 6c 73  ..           [ls
6e50: 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f  earch -exact -no
6e60: 63 61 73 65 20 24 3a 3a 65 61 67 6c 65 5f 70 6c  case $::eagle_pl
6e70: 61 74 66 6f 72 6d 28 63 6f 6d 70 69 6c 65 4f 70  atform(compileOp
6e80: 74 69 6f 6e 73 29 20 5c 0d 0a 20 20 20 20 20 20  tions) \..      
6e90: 20 20 20 20 20 20 20 20 4e 4f 54 49 46 59 5f 4f          NOTIFY_O
6ea0: 42 4a 45 43 54 5d 20 21 3d 20 2d 31 29 7d 20 74  BJECT] != -1)} t
6eb0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
6ec0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
6ed0: 3a 20 59 65 73 2c 20 73 75 70 70 6f 72 74 20 66  : Yes, support f
6ee0: 6f 72 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  or object refere
6ef0: 6e 63 65 20 63 6f 75 6e 74 20 74 72 61 63 6b 69  nce count tracki
6f00: 6e 67 20 69 73 20 70 72 65 73 65 6e 74 2e 0d 0a  ng is present...
6f10: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..     
6f20: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
6f30: 20 72 65 66 43 6f 75 6e 74 0d 0a 0d 0a 20 20 20   refCount....   
6f40: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan
6f50: 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20  nel yes\n..     
6f60: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
6f70: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe
6f80: 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d  l no\n..      }.
6f90: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
6fa0: 72 6f 63 20 63 68 65 63 6b 46 6f 72 43 6f 6d 70  roc checkForComp
6fb0: 69 6c 65 4f 70 74 69 6f 6e 20 7b 20 63 68 61 6e  ileOption { chan
6fc0: 6e 65 6c 20 6f 70 74 69 6f 6e 20 7d 20 7b 0d 0a  nel option } {..
6fd0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha
6fe0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
6ff0: 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking 
7000: 66 6f 72 20 63 6f 6d 70 69 6c 65 20 6f 70 74 69  for compile opti
7010: 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  on \"" \..      
7020: 20 20 20 20 24 6f 70 74 69 6f 6e 20 22 5c 22 2e      $option "\".
7030: 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  .. "]....      i
7040: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists 
7050: 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d  ::eagle_platform
7060: 28 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 29  (compileOptions)
7070: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..        
7080: 20 20 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63    [lsearch -exac
7090: 74 20 2d 6e 6f 63 61 73 65 20 24 3a 3a 65 61 67  t -nocase $::eag
70a0: 6c 65 5f 70 6c 61 74 66 6f 72 6d 28 63 6f 6d 70  le_platform(comp
70b0: 69 6c 65 4f 70 74 69 6f 6e 73 29 20 5c 0d 0a 20  ileOptions) \.. 
70c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 24 6f 70               $op
70d0: 74 69 6f 6e 5d 20 21 3d 20 2d 31 7d 20 74 68 65  tion] != -1} the
70e0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
70f0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE: 
7100: 59 65 73 2c 20 73 75 70 70 6f 72 74 20 66 6f 72  Yes, support for
7110: 20 74 68 65 20 63 6f 6d 70 69 6c 65 20 6f 70 74   the compile opt
7120: 69 6f 6e 20 69 73 20 70 72 65 73 65 6e 74 2e 0d  ion is present..
7130: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..    
7140: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
7150: 74 20 63 6f 6d 70 69 6c 65 2e 24 6f 70 74 69 6f  t compile.$optio
7160: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  n....        tpu
7170: 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c  ts $channel yes\
7180: 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  n..      } else 
7190: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
71a0: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a   $channel no\n..
71b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
71c0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63  ...    proc chec
71d0: 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f  kForRuntimeOptio
71e0: 6e 20 7b 20 63 68 61 6e 6e 65 6c 20 6f 70 74 69  n { channel opti
71f0: 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70  on } {..      tp
7200: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap
7210: 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63  pendArgs "---- c
7220: 68 65 63 6b 69 6e 67 20 66 6f 72 20 72 75 6e 74  hecking for runt
7230: 69 6d 65 20 6f 70 74 69 6f 6e 20 5c 22 22 20 5c  ime option \"" \
7240: 0d 0a 20 20 20 20 20 20 20 20 20 20 24 6f 70 74  ..          $opt
7250: 69 6f 6e 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d  ion "\"... "]...
7260: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
7270: 20 65 78 69 73 74 73 20 3a 3a 65 61 67 6c 65 5f   exists ::eagle_
7280: 70 6c 61 74 66 6f 72 6d 28 72 75 6e 74 69 6d 65  platform(runtime
7290: 4f 70 74 69 6f 6e 73 29 5d 20 26 26 20 5c 0d 0a  Options)] && \..
72a0: 20 20 20 20 20 20 20 20 20 20 5b 6c 73 65 61 72            [lsear
72b0: 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73  ch -exact -nocas
72c0: 65 20 24 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66  e $::eagle_platf
72d0: 6f 72 6d 28 72 75 6e 74 69 6d 65 4f 70 74 69 6f  orm(runtimeOptio
72e0: 6e 73 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ns) \..         
72f0: 20 20 20 20 20 24 6f 70 74 69 6f 6e 5d 20 21 3d       $option] !=
7300: 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20   -1} then {..   
7310: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
7320: 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 73 75 70  # NOTE: Yes, sup
7330: 70 6f 72 74 20 66 6f 72 20 74 68 65 20 72 75 6e  port for the run
7340: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 70  time option is p
7350: 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20  resent...       
7360: 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43   #..        addC
7370: 6f 6e 73 74 72 61 69 6e 74 20 72 75 6e 74 69 6d  onstraint runtim
7380: 65 2e 24 6f 70 74 69 6f 6e 0d 0a 0d 0a 20 20 20  e.$option....   
7390: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan
73a0: 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20  nel yes\n..     
73b0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
73c0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe
73d0: 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d  l no\n..      }.
73e0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
73f0: 72 6f 63 20 63 68 65 63 6b 46 6f 72 44 79 6e 61  roc checkForDyna
7400: 6d 69 63 4c 6f 61 64 69 6e 67 20 7b 20 63 68 61  micLoading { cha
7410: 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20  nnel } {..      
7420: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22  tputs $channel "
7430: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
7440: 72 20 64 79 6e 61 6d 69 63 20 6c 6f 61 64 69 6e  r dynamic loadin
7450: 67 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  g... "....      
7460: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
7470: 20 41 73 20 66 61 72 20 61 73 20 77 65 20 6b 6e   As far as we kn
7480: 6f 77 2c 20 64 79 6e 61 6d 69 63 20 6c 6f 61 64  ow, dynamic load
7490: 69 6e 67 20 61 6c 77 61 79 73 20 77 6f 72 6b 73  ing always works
74a0: 20 6f 6e 20 57 69 6e 64 6f 77 73 2e 0d 0a 20 20   on Windows...  
74b0: 20 20 20 20 23 20 20 20 20 20 20 20 4f 6e 20 73      #       On s
74c0: 6f 6d 65 20 55 6e 69 78 20 73 79 73 74 65 6d 73  ome Unix systems
74d0: 2c 20 64 6c 6f 70 65 6e 20 64 6f 65 73 20 6e 6f  , dlopen does no
74e0: 74 20 77 6f 72 6b 20 28 65 2e 67 2e 20 62 65 63  t work (e.g. bec
74f0: 61 75 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20  ause..      #   
7500: 20 20 20 20 4d 6f 6e 6f 20 69 73 20 73 74 61 74      Mono is stat
7510: 69 63 61 6c 6c 79 20 6c 69 6e 6b 65 64 2c 20 65  ically linked, e
7520: 74 63 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  tc)...      #.. 
7530: 20 20 20 20 20 69 66 20 7b 24 3a 3a 74 63 6c 5f       if {$::tcl_
7540: 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72  platform(platfor
7550: 6d 29 20 65 71 20 22 77 69 6e 64 6f 77 73 22 20  m) eq "windows" 
7560: 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  || \..          
7570: 28 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20  ([llength [info 
7580: 63 6f 6d 6d 61 6e 64 73 20 6c 69 62 72 61 72 79  commands library
7590: 5d 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20  ]] > 0 && \..   
75a0: 20 20 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b          [catch {
75b0: 6c 69 62 72 61 72 79 20 74 65 73 74 7d 5d 20 3d  library test}] =
75c0: 3d 20 30 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  = 0)} then {..  
75d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..       
75e0: 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 69 74   # NOTE: Yes, it
75f0: 20 61 70 70 65 61 72 73 20 74 68 61 74 20 69 74   appears that it
7600: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a   is available...
7610: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..     
7620: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
7630: 20 64 79 6e 61 6d 69 63 0d 0a 0d 0a 20 20 20 20   dynamic....    
7640: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann
7650: 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20  el yes\n..      
7660: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..      
7670: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel
7680: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a   no\n..      }..
7690: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
76a0: 6f 63 20 63 68 65 63 6b 46 6f 72 57 69 6e 64 6f  oc checkForWindo
76b0: 77 73 46 6f 72 6d 73 20 7b 20 63 68 61 6e 6e 65  wsForms { channe
76c0: 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75  l } {..      tpu
76d0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "---
76e0: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 57  - checking for W
76f0: 69 6e 64 6f 77 73 20 46 6f 72 6d 73 2e 2e 2e 20  indows Forms... 
7700: 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  "....      #..  
7710: 20 20 20 20 23 20 48 41 43 4b 3a 20 57 68 65 6e      # HACK: When
7720: 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 57 69 6e 64   running on Wind
7730: 6f 77 73 2c 20 77 65 20 64 6f 20 6e 6f 74 20 6e  ows, we do not n
7740: 65 65 64 20 74 6f 20 64 6f 20 61 6e 79 20 6f 74  eed to do any ot
7750: 68 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20  her..      #    
7760: 20 20 20 73 70 65 63 69 61 6c 20 63 68 65 63 6b     special check
7770: 73 20 68 65 72 65 3b 20 68 6f 77 65 76 65 72 2c  s here; however,
7780: 20 6f 6e 20 55 6e 69 78 20 28 61 6e 64 20 4d 61   on Unix (and Ma
7790: 63 20 4f 53 20 58 3f 29 2c 0d 0a 20 20 20 20 20  c OS X?),..     
77a0: 20 23 20 20 20 20 20 20 20 77 65 20 73 68 6f 75   #       we shou
77b0: 6c 64 20 63 68 65 63 6b 20 66 6f 72 20 74 68 65  ld check for the
77c0: 20 44 49 53 50 4c 41 59 20 65 6e 76 69 72 6f 6e   DISPLAY environ
77d0: 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 61 73  ment variable as
77e0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #       
77f0: 73 6f 6d 65 20 62 61 73 69 63 20 69 6e 64 69 63  some basic indic
7800: 61 74 69 6f 6e 20 74 68 61 74 20 74 68 65 20 58  ation that the X
7810: 20 73 65 72 76 65 72 20 69 73 20 61 76 61 69 6c   server is avail
7820: 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 23 20 20  able...      #  
7830: 20 20 20 20 20 54 68 69 73 20 61 70 70 65 61 72       This appear
7840: 73 20 74 6f 20 62 65 20 76 65 72 79 20 6e 65 63  s to be very nec
7850: 65 73 73 61 72 79 20 6f 6e 20 4d 6f 6e 6f 20 62  essary on Mono b
7860: 65 63 61 75 73 65 20 69 74 0d 0a 20 20 20 20 20  ecause it..     
7870: 20 23 20 20 20 20 20 20 20 63 72 61 73 68 65 73   #       crashes
7880: 20 61 66 74 65 72 20 72 65 70 65 61 74 65 64 20   after repeated 
7890: 66 61 69 6c 65 64 20 61 74 74 65 6d 70 74 73 20  failed attempts 
78a0: 74 6f 20 63 72 65 61 74 65 20 61 0d 0a 20 20 20  to create a..   
78b0: 20 20 20 23 20 20 20 20 20 20 20 57 69 6e 64 6f     #       Windo
78c0: 77 73 20 46 6f 72 6d 20 77 68 65 6e 20 74 68 65  ws Form when the
78d0: 20 58 20 73 65 72 76 65 72 20 69 73 20 75 6e 61   X server is una
78e0: 76 61 69 6c 61 62 6c 65 20 28 65 2e 67 2e 20 6f  vailable (e.g. o
78f0: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #      
7900: 20 4f 70 65 6e 42 53 44 29 2e 0d 0a 20 20 20 20   OpenBSD)...    
7910: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24    #..      if {$
7920: 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70  ::tcl_platform(p
7930: 6c 61 74 66 6f 72 6d 29 20 65 71 20 22 77 69 6e  latform) eq "win
7940: 64 6f 77 73 22 20 7c 7c 20 5c 0d 0a 20 20 20 20  dows" || \..    
7950: 20 20 20 20 20 20 5b 69 6e 66 6f 20 65 78 69 73        [info exis
7960: 74 73 20 3a 3a 65 6e 76 28 44 49 53 50 4c 41 59  ts ::env(DISPLAY
7970: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..    
7980: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
7990: 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20 57 69   NOTE: Is the Wi
79a0: 6e 64 6f 77 73 20 46 6f 72 6d 73 20 61 73 73 65  ndows Forms asse
79b0: 6d 62 6c 79 20 61 76 61 69 6c 61 62 6c 65 3f 0d  mbly available?.
79c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..    
79d0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
79e0: 6f 62 6a 65 63 74 20 72 65 73 6f 6c 76 65 20 53  object resolve S
79f0: 79 73 74 65 6d 2e 57 69 6e 64 6f 77 73 2e 46 6f  ystem.Windows.Fo
7a00: 72 6d 73 7d 20 61 73 73 65 6d 62 6c 79 5d 20 3d  rms} assembly] =
7a10: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..   
7a20: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..      
7a30: 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c      # NOTE: Yes,
7a40: 20 69 74 20 61 70 70 65 61 72 73 20 74 68 61 74   it appears that
7a50: 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65   it is available
7a60: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
7a70: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e            addCon
7a80: 73 74 72 61 69 6e 74 20 77 69 6e 46 6f 72 6d 73  straint winForms
7a90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70  ....          tp
7aa0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73  uts $channel yes
7ab0: 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  \n....          
7ac0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
7ad0: 4f 54 45 3a 20 57 65 20 61 72 65 20 64 6f 6e 65  OTE: We are done
7ae0: 20 68 65 72 65 2c 20 72 65 74 75 72 6e 20 6e 6f   here, return no
7af0: 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  w...          #.
7b00: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
7b10: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
7b20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 74      }....      t
7b30: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no
7b40: 5c 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  \n..    }.....  
7b50: 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53    proc checkForS
7b60: 74 61 54 68 72 65 61 64 20 7b 20 63 68 61 6e 6e  taThread { chann
7b70: 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70  el } {..      tp
7b80: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "--
7b90: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  -- checking for 
7ba0: 53 54 41 20 74 68 72 65 61 64 2e 2e 2e 20 22 0d  STA thread... ".
7bb0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
7bc0: 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f  tch {object invo
7bd0: 6b 65 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64  ke System.Thread
7be0: 69 6e 67 2e 54 68 72 65 61 64 2e 43 75 72 72 65  ing.Thread.Curre
7bf0: 6e 74 54 68 72 65 61 64 20 5c 0d 0a 20 20 20 20  ntThread \..    
7c00: 20 20 20 20 20 20 20 20 20 20 47 65 74 41 70 61            GetApa
7c10: 72 74 6d 65 6e 74 53 74 61 74 65 7d 20 61 70 61  rtmentState} apa
7c20: 72 74 6d 65 6e 74 53 74 61 74 65 5d 20 3d 3d 20  rtmentState] == 
7c30: 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  0 && \..        
7c40: 20 20 24 61 70 61 72 74 6d 65 6e 74 53 74 61 74    $apartmentStat
7c50: 65 20 65 71 20 22 53 54 41 22 7d 20 74 68 65 6e  e eq "STA"} then
7c60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #.. 
7c70: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59         # NOTE: Y
7c80: 65 73 2c 20 77 65 20 61 72 65 20 72 75 6e 6e 69  es, we are runni
7c90: 6e 67 20 69 6e 20 61 6e 20 53 54 41 20 74 68 72  ng in an STA thr
7ca0: 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ead...        #.
7cb0: 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73  .        addCons
7cc0: 74 72 61 69 6e 74 20 73 74 61 54 68 72 65 61 64  traint staThread
7cd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74  ....        tput
7ce0: 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e  s $channel yes\n
7cf0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
7d00: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs 
7d10: 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20  $channel no\n.. 
7d20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
7d30: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
7d40: 46 6f 72 57 69 6e 64 6f 77 73 50 72 65 73 65 6e  ForWindowsPresen
7d50: 74 61 74 69 6f 6e 46 6f 75 6e 64 61 74 69 6f 6e  tationFoundation
7d60: 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a   { channel } {..
7d70: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha
7d80: 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b  nnel "---- check
7d90: 69 6e 67 20 66 6f 72 20 57 69 6e 64 6f 77 73 20  ing for Windows 
7da0: 50 72 65 73 65 6e 74 61 74 69 6f 6e 20 46 6f 75  Presentation Fou
7db0: 6e 64 61 74 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a  ndation... "....
7dc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
7dd0: 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20 57 69   NOTE: Is the Wi
7de0: 6e 64 6f 77 73 20 50 72 65 73 65 6e 74 61 74 69  ndows Presentati
7df0: 6f 6e 20 46 6f 75 6e 64 61 74 69 6f 6e 20 61 76  on Foundation av
7e00: 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20  ailable?..      
7e10: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  #..      if {[ca
7e20: 74 63 68 20 7b 6f 62 6a 65 63 74 20 72 65 73 6f  tch {object reso
7e30: 6c 76 65 20 50 72 65 73 65 6e 74 61 74 69 6f 6e  lve Presentation
7e40: 46 72 61 6d 65 77 6f 72 6b 7d 20 61 73 73 65 6d  Framework} assem
7e50: 62 6c 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  bly] == 0} then 
7e60: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..  
7e70: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65        # NOTE: Ye
7e80: 73 2c 20 69 74 20 61 70 70 65 61 72 73 20 74 68  s, it appears th
7e90: 61 74 20 69 74 20 69 73 20 61 76 61 69 6c 61 62  at it is availab
7ea0: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
7eb0: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
7ec0: 72 61 69 6e 74 20 77 70 66 0d 0a 0d 0a 20 20 20  raint wpf....   
7ed0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan
7ee0: 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20  nel yes\n..     
7ef0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
7f00: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe
7f10: 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d  l no\n..      }.
7f20: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
7f30: 72 6f 63 20 63 68 65 63 6b 46 6f 72 44 61 74 61  roc checkForData
7f40: 62 61 73 65 20 7b 20 63 68 61 6e 6e 65 6c 20 73  base { channel s
7f50: 74 72 69 6e 67 20 7d 20 7b 0d 0a 20 20 20 20 20  tring } {..     
7f60: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 
7f70: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66  "---- checking f
7f80: 6f 72 20 64 61 74 61 62 61 73 65 2e 2e 2e 20 22  or database... "
7f90: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..   
7fa0: 20 20 20 23 20 48 41 43 4b 3a 20 44 69 73 61 62     # HACK: Disab
7fb0: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
7fc0: 65 63 74 69 76 69 74 79 20 74 65 73 74 69 6e 67  ectivity testing
7fd0: 20 6f 6e 20 4d 6f 6e 6f 20 62 65 63 61 75 73 65   on Mono because
7fe0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #       
7ff0: 69 74 20 66 61 69 6c 73 20 74 6f 20 74 69 6d 65  it fails to time
8000: 6f 75 74 20 28 75 6e 6c 65 73 73 20 73 70 65 63  out (unless spec
8010: 69 61 6c 20 74 65 73 74 20 73 75 69 74 65 20 68  ial test suite h
8020: 61 63 6b 73 0d 0a 20 20 20 20 20 20 23 20 20 20  acks..      #   
8030: 20 20 20 20 66 6f 72 20 4d 6f 6e 6f 20 68 61 76      for Mono hav
8040: 65 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20  e been disabled 
8050: 62 79 20 74 68 65 20 75 73 65 72 29 2e 0d 0a 20  by the user)... 
8060: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
8070: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
8080: 3a 6e 6f 28 6d 6f 6e 6f 29 5d 20 7c 7c 20 21 5b  :no(mono)] || ![
8090: 69 73 4d 6f 6e 6f 5d 7d 20 74 68 65 6e 20 7b 0d  isMono]} then {.
80a0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..    
80b0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 61 6e 20      # NOTE: Can 
80c0: 77 65 20 61 63 63 65 73 73 20 74 68 65 20 6c 6f  we access the lo
80d0: 63 61 6c 20 64 61 74 61 62 61 73 65 3f 0d 0a 20  cal database?.. 
80e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..      
80f0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 71    if {[catch {sq
8100: 6c 20 6f 70 65 6e 20 24 73 74 72 69 6e 67 7d 20  l open $string} 
8110: 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 3d 3d 20 30  connection] == 0
8120: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
8130: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..         
8140: 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 69 74   # NOTE: Yes, it
8150: 20 61 70 70 65 61 72 73 20 74 68 61 74 20 77 65   appears that we
8160: 20 63 61 6e 20 63 6f 6e 6e 65 63 74 20 74 6f 20   can connect to 
8170: 74 68 65 20 6c 6f 63 61 6c 20 64 61 74 61 62 61  the local databa
8180: 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  se...          #
8190: 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43  ..          addC
81a0: 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c 0d 0a 0d  onstraint sql...
81b0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..  
81c0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE: 
81d0: 43 6c 65 61 6e 75 70 20 74 68 65 20 64 61 74 61  Cleanup the data
81e0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
81f0: 77 65 20 6a 75 73 74 20 6f 70 65 6e 65 64 2e 0d  we just opened..
8200: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..  
8210: 20 20 20 20 20 20 20 20 73 71 6c 20 63 6c 6f 73          sql clos
8220: 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d  e $connection...
8230: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
8240: 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d   $channel yes\n.
8250: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else 
8260: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
8270: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e  ts $channel no\n
8280: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
8290: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..   
82a0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan
82b0: 6e 65 6c 20 22 64 69 73 61 62 6c 65 64 5c 6e 22  nel "disabled\n"
82c0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
82d0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68  .....    proc ch
82e0: 65 63 6b 46 6f 72 41 73 73 65 6d 62 6c 79 20 7b  eckForAssembly {
82f0: 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20   channel name } 
8300: 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24  {..      tputs $
8310: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
8320: 72 67 73 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69  rgs "---- checki
8330: 6e 67 20 66 6f 72 20 61 73 73 65 6d 62 6c 79 20  ng for assembly 
8340: 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a 20 20 20  \"" $name \..   
8350: 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20 22 5d         "\"... "]
8360: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..   
8370: 20 20 20 23 20 4e 4f 54 45 3a 20 43 61 6e 20 74     # NOTE: Can t
8380: 68 65 20 61 73 73 65 6d 62 6c 79 20 62 65 20 6c  he assembly be l
8390: 6f 61 64 65 64 3f 0d 0a 20 20 20 20 20 20 23 0d  oaded?..      #.
83a0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
83b0: 68 20 7b 6f 62 6a 65 63 74 20 72 65 73 6f 6c 76  h {object resolv
83c0: 65 20 24 6e 61 6d 65 7d 20 61 73 73 65 6d 62 6c  e $name} assembl
83d0: 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  y] == 0} then {.
83e0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..    
83f0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c      # NOTE: Yes,
8400: 20 69 74 20 61 70 70 65 61 72 73 20 74 68 61 74   it appears that
8410: 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65   it is available
8420: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..  
8430: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
8440: 69 6e 74 20 24 6e 61 6d 65 0d 0a 0d 0a 20 20 20  int $name....   
8450: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan
8460: 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20  nel yes\n..     
8470: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
8480: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe
8490: 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d  l no\n..      }.
84a0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
84b0: 72 6f 63 20 63 68 65 63 6b 46 6f 72 4f 62 6a 65  roc checkForObje
84c0: 63 74 4d 65 6d 62 65 72 20 7b 20 63 68 61 6e 6e  ctMember { chann
84d0: 65 6c 20 6f 62 6a 65 63 74 20 6d 65 6d 62 65 72  el object member
84e0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74   } {..      tput
84f0: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe
8500: 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 68 65  ndArgs "---- che
8510: 63 6b 69 6e 67 20 66 6f 72 20 6f 62 6a 65 63 74  cking for object
8520: 20 6d 65 6d 62 65 72 20 5c 22 22 20 5c 0d 0a 20   member \"" \.. 
8530: 20 20 20 20 20 20 20 20 20 24 6f 62 6a 65 63 74           $object
8540: 20 2e 20 24 6d 65 6d 62 65 72 20 22 5c 22 2e 2e   . $member "\"..
8550: 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  . "]....      if
8560: 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74   {[catch {object
8570: 20 6d 65 6d 62 65 72 73 20 2d 66 6c 61 67 73 20   members -flags 
8580: 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 70 61 74 74  +NonPublic -patt
8590: 65 72 6e 20 24 6d 65 6d 62 65 72 20 24 6f 62 6a  ern $member $obj
85a0: 65 63 74 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20  ect} \..        
85b0: 20 20 6d 65 6d 62 65 72 73 5d 20 3d 3d 20 30 20    members] == 0 
85c0: 26 26 20 5b 6c 6c 65 6e 67 74 68 20 24 6d 65 6d  && [llength $mem
85d0: 62 65 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  bers] > 0} then 
85e0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..  
85f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65        # NOTE: Ye
8600: 73 2c 20 69 74 20 61 70 70 65 61 72 73 20 74 68  s, it appears th
8610: 61 74 20 69 74 20 69 73 20 61 76 61 69 6c 61 62  at it is availab
8620: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
8630: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
8640: 72 61 69 6e 74 20 24 6f 62 6a 65 63 74 2e 5b 73  raint $object.[s
8650: 74 72 69 6e 67 20 74 72 69 6d 20 24 6d 65 6d 62  tring trim $memb
8660: 65 72 20 2a 3f 5d 0d 0a 0d 0a 20 20 20 20 20 20  er *?]....      
8670: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel
8680: 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20   yes\n..      } 
8690: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..        
86a0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e  tputs $channel n
86b0: 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  o\n..      }..  
86c0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
86d0: 20 63 68 65 63 6b 46 6f 72 54 63 6c 49 6e 73 74   checkForTclInst
86e0: 61 6c 6c 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7d  alls { channel }
86f0: 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20   {..      tputs 
8700: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63  $channel "---- c
8710: 68 65 63 6b 69 6e 67 20 66 6f 72 20 54 63 6c 20  hecking for Tcl 
8720: 69 6e 73 74 61 6c 6c 73 2e 2e 2e 20 22 0d 0a 0d  installs... "...
8730: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..      
8740: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f  # NOTE: Check fo
8750: 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 6c 6f  r dynamically lo
8760: 61 64 61 62 6c 65 20 54 63 6c 20 6c 69 62 72 61  adable Tcl libra
8770: 72 69 65 73 20 28 66 6f 72 20 74 68 69 73 0d 0a  ries (for this..
8780: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72        #       ar
8790: 63 68 69 74 65 63 74 75 72 65 20 6f 6e 6c 79 29  chitecture only)
87a0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..    
87b0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 74 63    if {[catch {tc
87c0: 6c 20 73 65 6c 65 63 74 20 2d 61 72 63 68 69 74  l select -archit
87d0: 65 63 74 75 72 65 7d 20 74 63 6c 5d 20 3d 3d 20  ecture} tcl] == 
87e0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..     
87f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        # 
8800: 4e 4f 54 45 3a 20 44 69 64 20 77 65 20 66 69 6e  NOTE: Did we fin
8810: 64 20 6f 6e 65 3f 20 20 41 74 74 65 6d 70 74 20  d one?  Attempt 
8820: 74 6f 20 67 72 61 62 20 74 68 65 20 69 6e 64 65  to grab the inde
8830: 78 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  x..        #    
8840: 20 20 20 6f 66 20 74 68 65 20 76 65 72 73 69 6f     of the versio
8850: 6e 20 66 69 65 6c 64 20 66 72 6f 6d 20 74 68 65  n field from the
8860: 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20   list...        
8870: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 69  #..        set i
8880: 6e 64 65 78 20 5b 6c 73 65 61 72 63 68 20 2d 65  ndex [lsearch -e
8890: 78 61 63 74 20 24 74 63 6c 20 76 65 72 73 69 6f  xact $tcl versio
88a0: 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  n]....        if
88b0: 20 7b 24 69 6e 64 65 78 20 21 3d 20 2d 31 7d 20   {$index != -1} 
88c0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
88d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
88e0: 20 4e 4f 54 45 3a 20 54 68 65 20 76 65 72 79 20   NOTE: The very 
88f0: 6e 65 78 74 20 6c 69 73 74 20 69 6e 64 65 78 20  next list index 
8900: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76 61 6c  contains the val
8910: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  ue..          # 
8920: 20 20 20 20 20 20 28 69 2e 65 2e 20 6c 69 6b 65        (i.e. like
8930: 20 61 20 54 63 6c 20 38 2e 35 2b 20 64 69 63 74   a Tcl 8.5+ dict
8940: 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  )...          #.
8950: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64  .          set d
8960: 6f 74 56 65 72 73 69 6f 6e 20 5b 6c 69 6e 64 65  otVersion [linde
8970: 78 20 24 74 63 6c 20 5b 69 6e 63 72 20 69 6e 64  x $tcl [incr ind
8980: 65 78 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ex]]....        
8990: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
89a0: 20 4e 4f 54 45 3a 20 44 6f 20 77 65 20 6b 6e 6f   NOTE: Do we kno
89b0: 77 20 74 68 65 20 76 65 72 73 69 6f 6e 3f 0d 0a  w the version?..
89c0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..   
89d0: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
89e0: 6e 67 20 6c 65 6e 67 74 68 20 24 64 6f 74 56 65  ng length $dotVe
89f0: 72 73 69 6f 6e 5d 20 3e 20 30 20 26 26 20 5c 0d  rsion] > 0 && \.
8a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
8a10: 72 65 67 65 78 70 20 2d 2d 20 7b 5e 5c 64 2b 5c  regexp -- {^\d+\
8a20: 2e 5c 64 2b 24 7d 20 24 64 6f 74 56 65 72 73 69  .\d+$} $dotVersi
8a30: 6f 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  on]} then {..   
8a40: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..    
8a50: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE: 
8a60: 59 65 73 2c 20 73 6f 6d 65 20 76 65 72 73 69 6f  Yes, some versio
8a70: 6e 20 6f 66 20 54 63 6c 20 69 73 20 61 76 61 69  n of Tcl is avai
8a80: 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  lable...        
8a90: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..         
8aa0: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
8ab0: 20 74 63 6c 4c 69 62 72 61 72 79 0d 0a 0d 0a 20   tclLibrary.... 
8ac0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..  
8ad0: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
8ae0: 3a 20 49 73 20 74 68 65 20 76 65 72 73 69 6f 6e  : Is the version
8af0: 20 38 2e 78 20 6f 72 20 68 69 67 68 65 72 3f 0d   8.x or higher?.
8b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
8b10: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
8b20: 24 64 6f 74 56 65 72 73 69 6f 6e 20 3e 3d 20 38  $dotVersion >= 8
8b30: 2e 36 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  .6} then {..    
8b40: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e            addCon
8b50: 73 74 72 61 69 6e 74 20 74 63 6c 4c 69 62 72 61  straint tclLibra
8b60: 72 79 38 36 0d 0a 20 20 20 20 20 20 20 20 20 20  ry86..          
8b70: 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 64 6f 74    } elseif {$dot
8b80: 56 65 72 73 69 6f 6e 20 3e 3d 20 38 2e 35 7d 20  Version >= 8.5} 
8b90: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
8ba0: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
8bb0: 69 6e 74 20 74 63 6c 4c 69 62 72 61 72 79 38 35  int tclLibrary85
8bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            } 
8bd0: 65 6c 73 65 69 66 20 7b 24 64 6f 74 56 65 72 73  elseif {$dotVers
8be0: 69 6f 6e 20 3e 3d 20 38 2e 34 7d 20 74 68 65 6e  ion >= 8.4} then
8bf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8c00: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint 
8c10: 74 63 6c 4c 69 62 72 61 72 79 38 34 0d 0a 20 20  tclLibrary84..  
8c20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8c30: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
8c40: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen
8c50: 64 41 72 67 73 20 24 64 6f 74 56 65 72 73 69 6f  dArgs $dotVersio
8c60: 6e 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  n \n]....       
8c70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
8c80: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 61      # NOTE: We a
8c90: 72 65 20 64 6f 6e 65 20 68 65 72 65 2c 20 72 65  re done here, re
8ca0: 74 75 72 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  turn now...     
8cb0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..      
8cc0: 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20        return..  
8cd0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8ce0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
8cf0: 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68  .      tputs $ch
8d00: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20  annel no\n..    
8d10: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
8d20: 68 65 63 6b 46 6f 72 54 63 6c 52 65 61 64 79 20  heckForTclReady 
8d30: 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20  { channel } {.. 
8d40: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan
8d50: 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69  nel "---- checki
8d60: 6e 67 20 66 6f 72 20 54 63 6c 20 72 65 61 64 69  ng for Tcl readi
8d70: 6e 65 73 73 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  ness... "....   
8d80: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 74     if {[catch {t
8d90: 63 6c 20 72 65 61 64 79 7d 20 72 65 73 75 6c 74  cl ready} result
8da0: 5d 20 3d 3d 20 30 20 26 26 20 24 72 65 73 75 6c  ] == 0 && $resul
8db0: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..     
8dc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        # 
8dd0: 4e 4f 54 45 3a 20 59 65 73 2c 20 6e 61 74 69 76  NOTE: Yes, nativ
8de0: 65 20 54 63 6c 20 69 73 20 6c 6f 61 64 65 64 20  e Tcl is loaded 
8df0: 61 6e 64 20 72 65 61 64 79 2e 0d 0a 20 20 20 20  and ready...    
8e00: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61      #..        a
8e10: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 74 63 6c  ddConstraint tcl
8e20: 52 65 61 64 79 0d 0a 0d 0a 20 20 20 20 20 20 20  Ready....       
8e30: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 
8e40: 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65  yes\n..      } e
8e50: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
8e60: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no
8e70: 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  \n..      }..   
8e80: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc 
8e90: 63 68 65 63 6b 46 6f 72 54 63 6c 53 68 65 6c 6c  checkForTclShell
8ea0: 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a   { channel } {..
8eb0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
8ec0: 20 48 41 43 4b 3a 20 57 65 20 64 6f 20 6e 6f 74   HACK: We do not
8ed0: 20 63 61 72 65 20 61 62 6f 75 74 20 74 68 65 20   care about the 
8ee0: 6d 61 63 68 69 6e 65 20 74 79 70 65 20 72 65 74  machine type ret
8ef0: 75 72 6e 65 64 20 66 72 6f 6d 20 74 68 69 73 0d  urned from this.
8f00: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70  .      #       p
8f10: 72 6f 63 65 64 75 72 65 2c 20 77 65 20 6f 6e 6c  rocedure, we onl
8f20: 79 20 63 61 72 65 20 69 66 20 69 74 20 72 65 74  y care if it ret
8f30: 75 72 6e 73 20 22 65 72 72 6f 72 22 20 62 65 63  urns "error" bec
8f40: 61 75 73 65 20 74 68 61 74 0d 0a 20 20 20 20 20  ause that..     
8f50: 20 23 20 20 20 20 20 20 20 77 6f 75 6c 64 20 69   #       would i
8f60: 6e 64 69 63 61 74 65 20 61 6e 20 65 72 72 6f 72  ndicate an error
8f70: 20 77 61 73 20 63 61 75 67 68 74 20 64 75 72 69   was caught duri
8f80: 6e 67 20 5b 65 78 65 63 5d 20 28 69 2e 65 2e 20  ng [exec] (i.e. 
8f90: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #    
8fa0: 20 20 20 6e 61 74 69 76 65 20 54 63 6c 20 73 68     native Tcl sh
8fb0: 65 6c 6c 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65  ell could not be
8fc0: 20 65 78 65 63 75 74 65 64 29 2e 0d 0a 20 20 20   executed)...   
8fd0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
8fe0: 5b 63 61 74 63 68 20 7b 67 65 74 4d 61 63 68 69  [catch {getMachi
8ff0: 6e 65 46 6f 72 54 63 6c 53 68 65 6c 6c 7d 20 72  neForTclShell} r
9000: 65 73 75 6c 74 5d 20 3d 3d 20 30 20 26 26 20 5c  esult] == 0 && \
9010: 0d 0a 20 20 20 20 20 20 20 20 20 20 24 72 65 73  ..          $res
9020: 75 6c 74 20 6e 65 20 22 65 72 72 6f 72 22 7d 20  ult ne "error"} 
9030: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
9040: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
9050: 45 3a 20 59 65 73 2c 20 61 20 6e 61 74 69 76 65  E: Yes, a native
9060: 20 54 63 6c 20 73 68 65 6c 6c 20 61 70 70 65 61   Tcl shell appea
9070: 72 73 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62  rs to be availab
9080: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
9090: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
90a0: 72 61 69 6e 74 20 74 63 6c 53 68 65 6c 6c 0d 0a  raint tclShell..
90b0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs 
90c0: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63  $channel "---- c
90d0: 68 65 63 6b 69 6e 67 20 66 6f 72 20 54 63 6c 20  hecking for Tcl 
90e0: 73 68 65 6c 6c 2e 2e 2e 20 79 65 73 5c 6e 22 0d  shell... yes\n".
90f0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
9100: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $
9110: 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68  channel "---- ch
9120: 65 63 6b 69 6e 67 20 66 6f 72 20 54 63 6c 20 73  ecking for Tcl s
9130: 68 65 6c 6c 2e 2e 2e 20 6e 6f 5c 6e 22 0d 0a 20  hell... no\n".. 
9140: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
9150: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
9160: 46 6f 72 50 6f 77 65 72 53 68 65 6c 6c 20 7b 20  ForPowerShell { 
9170: 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20  channel } {..   
9180: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe
9190: 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67  l "---- checking
91a0: 20 66 6f 72 20 50 6f 77 65 72 53 68 65 6c 6c 2e   for PowerShell.
91b0: 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  .. "....      #.
91c0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43  .      # NOTE: C
91d0: 61 6e 20 74 68 65 20 50 6f 77 65 72 53 68 65 6c  an the PowerShel
91e0: 6c 20 61 73 73 65 6d 62 6c 79 20 62 65 20 6c 6f  l assembly be lo
91f0: 61 64 65 64 3f 0d 0a 20 20 20 20 20 20 23 0d 0a  aded?..      #..
9200: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
9210: 20 7b 6f 62 6a 65 63 74 20 72 65 73 6f 6c 76 65   {object resolve
9220: 20 53 79 73 74 65 6d 2e 4d 61 6e 61 67 65 6d 65   System.Manageme
9230: 6e 74 2e 41 75 74 6f 6d 61 74 69 6f 6e 7d 20 5c  nt.Automation} \
9240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9250: 61 73 73 65 6d 62 6c 79 5d 20 3d 3d 20 30 7d 20  assembly] == 0} 
9260: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
9270: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
9280: 45 3a 20 59 65 73 2c 20 69 74 20 61 70 70 65 61  E: Yes, it appea
9290: 72 73 20 74 68 61 74 20 69 74 20 69 73 20 61 76  rs that it is av
92a0: 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  ailable...      
92b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64    #..        add
92c0: 43 6f 6e 73 74 72 61 69 6e 74 20 70 6f 77 65 72  Constraint power
92d0: 53 68 65 6c 6c 0d 0a 0d 0a 20 20 20 20 20 20 20  Shell....       
92e0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 
92f0: 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65  yes\n..      } e
9300: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
9310: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no
9320: 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  \n..      }..   
9330: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc 
9340: 63 68 65 63 6b 46 6f 72 57 69 78 20 7b 20 63 68  checkForWix { ch
9350: 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20  annel } {..     
9360: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 
9370: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66  "---- checking f
9380: 6f 72 20 57 69 58 2e 2e 2e 20 22 0d 0a 0d 0a 20  or WiX... ".... 
9390: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      # 
93a0: 4e 4f 54 45 3a 20 50 6c 61 74 66 6f 72 6d 20 6d  NOTE: Platform m
93b0: 75 73 74 20 62 65 20 57 69 6e 64 6f 77 73 20 66  ust be Windows f
93c0: 6f 72 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69  or this constrai
93d0: 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20  nt to..      #  
93e0: 20 20 20 20 20 65 76 65 6e 20 62 65 20 63 68 65       even be che
93f0: 63 6b 65 64 20 28 69 2e 65 2e 20 77 65 20 72 65  cked (i.e. we re
9400: 71 75 69 72 65 20 74 68 65 20 72 65 67 69 73 74  quire the regist
9410: 72 79 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ry)...      #.. 
9420: 20 20 20 20 20 69 66 20 7b 24 3a 3a 74 63 6c 5f       if {$::tcl_
9430: 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72  platform(platfor
9440: 6d 29 20 65 71 20 22 77 69 6e 64 6f 77 73 22 7d  m) eq "windows"}
9450: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
9460: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
9470: 54 45 3a 20 49 6e 64 69 63 61 74 65 20 74 68 61  TE: Indicate tha
9480: 74 20 77 65 20 68 61 76 65 20 6e 6f 74 20 66 6f  t we have not fo
9490: 75 6e 64 20 69 74 20 79 65 74 2e 0d 0a 20 20 20  und it yet...   
94a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
94b0: 73 65 74 20 64 69 72 65 63 74 6f 72 79 20 22 22  set directory ""
94c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #.. 
94d0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 48         # NOTE: H
94e0: 61 76 65 20 77 65 20 6e 6f 74 20 66 6f 75 6e 64  ave we not found
94f0: 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 79   the directory y
9500: 65 74 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  et?..        #..
9510: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #       
9520: 59 65 73 2c 20 74 68 69 73 20 69 73 20 73 6f 6d  Yes, this is som
9530: 65 77 68 61 74 20 72 65 64 75 6e 64 61 6e 74 20  ewhat redundant 
9540: 62 65 63 61 75 73 65 20 77 65 20 6a 75 73 74 20  because we just 
9550: 73 65 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20  set..        #  
9560: 20 20 20 20 20 74 68 65 20 64 69 72 65 63 74 6f       the directo
9570: 72 79 20 74 6f 20 61 6e 20 65 6d 70 74 79 20 73  ry to an empty s
9580: 74 72 69 6e 67 20 28 61 62 6f 76 65 29 3b 20 68  tring (above); h
9590: 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20  owever,..       
95a0: 20 23 20 20 20 20 20 20 20 6d 61 69 6e 74 61 69   #       maintai
95b0: 6e 69 6e 67 20 61 20 75 6e 69 66 6f 72 6d 20 70  ning a uniform p
95c0: 61 74 74 65 72 6e 20 69 73 20 6d 6f 72 65 20 69  attern is more i
95d0: 6d 70 6f 72 74 61 6e 74 2e 0d 0a 20 20 20 20 20  mportant...     
95e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
95f0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
9600: 20 24 64 69 72 65 63 74 6f 72 79 5d 20 3d 3d 20   $directory] == 
9610: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..     
9620: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
9630: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check 
9640: 66 6f 72 20 74 68 65 20 57 49 58 20 65 6e 76 69  for the WIX envi
9650: 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65  ronment variable
9660: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
9670: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69            if {[i
9680: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76  nfo exists ::env
9690: 28 57 49 58 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  (WIX)]} then {..
96a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
96b0: 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20  directory [file 
96c0: 6e 6f 72 6d 61 6c 69 7a 65 20 5b 73 74 72 69 6e  normalize [strin
96d0: 67 20 74 72 69 6d 72 69 67 68 74 20 24 3a 3a 65  g trimright $::e
96e0: 6e 76 28 57 49 58 29 5d 5d 0d 0a 0d 0a 20 20 20  nv(WIX)]]....   
96f0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74           if {[st
9700: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 72  ring length $dir
9710: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
9720: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..           
9730: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..          
9740: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 6e      # NOTE: We n
9750: 65 65 64 20 74 68 65 20 64 69 72 65 63 74 6f 72  eed the director
9760: 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  y containing the
9770: 20 62 69 6e 61 72 69 65 73 2e 0d 0a 20 20 20 20   binaries...    
9780: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..   
9790: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64             set d
97a0: 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 6a  irectory [file j
97b0: 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 62  oin $directory b
97c0: 69 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  in]....         
97d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
97e0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f        # NOTE: Do
97f0: 65 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  es the directory
9800: 20 61 63 74 75 61 6c 6c 79 20 65 78 69 73 74 3f   actually exist?
9810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9820: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..             
9830: 20 69 66 20 7b 5b 66 69 6c 65 20 69 73 64 69 72   if {[file isdir
9840: 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72  ectory $director
9850: 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..    
9860: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #.. 
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
9880: 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 20   NOTE: The file 
9890: 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 72 69 6d  name of the prim
98a0: 61 72 79 20 57 69 58 20 61 73 73 65 6d 62 6c 79  ary WiX assembly
98b0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
98c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..          
98d0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61        set fileNa
98e0: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64  me [file join $d
98f0: 69 72 65 63 74 6f 72 79 20 77 69 78 2e 64 6c 6c  irectory wix.dll
9900: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....           
9910: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
9920: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE: 
9930: 57 65 20 64 6f 20 6e 6f 74 20 6b 6e 6f 77 20 74  We do not know t
9940: 68 65 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  he file version 
9950: 79 65 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  yet...          
9960: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..       
9970: 20 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72           set ver
9980: 73 69 6f 6e 20 22 22 0d 0a 0d 0a 20 20 20 20 20  sion ""....     
9990: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..  
99a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                # 
99b0: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
99c0: 20 71 75 65 72 79 20 74 68 65 20 76 65 72 73 69   query the versi
99d0: 6f 6e 20 6f 66 20 74 68 65 20 66 69 6c 65 2e 0d  on of the file..
99e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
99f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..            
9a00: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
9a10: 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 24 66 69  file version $fi
9a20: 6c 65 4e 61 6d 65 7d 20 76 65 72 73 69 6f 6e 5d  leName} version]
9a30: 20 3d 3d 20 30 20 26 26 20 5c 0d 0a 20 20 20 20   == 0 && \..    
9a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a50: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
9a60: 76 65 72 73 69 6f 6e 5d 20 3e 20 30 7d 20 74 68  version] > 0} th
9a70: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..          
9a80: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..     
9a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
9aa0: 4f 54 45 3a 20 49 6e 64 69 63 61 74 65 20 77 68  OTE: Indicate wh
9ab0: 65 72 65 20 77 65 20 66 6f 75 6e 64 20 74 68 65  ere we found the
9ac0: 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20   file...        
9ad0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..   
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
9af0: 65 74 20 77 68 65 72 65 20 65 6e 76 69 72 6f 6e  et where environ
9b00: 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20  ment..          
9b10: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
9b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b30: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..           
9b40: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54         # NOTE: T
9b50: 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74  he file does not
9b60: 20 65 78 69 73 74 20 6f 72 20 69 73 20 6e 6f 74   exist or is not
9b70: 20 70 72 6f 70 65 72 6c 79 0d 0a 20 20 20 20 20   properly..     
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #  
9b90: 20 20 20 20 20 76 65 72 73 69 6f 6e 65 64 2e 0d       versioned..
9ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9bb0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..          
9bc0: 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65          set dire
9bd0: 63 74 6f 72 79 20 22 22 0d 0a 20 20 20 20 20 20  ctory ""..      
9be0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
9bf0: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
9c00: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..           
9c10: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
9c20: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE: 
9c30: 54 68 65 20 64 69 72 65 63 74 6f 72 79 20 64 6f  The directory do
9c40: 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 0d 0a 20  es not exist... 
9c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
9c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9c70: 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20    set directory 
9c80: 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ""..            
9c90: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
9ca0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
9cb0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
9cc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..       
9cd0: 20 23 20 4e 4f 54 45 3a 20 48 61 76 65 20 77 65   # NOTE: Have we
9ce0: 20 6e 6f 74 20 66 6f 75 6e 64 20 74 68 65 20 64   not found the d
9cf0: 69 72 65 63 74 6f 72 79 20 79 65 74 3f 0d 0a 20  irectory yet?.. 
9d00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..      
9d10: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
9d20: 6e 67 74 68 20 24 64 69 72 65 63 74 6f 72 79 5d  ngth $directory]
9d30: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {.. 
9d40: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..    
9d50: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
9d60: 67 69 73 74 72 79 20 68 69 76 65 20 77 68 65 72  gistry hive wher
9d70: 65 20 57 69 58 20 69 6e 73 74 61 6c 6c 20 69 6e  e WiX install in
9d80: 66 6f 72 6d 61 74 69 6f 6e 0d 0a 20 20 20 20 20  formation..     
9d90: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20       #       is 
9da0: 73 74 6f 72 65 64 2e 0d 0a 20 20 20 20 20 20 20  stored...       
9db0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..          
9dc0: 73 65 74 20 6b 65 79 20 7b 48 4b 45 59 5f 4c 4f  set key {HKEY_LO
9dd0: 43 41 4c 5f 4d 41 43 48 49 4e 45 5c 53 4f 46 54  CAL_MACHINE\SOFT
9de0: 57 41 52 45 5c 4d 69 63 72 6f 73 6f 66 74 5c 57  WARE\Microsoft\W
9df0: 69 6e 64 6f 77 73 20 49 6e 73 74 61 6c 6c 65 72  indows Installer
9e00: 20 58 4d 4c 7d 0d 0a 0d 0a 20 20 20 20 20 20 20   XML}....       
9e10: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..          
9e20: 23 20 4e 4f 54 45 3a 20 54 68 65 20 76 65 72 73  # NOTE: The vers
9e30: 69 6f 6e 73 20 6f 66 20 57 69 58 20 74 68 61 74  ions of WiX that
9e40: 20 77 65 20 73 75 70 70 6f 72 74 2e 0d 0a 20 20   we support...  
9e50: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..     
9e60: 20 20 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e       set version
9e70: 73 20 5b 6c 69 73 74 20 33 2e 35 20 33 2e 30 5d  s [list 3.5 3.0]
9e80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  ....          #.
9e90: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
9ea0: 45 3a 20 43 68 65 63 6b 20 65 61 63 68 20 76 65  E: Check each ve
9eb0: 72 73 69 6f 6e 2c 20 73 74 6f 70 70 69 6e 67 20  rsion, stopping 
9ec0: 77 68 65 6e 20 6f 6e 65 20 69 73 20 66 6f 75 6e  when one is foun
9ed0: 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  d...          #.
9ee0: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
9ef0: 63 68 20 76 65 72 73 69 6f 6e 20 24 76 65 72 73  ch version $vers
9f00: 69 6f 6e 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ions {..        
9f10: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..         
9f20: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
9f30: 70 74 20 74 6f 20 66 65 74 63 68 20 74 68 65 20  pt to fetch the 
9f40: 57 69 58 20 69 6e 73 74 61 6c 6c 20 64 69 72 65  WiX install dire
9f50: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  ctory..         
9f60: 20 20 20 23 20 20 20 20 20 20 20 76 61 6c 75 65     #       value
9f70: 20 66 72 6f 6d 20 74 68 65 20 72 65 67 69 73 74   from the regist
9f80: 72 79 2c 20 72 65 6d 6f 76 69 6e 67 20 74 68 65  ry, removing the
9f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            # 
9fa0: 20 20 20 20 20 20 74 72 61 69 6c 69 6e 67 20 62        trailing b
9fb0: 61 63 6b 73 6c 61 73 68 2c 20 69 66 20 61 6e 79  ackslash, if any
9fc0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
9fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
9fe0: 74 20 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c  t directory [fil
9ff0: 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 73 74 72  e normalize [str
a000: 69 6e 67 20 74 72 69 6d 72 69 67 68 74 20 5b 6f  ing trimright [o
a010: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a  bject invoke \..
a020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a030: 4d 69 63 72 6f 73 6f 66 74 2e 57 69 6e 33 32 2e  Microsoft.Win32.
a040: 52 65 67 69 73 74 72 79 20 47 65 74 56 61 6c 75  Registry GetValu
a050: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..           
a060: 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73       [appendArgs
a070: 20 24 6b 65 79 20 5c 5c 20 24 76 65 72 73 69 6f   $key \\ $versio
a080: 6e 5d 20 49 6e 73 74 61 6c 6c 52 6f 6f 74 20 5c  n] InstallRoot \
a090: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a0a0: 20 20 6e 75 6c 6c 5d 20 5c 5c 5d 5d 0d 0a 0d 0a    null] \\]]....
a0b0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #.. 
a0c0: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
a0d0: 45 3a 20 44 6f 65 73 20 74 68 65 20 64 69 72 65  E: Does the dire
a0e0: 63 74 6f 72 79 20 6e 61 6d 65 20 6c 6f 6f 6b 20  ctory name look 
a0f0: 76 61 6c 69 64 20 61 6e 64 0d 0a 20 20 20 20 20  valid and..     
a100: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64         #       d
a110: 6f 65 73 20 69 74 20 61 63 74 75 61 6c 6c 79 20  oes it actually 
a120: 65 78 69 73 74 3f 0d 0a 20 20 20 20 20 20 20 20  exist?..        
a130: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..         
a140: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
a150: 65 6e 67 74 68 20 24 64 69 72 65 63 74 6f 72 79  ength $directory
a160: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {.. 
a170: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
a180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                # 
a190: 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 65 20 64  NOTE: Does the d
a1a0: 69 72 65 63 74 6f 72 79 20 61 63 74 75 61 6c 6c  irectory actuall
a1b0: 79 20 65 78 69 73 74 3f 0d 0a 20 20 20 20 20 20  y exist?..      
a1c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..     
a1d0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69           if {[fi
a1e0: 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24  le isdirectory $
a1f0: 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  directory]} then
a200: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a210: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..         
a220: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54         # NOTE: T
a230: 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 66 20  he file name of 
a240: 74 68 65 20 70 72 69 6d 61 72 79 20 57 69 58 20  the primary WiX 
a250: 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20  assembly...     
a260: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..  
a270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
a280: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
a290: 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79   join $directory
a2a0: 20 77 69 78 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20   wix.dll]....   
a2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2d0: 23 20 4e 4f 54 45 3a 20 57 65 20 64 6f 20 6e 6f  # NOTE: We do no
a2e0: 74 20 6b 6e 6f 77 20 74 68 65 20 66 69 6c 65 20  t know the file 
a2f0: 76 65 72 73 69 6f 6e 20 79 65 74 2e 0d 0a 20 20  version yet...  
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
a310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a320: 20 73 65 74 20 76 65 72 73 69 6f 6e 20 22 22 0d   set version "".
a330: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
a340: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..          
a350: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
a360: 74 65 6d 70 74 20 74 6f 20 71 75 65 72 79 20 74  tempt to query t
a370: 68 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  he version of th
a380: 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20  e file...       
a390: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..    
a3a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
a3b0: 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 76 65 72  [catch {file ver
a3c0: 73 69 6f 6e 20 24 66 69 6c 65 4e 61 6d 65 7d 20  sion $fileName} 
a3d0: 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 20 26 26  version] == 0 &&
a3e0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
a3f0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string 
a400: 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d  length $version]
a410: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..  
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a430: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..             
a440: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 6e 64       # NOTE: Ind
a450: 69 63 61 74 65 20 77 68 65 72 65 20 77 65 20 66  icate where we f
a460: 6f 75 6e 64 20 74 68 65 20 66 69 6c 65 2e 0d 0a  ound the file...
a470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a480: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..           
a490: 20 20 20 20 20 20 20 73 65 74 20 77 68 65 72 65         set where
a4a0: 20 72 65 67 69 73 74 72 79 0d 0a 0d 0a 20 20 20   registry....   
a4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
a4c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a4d0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 66      # NOTE: We f
a4e0: 6f 75 6e 64 20 69 74 2c 20 62 61 69 6c 20 6f 75  ound it, bail ou
a4f0: 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  t now...        
a500: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..   
a510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
a520: 72 65 61 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  reak..          
a530: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
a540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a550: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..           
a560: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54         # NOTE: T
a570: 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74  he file does not
a580: 20 65 78 69 73 74 20 6f 72 20 69 73 20 6e 6f 74   exist or is not
a590: 20 70 72 6f 70 65 72 6c 79 0d 0a 20 20 20 20 20   properly..     
a5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #  
a5b0: 20 20 20 20 20 76 65 72 73 69 6f 6e 65 64 2e 0d       versioned..
a5c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a5d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..          
a5e0: 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65          set dire
a5f0: 63 74 6f 72 79 20 22 22 0d 0a 20 20 20 20 20 20  ctory ""..      
a600: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
a610: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
a620: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..           
a630: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
a640: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE: 
a650: 54 68 65 20 64 69 72 65 63 74 6f 72 79 20 64 6f  The directory do
a660: 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 0d 0a 20  es not exist... 
a670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
a680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a690: 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20    set directory 
a6a0: 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ""..            
a6b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
a6c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
a6d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
a6e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..       
a6f0: 20 23 20 4e 4f 54 45 3a 20 44 69 64 20 77 65 20   # NOTE: Did we 
a700: 66 69 6e 64 20 74 68 65 20 64 69 72 65 63 74 6f  find the directo
a710: 72 79 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ry?..        #..
a720: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
a730: 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 72 65  ing length $dire
a740: 63 74 6f 72 79 5d 20 3e 20 30 20 26 26 20 5c 0d  ctory] > 0 && \.
a750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
a760: 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24  le isdirectory $
a770: 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  directory]} then
a780: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
a790: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
a7a0: 45 3a 20 59 65 73 2c 20 69 74 20 61 70 70 65 61  E: Yes, it appea
a7b0: 72 73 20 74 68 61 74 20 69 74 20 69 73 20 61 76  rs that it is av
a7c0: 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  ailable...      
a7d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..         
a7e0: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 77   addConstraint w
a7f0: 69 78 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ix....          
a800: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
a810: 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20 64 69  OTE: Save the di
a820: 72 65 63 74 6f 72 79 20 66 6f 72 20 6c 61 74 65  rectory for late
a830: 72 20 75 73 61 67 65 20 62 79 0d 0a 20 20 20 20  r usage by..    
a840: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
a850: 65 20 74 65 73 74 20 69 74 73 65 6c 66 2e 0d 0a  e test itself...
a860: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..   
a870: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73         set ::tes
a880: 74 5f 77 69 78 20 24 64 69 72 65 63 74 6f 72 79  t_wix $directory
a890: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  ....          #.
a8a0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
a8b0: 45 3a 20 53 68 6f 77 20 77 68 65 72 65 20 77 65  E: Show where we
a8c0: 20 66 6f 75 6e 64 20 69 74 2e 0d 0a 20 20 20 20   found it...    
a8d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..       
a8e0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe
a8f0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79  l [appendArgs "y
a900: 65 73 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22  es (" $version "
a910: 2c 20 76 69 61 20 22 20 24 77 68 65 72 65 20 22  , via " $where "
a920: 2c 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  , \"" \..       
a930: 20 20 20 20 20 20 20 24 64 69 72 65 63 74 6f 72         $director
a940: 79 20 22 5c 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20  y "\")\n"]....  
a950: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..     
a960: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20       # NOTE: We 
a970: 61 72 65 20 64 6f 6e 65 20 68 65 72 65 2c 20 72  are done here, r
a980: 65 74 75 72 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20  eturn now...    
a990: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..       
a9a0: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20     return..     
a9b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
a9c0: 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68  .      tputs $ch
a9d0: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20  annel no\n..    
a9e0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
a9f0: 68 65 63 6b 46 6f 72 4d 61 6e 61 67 65 64 44 65  heckForManagedDe
aa00: 62 75 67 67 65 72 20 7b 20 63 68 61 6e 6e 65 6c  bugger { channel
aa10: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74   } {..      tput
aa20: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "----
aa30: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 6d 61   checking for ma
aa40: 6e 61 67 65 64 20 64 65 62 75 67 67 65 72 2e 2e  naged debugger..
aa50: 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  . "....      #..
aa60: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 73        # NOTE: Is
aa70: 20 74 68 65 20 6d 61 6e 61 67 65 64 20 64 65 62   the managed deb
aa80: 75 67 67 65 72 20 61 74 74 61 63 68 65 64 3f 0d  ugger attached?.
aa90: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..      
aaa0: 69 66 20 7b 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  if {[object invo
aab0: 6b 65 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ke System.Diagno
aac0: 73 74 69 63 73 2e 44 65 62 75 67 67 65 72 20 49  stics.Debugger I
aad0: 73 41 74 74 61 63 68 65 64 5d 7d 20 74 68 65 6e  sAttached]} then
aae0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #.. 
aaf0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59         # NOTE: Y
ab00: 65 73 2c 20 69 74 20 61 70 70 65 61 72 73 20 74  es, it appears t
ab10: 68 61 74 20 69 74 20 69 73 20 61 74 74 61 63 68  hat it is attach
ab20: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ed...        #..
ab30: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
ab40: 72 61 69 6e 74 20 6d 61 6e 61 67 65 64 44 65 62  raint managedDeb
ab50: 75 67 67 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20  ugger....       
ab60: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 
ab70: 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65  yes\n..      } e
ab80: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
ab90: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no
aba0: 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  \n..      }..   
abb0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc 
abc0: 63 68 65 63 6b 46 6f 72 53 63 72 69 70 74 44 65  checkForScriptDe
abd0: 62 75 67 67 65 72 20 7b 20 63 68 61 6e 6e 65 6c  bugger { channel
abe0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74   } {..      tput
abf0: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "----
ac00: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 73 63   checking for sc
ac10: 72 69 70 74 20 64 65 62 75 67 67 65 72 2e 2e 2e  ript debugger...
ac20: 20 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   "....      #.. 
ac30: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20       # NOTE: Is 
ac40: 74 68 65 20 73 63 72 69 70 74 20 64 65 62 75 67  the script debug
ac50: 67 65 72 20 61 76 61 69 6c 61 62 6c 65 3f 0d 0a  ger available?..
ac60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
ac70: 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63  f {[catch {objec
ac80: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags 
ac90: 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72  +NonPublic Inter
aca0: 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
acb0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
acc0: 20 20 44 65 62 75 67 67 65 72 7d 20 64 65 62 75    Debugger} debu
acd0: 67 67 65 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  gger] == 0} then
ace0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #.. 
acf0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57         # NOTE: W
ad00: 65 20 64 6f 20 6e 6f 74 20 6f 77 6e 20 74 68 69  e do not own thi
ad10: 73 2c 20 64 6f 20 6e 6f 74 20 64 69 73 70 6f 73  s, do not dispos
ad20: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  e it...        #
ad30: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
ad40: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 65  tring length $de
ad50: 62 75 67 67 65 72 5d 20 3e 20 30 7d 20 74 68 65  bugger] > 0} the
ad60: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  n {..          o
ad70: 62 6a 65 63 74 20 66 6c 61 67 73 20 24 64 65 62  bject flags $deb
ad80: 75 67 67 65 72 20 2b 4e 6f 44 69 73 70 6f 73 65  ugger +NoDispose
ad90: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
ada0: 20 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67 65         if {[rege
adb0: 78 70 20 2d 2d 20 7b 5e 44 65 62 75 67 67 65 72  xp -- {^Debugger
adc0: 23 5c 64 2b 24 7d 20 24 64 65 62 75 67 67 65 72  #\d+$} $debugger
add0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..     
ade0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..        
adf0: 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 69    # NOTE: Yes, i
ae00: 74 20 61 70 70 65 61 72 73 20 74 68 61 74 20 69  t appears that i
ae10: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d  t is available..
ae20: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..  
ae30: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
ae40: 72 61 69 6e 74 20 73 63 72 69 70 74 44 65 62 75  raint scriptDebu
ae50: 67 67 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gger....        
ae60: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel
ae70: 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20   yes\n....      
ae80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..         
ae90: 20 23 20 4e 4f 54 45 3a 20 57 65 20 61 72 65 20   # NOTE: We are 
aea0: 64 6f 6e 65 20 68 65 72 65 2c 20 72 65 74 75 72  done here, retur
aeb0: 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  n now...        
aec0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72    #..          r
aed0: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 20 20 7d  eturn..        }
aee0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
aef0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe
af00: 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 7d 0d 0a 0c  l no\n..    }...
af10: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
af20: 46 6f 72 53 63 72 69 70 74 44 65 62 75 67 67 65  ForScriptDebugge
af30: 72 49 6e 74 65 72 70 72 65 74 65 72 20 7b 20 63  rInterpreter { c
af40: 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20  hannel } {..    
af50: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel
af60: 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking 
af70: 66 6f 72 20 73 63 72 69 70 74 20 64 65 62 75 67  for script debug
af80: 67 65 72 20 69 6e 74 65 72 70 72 65 74 65 72 2e  ger interpreter.
af90: 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  .. "....      #.
afa0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
afb0: 73 20 74 68 65 20 73 63 72 69 70 74 20 64 65 62  s the script deb
afc0: 75 67 67 65 72 20 69 6e 74 65 72 70 72 65 74 65  ugger interprete
afd0: 72 20 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20  r available?..  
afe0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if 
aff0: 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20  {[catch {object 
b000: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
b010: 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72  onPublic Interpr
b020: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 5c  eter.GetActive \
b030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b040: 44 65 62 75 67 67 65 72 7d 20 64 65 62 75 67 67  Debugger} debugg
b050: 65 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  er] == 0} then {
b060: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..   
b070: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20       # NOTE: We 
b080: 64 6f 20 6e 6f 74 20 6f 77 6e 20 74 68 69 73 2c  do not own this,
b090: 20 64 6f 20 6e 6f 74 20 64 69 73 70 6f 73 65 20   do not dispose 
b0a0: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
b0b0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
b0c0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 65 62 75  ing length $debu
b0d0: 67 67 65 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20  gger] > 0} then 
b0e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
b0f0: 65 63 74 20 66 6c 61 67 73 20 24 64 65 62 75 67  ect flags $debug
b100: 67 65 72 20 2b 4e 6f 44 69 73 70 6f 73 65 0d 0a  ger +NoDispose..
b110: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b120: 20 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70       if {[regexp
b130: 20 2d 2d 20 7b 5e 44 65 62 75 67 67 65 72 23 5c   -- {^Debugger#\
b140: 64 2b 24 7d 20 24 64 65 62 75 67 67 65 72 5d 20  d+$} $debugger] 
b150: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..          
b160: 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74    [catch {object
b170: 20 69 6e 76 6f 6b 65 20 24 64 65 62 75 67 67 65   invoke $debugge
b180: 72 20 49 6e 74 65 72 70 72 65 74 65 72 7d 20 69  r Interpreter} i
b190: 6e 74 65 72 70 5d 20 3d 3d 20 30 7d 20 74 68 65  nterp] == 0} the
b1a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
b1b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
b1c0: 54 45 3a 20 57 65 20 64 6f 20 6e 6f 74 20 6f 77  TE: We do not ow
b1d0: 6e 20 74 68 69 73 2c 20 64 6f 20 6e 6f 74 20 64  n this, do not d
b1e0: 69 73 70 6f 73 65 20 69 74 2e 0d 0a 20 20 20 20  ispose it...    
b1f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..       
b200: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
b210: 65 6e 67 74 68 20 24 69 6e 74 65 72 70 5d 20 3e  ength $interp] >
b220: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..    
b230: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66          object f
b240: 6c 61 67 73 20 24 69 6e 74 65 72 70 20 2b 4e 6f  lags $interp +No
b250: 44 69 73 70 6f 73 65 0d 0a 20 20 20 20 20 20 20  Dispose..       
b260: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
b270: 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 2d 2d    if {[regexp --
b280: 20 7b 5e 49 6e 74 65 72 70 72 65 74 65 72 23 5c   {^Interpreter#\
b290: 64 2b 24 7d 20 24 69 6e 74 65 72 70 5d 7d 20 74  d+$} $interp]} t
b2a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..         
b2b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..          
b2c0: 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 69    # NOTE: Yes, i
b2d0: 74 20 61 70 70 65 61 72 73 20 74 68 61 74 20 69  t appears that i
b2e0: 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d  t is available..
b2f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
b300: 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 43              addC
b310: 6f 6e 73 74 72 61 69 6e 74 20 73 63 72 69 70 74  onstraint script
b320: 44 65 62 75 67 67 65 72 49 6e 74 65 72 70 72 65  DebuggerInterpre
b330: 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ter....         
b340: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe
b350: 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20  l yes\n....     
b360: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..      
b370: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65        # NOTE: We
b380: 20 61 72 65 20 64 6f 6e 65 20 68 65 72 65 2c 20   are done here, 
b390: 72 65 74 75 72 6e 20 6e 6f 77 2e 0d 0a 20 20 20  return now...   
b3a0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..    
b3b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a          return..
b3c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b3d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
b3e0: 0a 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24  ...      tputs $
b3f0: 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20  channel no\n..  
b400: 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 23 23 23 23    }....    #####
b410: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b420: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b430: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b450: 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23  ######..    ####
b460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b470: 23 23 23 23 23 23 23 23 23 20 45 4e 44 20 45 61  ######### END Ea
b480: 67 6c 65 20 4f 4e 4c 59 20 23 23 23 23 23 23 23  gle ONLY #######
b490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b4a0: 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23  #######..    ###
b4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b4c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b4f0: 23 23 23 23 23 23 23 23 0d 0a 20 20 7d 20 65 6c  ########..  } el
b500: 73 65 20 7b 0d 0a 20 20 20 20 23 23 23 23 23 23  se {..    ######
b510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b550: 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23  #####..    #####
b560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b570: 23 23 23 23 23 23 23 23 20 42 45 47 49 4e 20 54  ######## BEGIN T
b580: 63 6c 20 4f 4e 4c 59 20 23 23 23 23 23 23 23 23  cl ONLY ########
b590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b5a0: 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23  ######..    ####
b5b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b5c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b5d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b5e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b5f0: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 23  #######....    #
b600: 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65  ..    # NOTE: We
b610: 20 6e 65 65 64 20 73 65 76 65 72 61 6c 20 6f 66   need several of
b620: 20 6f 75 72 20 74 65 73 74 20 63 6f 6e 73 74 72   our test constr
b630: 61 69 6e 74 20 72 65 6c 61 74 65 64 20 63 6f 6d  aint related com
b640: 6d 61 6e 64 73 20 69 6e 20 74 68 65 0d 0a 20 20  mands in the..  
b650: 20 20 23 20 20 20 20 20 20 20 67 6c 6f 62 61 6c    #       global
b660: 20 6e 61 6d 65 73 70 61 63 65 2e 0d 0a 20 20 20   namespace...   
b670: 20 23 0d 0a 20 20 20 20 65 78 70 6f 72 74 41 6e   #..    exportAn
b680: 64 49 6d 70 6f 72 74 50 61 63 6b 61 67 65 43 6f  dImportPackageCo
b690: 6d 6d 61 6e 64 73 20 5b 6e 61 6d 65 73 70 61 63  mmands [namespac
b6a0: 65 20 63 75 72 72 65 6e 74 5d 20 5b 6c 69 73 74  e current] [list
b6b0: 20 63 68 65 63 6b 46 6f 72 50 6c 61 74 66 6f 72   checkForPlatfor
b6c0: 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 63 68 65  m \..        che
b6d0: 63 6b 46 6f 72 45 61 67 6c 65 20 63 68 65 63 6b  ckForEagle check
b6e0: 46 6f 72 47 61 72 75 64 61 20 63 68 65 63 6b 46  ForGaruda checkF
b6f0: 6f 72 53 68 65 6c 6c 20 63 68 65 63 6b 46 6f 72  orShell checkFor
b700: 44 65 62 75 67 20 5c 0d 0a 20 20 20 20 20 20 20  Debug \..       
b710: 20 63 68 65 63 6b 46 6f 72 56 65 72 73 69 6f 6e   checkForVersion
b720: 20 63 68 65 63 6b 46 6f 72 43 6f 6d 6d 61 6e 64   checkForCommand
b730: 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 63 68   checkForFile ch
b740: 65 63 6b 46 6f 72 4e 61 74 69 76 65 43 6f 64 65  eckForNativeCode
b750: 20 5c 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63   \..        chec
b760: 6b 46 6f 72 54 69 70 31 32 37 20 63 68 65 63 6b  kForTip127 check
b770: 46 6f 72 54 69 70 31 39 34 20 63 68 65 63 6b 46  ForTip194 checkF
b780: 6f 72 54 69 70 32 34 31 20 63 68 65 63 6b 46 6f  orTip241 checkFo
b790: 72 54 69 70 32 38 35 20 5c 0d 0a 20 20 20 20 20  rTip285 \..     
b7a0: 20 20 20 63 68 65 63 6b 46 6f 72 50 65 72 66 6f     checkForPerfo
b7b0: 72 6d 61 6e 63 65 20 63 68 65 63 6b 46 6f 72 54  rmance checkForT
b7c0: 69 6d 69 6e 67 20 63 68 65 63 6b 46 6f 72 49 6e  iming checkForIn
b7d0: 74 65 72 61 63 74 69 76 65 20 5c 0d 0a 20 20 20  teractive \..   
b7e0: 20 20 20 20 20 63 68 65 63 6b 46 6f 72 55 73 65       checkForUse
b7f0: 72 49 6e 74 65 72 61 63 74 69 6f 6e 20 63 68 65  rInteraction che
b800: 63 6b 46 6f 72 4e 65 74 77 6f 72 6b 5d 20 66 61  ckForNetwork] fa
b810: 6c 73 65 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 20  lse false....   
b820: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
b830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b860: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20  ############..  
b870: 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
b880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b890: 20 45 4e 44 20 54 63 6c 20 4f 4e 4c 59 20 23 23   END Tcl ONLY ##
b8a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b8b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20  #############.. 
b8c0: 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
b8d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b8e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b8f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b900: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
b910: 20 20 7d 0d 0a 0c 0d 0a 20 20 23 0d 0a 20 20 23    }.....  #..  #
b920: 20 4e 4f 54 45 3a 20 50 72 6f 76 69 64 65 20 74   NOTE: Provide t
b930: 68 65 20 45 61 67 6c 65 20 74 65 73 74 20 63 6f  he Eagle test co
b940: 6e 73 74 72 61 69 6e 74 73 20 70 61 63 6b 61 67  nstraints packag
b950: 65 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72  e to the interpr
b960: 65 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61  eter...  #..  pa
b970: 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 45 61  ckage provide Ea
b980: 67 6c 65 54 65 73 74 43 6f 6e 73 74 72 61 69 6e  gleTestConstrain
b990: 74 73 20 5c 0d 0a 20 20 20 20 5b 65 78 70 72 20  ts \..    [expr 
b9a0: 7b 5b 69 73 45 61 67 6c 65 5d 20 3f 20 5b 69 6e  {[isEagle] ? [in
b9b0: 66 6f 20 65 6e 67 69 6e 65 20 50 61 74 63 68 4c  fo engine PatchL
b9c0: 65 76 65 6c 5d 20 3a 20 31 2e 30 7d 5d 0d 0a 7d  evel] : 1.0}]..}
b9d0: 0d 0a 0c                                         ...