System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 463685ad567056b88577b7d858f288a464b4d1af:


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 70 6b 67 74 2e 65 61 67 6c 65  .#..# pkgt.eagle
0060: 20 2d 2d 0d 0a 23 0d 0a 23 20 45 78 74 65 6e 73   --..#..# Extens
0070: 69 62 6c 65 20 41 64 61 70 74 61 62 6c 65 20 47  ible Adaptable G
0080: 65 6e 65 72 61 6c 69 7a 65 64 20 4c 6f 67 69 63  eneralized Logic
0090: 20 45 6e 67 69 6e 65 20 28 45 61 67 6c 65 29 0d   Engine (Eagle).
00a0: 0a 23 20 45 61 67 6c 65 20 50 61 63 6b 61 67 65  .# Eagle Package
00b0: 20 54 6f 6f 6c 73 65 74 20 50 61 63 6b 61 67 65   Toolset Package
00c0: 20 46 69 6c 65 0d 0a 23 0d 0a 23 20 43 6f 70 79   File..#..# Copy
00d0: 72 69 67 68 74 20 28 63 29 20 32 30 30 37 2d 32  right (c) 2007-2
00e0: 30 31 32 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  012 by Joe Mista
00f0: 63 68 6b 69 6e 2e 20 20 41 6c 6c 20 72 69 67 68  chkin.  All righ
0100: 74 73 20 72 65 73 65 72 76 65 64 2e 0d 0a 23 0d  ts reserved...#.
0110: 0a 23 20 53 65 65 20 74 68 65 20 66 69 6c 65 20  .# See the file 
0120: 22 6c 69 63 65 6e 73 65 2e 74 65 72 6d 73 22 20  "license.terms" 
0130: 66 6f 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  for information 
0140: 6f 6e 20 75 73 61 67 65 20 61 6e 64 20 72 65 64  on usage and red
0150: 69 73 74 72 69 62 75 74 69 6f 6e 20 6f 66 0d 0a  istribution of..
0160: 23 20 74 68 69 73 20 66 69 6c 65 2c 20 61 6e 64  # this file, and
0170: 20 66 6f 72 20 61 20 44 49 53 43 4c 41 49 4d 45   for a DISCLAIME
0180: 52 20 4f 46 20 41 4c 4c 20 57 41 52 52 41 4e 54  R OF ALL WARRANT
0190: 49 45 53 2e 0d 0a 23 0d 0a 23 20 52 43 53 3a 20  IES...#..# RCS: 
01a0: 40 28 23 29 20 24 49 64 3a 20 24 0d 0a 23 0d 0a  @(#) $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 23 23 23 23 23 23 0d  ###############.
0200: 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a 20 55 73  ...#..# NOTE: Us
0210: 65 20 6f 75 72 20 6f 77 6e 20 6e 61 6d 65 73 70  e our own namesp
0220: 61 63 65 20 68 65 72 65 20 62 65 63 61 75 73 65  ace here because
0230: 20 65 76 65 6e 20 74 68 6f 75 67 68 20 77 65 20   even though we 
0240: 64 6f 20 6e 6f 74 20 64 69 72 65 63 74 6c 79 0d  do not directly.
0250: 0a 23 20 20 20 20 20 20 20 73 75 70 70 6f 72 74  .#       support
0260: 20 6e 61 6d 65 73 70 61 63 65 73 20 6f 75 72 73   namespaces ours
0270: 65 6c 76 65 73 2c 20 77 65 20 64 6f 20 6e 6f 74  elves, we do not
0280: 20 77 61 6e 74 20 74 6f 20 70 6f 6c 6c 75 74 65   want to pollute
0290: 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a 23 20 20   the global..#  
02a0: 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69       namespace i
02b0: 66 20 74 68 69 73 20 73 63 72 69 70 74 20 61 63  f this script ac
02c0: 74 75 61 6c 6c 79 20 65 6e 64 73 20 75 70 20 62  tually ends up b
02d0: 65 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20 69  eing evaluated i
02e0: 6e 20 54 63 6c 2e 0d 0a 23 0d 0a 6e 61 6d 65 73  n Tcl...#..names
02f0: 70 61 63 65 20 65 76 61 6c 20 3a 3a 45 61 67 6c  pace eval ::Eagl
0300: 65 20 7b 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f  e {..  #..  # NO
0310: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75  TE: This procedu
0320: 72 65 20 73 65 74 73 20 75 70 20 74 68 65 20 64  re sets up the d
0330: 65 66 61 75 6c 74 20 76 61 6c 75 65 73 20 66 6f  efault values fo
0340: 72 20 61 6c 6c 20 63 6f 6e 66 69 67 75 72 61 74  r all configurat
0350: 69 6f 6e 0d 0a 20 20 23 20 20 20 20 20 20 20 70  ion..  #       p
0360: 61 72 61 6d 65 74 65 72 73 20 75 73 65 64 20 62  arameters used b
0370: 79 20 74 68 69 73 20 70 61 63 6b 61 67 65 2e 20  y this package. 
0380: 20 49 66 20 74 68 65 20 66 6f 72 63 65 20 61 72   If the force ar
0390: 67 75 6d 65 6e 74 20 69 73 20 6e 6f 6e 2d 7a 65  gument is non-ze
03a0: 72 6f 2c 0d 0a 20 20 23 20 20 20 20 20 20 20 61  ro,..  #       a
03b0: 6e 79 20 65 78 69 73 74 69 6e 67 20 76 61 6c 75  ny existing valu
03c0: 65 73 20 77 69 6c 6c 20 62 65 20 6f 76 65 72 77  es will be overw
03d0: 72 69 74 74 65 6e 20 61 6e 64 20 73 65 74 20 62  ritten and set b
03e0: 61 63 6b 20 74 6f 20 74 68 65 69 72 0d 0a 20 20  ack to their..  
03f0: 23 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20  #       default 
0400: 76 61 6c 75 65 73 2e 0d 0a 20 20 23 0d 0a 20 20  values...  #..  
0410: 70 72 6f 63 20 73 65 74 75 70 50 61 63 6b 61 67  proc setupPackag
0420: 65 54 6f 6f 6c 73 65 74 56 61 72 73 20 7b 20 66  eToolsetVars { f
0430: 6f 72 63 65 20 7d 20 7b 0d 0a 20 20 20 20 23 0d  orce } {..    #.
0440: 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 69  .    # NOTE: Usi
0450: 6e 67 20 74 68 65 20 5b 67 65 74 41 75 78 69 6c  ng the [getAuxil
0460: 69 61 72 79 42 61 73 65 55 72 69 5d 20 70 72 6f  iaryBaseUri] pro
0470: 63 65 64 75 72 65 20 72 65 71 75 69 72 65 73 20  cedure requires 
0480: 74 68 65 20 75 70 64 61 74 65 0d 0a 20 20 20 20  the update..    
0490: 23 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e  #       package.
04a0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e  ..    #..    # N
04b0: 4f 54 45 3a 20 54 68 65 20 62 61 73 65 20 55 52  OTE: The base UR
04c0: 49 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20  I used to build 
04d0: 74 68 65 20 55 52 49 73 20 66 6f 72 20 74 68 65  the URIs for the
04e0: 20 50 61 63 6b 61 67 65 20 43 6c 69 65 6e 74 0d   Package Client.
04f0: 0a 20 20 20 20 23 20 20 20 20 20 20 20 54 6f 6f  .    #       Too
0500: 6c 73 65 74 20 64 6f 77 6e 6c 6f 61 64 73 2e 0d  lset downloads..
0510: 0a 20 20 20 20 23 0d 0a 20 20 20 20 76 61 72 69  .    #..    vari
0520: 61 62 6c 65 20 62 61 73 65 55 72 69 3b 20 23 20  able baseUri; # 
0530: 44 45 46 41 55 4c 54 3a 20 5b 67 65 74 41 75 78  DEFAULT: [getAux
0540: 69 6c 69 61 72 79 42 61 73 65 55 72 69 5d 20 2d  iliaryBaseUri] -
0550: 4f 52 2d 20 68 74 74 70 73 3a 2f 2f 75 72 6e 2e  OR- https://urn.
0560: 74 6f 2f 72 0d 0a 0d 0a 20 20 20 20 69 66 20 7b  to/r....    if {
0570: 24 66 6f 72 63 65 20 7c 7c 20 21 5b 69 6e 66 6f  $force || ![info
0580: 20 65 78 69 73 74 73 20 62 61 73 65 55 72 69 5d   exists baseUri]
0590: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
05a0: 69 66 20 7b 5b 69 73 45 61 67 6c 65 5d 7d 20 74  if {[isEagle]} t
05b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
05c0: 65 74 20 62 61 73 65 55 72 69 20 5b 67 65 74 41  et baseUri [getA
05d0: 75 78 69 6c 69 61 72 79 42 61 73 65 55 72 69 5d  uxiliaryBaseUri]
05e0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
05f0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 62 61  ..        set ba
0600: 73 65 55 72 69 20 68 74 74 70 73 3a 2f 2f 75 72  seUri https://ur
0610: 6e 2e 74 6f 2f 72 0d 0a 20 20 20 20 20 20 7d 0d  n.to/r..      }.
0620: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 0d  .    }....    #.
0630: 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65  .    # NOTE: The
0640: 20 55 52 4e 2c 20 72 65 6c 61 74 69 76 65 20 74   URN, relative t
0650: 6f 20 74 68 65 20 62 61 73 65 20 55 52 49 2c 20  o the base URI, 
0660: 77 68 65 72 65 20 74 68 65 20 50 61 63 6b 61 67  where the Packag
0670: 65 20 43 6c 69 65 6e 74 0d 0a 20 20 20 20 23 20  e Client..    # 
0680: 20 20 20 20 20 20 54 6f 6f 6c 73 65 74 20 6d 61        Toolset ma
0690: 79 20 62 65 20 64 6f 77 6e 6c 6f 61 64 65 64 2e  y be downloaded.
06a0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 76 61 72  ..    #..    var
06b0: 69 61 62 6c 65 20 70 61 63 6b 61 67 65 54 6f 6f  iable packageToo
06c0: 6c 73 65 74 55 72 6e 3b 20 23 20 44 45 46 41 55  lsetUrn; # DEFAU
06d0: 4c 54 3a 20 70 6b 67 5f 63 6c 69 65 6e 74 5f 6f  LT: pkg_client_o
06e0: 6e 6c 79 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 24  nly....    if {$
06f0: 66 6f 72 63 65 20 7c 7c 20 21 5b 69 6e 66 6f 20  force || ![info 
0700: 65 78 69 73 74 73 20 70 61 63 6b 61 67 65 54 6f  exists packageTo
0710: 6f 6c 73 65 74 55 72 6e 5d 7d 20 74 68 65 6e 20  olsetUrn]} then 
0720: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 70 61 63  {..      set pac
0730: 6b 61 67 65 54 6f 6f 6c 73 65 74 55 72 6e 20 70  kageToolsetUrn p
0740: 6b 67 5f 63 6c 69 65 6e 74 5f 6f 6e 6c 79 0d 0a  kg_client_only..
0750: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 0d 0a      }....    #..
0760: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The 
0770: 55 52 49 20 77 68 65 72 65 20 74 68 65 20 50 61  URI where the Pa
0780: 63 6b 61 67 65 20 43 6c 69 65 6e 74 20 54 6f 6f  ckage Client Too
0790: 6c 73 65 74 20 6d 61 79 20 62 65 20 64 6f 77 6e  lset may be down
07a0: 6c 6f 61 64 65 64 2e 0d 0a 20 20 20 20 23 0d 0a  loaded...    #..
07b0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 70 61 63      variable pac
07c0: 6b 61 67 65 54 6f 6f 6c 73 65 74 55 72 69 3b 20  kageToolsetUri; 
07d0: 23 20 44 45 46 41 55 4c 54 3a 20 24 7b 62 61 73  # DEFAULT: ${bas
07e0: 65 55 72 69 7d 2f 24 7b 70 61 63 6b 61 67 65 54  eUri}/${packageT
07f0: 6f 6f 6c 73 65 74 55 72 6e 7d 0d 0a 0d 0a 20 20  oolsetUrn}....  
0800: 20 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20    if {$force || 
0810: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 70 61  ![info exists pa
0820: 63 6b 61 67 65 54 6f 6f 6c 73 65 74 55 72 69 5d  ckageToolsetUri]
0830: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
0840: 73 65 74 20 70 61 63 6b 61 67 65 54 6f 6f 6c 73  set packageTools
0850: 65 74 55 72 69 20 7b 24 7b 62 61 73 65 55 72 69  etUri {${baseUri
0860: 7d 2f 24 7b 70 61 63 6b 61 67 65 54 6f 6f 6c 73  }/${packageTools
0870: 65 74 55 72 6e 7d 7d 0d 0a 20 20 20 20 7d 0d 0a  etUrn}}..    }..
0880: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e  ..    #..    # N
0890: 4f 54 45 3a 20 54 68 65 20 55 52 4e 2c 20 72 65  OTE: The URN, re
08a0: 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 62 61  lative to the ba
08b0: 73 65 20 55 52 49 2c 20 77 68 65 72 65 20 74 68  se URI, where th
08c0: 65 20 54 63 6c 4b 69 74 20 44 4c 4c 20 66 6f 72  e TclKit DLL for
08d0: 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 61 20  ..    #       a 
08e0: 70 61 72 74 69 63 75 6c 61 72 20 70 6c 61 74 66  particular platf
08f0: 6f 72 6d 20 6d 61 79 20 62 65 20 64 6f 77 6e 6c  orm may be downl
0900: 6f 61 64 65 64 2e 0d 0a 20 20 20 20 23 0d 0a 20  oaded...    #.. 
0910: 20 20 20 76 61 72 69 61 62 6c 65 20 74 63 6c 4b     variable tclK
0920: 69 74 44 6c 6c 55 72 6e 3b 20 23 20 44 45 46 41  itDllUrn; # DEFA
0930: 55 4c 54 3a 20 74 63 6c 6b 69 74 5f 64 6c 6c 5f  ULT: tclkit_dll_
0940: 24 7b 70 6c 61 74 66 6f 72 6d 7d 0d 0a 0d 0a 20  ${platform}.... 
0950: 20 20 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c     if {$force ||
0960: 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 74   ![info exists t
0970: 63 6c 4b 69 74 44 6c 6c 55 72 6e 5d 7d 20 74 68  clKitDllUrn]} th
0980: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20  en {..      set 
0990: 74 63 6c 4b 69 74 44 6c 6c 55 72 6e 20 7b 74 63  tclKitDllUrn {tc
09a0: 6c 6b 69 74 5f 64 6c 6c 5f 24 7b 70 6c 61 74 66  lkit_dll_${platf
09b0: 6f 72 6d 7d 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  orm}}..    }....
09c0: 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54      #..    # NOT
09d0: 45 3a 20 54 68 65 20 55 52 49 20 77 68 65 72 65  E: The URI where
09e0: 20 74 68 65 20 54 63 6c 4b 69 74 20 44 4c 4c 20   the TclKit DLL 
09f0: 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 72  for a particular
0a00: 20 70 6c 61 74 66 6f 72 6d 20 6d 61 79 0d 0a 20   platform may.. 
0a10: 20 20 20 23 20 20 20 20 20 20 20 62 65 20 64 6f     #       be do
0a20: 77 6e 6c 6f 61 64 65 64 2e 0d 0a 20 20 20 20 23  wnloaded...    #
0a30: 0d 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 74  ..    variable t
0a40: 63 6c 4b 69 74 44 6c 6c 55 72 69 3b 20 23 20 44  clKitDllUri; # D
0a50: 45 46 41 55 4c 54 3a 20 24 7b 62 61 73 65 55 72  EFAULT: ${baseUr
0a60: 69 7d 2f 24 7b 75 72 6e 7d 0d 0a 0d 0a 20 20 20  i}/${urn}....   
0a70: 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21   if {$force || !
0a80: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 74 63 6c  [info exists tcl
0a90: 4b 69 74 44 6c 6c 55 72 69 5d 7d 20 74 68 65 6e  KitDllUri]} then
0aa0: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 74 63   {..      set tc
0ab0: 6c 4b 69 74 44 6c 6c 55 72 69 20 7b 24 7b 62 61  lKitDllUri {${ba
0ac0: 73 65 55 72 69 7d 2f 24 7b 75 72 6e 7d 7d 0d 0a  seUri}/${urn}}..
0ad0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 0d 0a      }....    #..
0ae0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The 
0af0: 55 52 4e 2c 20 72 65 6c 61 74 69 76 65 20 74 6f  URN, relative to
0b00: 20 74 68 65 20 62 61 73 65 20 55 52 49 2c 20 77   the base URI, w
0b10: 68 65 72 65 20 74 68 65 20 48 61 72 70 79 20 61  here the Harpy a
0b20: 6e 64 20 42 61 64 67 65 0d 0a 20 20 20 20 23 20  nd Badge..    # 
0b30: 20 20 20 20 20 20 70 6c 75 67 69 6e 73 20 66 6f        plugins fo
0b40: 72 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 62  r a particular b
0b50: 75 69 6c 64 20 6d 61 79 20 62 65 20 64 6f 77 6e  uild may be down
0b60: 6c 6f 61 64 65 64 2e 0d 0a 20 20 20 20 23 0d 0a  loaded...    #..
0b70: 20 20 20 20 76 61 72 69 61 62 6c 65 20 73 65 63      variable sec
0b80: 75 72 69 74 79 54 6f 6f 6c 73 65 74 55 72 6e 3b  urityToolsetUrn;
0b90: 20 23 20 44 45 46 41 55 4c 54 3a 20 73 65 63 75   # DEFAULT: secu
0ba0: 72 69 74 79 5f 74 6f 6f 6c 73 65 74 5f 24 7b 70  rity_toolset_${p
0bb0: 6c 61 74 66 6f 72 6d 7d 0d 0a 0d 0a 20 20 20 20  latform}....    
0bc0: 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b  if {$force || ![
0bd0: 69 6e 66 6f 20 65 78 69 73 74 73 20 73 65 63 75  info exists secu
0be0: 72 69 74 79 54 6f 6f 6c 73 65 74 55 72 6e 5d 7d  rityToolsetUrn]}
0bf0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 73   then {..      s
0c00: 65 74 20 73 65 63 75 72 69 74 79 54 6f 6f 6c 73  et securityTools
0c10: 65 74 55 72 6e 20 7b 73 65 63 75 72 69 74 79 5f  etUrn {security_
0c20: 74 6f 6f 6c 73 65 74 5f 24 7b 70 6c 61 74 66 6f  toolset_${platfo
0c30: 72 6d 7d 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  rm}}..    }.... 
0c40: 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45     #..    # NOTE
0c50: 3a 20 54 68 65 20 55 52 49 20 77 68 65 72 65 20  : The URI where 
0c60: 74 68 65 20 48 61 72 70 79 20 61 6e 64 20 42 61  the Harpy and Ba
0c70: 64 67 65 20 70 6c 75 67 69 6e 73 20 66 6f 72 20  dge plugins for 
0c80: 61 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20  a particular..  
0c90: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20    #       build 
0ca0: 6d 61 79 20 62 65 20 64 6f 77 6e 6c 6f 61 64 65  may be downloade
0cb0: 64 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 76  d...    #..    v
0cc0: 61 72 69 61 62 6c 65 20 73 65 63 75 72 69 74 79  ariable security
0cd0: 54 6f 6f 6c 73 65 74 55 72 69 3b 20 23 20 44 45  ToolsetUri; # DE
0ce0: 46 41 55 4c 54 3a 20 24 7b 62 61 73 65 55 72 69  FAULT: ${baseUri
0cf0: 7d 2f 24 7b 75 72 6e 7d 0d 0a 0d 0a 20 20 20 20  }/${urn}....    
0d00: 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b  if {$force || ![
0d10: 69 6e 66 6f 20 65 78 69 73 74 73 20 73 65 63 75  info exists secu
0d20: 72 69 74 79 54 6f 6f 6c 73 65 74 55 72 69 5d 7d  rityToolsetUri]}
0d30: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 73   then {..      s
0d40: 65 74 20 73 65 63 75 72 69 74 79 54 6f 6f 6c 73  et securityTools
0d50: 65 74 55 72 69 20 7b 24 7b 62 61 73 65 55 72 69  etUri {${baseUri
0d60: 7d 2f 24 7b 75 72 6e 7d 7d 0d 0a 20 20 20 20 7d  }/${urn}}..    }
0d70: 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23  ....    #..    #
0d80: 20 4e 4f 54 45 3a 20 54 68 65 20 6c 69 73 74 20   NOTE: The list 
0d90: 6f 66 20 55 52 4e 73 2c 20 72 65 6c 61 74 69 76  of URNs, relativ
0da0: 65 20 74 6f 20 74 68 65 20 62 61 73 65 20 55 52  e to the base UR
0db0: 49 2c 20 77 68 65 72 65 20 6c 69 63 65 6e 73 65  I, where license
0dc0: 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 63 65  ..    #       ce
0dd0: 72 74 69 66 69 63 61 74 65 20 72 65 71 75 65 73  rtificate reques
0de0: 74 73 20 73 68 6f 75 6c 64 20 62 65 20 73 65 6e  ts should be sen
0df0: 74 2e 20 20 4f 6e 65 20 6f 66 20 74 68 65 73 65  t.  One of these
0e00: 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 23 20   will be..    # 
0e10: 20 20 20 20 20 20 73 65 6c 65 63 74 65 64 20 61        selected a
0e20: 74 20 72 61 6e 64 6f 6d 2e 0d 0a 20 20 20 20 23  t random...    #
0e30: 0d 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c  ..    variable l
0e40: 69 63 65 6e 73 65 55 72 6e 73 3b 20 23 20 44 45  icenseUrns; # DE
0e50: 46 41 55 4c 54 3a 20 67 65 74 5f 6c 69 63 65 6e  FAULT: get_licen
0e60: 73 65 5f 30 31 20 2e 2e 2e 20 67 65 74 5f 6c 69  se_01 ... get_li
0e70: 63 65 6e 73 65 5f 4e 4e 0d 0a 0d 0a 20 20 20 20  cense_NN....    
0e80: 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b  if {$force || ![
0e90: 69 6e 66 6f 20 65 78 69 73 74 73 20 6c 69 63 65  info exists lice
0ea0: 6e 73 65 55 72 6e 73 5d 7d 20 74 68 65 6e 20 7b  nseUrns]} then {
0eb0: 0d 0a 20 20 20 20 20 20 73 65 74 20 6c 69 63 65  ..      set lice
0ec0: 6e 73 65 55 72 6e 73 20 5b 6c 69 73 74 20 5c 0d  nseUrns [list \.
0ed0: 0a 20 20 20 20 20 20 20 20 20 20 67 65 74 5f 6c  .          get_l
0ee0: 69 63 65 6e 73 65 5f 30 31 20 67 65 74 5f 6c 69  icense_01 get_li
0ef0: 63 65 6e 73 65 5f 30 32 20 67 65 74 5f 6c 69 63  cense_02 get_lic
0f00: 65 6e 73 65 5f 30 33 20 67 65 74 5f 6c 69 63 65  ense_03 get_lice
0f10: 6e 73 65 5f 30 34 20 5c 0d 0a 20 20 20 20 20 20  nse_04 \..      
0f20: 20 20 20 20 67 65 74 5f 6c 69 63 65 6e 73 65 5f      get_license_
0f30: 30 35 20 67 65 74 5f 6c 69 63 65 6e 73 65 5f 30  05 get_license_0
0f40: 36 20 67 65 74 5f 6c 69 63 65 6e 73 65 5f 30 37  6 get_license_07
0f50: 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ]..    }....    
0f60: 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  #..    # NOTE: T
0f70: 68 65 20 55 52 49 20 77 68 65 72 65 20 6c 69 63  he URI where lic
0f80: 65 6e 73 65 20 63 65 72 74 69 66 69 63 61 74 65  ense certificate
0f90: 20 72 65 71 75 65 73 74 73 20 73 68 6f 75 6c 64   requests should
0fa0: 20 62 65 20 73 65 6e 74 2e 0d 0a 20 20 20 20 23   be sent...    #
0fb0: 0d 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c  ..    variable l
0fc0: 69 63 65 6e 73 65 55 72 69 3b 20 23 20 44 45 46  icenseUri; # DEF
0fd0: 41 55 4c 54 3a 20 24 7b 62 61 73 65 55 72 69 7d  AULT: ${baseUri}
0fe0: 2f 24 7b 75 72 6e 7d 0d 0a 0d 0a 20 20 20 20 69  /${urn}....    i
0ff0: 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b 69  f {$force || ![i
1000: 6e 66 6f 20 65 78 69 73 74 73 20 6c 69 63 65 6e  nfo exists licen
1010: 73 65 55 72 69 5d 7d 20 74 68 65 6e 20 7b 0d 0a  seUri]} then {..
1020: 20 20 20 20 20 20 73 65 74 20 6c 69 63 65 6e 73        set licens
1030: 65 55 72 69 20 7b 24 7b 62 61 73 65 55 72 69 7d  eUri {${baseUri}
1040: 2f 24 7b 75 72 6e 7d 7d 0d 0a 20 20 20 20 7d 0d  /${urn}}..    }.
1050: 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  ...    #..    # 
1060: 4e 4f 54 45 3a 20 54 68 65 20 6c 69 73 74 20 6f  NOTE: The list o
1070: 66 20 55 52 4e 73 2c 20 72 65 6c 61 74 69 76 65  f URNs, relative
1080: 20 74 6f 20 74 68 65 20 62 61 73 65 20 55 52 49   to the base URI
1090: 2c 20 77 68 65 72 65 20 73 63 72 69 70 74 0d 0a  , where script..
10a0: 20 20 20 20 23 20 20 20 20 20 20 20 65 76 61 6c      #       eval
10b0: 75 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20  uation requests 
10c0: 73 68 6f 75 6c 64 20 62 65 20 73 75 62 6d 69 74  should be submit
10d0: 74 65 64 20 74 6f 20 74 68 65 20 22 73 61 66 65  ted to the "safe
10e0: 22 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 73  "..    #       s
10f0: 61 6e 64 62 6f 78 2e 20 20 4f 6e 65 20 6f 66 20  andbox.  One of 
1100: 74 68 65 73 65 20 77 69 6c 6c 20 62 65 20 73 65  these will be se
1110: 6c 65 63 74 65 64 20 61 74 20 72 61 6e 64 6f 6d  lected at random
1120: 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 76 61  ...    #..    va
1130: 72 69 61 62 6c 65 20 73 61 6e 64 62 6f 78 45 76  riable sandboxEv
1140: 61 6c 55 72 6e 73 3b 20 23 20 44 45 46 41 55 4c  alUrns; # DEFAUL
1150: 54 3a 20 65 76 61 6c 5f 30 31 20 2e 2e 2e 20 65  T: eval_01 ... e
1160: 76 61 6c 5f 4e 4e 0d 0a 0d 0a 20 20 20 20 69 66  val_NN....    if
1170: 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b 69 6e   {$force || ![in
1180: 66 6f 20 65 78 69 73 74 73 20 73 61 6e 64 62 6f  fo exists sandbo
1190: 78 45 76 61 6c 55 72 6e 73 5d 7d 20 74 68 65 6e  xEvalUrns]} then
11a0: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 61   {..      set sa
11b0: 6e 64 62 6f 78 45 76 61 6c 55 72 6e 73 20 5b 6c  ndboxEvalUrns [l
11c0: 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ist \..         
11d0: 20 65 76 61 6c 5f 30 31 20 65 76 61 6c 5f 30 32   eval_01 eval_02
11e0: 20 65 76 61 6c 5f 30 33 20 65 76 61 6c 5f 30 34   eval_03 eval_04
11f0: 20 65 76 61 6c 5f 30 35 20 65 76 61 6c 5f 30 36   eval_05 eval_06
1200: 20 65 76 61 6c 5f 30 37 5d 0d 0a 20 20 20 20 7d   eval_07]..    }
1210: 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23  ....    #..    #
1220: 20 4e 4f 54 45 3a 20 54 68 65 20 55 52 49 20 77   NOTE: The URI w
1230: 68 65 72 65 20 73 63 72 69 70 74 20 65 76 61 6c  here script eval
1240: 75 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20  uation requests 
1250: 73 68 6f 75 6c 64 20 62 65 20 73 75 62 6d 69 74  should be submit
1260: 74 65 64 0d 0a 20 20 20 20 23 20 20 20 20 20 20  ted..    #      
1270: 20 74 6f 20 74 68 65 20 22 73 61 66 65 22 20 73   to the "safe" s
1280: 61 6e 64 62 6f 78 2e 0d 0a 20 20 20 20 23 0d 0a  andbox...    #..
1290: 20 20 20 20 76 61 72 69 61 62 6c 65 20 73 61 6e      variable san
12a0: 64 62 6f 78 45 76 61 6c 55 72 69 3b 20 23 20 44  dboxEvalUri; # D
12b0: 45 46 41 55 4c 54 3a 20 24 7b 62 61 73 65 55 72  EFAULT: ${baseUr
12c0: 69 7d 2f 24 7b 75 72 6e 7d 0d 0a 0d 0a 20 20 20  i}/${urn}....   
12d0: 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21   if {$force || !
12e0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 73 61 6e  [info exists san
12f0: 64 62 6f 78 45 76 61 6c 55 72 69 5d 7d 20 74 68  dboxEvalUri]} th
1300: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20  en {..      set 
1310: 73 61 6e 64 62 6f 78 45 76 61 6c 55 72 69 20 7b  sandboxEvalUri {
1320: 24 7b 62 61 73 65 55 72 69 7d 2f 24 7b 75 72 6e  ${baseUri}/${urn
1330: 7d 7d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a  }}..    }..  }..
1340: 0c 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45  ...  #..  # NOTE
1350: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  : This procedure
1360: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 64 6f 77   attempts to dow
1370: 6e 6c 6f 61 64 20 61 6e 64 20 65 78 74 72 61 63  nload and extrac
1380: 74 20 74 68 65 20 50 61 63 6b 61 67 65 20 43 6c  t the Package Cl
1390: 69 65 6e 74 0d 0a 20 20 23 20 20 20 20 20 20 20  ient..  #       
13a0: 54 6f 6f 6c 73 65 74 2e 20 20 54 68 65 20 6f 70  Toolset.  The op
13b0: 74 69 6f 6e 61 6c 20 63 68 61 6e 6e 65 6c 20 61  tional channel a
13c0: 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65 20 6f  rgument is the o
13d0: 75 74 70 75 74 20 63 68 61 6e 6e 65 6c 20 77 68  utput channel wh
13e0: 65 72 65 0d 0a 20 20 23 20 20 20 20 20 20 20 64  ere..  #       d
13f0: 69 61 67 6e 6f 73 74 69 63 20 69 6e 66 6f 72 6d  iagnostic inform
1400: 61 74 69 6f 6e 20 69 73 20 73 65 6e 74 2e 20 20  ation is sent.  
1410: 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 71 75 69  The optional qui
1420: 65 74 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75  et argument shou
1430: 6c 64 0d 0a 20 20 23 20 20 20 20 20 20 20 62 65  ld..  #       be
1440: 20 6e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 70 72 65   non-zero to pre
1450: 76 65 6e 74 20 64 69 61 67 6e 6f 73 74 69 63 20  vent diagnostic 
1460: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
1470: 20 62 65 69 6e 67 20 65 6d 69 74 74 65 64 2e 0d   being emitted..
1480: 0a 20 20 23 20 20 20 20 20 20 20 54 68 69 73 20  .  #       This 
1490: 70 72 6f 63 65 64 75 72 65 20 6d 61 79 20 72 61  procedure may ra
14a0: 69 73 65 20 73 63 72 69 70 74 20 65 72 72 6f 72  ise script error
14b0: 73 2e 20 20 54 68 65 20 72 65 74 75 72 6e 20 76  s.  The return v
14c0: 61 6c 75 65 20 69 73 20 74 68 65 0d 0a 20 20 23  alue is the..  #
14d0: 20 20 20 20 20 20 20 66 75 6c 6c 20 70 61 74 68         full path
14e0: 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72   to the director
14f0: 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65  y that should be
1500: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 61 75   added to the au
1510: 74 6f 2d 70 61 74 68 2e 0d 0a 20 20 23 0d 0a 20  to-path...  #.. 
1520: 20 70 72 6f 63 20 64 6f 77 6e 6c 6f 61 64 41 6e   proc downloadAn
1530: 64 45 78 74 72 61 63 74 50 61 63 6b 61 67 65 43  dExtractPackageC
1540: 6c 69 65 6e 74 54 6f 6f 6c 73 65 74 20 7b 0d 0a  lientToolset {..
1550: 20 20 20 20 20 20 20 20 20 20 7b 63 68 61 6e 6e            {chann
1560: 65 6c 20 73 74 64 6f 75 74 7d 20 7b 71 75 69 65  el stdout} {quie
1570: 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..  
1580: 20 20 73 65 74 75 70 50 61 63 6b 61 67 65 54 6f    setupPackageTo
1590: 6f 6c 73 65 74 56 61 72 73 20 66 61 6c 73 65 0d  olsetVars false.
15a0: 0a 0d 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  ...    variable 
15b0: 62 61 73 65 55 72 69 0d 0a 20 20 20 20 76 61 72  baseUri..    var
15c0: 69 61 62 6c 65 20 70 61 63 6b 61 67 65 54 6f 6f  iable packageToo
15d0: 6c 73 65 74 55 72 69 0d 0a 20 20 20 20 76 61 72  lsetUri..    var
15e0: 69 61 62 6c 65 20 70 61 63 6b 61 67 65 54 6f 6f  iable packageToo
15f0: 6c 73 65 74 55 72 6e 0d 0a 0d 0a 20 20 20 20 70  lsetUrn....    p
1600: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45  ackage require E
1610: 61 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20 70  agle.Test..    p
1620: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45  ackage require E
1630: 61 67 6c 65 2e 55 6e 7a 69 70 0d 0a 0d 0a 20 20  agle.Unzip....  
1640: 20 20 73 65 74 20 65 78 74 72 61 63 74 52 6f 6f    set extractRoo
1650: 74 44 69 72 65 63 74 6f 72 79 20 5b 67 65 74 50  tDirectory [getP
1660: 61 63 6b 61 67 65 49 6e 73 74 61 6c 6c 50 61 74  ackageInstallPat
1670: 68 20 70 6b 67 64 20 65 61 2d 70 74 2d 64 69 5d  h pkgd ea-pt-di]
1680: 0d 0a 0d 0a 20 20 20 20 73 65 74 20 75 72 69 20  ....    set uri 
1690: 5b 73 75 62 73 74 20 24 70 61 63 6b 61 67 65 54  [subst $packageT
16a0: 6f 6f 6c 73 65 74 55 72 69 5d 0d 0a 20 20 20 20  oolsetUri]..    
16b0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65  set fileName [ge
16c0: 74 54 65 6d 70 6f 72 61 72 79 46 69 6c 65 4e 61  tTemporaryFileNa
16d0: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 5b  me]....    if {[
16e0: 69 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b  isEagle]} then {
16f0: 0d 0a 20 20 20 20 20 20 75 72 69 20 64 6f 77 6e  ..      uri down
1700: 6c 6f 61 64 20 24 75 72 69 20 24 66 69 6c 65 4e  load $uri $fileN
1710: 61 6d 65 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20  ame..    } else 
1720: 7b 0d 0a 20 20 20 20 20 20 70 61 63 6b 61 67 65  {..      package
1730: 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e 54   require Eagle.T
1740: 6f 6f 6c 73 2e 43 6f 6d 6d 6f 6e 0d 0a 0d 0a 20  ools.Common.... 
1750: 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69       namespace i
1760: 6d 70 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20  mport \..       
1770: 20 20 20 3a 3a 45 61 67 6c 65 3a 3a 54 6f 6f 6c     ::Eagle::Tool
1780: 73 3a 3a 43 6f 6d 6d 6f 6e 3a 3a 67 65 74 46 69  s::Common::getFi
1790: 6c 65 56 69 61 48 74 74 70 20 5c 0d 0a 20 20 20  leViaHttp \..   
17a0: 20 20 20 20 20 20 20 3a 3a 45 61 67 6c 65 3a 3a         ::Eagle::
17b0: 54 6f 6f 6c 73 3a 3a 43 6f 6d 6d 6f 6e 3a 3a 77  Tools::Common::w
17c0: 72 69 74 65 46 69 6c 65 0d 0a 0d 0a 20 20 20 20  riteFile....    
17d0: 20 20 73 65 74 20 64 61 74 61 20 5b 67 65 74 46    set data [getF
17e0: 69 6c 65 56 69 61 48 74 74 70 20 24 75 72 69 20  ileViaHttp $uri 
17f0: 32 30 20 24 63 68 61 6e 6e 65 6c 20 24 71 75 69  20 $channel $qui
1800: 65 74 20 2d 62 69 6e 61 72 79 20 74 72 75 65 5d  et -binary true]
1810: 0d 0a 0d 0a 20 20 20 20 20 20 77 72 69 74 65 46  ....      writeF
1820: 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 64  ile $fileName $d
1830: 61 74 61 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ata..    }....  
1840: 20 20 73 65 74 20 65 78 74 72 61 63 74 44 69 72    set extractDir
1850: 65 63 74 6f 72 79 20 5b 65 78 74 72 61 63 74 5a  ectory [extractZ
1860: 69 70 41 72 63 68 69 76 65 20 5c 0d 0a 20 20 20  ipArchive \..   
1870: 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20 24       $fileName $
1880: 65 78 74 72 61 63 74 52 6f 6f 74 44 69 72 65 63  extractRootDirec
1890: 74 6f 72 79 20 74 72 75 65 5d 0d 0a 0d 0a 20 20  tory true]....  
18a0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a    return [file j
18b0: 6f 69 6e 20 24 65 78 74 72 61 63 74 44 69 72 65  oin $extractDire
18c0: 63 74 6f 72 79 20 70 6b 67 72 5f 61 6e 5f 64 20  ctory pkgr_an_d 
18d0: 63 6c 69 65 6e 74 20 31 2e 30 20 6e 65 75 74 72  client 1.0 neutr
18e0: 61 6c 5d 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 23  al]..  }.....  #
18f0: 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73  ..  # NOTE: This
1900: 20 70 72 6f 63 65 64 75 72 65 20 61 74 74 65 6d   procedure attem
1910: 70 74 73 20 74 6f 20 6c 6f 61 64 20 28 76 69 61  pts to load (via
1920: 20 5b 70 61 63 6b 61 67 65 20 72 65 71 75 69 72   [package requir
1930: 65 5d 29 20 74 68 65 20 70 61 63 6b 61 67 65 0d  e]) the package.
1940: 0a 20 20 23 20 20 20 20 20 20 20 63 6c 69 65 6e  .  #       clien
1950: 74 20 74 6f 6f 6c 73 65 74 2e 20 20 49 74 20 69  t toolset.  It i
1960: 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 62 65  s designed to be
1970: 20 75 73 65 64 20 69 6e 20 63 6f 6e 6a 75 6e 63   used in conjunc
1980: 74 69 6f 6e 20 77 69 74 68 20 74 68 65 0d 0a 20  tion with the.. 
1990: 20 23 20 20 20 20 20 20 20 5b 64 6f 77 6e 6c 6f   #       [downlo
19a0: 61 64 41 6e 64 45 78 74 72 61 63 74 50 61 63 6b  adAndExtractPack
19b0: 61 67 65 43 6c 69 65 6e 74 54 6f 6f 6c 73 65 74  ageClientToolset
19c0: 5d 20 70 72 6f 63 65 64 75 72 65 2c 20 61 62 6f  ] procedure, abo
19d0: 76 65 2e 20 20 53 75 70 70 6f 72 74 0d 0a 20 20  ve.  Support..  
19e0: 23 20 20 20 20 20 20 20 69 73 20 69 6e 63 6c 75  #       is inclu
19f0: 64 65 64 20 66 6f 72 20 73 70 65 63 69 66 79 69  ded for specifyi
1a00: 6e 67 20 61 6e 20 65 78 74 72 61 20 61 75 74 6f  ng an extra auto
1a10: 2d 70 61 74 68 20 64 69 72 65 63 74 6f 72 79 20  -path directory 
1a20: 61 6e 64 20 41 50 49 20 6b 65 79 0d 0a 20 20 23  and API key..  #
1a30: 20 20 20 20 20 20 20 74 6f 20 75 73 65 2e 20 20         to use.  
1a40: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 65 20  By default, the 
1a50: 5b 70 61 63 6b 61 67 65 20 75 6e 6b 6e 6f 77 6e  [package unknown
1a60: 5d 20 68 61 6e 64 6c 65 72 20 69 73 20 68 6f 6f  ] handler is hoo
1a70: 6b 65 64 20 74 6f 20 61 64 64 0d 0a 20 20 23 20  ked to add..  # 
1a80: 20 20 20 20 20 20 74 68 65 20 72 65 6d 6f 74 65        the remote
1a90: 20 70 61 63 6b 61 67 65 20 72 65 70 6f 73 69 74   package reposit
1aa0: 6f 72 79 20 6c 6f 6f 6b 75 70 20 66 75 6e 63 74  ory lookup funct
1ab0: 69 6f 6e 61 6c 69 74 79 2e 20 20 45 61 67 6c 65  ionality.  Eagle
1ac0: 20 73 75 70 70 6f 72 74 73 0d 0a 20 20 23 20 20   supports..  #  
1ad0: 20 20 20 20 20 65 78 74 72 61 20 73 63 72 69 70       extra scrip
1ae0: 74 20 73 65 63 75 72 69 74 79 20 76 69 61 20 73  t security via s
1af0: 69 67 6e 65 64 20 73 63 72 69 70 74 20 63 65 72  igned script cer
1b00: 74 69 66 69 63 61 74 65 73 2c 20 77 68 69 63 68  tificates, which
1b10: 20 77 69 6c 6c 20 62 65 0d 0a 20 20 23 20 20 20   will be..  #   
1b20: 20 20 20 20 65 6e 61 62 6c 65 64 20 62 79 20 64      enabled by d
1b30: 65 66 61 75 6c 74 2c 20 75 6e 6c 65 73 73 20 69  efault, unless i
1b40: 74 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  t is unavailable
1b50: 2e 0d 0a 20 20 23 0d 0a 20 20 70 72 6f 63 20 6c  ...  #..  proc l
1b60: 6f 61 64 50 61 63 6b 61 67 65 43 6c 69 65 6e 74  oadPackageClient
1b70: 54 6f 6f 6c 73 65 74 20 7b 0d 0a 20 20 20 20 20  Toolset {..     
1b80: 20 20 20 20 20 7b 64 69 72 65 63 74 6f 72 79 20       {directory 
1b90: 61 75 74 6f 7d 20 7b 61 70 69 4b 65 79 73 20 22  auto} {apiKeys "
1ba0: 22 7d 20 7b 68 6f 6f 6b 55 6e 6b 6e 6f 77 6e 20  "} {hookUnknown 
1bb0: 74 72 75 65 7d 20 7b 65 6e 61 62 6c 65 53 65 63  true} {enableSec
1bc0: 75 72 69 74 79 20 74 72 75 65 7d 0d 0a 20 20 20  urity true}..   
1bd0: 20 20 20 20 20 20 20 7b 69 73 6f 6c 61 74 65 53         {isolateS
1be0: 65 63 75 72 69 74 79 20 66 61 6c 73 65 7d 20 7b  ecurity false} {
1bf0: 73 74 72 69 63 74 53 65 63 75 72 69 74 79 20 66  strictSecurity f
1c00: 61 6c 73 65 7d 20 7b 64 65 62 75 67 20 66 61 6c  alse} {debug fal
1c10: 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 23 0d 0a  se} } {..    #..
1c20: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e      # NOTE: When
1c30: 20 72 75 6e 6e 69 6e 67 20 69 6e 20 45 61 67 6c   running in Eagl
1c40: 65 2c 20 6e 61 6d 65 73 70 61 63 65 20 73 75 70  e, namespace sup
1c50: 70 6f 72 74 20 6d 75 73 74 20 62 65 20 61 76 61  port must be ava
1c60: 69 6c 61 62 6c 65 20 61 6e 64 0d 0a 20 20 20 20  ilable and..    
1c70: 23 20 20 20 20 20 20 20 65 6e 61 62 6c 65 64 2e  #       enabled.
1c80: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66 20  ..    #..    if 
1c90: 7b 5b 69 73 45 61 67 6c 65 5d 20 26 26 20 21 5b  {[isEagle] && ![
1ca0: 6e 61 6d 65 73 70 61 63 65 20 65 6e 61 62 6c 65  namespace enable
1cb0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..     
1cc0: 20 65 72 72 6f 72 20 22 6e 61 6d 65 73 70 61 63   error "namespac
1cd0: 65 20 73 75 70 70 6f 72 74 20 6d 75 73 74 20 62  e support must b
1ce0: 65 20 65 6e 61 62 6c 65 64 22 0d 0a 20 20 20 20  e enabled"..    
1cf0: 7d 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  }....    #..    
1d00: 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 65  # NOTE: Does the
1d10: 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 61 75 74   caller want aut
1d20: 6f 6d 61 74 69 63 20 64 69 73 63 6f 76 65 72 79  omatic discovery
1d30: 20 6f 66 20 74 68 65 20 64 69 72 65 63 74 6f 72   of the director
1d40: 79 20 74 68 61 74 0d 0a 20 20 20 20 23 20 20 20  y that..    #   
1d50: 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 74 68 65      contains the
1d60: 20 28 64 6f 77 6e 6c 6f 61 64 65 64 3f 29 20 70   (downloaded?) p
1d70: 61 63 6b 61 67 65 20 63 6c 69 65 6e 74 20 74 6f  ackage client to
1d80: 6f 6c 73 65 74 3f 20 20 43 75 72 72 65 6e 74 6c  olset?  Currentl
1d90: 79 2c 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20  y,..    #       
1da0: 74 68 69 73 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  this only works 
1db0: 6f 6e 20 57 69 6e 64 6f 77 73 20 61 6e 64 20 73  on Windows and s
1dc0: 65 61 72 63 68 65 73 20 74 68 65 20 74 65 6d 70  earches the temp
1dd0: 6f 72 61 72 79 20 64 6f 77 6e 6c 6f 61 64 0d 0a  orary download..
1de0: 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63 61      #       loca
1df0: 74 69 6f 6e 2c 20 77 68 69 63 68 20 6e 6f 72 6d  tion, which norm
1e00: 61 6c 6c 79 20 6f 62 74 61 69 6e 73 20 69 74 73  ally obtains its
1e10: 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20   value from the 
1e20: 65 6e 76 69 72 6f 6e 6d 65 6e 74 0d 0a 20 20 20  environment..   
1e30: 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c   #       variabl
1e40: 65 20 54 45 4d 50 2e 0d 0a 20 20 20 20 23 0d 0a  e TEMP...    #..
1e50: 20 20 20 20 69 66 20 7b 24 64 69 72 65 63 74 6f      if {$directo
1e60: 72 79 20 65 71 20 22 61 75 74 6f 22 7d 20 74 68  ry eq "auto"} th
1e70: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  en {..      #.. 
1e80: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72       # NOTE: Fir
1e90: 73 74 2c 20 62 65 66 6f 72 65 20 64 6f 69 6e 67  st, before doing
1ea0: 20 61 6e 79 74 68 69 6e 67 20 65 6c 73 65 2c 20   anything else, 
1eb0: 73 65 65 20 69 66 20 74 68 65 20 70 61 63 6b 61  see if the packa
1ec0: 67 65 20 63 6c 69 65 6e 74 0d 0a 20 20 20 20 20  ge client..     
1ed0: 20 23 20 20 20 20 20 20 20 74 6f 6f 6c 73 65 74   #       toolset
1ee0: 20 69 73 20 61 6c 72 65 61 64 79 20 69 6e 73 74   is already inst
1ef0: 61 6c 6c 65 64 20 73 6f 6d 65 77 68 65 72 65 20  alled somewhere 
1f00: 69 74 20 63 61 6e 20 62 65 20 6c 6f 61 64 65 64  it can be loaded
1f10: 20 66 72 6f 6d 2e 0d 0a 20 20 20 20 20 20 23 0d   from...      #.
1f20: 0a 20 20 20 20 20 20 73 65 74 20 6e 65 65 64 44  .      set needD
1f30: 69 72 65 63 74 6f 72 79 20 74 72 75 65 0d 0a 0d  irectory true...
1f40: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 45 61  .      if {[isEa
1f50: 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  gle]} then {..  
1f60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..       
1f70: 20 23 20 4e 4f 54 45 3a 20 46 6f 72 63 65 20 45   # NOTE: Force E
1f80: 61 67 6c 65 20 74 6f 20 66 69 6e 64 20 2a 41 4c  agle to find *AL
1f90: 4c 2a 20 61 76 61 69 6c 61 62 6c 65 20 70 61 63  L* available pac
1fa0: 6b 61 67 65 20 69 6e 64 65 78 20 66 69 6c 65 73  kage index files
1fb0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ...        #    
1fc0: 20 20 20 54 68 69 73 20 6d 75 73 74 20 62 65 20     This must be 
1fd0: 64 6f 6e 65 20 69 6e 20 74 68 65 20 67 6c 6f 62  done in the glob
1fe0: 61 6c 20 73 63 6f 70 65 20 73 6f 20 74 68 61 74  al scope so that
1ff0: 20 74 68 65 20 73 70 65 63 69 61 6c 0d 0a 20 20   the special..  
2000: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 67 6c        #       gl
2010: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 27 64  obal variable 'd
2020: 69 72 27 20 73 65 74 20 62 79 20 74 68 65 20 70  ir' set by the p
2030: 61 63 6b 61 67 65 20 69 6e 64 65 78 20 6c 6f 61  ackage index loa
2040: 64 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 20  ding..        # 
2050: 20 20 20 20 20 20 73 75 62 73 79 73 74 65 6d 20        subsystem 
2060: 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 2e  can be accessed.
2070: 20 20 55 73 65 20 5b 63 61 74 63 68 5d 20 68 65    Use [catch] he
2080: 72 65 20 6a 75 73 74 20 69 6e 20 63 61 73 65 0d  re just in case.
2090: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #      
20a0: 20 61 20 70 61 63 6b 61 67 65 20 69 6e 64 65 78   a package index
20b0: 20 66 69 6c 65 20 72 61 69 73 65 73 20 61 20 73   file raises a s
20c0: 63 72 69 70 74 20 65 72 72 6f 72 2e 0d 0a 20 20  cript error...  
20d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..       
20e0: 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..      
20f0: 20 20 20 20 75 70 6c 65 76 65 6c 20 23 30 20 5b      uplevel #0 [
2100: 6c 69 73 74 20 70 61 63 6b 61 67 65 20 73 63 61  list package sca
2110: 6e 20 2d 68 6f 73 74 20 2d 6e 6f 72 6d 61 6c 20  n -host -normal 
2120: 2d 72 65 66 72 65 73 68 5d 0d 0a 20 20 20 20 20  -refresh]..     
2130: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
2140: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
2150: 0a 20 20 20 20 20 20 20 20 23 20 48 41 43 4b 3a  .        # HACK:
2160: 20 46 6f 72 63 65 20 54 63 6c 20 74 6f 20 66 69   Force Tcl to fi
2170: 6e 64 20 2a 41 4c 4c 2a 20 61 76 61 69 6c 61 62  nd *ALL* availab
2180: 6c 65 20 70 61 63 6b 61 67 65 20 69 6e 64 65 78  le package index
2190: 20 66 69 6c 65 73 2e 0d 0a 20 20 20 20 20 20 20   files...       
21a0: 20 23 20 20 20 20 20 20 20 57 69 74 68 6f 75 74   #       Without
21b0: 20 74 68 69 73 2c 20 63 68 65 63 6b 69 6e 67 20   this, checking 
21c0: 66 6f 72 20 74 68 65 20 61 76 61 69 6c 61 62 6c  for the availabl
21d0: 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 61 0d  e versions of a.
21e0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #      
21f0: 20 70 61 63 6b 61 67 65 20 75 73 69 6e 67 20 5b   package using [
2200: 70 61 63 6b 61 67 65 20 76 65 72 73 69 6f 6e 73  package versions
2210: 5d 20 6c 69 6b 65 6c 79 20 77 69 6c 6c 20 6e 6f  ] likely will no
2220: 74 20 73 75 63 63 65 65 64 0d 0a 20 20 20 20 20  t succeed..     
2230: 20 20 20 23 20 20 20 20 20 20 20 75 6e 6c 65 73     #       unles
2240: 73 20 74 68 65 20 70 61 63 6b 61 67 65 20 69 73  s the package is
2250: 20 61 6c 72 65 61 64 79 20 6c 6f 61 64 65 64 2e   already loaded.
2260: 20 20 55 73 65 20 5b 63 61 74 63 68 5d 20 68 65    Use [catch] he
2270: 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  re..        #   
2280: 20 20 20 20 6a 75 73 74 20 69 6e 20 63 61 73 65      just in case
2290: 20 61 20 70 61 63 6b 61 67 65 20 69 6e 64 65 78   a package index
22a0: 20 66 69 6c 65 20 72 61 69 73 65 73 20 61 20 73   file raises a s
22b0: 63 72 69 70 74 20 65 72 72 6f 72 2e 0d 0a 20 20  cript error...  
22c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..       
22d0: 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..      
22e0: 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75      package requ
22f0: 69 72 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ire [appendArgs 
2300: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..             
2310: 20 62 6f 67 75 73 5f 70 61 63 6b 61 67 65 5f 20   bogus_package_ 
2320: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 63 6c  [string trim [cl
2330: 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 20 2d 5d 5d  ock seconds] -]]
2340: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
2350: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
2360: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43  .      # NOTE: C
2370: 68 65 63 6b 20 61 6e 64 20 73 65 65 20 69 66 20  heck and see if 
2380: 74 68 65 20 70 61 63 6b 61 67 65 20 72 65 70 6f  the package repo
2390: 73 69 74 6f 72 79 20 63 6c 69 65 6e 74 20 69 73  sitory client is
23a0: 20 61 20 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20   a known..      
23b0: 23 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20  #       package 
23c0: 6e 6f 77 2e 20 20 49 66 20 73 6f 2c 20 74 68 65  now.  If so, the
23d0: 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
23e0: 20 73 65 61 72 63 68 20 64 69 72 65 63 74 6f 72   search director
23f0: 69 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ies..      #    
2400: 20 20 20 66 6f 72 20 69 74 2e 0d 0a 20 20 20 20     for it...    
2410: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
2420: 6c 6c 65 6e 67 74 68 20 5b 70 61 63 6b 61 67 65  llength [package
2430: 20 76 65 72 73 69 6f 6e 73 20 45 61 67 6c 65 2e   versions Eagle.
2440: 50 61 63 6b 61 67 65 2e 52 65 70 6f 73 69 74 6f  Package.Reposito
2450: 72 79 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ry]] > 0} then {
2460: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 65  ..        set ne
2470: 65 64 44 69 72 65 63 74 6f 72 79 20 66 61 6c 73  edDirectory fals
2480: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  e..      }....  
2490: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
24a0: 4f 54 45 3a 20 49 73 20 73 65 61 72 63 68 69 6e  OTE: Is searchin
24b0: 67 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  g for temporary 
24c0: 64 6f 77 6e 6c 6f 61 64 20 64 69 72 65 63 74 6f  download directo
24d0: 72 69 65 73 20 72 65 71 75 69 72 65 64 20 61 74  ries required at
24e0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #       
24f0: 74 68 69 73 20 70 6f 69 6e 74 3f 0d 0a 20 20 20  this point?..   
2500: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
2510: 24 6e 65 65 64 44 69 72 65 63 74 6f 72 79 7d 20  $needDirectory} 
2520: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..        
2530: 69 66 20 7b 21 5b 69 73 57 69 6e 64 6f 77 73 5d  if {![isWindows]
2540: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
2550: 20 20 20 20 65 72 72 6f 72 20 22 64 69 72 65 63      error "direc
2560: 74 6f 72 79 20 64 69 73 63 6f 76 65 72 79 20 6e  tory discovery n
2570: 6f 74 20 73 75 70 70 6f 72 74 65 64 20 6f 6e 20  ot supported on 
2580: 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 22 0d 0a  this platform"..
2590: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
25a0: 20 20 20 20 20 73 65 74 20 65 78 74 72 61 63 74       set extract
25b0: 52 6f 6f 74 44 69 72 65 63 74 6f 72 79 20 5b 67  RootDirectory [g
25c0: 65 74 50 61 63 6b 61 67 65 49 6e 73 74 61 6c 6c  etPackageInstall
25d0: 50 61 74 68 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  Path]....       
25e0: 20 66 6f 72 65 61 63 68 20 64 69 72 65 63 74 6f   foreach directo
25f0: 72 79 20 5b 66 69 6e 64 44 69 72 65 63 74 6f 72  ry [findDirector
2600: 69 65 73 52 65 63 75 72 73 69 76 65 20 5c 0d 0a  iesRecursive \..
2610: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
2620: 65 20 6a 6f 69 6e 20 24 65 78 74 72 61 63 74 52  e join $extractR
2630: 6f 6f 74 44 69 72 65 63 74 6f 72 79 20 70 6b 67  ootDirectory pkg
2640: 72 5f 61 6e 5f 64 5d 5d 20 7b 0d 0a 20 20 20 20  r_an_d]] {..    
2650: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..       
2660: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 73 65 74     # NOTE: Reset
2670: 20 64 69 72 65 63 74 6f 72 79 20 77 65 20 6a 75   directory we ju
2680: 73 74 20 66 6f 75 6e 64 20 74 6f 20 69 6e 63 6c  st found to incl
2690: 75 64 65 20 74 68 65 20 6e 65 63 65 73 73 61 72  ude the necessar
26a0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  y..          #  
26b0: 20 20 20 20 20 73 75 62 2d 64 69 72 65 63 74 6f       sub-directo
26c0: 72 79 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f  ry components fo
26d0: 72 20 74 68 65 20 61 63 74 75 61 6c 20 63 6c 69  r the actual cli
26e0: 65 6e 74 20 66 69 6c 65 73 0d 0a 20 20 20 20 20  ent files..     
26f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64       #       and
2700: 20 74 68 65 6e 20 73 74 6f 70 2c 20 74 68 65 72   then stop, ther
2710: 65 62 79 20 73 65 6c 65 63 74 69 6e 67 20 74 68  eby selecting th
2720: 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0d 0a  e first match...
2730: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..   
2740: 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63         set direc
2750: 74 6f 72 79 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  tory [file join 
2760: 24 64 69 72 65 63 74 6f 72 79 20 63 6c 69 65 6e  $directory clien
2770: 74 20 31 2e 30 20 6e 65 75 74 72 61 6c 5d 3b 20  t 1.0 neutral]; 
2780: 62 72 65 61 6b 0d 0a 20 20 20 20 20 20 20 20 7d  break..        }
2790: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
27a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
27b0: 54 45 3a 20 49 66 20 6e 6f 20 64 69 72 65 63 74  TE: If no direct
27c0: 6f 72 79 20 77 61 73 20 66 6f 75 6e 64 2c 20 6a  ory was found, j
27d0: 75 73 74 20 63 6c 65 61 72 20 74 68 65 20 64 69  ust clear the di
27e0: 72 65 63 74 6f 72 79 20 6e 61 6d 65 2c 0d 0a 20  rectory name,.. 
27f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69       #       whi
2800: 63 68 20 77 69 6c 6c 20 63 61 75 73 65 20 61 75  ch will cause au
2810: 74 6f 2d 70 61 74 68 20 6d 6f 64 69 66 69 63 61  to-path modifica
2820: 74 69 6f 6e 28 73 29 20 74 6f 20 62 65 20 73 6b  tion(s) to be sk
2830: 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d  ipped...      #.
2840: 0a 20 20 20 20 20 20 69 66 20 7b 24 64 69 72 65  .      if {$dire
2850: 63 74 6f 72 79 20 65 71 20 22 61 75 74 6f 22 7d  ctory eq "auto"}
2860: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
2870: 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20 22   set directory "
2880: 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  "..      }..    
2890: 7d 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  }....    #..    
28a0: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 72 65  # NOTE: If there
28b0: 20 69 73 20 61 20 64 69 72 65 63 74 6f 72 79 20   is a directory 
28c0: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65  specified by the
28d0: 20 63 61 6c 6c 65 72 20 2d 4f 52 2d 20 66 6f 75   caller -OR- fou
28e0: 6e 64 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20  nd..    #       
28f0: 76 69 61 20 61 75 74 6f 6d 61 74 69 63 20 64 69  via automatic di
2900: 72 65 63 74 6f 72 79 20 64 69 73 63 6f 76 65 72  rectory discover
2910: 79 2c 20 61 64 64 20 69 74 20 74 6f 20 74 68 65  y, add it to the
2920: 20 61 75 74 6f 2d 70 61 74 68 0d 0a 20 20 20 20   auto-path..    
2930: 23 20 20 20 20 20 20 20 6e 6f 77 2e 0d 0a 20 20  #       now...  
2940: 20 20 23 0d 0a 20 20 20 20 69 66 20 7b 5b 73 74    #..    if {[st
2950: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 72  ring length $dir
2960: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
2970: 6e 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  n {..      #..  
2980: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 6e 6c 79      # NOTE: Only
2990: 20 6d 6f 64 69 66 79 20 74 68 65 20 61 75 74 6f   modify the auto
29a0: 2d 70 61 74 68 20 69 66 20 74 68 65 20 64 69 72  -path if the dir
29b0: 65 63 74 6f 72 79 20 69 73 20 6e 6f 74 20 61 6c  ectory is not al
29c0: 72 65 61 64 79 0d 0a 20 20 20 20 20 20 23 20 20  ready..      #  
29d0: 20 20 20 20 20 70 72 65 73 65 6e 74 2e 20 20 54       present.  T
29e0: 68 69 73 20 70 72 65 76 65 6e 74 73 20 6e 65 65  his prevents nee
29f0: 64 6c 65 73 73 20 76 61 72 69 61 62 6c 65 20 74  dless variable t
2a00: 72 61 63 65 20 65 78 65 63 75 74 69 6f 6e 0d 0a  race execution..
2a10: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
2a20: 61 74 20 72 65 73 63 61 6e 73 20 74 68 65 20 76  at rescans the v
2a30: 61 72 69 6f 75 73 20 61 75 74 6f 2d 70 61 74 68  arious auto-path
2a40: 20 64 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20   directories... 
2a50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
2a60: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists 
2a70: 3a 3a 61 75 74 6f 5f 70 61 74 68 5d 20 7c 7c 20  ::auto_path] || 
2a80: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 73  \..          [ls
2a90: 65 61 72 63 68 20 2d 65 78 61 63 74 20 24 3a 3a  earch -exact $::
2aa0: 61 75 74 6f 5f 70 61 74 68 20 24 64 69 72 65 63  auto_path $direc
2ab0: 74 6f 72 79 5d 20 3d 3d 20 2d 31 7d 20 74 68 65  tory] == -1} the
2ac0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c 61 70  n {..        lap
2ad0: 70 65 6e 64 20 3a 3a 61 75 74 6f 5f 70 61 74 68  pend ::auto_path
2ae0: 20 24 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20   $directory..   
2af0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
2b00: 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45     #..    # NOTE
2b10: 3a 20 49 66 20 74 68 65 20 63 61 6c 6c 65 72 20  : If the caller 
2b20: 77 61 6e 74 73 20 74 6f 20 65 6e 61 62 6c 65 20  wants to enable 
2b30: 65 78 74 72 61 20 64 69 61 67 6e 6f 73 74 69 63  extra diagnostic
2b40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20   information,.. 
2b50: 20 20 20 23 20 20 20 20 20 20 20 73 65 74 20 74     #       set t
2b60: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 65  he appropriate e
2b70: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
2b80: 62 6c 65 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 23  bles now...    #
2b90: 0d 0a 20 20 20 20 69 66 20 7b 24 64 65 62 75 67  ..    if {$debug
2ba0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
2bb0: 73 65 74 20 3a 3a 65 6e 76 28 44 45 42 55 47 5f  set ::env(DEBUG_
2bc0: 50 4b 47 52 29 20 31 3b 20 73 65 74 20 3a 3a 65  PKGR) 1; set ::e
2bd0: 6e 76 28 44 45 42 55 47 5f 50 4b 47 44 29 20 31  nv(DEBUG_PKGD) 1
2be0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23  ..    }....    #
2bf0: 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66  ..    # NOTE: If
2c00: 20 74 68 65 20 63 61 6c 6c 65 72 20 73 70 65 63   the caller spec
2c10: 69 66 69 65 64 20 41 50 49 20 6b 65 79 73 2c 20  ified API keys, 
2c20: 61 64 64 20 74 68 65 6d 20 74 6f 20 74 68 65 20  add them to the 
2c30: 63 6f 6e 66 69 67 75 72 65 64 0d 0a 20 20 20 20  configured..    
2c40: 23 20 20 20 20 20 20 20 6c 69 73 74 20 6f 66 20  #       list of 
2c50: 41 50 49 20 6b 65 79 73 20 66 6f 72 20 74 68 65  API keys for the
2c60: 20 70 61 63 6b 61 67 65 20 72 65 70 6f 73 69 74   package reposit
2c70: 6f 72 79 20 63 6c 69 65 6e 74 20 6e 6f 77 2e 20  ory client now. 
2c80: 20 54 68 69 73 0d 0a 20 20 20 20 23 20 20 20 20   This..    #    
2c90: 20 20 20 75 73 65 73 20 61 20 73 70 65 63 69 61     uses a specia
2ca0: 6c 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  l global variabl
2cb0: 65 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69  e...    #..    i
2cc0: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 61 70 69  f {[llength $api
2cd0: 4b 65 79 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Keys] > 0} then 
2ce0: 7b 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 6c 61  {..      eval la
2cf0: 70 70 65 6e 64 20 3a 3a 70 6b 67 72 5f 61 70 69  ppend ::pkgr_api
2d00: 5f 6b 65 79 73 20 24 61 70 69 4b 65 79 73 0d 0a  _keys $apiKeys..
2d10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 0d 0a      }....    #..
2d20: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
2d30: 68 65 20 63 61 6c 6c 65 72 20 77 61 6e 74 73 20  he caller wants 
2d40: 74 6f 20 65 6e 61 62 6c 65 20 74 68 65 20 65 78  to enable the ex
2d50: 74 72 61 20 45 61 67 6c 65 20 73 63 72 69 70 74  tra Eagle script
2d60: 20 73 65 63 75 72 69 74 79 2c 0d 0a 20 20 20 20   security,..    
2d70: 23 20 20 20 20 20 20 20 61 74 74 65 6d 70 74 20  #       attempt 
2d80: 74 6f 20 64 6f 20 74 68 61 74 20 6e 6f 77 2e 20  to do that now. 
2d90: 20 4f 6e 6c 79 20 74 72 65 61 74 20 61 20 66 61   Only treat a fa
2da0: 69 6c 75 72 65 20 68 65 72 65 20 61 73 20 66 61  ilure here as fa
2db0: 74 61 6c 20 69 66 0d 0a 20 20 20 20 23 20 20 20  tal if..    #   
2dc0: 20 20 20 20 74 68 65 20 63 61 6c 6c 65 72 20 73      the caller s
2dd0: 61 69 64 20 73 6f 2e 0d 0a 20 20 20 20 23 0d 0a  aid so...    #..
2de0: 20 20 20 20 69 66 20 7b 5b 69 73 45 61 67 6c 65      if {[isEagle
2df0: 5d 20 26 26 20 24 65 6e 61 62 6c 65 53 65 63 75  ] && $enableSecu
2e00: 72 69 74 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  rity} then {..  
2e10: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
2e20: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b 0d  ..        try {.
2e30: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24  .          if {$
2e40: 69 73 6f 6c 61 74 65 53 65 63 75 72 69 74 79 7d  isolateSecurity}
2e50: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..       
2e60: 20 20 20 20 20 73 65 74 20 73 61 76 65 64 50 6c       set savedPl
2e70: 75 67 69 6e 46 6c 61 67 73 20 5b 6f 62 6a 65 63  uginFlags [objec
2e80: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags 
2e90: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..  
2ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
2eb0: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
2ec0: 69 76 65 20 50 6c 75 67 69 6e 46 6c 61 67 73 5d  ive PluginFlags]
2ed0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ee0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
2ef0: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic 
2f00: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
2f10: 63 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20 20  ctive \..       
2f20: 20 20 20 20 20 20 20 20 20 50 6c 75 67 69 6e 46           PluginF
2f30: 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c 61  lags [combineFla
2f40: 67 73 20 24 73 61 76 65 64 50 6c 75 67 69 6e 46  gs $savedPluginF
2f50: 6c 61 67 73 20 49 73 6f 6c 61 74 65 64 5d 0d 0a  lags Isolated]..
2f60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f70: 20 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c           uplevel
2f80: 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20   1 [list source 
2f90: 65 6e 61 62 6c 65 53 65 63 75 72 69 74 79 5d 0d  enableSecurity].
2fa0: 0a 20 20 20 20 20 20 20 20 7d 20 66 69 6e 61 6c  .        } final
2fb0: 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ly {..          
2fc0: 69 66 20 7b 24 69 73 6f 6c 61 74 65 53 65 63 75  if {$isolateSecu
2fd0: 72 69 74 79 20 26 26 20 5b 69 6e 66 6f 20 65 78  rity && [info ex
2fe0: 69 73 74 73 20 73 61 76 65 64 50 6c 75 67 69 6e  ists savedPlugin
2ff0: 46 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a  Flags]} then {..
3000: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
3010: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
3020: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65   +NonPublic Inte
3030: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
3040: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..           
3050: 20 20 20 20 20 50 6c 75 67 69 6e 46 6c 61 67 73       PluginFlags
3060: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 3d 20 24   [appendArgs = $
3070: 73 61 76 65 64 50 6c 75 67 69 6e 46 6c 61 67 73  savedPluginFlags
3080: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
3090: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
30a0: 20 7d 20 65 72 72 6f 72 5d 20 26 26 20 24 73 74   } error] && $st
30b0: 72 69 63 74 53 65 63 75 72 69 74 79 7d 20 74 68  rictSecurity} th
30c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 72  en {..        er
30d0: 72 6f 72 20 24 65 72 72 6f 72 0d 0a 20 20 20 20  ror $error..    
30e0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
30f0: 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a    #..    # NOTE:
3100: 20 49 6e 20 45 61 67 6c 65 2c 20 74 6f 20 61 63   In Eagle, to ac
3110: 74 75 61 6c 6c 79 20 65 6e 61 62 6c 65 20 6d 61  tually enable ma
3120: 6b 65 20 75 73 65 20 6f 66 20 74 68 65 20 5b 70  ke use of the [p
3130: 61 63 6b 61 67 65 20 75 6e 6b 6e 6f 77 6e 5d 0d  ackage unknown].
3140: 0a 20 20 20 20 23 20 20 20 20 20 20 20 68 61 6e  .    #       han
3150: 64 6c 65 72 2c 20 61 6e 20 69 6e 74 65 72 70 72  dler, an interpr
3160: 65 74 65 72 20 66 6c 61 67 20 6d 75 73 74 20 62  eter flag must b
3170: 65 20 64 69 73 61 62 6c 65 64 2e 20 20 49 66 20  e disabled.  If 
3180: 6e 65 63 65 73 73 61 72 79 2c 0d 0a 20 20 20 20  necessary,..    
3190: 23 20 20 20 20 20 20 20 64 6f 20 74 68 61 74 20  #       do that 
31a0: 6e 6f 77 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20  now...    #..   
31b0: 20 69 66 20 7b 5b 69 73 45 61 67 6c 65 5d 20 26   if {[isEagle] &
31c0: 26 20 24 68 6f 6f 6b 55 6e 6b 6e 6f 77 6e 7d 20  & $hookUnknown} 
31d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 6f 62  then {..      ob
31e0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
31f0: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f  gs +NonPublic -o
3200: 62 6a 65 63 74 66 6c 61 67 73 20 2b 41 75 74 6f  bjectflags +Auto
3210: 46 6c 61 67 73 45 6e 75 6d 20 5c 0d 0a 20 20 20  FlagsEnum \..   
3220: 20 20 20 20 20 20 20 49 6e 74 65 72 70 72 65 74         Interpret
3230: 65 72 2e 47 65 74 41 63 74 69 76 65 20 69 6e 74  er.GetActive int
3240: 65 72 70 72 65 74 65 72 46 6c 61 67 73 20 2d 4e  erpreterFlags -N
3250: 6f 50 61 63 6b 61 67 65 55 6e 6b 6e 6f 77 6e 0d  oPackageUnknown.
3260: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 0d  .    }....    #.
3270: 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e  .    # NOTE: Fin
3280: 61 6c 6c 79 2c 20 61 74 74 65 6d 70 74 20 74 6f  ally, attempt to
3290: 20 61 63 74 75 61 6c 6c 79 20 6c 6f 61 64 20 74   actually load t
32a0: 68 65 20 70 61 63 6b 61 67 65 20 72 65 70 6f 73  he package repos
32b0: 69 74 6f 72 79 20 63 6c 69 65 6e 74 2e 0d 0a 20  itory client... 
32c0: 20 20 20 23 20 20 20 20 20 20 20 54 68 69 73 20     #       This 
32d0: 6d 61 79 20 66 61 69 6c 20 66 6f 72 20 61 20 6e  may fail for a n
32e0: 75 6d 62 65 72 20 6f 66 20 72 65 61 73 6f 6e 73  umber of reasons
32f0: 2e 20 20 54 68 65 20 6d 6f 73 74 20 6c 69 6b 65  .  The most like
3300: 6c 79 20 66 61 69 6c 75 72 65 0d 0a 20 20 20 20  ly failure..    
3310: 23 20 20 20 20 20 20 20 63 61 73 65 20 69 73 20  #       case is 
3320: 77 68 65 6e 20 74 68 65 20 64 69 72 65 63 74 6f  when the directo
3330: 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ry containing th
3340: 65 20 70 61 63 6b 61 67 65 20 69 73 20 6e 6f 74  e package is not
3350: 20 66 6f 75 6e 64 3b 0d 0a 20 20 20 20 23 20 20   found;..    #  
3360: 20 20 20 20 20 68 6f 77 65 76 65 72 2c 20 74 68       however, th
3370: 65 72 65 20 61 72 65 20 6f 74 68 65 72 20 70 6f  ere are other po
3380: 73 73 69 62 6c 65 20 66 61 69 6c 75 72 65 20 6d  ssible failure m
3390: 6f 64 65 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20  odes...    #..  
33a0: 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72    package requir
33b0: 65 20 45 61 67 6c 65 2e 50 61 63 6b 61 67 65 2e  e Eagle.Package.
33c0: 52 65 70 6f 73 69 74 6f 72 79 0d 0a 20 20 7d 0d  Repository..  }.
33d0: 0a 0c 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54  ....  #..  # NOT
33e0: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72  E: This procedur
33f0: 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20 64 6f  e attempts to do
3400: 77 6e 6c 6f 61 64 20 61 6e 64 20 65 78 74 72 61  wnload and extra
3410: 63 74 20 61 20 6e 61 74 69 76 65 20 54 63 6c 4b  ct a native TclK
3420: 69 74 20 44 4c 4c 0d 0a 20 20 23 20 20 20 20 20  it DLL..  #     
3430: 20 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e    for the curren
3440: 74 20 70 6c 61 74 66 6f 72 6d 2e 20 20 54 68 65  t platform.  The
3450: 20 6f 70 74 69 6f 6e 61 6c 20 63 68 61 6e 6e 65   optional channe
3460: 6c 20 61 72 67 75 6d 65 6e 74 20 69 73 20 74 68  l argument is th
3470: 65 0d 0a 20 20 23 20 20 20 20 20 20 20 6f 75 74  e..  #       out
3480: 70 75 74 20 63 68 61 6e 6e 65 6c 20 77 68 65 72  put channel wher
3490: 65 20 64 69 61 67 6e 6f 73 74 69 63 20 69 6e 66  e diagnostic inf
34a0: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 73 65 6e 74  ormation is sent
34b0: 2e 20 20 54 68 65 20 6f 70 74 69 6f 6e 61 6c 0d  .  The optional.
34c0: 0a 20 20 23 20 20 20 20 20 20 20 71 75 69 65 74  .  #       quiet
34d0: 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64   argument should
34e0: 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 74 6f 20   be non-zero to 
34f0: 70 72 65 76 65 6e 74 20 64 69 61 67 6e 6f 73 74  prevent diagnost
3500: 69 63 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0d 0a  ic information..
3510: 20 20 23 20 20 20 20 20 20 20 66 72 6f 6d 20 62    #       from b
3520: 65 69 6e 67 20 65 6d 69 74 74 65 64 2e 20 20 54  eing emitted.  T
3530: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 61  his procedure ma
3540: 79 20 72 61 69 73 65 20 73 63 72 69 70 74 20 65  y raise script e
3550: 72 72 6f 72 73 2e 20 20 54 68 65 0d 0a 20 20 23  rrors.  The..  #
3560: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61         return va
3570: 6c 75 65 20 69 73 20 74 68 65 20 66 75 6c 6c 20  lue is the full 
3580: 70 61 74 68 20 74 6f 20 74 68 65 20 6e 61 74 69  path to the nati
3590: 76 65 20 54 63 6c 4b 69 74 20 44 4c 4c 20 66 69  ve TclKit DLL fi
35a0: 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 70 72 6f 63  le...  #..  proc
35b0: 20 64 6f 77 6e 6c 6f 61 64 41 6e 64 45 78 74 72   downloadAndExtr
35c0: 61 63 74 4e 61 74 69 76 65 54 63 6c 4b 69 74 44  actNativeTclKitD
35d0: 6c 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ll {..          
35e0: 7b 63 68 61 6e 6e 65 6c 20 73 74 64 6f 75 74 7d  {channel stdout}
35f0: 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d   {quiet false} }
3600: 20 7b 0d 0a 20 20 20 20 73 65 74 75 70 50 61 63   {..    setupPac
3610: 6b 61 67 65 54 6f 6f 6c 73 65 74 56 61 72 73 20  kageToolsetVars 
3620: 66 61 6c 73 65 0d 0a 0d 0a 20 20 20 20 76 61 72  false....    var
3630: 69 61 62 6c 65 20 62 61 73 65 55 72 69 0d 0a 20  iable baseUri.. 
3640: 20 20 20 76 61 72 69 61 62 6c 65 20 74 63 6c 4b     variable tclK
3650: 69 74 44 6c 6c 55 72 69 0d 0a 20 20 20 20 76 61  itDllUri..    va
3660: 72 69 61 62 6c 65 20 74 63 6c 4b 69 74 44 6c 6c  riable tclKitDll
3670: 55 72 6e 0d 0a 0d 0a 20 20 20 20 70 61 63 6b 61  Urn....    packa
3680: 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65  ge require Eagle
3690: 2e 54 65 73 74 0d 0a 20 20 20 20 70 61 63 6b 61  .Test..    packa
36a0: 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65  ge require Eagle
36b0: 2e 55 6e 7a 69 70 0d 0a 0d 0a 20 20 20 20 73 65  .Unzip....    se
36c0: 74 20 70 6c 61 74 66 6f 72 6d 20 5b 6d 61 63 68  t platform [mach
36d0: 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a  ineToPlatform $:
36e0: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61  :tcl_platform(ma
36f0: 63 68 69 6e 65 29 20 74 72 75 65 5d 0d 0a 0d 0a  chine) true]....
3700: 20 20 20 20 73 65 74 20 65 78 74 72 61 63 74 52      set extractR
3710: 6f 6f 74 44 69 72 65 63 74 6f 72 79 20 5b 67 65  ootDirectory [ge
3720: 74 50 61 63 6b 61 67 65 49 6e 73 74 61 6c 6c 50  tPackageInstallP
3730: 61 74 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b  ath \..        [
3740: 61 70 70 65 6e 64 41 72 67 73 20 4b 69 74 44 6c  appendArgs KitDl
3750: 6c 5f 20 24 70 6c 61 74 66 6f 72 6d 5d 20 65 61  l_ $platform] ea
3760: 2d 74 64 2d 64 69 5d 0d 0a 0d 0a 20 20 20 20 73  -td-di]....    s
3770: 65 74 20 75 72 6e 20 5b 73 75 62 73 74 20 24 74  et urn [subst $t
3780: 63 6c 4b 69 74 44 6c 6c 55 72 6e 5d 3b 20 73 65  clKitDllUrn]; se
3790: 74 20 75 72 69 20 5b 73 75 62 73 74 20 24 74 63  t uri [subst $tc
37a0: 6c 4b 69 74 44 6c 6c 55 72 69 5d 0d 0a 20 20 20  lKitDllUri]..   
37b0: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67   set fileName [g
37c0: 65 74 54 65 6d 70 6f 72 61 72 79 46 69 6c 65 4e  etTemporaryFileN
37d0: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 69 66 20 7b  ame]....    if {
37e0: 5b 69 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20  [isEagle]} then 
37f0: 7b 0d 0a 20 20 20 20 20 20 75 72 69 20 64 6f 77  {..      uri dow
3800: 6e 6c 6f 61 64 20 24 75 72 69 20 24 66 69 6c 65  nload $uri $file
3810: 4e 61 6d 65 0d 0a 20 20 20 20 7d 20 65 6c 73 65  Name..    } else
3820: 20 7b 0d 0a 20 20 20 20 20 20 70 61 63 6b 61 67   {..      packag
3830: 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e  e require Eagle.
3840: 54 6f 6f 6c 73 2e 43 6f 6d 6d 6f 6e 0d 0a 0d 0a  Tools.Common....
3850: 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20        namespace 
3860: 69 6d 70 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20  import \..      
3870: 20 20 20 20 3a 3a 45 61 67 6c 65 3a 3a 54 6f 6f      ::Eagle::Too
3880: 6c 73 3a 3a 43 6f 6d 6d 6f 6e 3a 3a 67 65 74 46  ls::Common::getF
3890: 69 6c 65 56 69 61 48 74 74 70 20 5c 0d 0a 20 20  ileViaHttp \..  
38a0: 20 20 20 20 20 20 20 20 3a 3a 45 61 67 6c 65 3a          ::Eagle:
38b0: 3a 54 6f 6f 6c 73 3a 3a 43 6f 6d 6d 6f 6e 3a 3a  :Tools::Common::
38c0: 77 72 69 74 65 46 69 6c 65 0d 0a 0d 0a 20 20 20  writeFile....   
38d0: 20 20 20 73 65 74 20 64 61 74 61 20 5b 67 65 74     set data [get
38e0: 46 69 6c 65 56 69 61 48 74 74 70 20 24 75 72 69  FileViaHttp $uri
38f0: 20 32 30 20 24 63 68 61 6e 6e 65 6c 20 24 71 75   20 $channel $qu
3900: 69 65 74 20 2d 62 69 6e 61 72 79 20 74 72 75 65  iet -binary true
3910: 5d 0d 0a 0d 0a 20 20 20 20 20 20 77 72 69 74 65  ]....      write
3920: 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24  File $fileName $
3930: 64 61 74 61 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  data..    }.... 
3940: 20 20 20 73 65 74 20 65 78 74 72 61 63 74 44 69     set extractDi
3950: 72 65 63 74 6f 72 79 20 5b 65 78 74 72 61 63 74  rectory [extract
3960: 5a 69 70 41 72 63 68 69 76 65 20 5c 0d 0a 20 20  ZipArchive \..  
3970: 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20        $fileName 
3980: 24 65 78 74 72 61 63 74 52 6f 6f 74 44 69 72 65  $extractRootDire
3990: 63 74 6f 72 79 20 74 72 75 65 5d 0d 0a 0d 0a 20  ctory true].... 
39a0: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 6e 64 65     return [linde
39b0: 78 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70 6c  x [glob -nocompl
39c0: 61 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b  ain \..        [
39d0: 66 69 6c 65 20 6a 6f 69 6e 20 24 65 78 74 72 61  file join $extra
39e0: 63 74 44 69 72 65 63 74 6f 72 79 20 6c 69 62 20  ctDirectory lib 
39f0: 2a 5b 69 6e 66 6f 20 73 68 61 72 65 64 6c 69 62  *[info sharedlib
3a00: 65 78 74 65 6e 73 69 6f 6e 5d 5d 5d 20 30 5d 0d  extension]]] 0].
3a10: 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 23 0d 0a 20 20  .  }.....  #..  
3a20: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f  # NOTE: This pro
3a30: 63 65 64 75 72 65 20 61 74 74 65 6d 70 74 73 20  cedure attempts 
3a40: 74 6f 20 64 6f 77 6e 6c 6f 61 64 20 61 6e 64 20  to download and 
3a50: 65 78 74 72 61 63 74 20 74 68 65 20 53 65 63 75  extract the Secu
3a60: 72 69 74 79 20 54 6f 6f 6c 73 65 74 2c 0d 0a 20  rity Toolset,.. 
3a70: 20 23 20 20 20 20 20 20 20 77 68 69 63 68 20 69   #       which i
3a80: 6e 63 6c 75 64 65 73 20 74 68 65 20 48 61 72 70  ncludes the Harp
3a90: 79 20 61 6e 64 20 42 61 64 67 65 20 70 6c 75 67  y and Badge plug
3aa0: 69 6e 73 2e 20 20 54 68 65 20 6f 70 74 69 6f 6e  ins.  The option
3ab0: 61 6c 20 63 68 61 6e 6e 65 6c 0d 0a 20 20 23 20  al channel..  # 
3ac0: 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20 69        argument i
3ad0: 73 20 74 68 65 20 6f 75 74 70 75 74 20 63 68 61  s the output cha
3ae0: 6e 6e 65 6c 20 77 68 65 72 65 20 64 69 61 67 6e  nnel where diagn
3af0: 6f 73 74 69 63 20 69 6e 66 6f 72 6d 61 74 69 6f  ostic informatio
3b00: 6e 20 69 73 20 73 65 6e 74 2e 0d 0a 20 20 23 20  n is sent...  # 
3b10: 20 20 20 20 20 20 54 68 65 20 6f 70 74 69 6f 6e        The option
3b20: 61 6c 20 71 75 69 65 74 20 61 72 67 75 6d 65 6e  al quiet argumen
3b30: 74 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 6e 2d  t should be non-
3b40: 7a 65 72 6f 20 74 6f 20 70 72 65 76 65 6e 74 20  zero to prevent 
3b50: 64 69 61 67 6e 6f 73 74 69 63 0d 0a 20 20 23 20  diagnostic..  # 
3b60: 20 20 20 20 20 20 69 6e 66 6f 72 6d 61 74 69 6f        informatio
3b70: 6e 20 66 72 6f 6d 20 62 65 69 6e 67 20 65 6d 69  n from being emi
3b80: 74 74 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63  tted.  This proc
3b90: 65 64 75 72 65 20 6d 61 79 20 72 61 69 73 65 20  edure may raise 
3ba0: 73 63 72 69 70 74 0d 0a 20 20 23 20 20 20 20 20  script..  #     
3bb0: 20 20 65 72 72 6f 72 73 2e 20 20 54 68 65 20 72    errors.  The r
3bc0: 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 74  eturn value is t
3bd0: 68 65 20 66 75 6c 6c 20 70 61 74 68 20 74 6f 20  he full path to 
3be0: 61 20 64 69 72 65 63 74 6f 72 79 20 74 68 61 74  a directory that
3bf0: 20 73 68 6f 75 6c 64 0d 0a 20 20 23 20 20 20 20   should..  #    
3c00: 20 20 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 22     contain the "
3c10: 48 61 72 70 79 31 2e 30 22 20 61 6e 64 20 22 42  Harpy1.0" and "B
3c20: 61 64 67 65 31 2e 30 22 20 70 6c 75 67 69 6e 20  adge1.0" plugin 
3c30: 64 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20  directories...  
3c40: 23 0d 0a 20 20 70 72 6f 63 20 64 6f 77 6e 6c 6f  #..  proc downlo
3c50: 61 64 41 6e 64 45 78 74 72 61 63 74 53 65 63 75  adAndExtractSecu
3c60: 72 69 74 79 54 6f 6f 6c 73 65 74 20 7b 0d 0a 20  rityToolset {.. 
3c70: 20 20 20 20 20 20 20 20 20 7b 63 68 61 6e 6e 65           {channe
3c80: 6c 20 73 74 64 6f 75 74 7d 20 7b 71 75 69 65 74  l stdout} {quiet
3c90: 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..   
3ca0: 20 73 65 74 75 70 50 61 63 6b 61 67 65 54 6f 6f   setupPackageToo
3cb0: 6c 73 65 74 56 61 72 73 20 66 61 6c 73 65 0d 0a  lsetVars false..
3cc0: 0d 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 62  ..    variable b
3cd0: 61 73 65 55 72 69 0d 0a 20 20 20 20 76 61 72 69  aseUri..    vari
3ce0: 61 62 6c 65 20 73 65 63 75 72 69 74 79 54 6f 6f  able securityToo
3cf0: 6c 73 65 74 55 72 69 0d 0a 20 20 20 20 76 61 72  lsetUri..    var
3d00: 69 61 62 6c 65 20 73 65 63 75 72 69 74 79 54 6f  iable securityTo
3d10: 6f 6c 73 65 74 55 72 6e 0d 0a 0d 0a 20 20 20 20  olsetUrn....    
3d20: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
3d30: 45 61 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20  Eagle.Test..    
3d40: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
3d50: 45 61 67 6c 65 2e 55 6e 7a 69 70 0d 0a 0d 0a 20  Eagle.Unzip.... 
3d60: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
3d70: 73 74 73 20 3a 3a 65 61 67 6c 65 5f 70 6c 61 74  sts ::eagle_plat
3d80: 66 6f 72 6d 28 74 65 78 74 29 5d 20 26 26 20 5c  form(text)] && \
3d90: 0d 0a 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e  ..        [strin
3da0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 61 67 6c  g length $::eagl
3db0: 65 5f 70 6c 61 74 66 6f 72 6d 28 74 65 78 74 29  e_platform(text)
3dc0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {.. 
3dd0: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72       set platfor
3de0: 6d 20 5b 73 74 72 69 6e 67 20 74 6f 6c 6f 77 65  m [string tolowe
3df0: 72 20 24 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66  r $::eagle_platf
3e00: 6f 72 6d 28 74 65 78 74 29 5d 0d 0a 20 20 20 20  orm(text)]..    
3e10: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..      
3e20: 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 73 74  set platform [st
3e30: 72 69 6e 67 20 74 6f 6c 6f 77 65 72 20 6e 65 74  ring tolower net
3e40: 46 78 32 30 5d 3b 20 23 20 54 4f 44 4f 3a 20 47  Fx20]; # TODO: G
3e50: 6f 6f 64 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20  ood default?..  
3e60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 73 65 74 20 65    }....    set e
3e70: 78 74 72 61 63 74 52 6f 6f 74 44 69 72 65 63 74  xtractRootDirect
3e80: 6f 72 79 20 5b 67 65 74 50 61 63 6b 61 67 65 49  ory [getPackageI
3e90: 6e 73 74 61 6c 6c 50 61 74 68 20 5c 0d 0a 20 20  nstallPath \..  
3ea0: 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67        [appendArg
3eb0: 73 20 65 65 65 5f 20 24 70 6c 61 74 66 6f 72 6d  s eee_ $platform
3ec0: 5d 20 65 61 2d 73 74 2d 64 69 5d 0d 0a 0d 0a 20  ] ea-st-di].... 
3ed0: 20 20 20 73 65 74 20 64 69 72 20 5b 73 74 72 69     set dir [stri
3ee0: 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 66 78 20  ng map [list fx 
3ef0: 22 22 5d 20 24 70 6c 61 74 66 6f 72 6d 5d 3b 20  ""] $platform]; 
3f00: 23 20 6e 65 74 66 78 32 30 20 2d 3e 20 6e 65 74  # netfx20 -> net
3f10: 32 30 0d 0a 20 20 20 20 73 65 74 20 75 72 6e 20  20..    set urn 
3f20: 5b 73 75 62 73 74 20 24 73 65 63 75 72 69 74 79  [subst $security
3f30: 54 6f 6f 6c 73 65 74 55 72 6e 5d 3b 20 73 65 74  ToolsetUrn]; set
3f40: 20 75 72 69 20 5b 73 75 62 73 74 20 24 73 65 63   uri [subst $sec
3f50: 75 72 69 74 79 54 6f 6f 6c 73 65 74 55 72 69 5d  urityToolsetUri]
3f60: 0d 0a 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61  ..    set fileNa
3f70: 6d 65 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79  me [getTemporary
3f80: 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20  FileName]....   
3f90: 20 69 66 20 7b 5b 69 73 45 61 67 6c 65 5d 7d 20   if {[isEagle]} 
3fa0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 75 72  then {..      ur
3fb0: 69 20 64 6f 77 6e 6c 6f 61 64 20 24 75 72 69 20  i download $uri 
3fc0: 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 7d  $fileName..    }
3fd0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 70   else {..      p
3fe0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45  ackage require E
3ff0: 61 67 6c 65 2e 54 6f 6f 6c 73 2e 43 6f 6d 6d 6f  agle.Tools.Commo
4000: 6e 0d 0a 0d 0a 20 20 20 20 20 20 6e 61 6d 65 73  n....      names
4010: 70 61 63 65 20 69 6d 70 6f 72 74 20 5c 0d 0a 20  pace import \.. 
4020: 20 20 20 20 20 20 20 20 20 3a 3a 45 61 67 6c 65           ::Eagle
4030: 3a 3a 54 6f 6f 6c 73 3a 3a 43 6f 6d 6d 6f 6e 3a  ::Tools::Common:
4040: 3a 67 65 74 46 69 6c 65 56 69 61 48 74 74 70 20  :getFileViaHttp 
4050: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 3a 45  \..          ::E
4060: 61 67 6c 65 3a 3a 54 6f 6f 6c 73 3a 3a 43 6f 6d  agle::Tools::Com
4070: 6d 6f 6e 3a 3a 77 72 69 74 65 46 69 6c 65 0d 0a  mon::writeFile..
4080: 0d 0a 20 20 20 20 20 20 73 65 74 20 64 61 74 61  ..      set data
4090: 20 5b 67 65 74 46 69 6c 65 56 69 61 48 74 74 70   [getFileViaHttp
40a0: 20 24 75 72 69 20 32 30 20 24 63 68 61 6e 6e 65   $uri 20 $channe
40b0: 6c 20 24 71 75 69 65 74 20 2d 62 69 6e 61 72 79  l $quiet -binary
40c0: 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20   true]....      
40d0: 77 72 69 74 65 46 69 6c 65 20 24 66 69 6c 65 4e  writeFile $fileN
40e0: 61 6d 65 20 24 64 61 74 61 0d 0a 20 20 20 20 7d  ame $data..    }
40f0: 0d 0a 0d 0a 20 20 20 20 73 65 74 20 65 78 74 72  ....    set extr
4100: 61 63 74 44 69 72 65 63 74 6f 72 79 20 5b 65 78  actDirectory [ex
4110: 74 72 61 63 74 5a 69 70 41 72 63 68 69 76 65 20  tractZipArchive 
4120: 5c 0d 0a 20 20 20 20 20 20 20 20 24 66 69 6c 65  \..        $file
4130: 4e 61 6d 65 20 24 65 78 74 72 61 63 74 52 6f 6f  Name $extractRoo
4140: 74 44 69 72 65 63 74 6f 72 79 20 74 72 75 65 5d  tDirectory true]
4150: 0d 0a 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 5b  ....    return [
4160: 66 69 6c 65 20 6a 6f 69 6e 20 24 65 78 74 72 61  file join $extra
4170: 63 74 44 69 72 65 63 74 6f 72 79 20 62 75 69 6c  ctDirectory buil
4180: 64 20 24 64 69 72 20 6c 69 62 5d 0d 0a 20 20 7d  d $dir lib]..  }
4190: 0d 0a 0c 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f  .....  #..  # NO
41a0: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75  TE: This procedu
41b0: 72 65 20 61 74 74 65 6d 70 74 73 20 74 6f 20 72  re attempts to r
41c0: 65 71 75 65 73 74 20 61 20 6c 69 63 65 6e 73 65  equest a license
41d0: 20 63 65 72 74 69 66 69 63 61 74 65 20 66 6f 72   certificate for
41e0: 20 45 61 67 6c 65 2c 0d 0a 20 20 23 20 20 20 20   Eagle,..  #    
41f0: 20 20 20 77 68 69 63 68 20 69 6e 63 6c 75 64 65     which include
4200: 73 20 74 68 65 20 48 61 72 70 79 20 61 6e 64 20  s the Harpy and 
4210: 42 61 64 67 65 20 70 6c 75 67 69 6e 73 2e 20 20  Badge plugins.  
4220: 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 63 68 61  The optional cha
4230: 6e 6e 65 6c 0d 0a 20 20 23 20 20 20 20 20 20 20  nnel..  #       
4240: 61 72 67 75 6d 65 6e 74 20 69 73 20 74 68 65 20  argument is the 
4250: 6f 75 74 70 75 74 20 63 68 61 6e 6e 65 6c 20 77  output channel w
4260: 68 65 72 65 20 64 69 61 67 6e 6f 73 74 69 63 20  here diagnostic 
4270: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 73  information is s
4280: 65 6e 74 2e 0d 0a 20 20 23 20 20 20 20 20 20 20  ent...  #       
4290: 54 68 65 20 6f 70 74 69 6f 6e 61 6c 20 71 75 69  The optional qui
42a0: 65 74 20 61 72 67 75 6d 65 6e 74 20 73 68 6f 75  et argument shou
42b0: 6c 64 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 74  ld be non-zero t
42c0: 6f 20 70 72 65 76 65 6e 74 20 64 69 61 67 6e 6f  o prevent diagno
42d0: 73 74 69 63 0d 0a 20 20 23 20 20 20 20 20 20 20  stic..  #       
42e0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d  information from
42f0: 20 62 65 69 6e 67 20 65 6d 69 74 74 65 64 2e 20   being emitted. 
4300: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure 
4310: 6d 61 79 20 72 61 69 73 65 20 73 63 72 69 70 74  may raise script
4320: 0d 0a 20 20 23 20 20 20 20 20 20 20 65 72 72 6f  ..  #       erro
4330: 72 73 2e 20 20 54 68 65 20 72 65 74 75 72 6e 20  rs.  The return 
4340: 76 61 6c 75 65 20 69 73 20 74 68 65 20 66 75 6c  value is the ful
4350: 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c  ly qualified fil
4360: 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 0d 0a  e name for the..
4370: 20 20 23 20 20 20 20 20 20 20 72 65 73 75 6c 74    #       result
4380: 69 6e 67 20 6c 69 63 65 6e 73 65 20 63 65 72 74  ing license cert
4390: 69 66 69 63 61 74 65 2e 0d 0a 20 20 23 0d 0a 20  ificate...  #.. 
43a0: 20 23 20 57 41 52 4e 49 4e 47 3a 20 54 68 69 73   # WARNING: This
43b0: 20 70 72 6f 63 65 64 75 72 65 20 77 69 6c 6c 20   procedure will 
43c0: 73 65 6e 64 20 74 68 65 20 73 68 6f 72 74 20 6e  send the short n
43d0: 61 6d 65 20 61 6e 64 20 64 69 73 70 6c 61 79 20  ame and display 
43e0: 6e 61 6d 65 20 6f 66 20 74 68 65 0d 0a 20 20 23  name of the..  #
43f0: 20 20 20 20 20 20 20 20 20 20 63 75 72 72 65 6e            curren
4400: 74 6c 79 20 6c 6f 67 67 65 64 20 6f 6e 20 75 73  tly logged on us
4410: 65 72 20 74 6f 20 74 68 65 20 45 61 67 6c 65 20  er to the Eagle 
4420: 6c 69 63 65 6e 73 65 20 73 65 72 76 65 72 20 61  license server a
4430: 73 20 74 68 65 79 20 61 72 65 0d 0a 20 20 23 20  s they are..  # 
4440: 20 20 20 20 20 20 20 20 20 72 65 71 75 69 72 65           require
4450: 64 20 66 6f 72 20 61 20 6e 65 77 20 6c 69 63 65  d for a new lice
4460: 6e 73 65 20 63 65 72 74 69 66 69 63 61 74 65 20  nse certificate 
4470: 74 6f 20 62 65 20 69 73 73 75 65 64 2e 20 20 41  to be issued.  A
4480: 62 75 73 65 20 6f 66 0d 0a 20 20 23 20 20 20 20  buse of..  #    
4490: 20 20 20 20 20 20 74 68 69 73 20 73 65 72 76 69        this servi
44a0: 63 65 20 6d 61 79 20 72 65 73 75 6c 74 20 69 6e  ce may result in
44b0: 20 61 20 70 65 72 6d 61 6e 65 6e 74 20 62 61 6e   a permanent ban
44c0: 20 66 72 6f 6d 20 74 68 65 20 73 65 72 76 69 63   from the servic
44d0: 65 20 61 6e 64 0d 0a 20 20 23 20 20 20 20 20 20  e and..  #      
44e0: 20 20 20 20 72 65 76 6f 63 61 74 69 6f 6e 20 6f      revocation o
44f0: 66 20 61 6e 79 20 70 72 65 76 69 6f 75 73 6c 79  f any previously
4500: 20 69 73 73 75 65 64 20 6c 69 63 65 6e 73 65 20   issued license 
4510: 63 65 72 74 69 66 69 63 61 74 65 73 2e 0d 0a 20  certificates... 
4520: 20 23 0d 0a 20 20 70 72 6f 63 20 72 65 71 75 65   #..  proc reque
4530: 73 74 4c 69 63 65 6e 73 65 43 65 72 74 69 66 69  stLicenseCertifi
4540: 63 61 74 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  cate {..        
4550: 20 20 7b 63 68 61 6e 6e 65 6c 20 73 74 64 6f 75    {channel stdou
4560: 74 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d  t} {quiet false}
4570: 20 7d 20 7b 0d 0a 20 20 20 20 73 65 74 75 70 50   } {..    setupP
4580: 61 63 6b 61 67 65 54 6f 6f 6c 73 65 74 56 61 72  ackageToolsetVar
4590: 73 20 66 61 6c 73 65 0d 0a 0d 0a 20 20 20 20 76  s false....    v
45a0: 61 72 69 61 62 6c 65 20 62 61 73 65 55 72 69 0d  ariable baseUri.
45b0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 69  .    variable li
45c0: 63 65 6e 73 65 55 72 69 0d 0a 20 20 20 20 76 61  censeUri..    va
45d0: 72 69 61 62 6c 65 20 6c 69 63 65 6e 73 65 55 72  riable licenseUr
45e0: 6e 73 0d 0a 0d 0a 20 20 20 20 70 61 63 6b 61 67  ns....    packag
45f0: 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e  e require Eagle.
4600: 54 65 73 74 0d 0a 0d 0a 20 20 20 20 73 65 74 20  Test....    set 
4610: 63 65 72 74 69 66 69 63 61 74 65 52 6f 6f 74 44  certificateRootD
4620: 69 72 65 63 74 6f 72 79 20 5b 67 65 74 54 65 6d  irectory [getTem
4630: 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 0d 0a 20  poraryPath].... 
4640: 20 20 20 73 65 74 20 70 72 6f 63 65 73 73 44 69     set processDi
4650: 72 65 63 74 6f 72 79 50 72 65 66 69 78 20 5b 66  rectoryPrefix [f
4660: 69 6c 65 20 6a 6f 69 6e 20 24 63 65 72 74 69 66  ile join $certif
4670: 69 63 61 74 65 52 6f 6f 74 44 69 72 65 63 74 6f  icateRootDirecto
4680: 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 5b 61  ry \..        [a
4690: 70 70 65 6e 64 41 72 67 73 20 65 61 2d 6c 63 2d  ppendArgs ea-lc-
46a0: 64 69 2d 20 5b 70 69 64 5d 20 2d 5d 5d 0d 0a 0d  di- [pid] -]]...
46b0: 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f  .    #..    # NO
46c0: 54 45 3a 20 49 73 73 75 65 20 61 20 77 61 72 6e  TE: Issue a warn
46d0: 69 6e 67 20 74 6f 20 74 68 65 20 75 73 65 72 20  ing to the user 
46e0: 69 66 20 69 74 20 61 70 70 65 61 72 73 20 74 68  if it appears th
46f0: 65 72 65 20 69 73 20 61 6c 72 65 61 64 79 20 61  ere is already a
4700: 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 6c 69  ..    #       li
4710: 63 65 6e 73 65 20 63 65 72 74 69 66 69 63 61 74  cense certificat
4720: 65 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  e in a temporary
4730: 20 64 69 72 65 63 74 6f 72 79 20 74 68 61 74 20   directory that 
4740: 77 61 73 20 63 72 65 61 74 65 64 0d 0a 20 20 20  was created..   
4750: 20 23 20 20 20 20 20 20 20 62 79 20 74 68 69 73   #       by this
4760: 20 70 72 6f 63 65 73 73 2e 20 20 48 6f 70 65 66   process.  Hopef
4770: 75 6c 6c 79 2c 20 74 68 69 73 20 73 68 6f 75 6c  ully, this shoul
4780: 64 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  d reduce the num
4790: 62 65 72 20 6f 66 0d 0a 20 20 20 20 23 20 20 20  ber of..    #   
47a0: 20 20 20 20 64 75 70 6c 69 63 61 74 65 20 72 65      duplicate re
47b0: 71 75 65 73 74 73 2e 0d 0a 20 20 20 20 23 0d 0a  quests...    #..
47c0: 20 20 20 20 73 65 74 20 76 61 72 4e 61 6d 65 31      set varName1
47d0: 20 59 45 53 5f 50 4c 45 41 53 45 5f 46 4f 52 43   YES_PLEASE_FORC
47e0: 45 5f 41 5f 4c 49 43 45 4e 53 45 5f 43 45 52 54  E_A_LICENSE_CERT
47f0: 49 46 49 43 41 54 45 5f 52 45 51 55 45 53 54 0d  IFICATE_REQUEST.
4800: 0a 0d 0a 20 20 20 20 69 66 20 7b 21 5b 69 6e 66  ...    if {![inf
4810: 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 24  o exists ::env($
4820: 76 61 72 4e 61 6d 65 31 29 5d 20 26 26 20 5b 69  varName1)] && [i
4830: 73 57 69 6e 64 6f 77 73 5d 7d 20 74 68 65 6e 20  sWindows]} then 
4840: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 70 72 6f  {..      set pro
4850: 63 65 73 73 46 69 6c 65 4e 61 6d 65 73 20 5b 6c  cessFileNames [l
4860: 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f  ist]....      fo
4870: 72 65 61 63 68 20 70 72 6f 63 65 73 73 44 69 72  reach processDir
4880: 65 63 74 6f 72 79 20 5b 66 69 6e 64 44 69 72 65  ectory [findDire
4890: 63 74 6f 72 69 65 73 20 5c 0d 0a 20 20 20 20 20  ctories \..     
48a0: 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73       [appendArgs
48b0: 20 24 70 72 6f 63 65 73 73 44 69 72 65 63 74 6f   $processDirecto
48c0: 72 79 50 72 65 66 69 78 20 2a 5d 5d 20 7b 0d 0a  ryPrefix *]] {..
48d0: 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70          eval lap
48e0: 70 65 6e 64 20 70 72 6f 63 65 73 73 46 69 6c 65  pend processFile
48f0: 4e 61 6d 65 73 20 5b 66 69 6e 64 46 69 6c 65 73  Names [findFiles
4900: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
4910: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 72 6f 63  [file join $proc
4920: 65 73 73 44 69 72 65 63 74 6f 72 79 20 2a 5d 5d  essDirectory *]]
4930: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
4940: 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20     if {[llength 
4950: 24 70 72 6f 63 65 73 73 46 69 6c 65 4e 61 6d 65  $processFileName
4960: 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  s] > 0} then {..
4970: 20 20 20 20 20 20 20 20 73 65 74 20 77 61 72 6e          set warn
4980: 69 6e 67 43 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74  ingCommand [list
4990: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ]....        if 
49a0: 7b 5b 69 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e  {[isEagle]} then
49b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61   {..          la
49c0: 70 70 65 6e 64 20 77 61 72 6e 69 6e 67 43 6f 6d  ppend warningCom
49d0: 6d 61 6e 64 20 68 6f 73 74 20 72 65 73 75 6c 74  mand host result
49e0: 20 45 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   Error..        
49f0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..      
4a00: 20 20 20 20 6c 61 70 70 65 6e 64 20 77 61 72 6e      lappend warn
4a10: 69 6e 67 43 6f 6d 6d 61 6e 64 20 70 75 74 73 20  ingCommand puts 
4a20: 73 74 64 65 72 72 0d 0a 20 20 20 20 20 20 20 20  stderr..        
4a30: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  }....        set
4a40: 20 76 61 72 4e 61 6d 65 32 20 4d 61 73 74 65 72   varName2 Master
4a50: 5f 43 65 72 74 69 66 69 63 61 74 65 0d 0a 0d 0a  _Certificate....
4a60: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
4a70: 77 61 72 6e 69 6e 67 43 6f 6d 6d 61 6e 64 20 5b  warningCommand [
4a80: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..  
4a90: 20 20 20 20 20 20 20 20 20 20 22 4f 6e 65 20 6f            "One o
4aa0: 72 20 6d 6f 72 65 20 74 65 6d 70 6f 72 61 72 79  r more temporary
4ab0: 20 6c 69 63 65 6e 73 65 20 63 65 72 74 69 66 69   license certifi
4ac0: 63 61 74 65 20 66 69 6c 65 73 20 22 20 5c 0d 0a  cate files " \..
4ad0: 20 20 20 20 20 20 20 20 20 20 20 20 22 61 70 70              "app
4ae0: 61 72 65 6e 74 6c 79 20 62 65 6c 6f 6e 67 69 6e  arently belongin
4af0: 67 20 74 6f 20 74 68 69 73 20 70 72 6f 63 65 73  g to this proces
4b00: 73 20 77 65 72 65 20 66 6f 75 6e 64 2e 20 20 22  s were found.  "
4b10: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
4b20: 22 49 66 20 79 6f 75 20 77 69 73 68 20 74 6f 20  "If you wish to 
4b30: 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 77 61  override this wa
4b40: 72 6e 69 6e 67 20 61 6e 64 20 66 6f 72 63 65 20  rning and force 
4b50: 61 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  a " \..         
4b60: 20 20 20 22 6e 65 77 20 6c 69 63 65 6e 73 65 20     "new license 
4b70: 63 65 72 74 69 66 69 63 61 74 65 20 72 65 71 75  certificate requ
4b80: 65 73 74 20 74 6f 20 62 65 20 73 75 62 6d 69 74  est to be submit
4b90: 74 65 64 2c 20 22 20 5c 0d 0a 20 20 20 20 20 20  ted, " \..      
4ba0: 20 20 20 20 20 20 22 73 65 74 20 74 68 65 20 5c        "set the \
4bb0: 22 22 20 24 76 61 72 4e 61 6d 65 31 20 22 5c 22  "" $varName1 "\"
4bc0: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72   environment var
4bd0: 69 61 62 6c 65 20 22 20 5c 0d 0a 20 20 20 20 20  iable " \..     
4be0: 20 20 20 20 20 20 20 22 28 74 6f 20 61 6e 79 74         "(to anyt
4bf0: 68 69 6e 67 29 3b 20 68 6f 77 65 76 65 72 2c 20  hing); however, 
4c00: 70 6c 65 61 73 65 20 6b 65 65 70 20 69 6e 20 6d  please keep in m
4c10: 69 6e 64 20 74 68 61 74 20 22 20 5c 0d 0a 20 20  ind that " \..  
4c20: 20 20 20 20 20 20 20 20 20 20 22 72 65 71 75 65            "reque
4c30: 73 74 69 6e 67 20 74 6f 6f 20 6d 61 6e 79 20 6c  sting too many l
4c40: 69 63 65 6e 73 65 20 63 65 72 74 69 66 69 63 61  icense certifica
4c50: 74 65 73 20 61 6e 64 2f 6f 72 20 22 20 5c 0d 0a  tes and/or " \..
4c60: 20 20 20 20 20 20 20 20 20 20 20 20 22 72 65 71              "req
4c70: 75 65 73 74 69 6e 67 20 6c 69 63 65 6e 73 65 20  uesting license 
4c80: 63 65 72 74 69 66 69 63 61 74 65 73 20 74 6f 6f  certificates too
4c90: 20 66 61 73 74 20 4d 41 59 20 62 65 20 22 20 5c   fast MAY be " \
4ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 63  ..            "c
4cb0: 6f 6e 73 69 64 65 72 65 64 20 61 62 75 73 69 76  onsidered abusiv
4cc0: 65 20 62 65 68 61 76 69 6f 72 2e 20 20 55 70 6f  e behavior.  Upo
4cd0: 6e 20 73 75 63 63 65 73 73 2c 20 74 68 65 20 22  n success, the "
4ce0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
4cf0: 22 72 65 73 75 6c 74 69 6e 67 20 74 65 6d 70 6f  "resulting tempo
4d00: 72 61 72 79 20 6c 69 63 65 6e 73 65 20 63 65 72  rary license cer
4d10: 74 69 66 69 63 61 74 65 20 66 69 6c 65 20 22 20  tificate file " 
4d20: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
4d30: 53 48 4f 55 4c 44 20 62 65 20 73 61 76 65 64 20  SHOULD be saved 
4d40: 74 6f 20 61 20 73 65 63 75 72 65 20 6c 6f 63 61  to a secure loca
4d50: 74 69 6f 6e 20 6f 6e 20 74 68 65 20 6c 6f 63 61  tion on the loca
4d60: 6c 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  l " \..         
4d70: 20 20 20 22 66 69 6c 65 20 73 79 73 74 65 6d 2c     "file system,
4d80: 20 65 2e 67 2e 20 74 68 65 20 68 6f 6d 65 20 64   e.g. the home d
4d90: 69 72 65 63 74 6f 72 79 20 61 73 73 6f 63 69 61  irectory associa
4da0: 74 65 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  ted " \..       
4db0: 20 20 20 20 20 22 77 69 74 68 20 74 68 65 20 75       "with the u
4dc0: 73 65 72 20 73 75 62 6d 69 74 74 69 6e 67 20 74  ser submitting t
4dd0: 68 65 20 6c 69 63 65 6e 73 65 20 63 65 72 74 69  he license certi
4de0: 66 69 63 61 74 65 20 22 20 5c 0d 0a 20 20 20 20  ficate " \..    
4df0: 20 20 20 20 20 20 20 20 22 72 65 71 75 65 73 74          "request
4e00: 2e 20 20 54 68 65 20 66 75 6c 6c 79 20 71 75 61  .  The fully qua
4e10: 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65  lified file name
4e20: 20 66 6f 72 20 74 68 65 20 22 20 5c 0d 0a 20 20   for the " \..  
4e30: 20 20 20 20 20 20 20 20 20 20 22 74 65 6d 70 6f            "tempo
4e40: 72 61 72 79 20 6c 69 63 65 6e 73 65 20 63 65 72  rary license cer
4e50: 74 69 66 69 63 61 74 65 20 4d 55 53 54 20 75 73  tificate MUST us
4e60: 65 64 20 61 73 20 74 68 65 20 22 20 5c 0d 0a 20  ed as the " \.. 
4e70: 20 20 20 20 20 20 20 20 20 20 20 22 76 61 6c 75             "valu
4e80: 65 20 66 6f 72 20 74 68 65 20 5c 22 22 20 24 76  e for the \"" $v
4e90: 61 72 4e 61 6d 65 32 20 22 5c 22 20 65 6e 76 69  arName2 "\" envi
4ea0: 72 6f 6e 6d 65 6e 74 20 22 20 5c 0d 0a 20 20 20  ronment " \..   
4eb0: 20 20 20 20 20 20 20 20 20 22 76 61 72 69 61 62           "variab
4ec0: 6c 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 69  le; otherwise, i
4ed0: 74 20 4d 41 59 20 4e 4f 54 20 62 65 20 66 6f 75  t MAY NOT be fou
4ee0: 6e 64 20 77 68 65 6e 20 6f 6e 65 20 22 20 5c 0d  nd when one " \.
4ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 6f 66  .            "of
4f00: 20 69 74 73 20 61 73 73 6f 63 69 61 74 65 64 20   its associated 
4f10: 70 6c 75 67 69 6e 73 20 61 74 74 65 6d 70 74 73  plugins attempts
4f20: 20 74 6f 20 6c 6f 61 64 2e 5c 6e 22 5d 0d 0a 0d   to load.\n"]...
4f30: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..    
4f40: 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 6d 69 74      # NOTE: Emit
4f50: 20 6f 75 72 20 63 61 72 65 66 75 6c 6c 79 20 77   our carefully w
4f60: 6f 72 64 65 64 20 6c 69 63 65 6e 73 65 20 77 61  orded license wa
4f70: 72 6e 69 6e 67 20 6d 65 73 73 61 67 65 2e 0d 0a  rning message...
4f80: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..     
4f90: 20 20 20 65 76 61 6c 20 24 77 61 72 6e 69 6e 67     eval $warning
4fa0: 43 6f 6d 6d 61 6e 64 0d 0a 0d 0a 20 20 20 20 20  Command....     
4fb0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        # 
4fc0: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65  NOTE: Return the
4fd0: 20 66 69 72 73 74 20 70 72 65 2d 65 78 69 73 74   first pre-exist
4fe0: 69 6e 67 20 6c 69 63 65 6e 73 65 20 63 65 72 74  ing license cert
4ff0: 69 66 69 63 61 74 65 20 66 69 6c 65 0d 0a 20 20  ificate file..  
5000: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61        #       na
5010: 6d 65 20 74 68 61 74 20 77 61 73 20 66 6f 75 6e  me that was foun
5020: 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  d...        #.. 
5030: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c         return [l
5040: 69 6e 64 65 78 20 24 70 72 6f 63 65 73 73 46 69  index $processFi
5050: 6c 65 4e 61 6d 65 73 20 30 5d 0d 0a 20 20 20 20  leNames 0]..    
5060: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
5070: 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20    set directory 
5080: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \.. 
5090: 20 20 20 20 20 20 20 24 70 72 6f 63 65 73 73 44         $processD
50a0: 69 72 65 63 74 6f 72 79 50 72 65 66 69 78 20 5b  irectoryPrefix [
50b0: 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 63 6c 6f  string trim [clo
50c0: 63 6b 20 73 65 63 6f 6e 64 73 5d 20 2d 5d 5d 0d  ck seconds] -]].
50d0: 0a 0d 0a 20 20 20 20 73 65 74 20 75 72 6e 20 5b  ...    set urn [
50e0: 73 75 62 73 74 20 5b 6c 69 6e 64 65 78 20 5c 0d  subst [lindex \.
50f0: 0a 20 20 20 20 20 20 20 20 24 6c 69 63 65 6e 73  .        $licens
5100: 65 55 72 6e 73 20 5b 65 78 70 72 20 7b 69 6e 74  eUrns [expr {int
5110: 28 72 61 6e 64 28 29 20 2a 20 5b 6c 6c 65 6e 67  (rand() * [lleng
5120: 74 68 20 24 6c 69 63 65 6e 73 65 55 72 6e 73 5d  th $licenseUrns]
5130: 29 7d 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 73 65 74  )}]]]....    set
5140: 20 75 72 69 20 5b 73 75 62 73 74 20 24 6c 69 63   uri [subst $lic
5150: 65 6e 73 65 55 72 69 5d 0d 0a 0d 0a 20 20 20 20  enseUri]....    
5160: 69 66 20 7b 21 5b 69 73 45 61 67 6c 65 5d 20 7c  if {![isEagle] |
5170: 7c 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  | [catch {..    
5180: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke 
5190: 53 79 73 74 65 6d 2e 53 65 63 75 72 69 74 79 2e  System.Security.
51a0: 50 72 69 6e 63 69 70 61 6c 2e 57 69 6e 64 6f 77  Principal.Window
51b0: 73 49 64 65 6e 74 69 74 79 20 5c 0d 0a 20 20 20  sIdentity \..   
51c0: 20 20 20 20 20 20 20 47 65 74 43 75 72 72 65 6e         GetCurren
51d0: 74 2e 4e 61 6d 65 0d 0a 20 20 20 20 7d 20 75 73  t.Name..    } us
51e0: 65 72 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  erName]} then {.
51f0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..      
5200: 23 20 48 41 43 4b 3a 20 46 61 6c 6c 62 61 63 6b  # HACK: Fallback
5210: 20 74 6f 20 75 73 69 6e 67 20 61 20 76 61 6c 75   to using a valu
5220: 65 20 66 72 6f 6d 20 74 68 65 20 22 74 63 6c 5f  e from the "tcl_
5230: 70 6c 61 74 66 6f 72 6d 22 20 61 72 72 61 79 2e  platform" array.
5240: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #       
5250: 46 6f 72 20 6e 61 74 69 76 65 20 54 63 6c 2c 20  For native Tcl, 
5260: 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  this is the only
5270: 20 63 68 6f 69 63 65 2e 20 20 46 6f 72 20 45 61   choice.  For Ea
5280: 67 6c 65 2c 20 69 74 0d 0a 20 20 20 20 20 20 23  gle, it..      #
5290: 20 20 20 20 20 20 20 69 73 20 75 73 65 64 20 61         is used a
52a0: 73 20 61 20 66 61 6c 6c 62 61 63 6b 2e 0d 0a 20  s a fallback... 
52b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
52c0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
52d0: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73  :tcl_platform(us
52e0: 65 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  er)]} then {..  
52f0: 20 20 20 20 20 20 73 65 74 20 75 73 65 72 4e 61        set userNa
5300: 6d 65 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f  me $::tcl_platfo
5310: 72 6d 28 75 73 65 72 29 0d 0a 20 20 20 20 20 20  rm(user)..      
5320: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..      
5330: 20 20 73 65 74 20 75 73 65 72 4e 61 6d 65 20 22    set userName "
5340: 4e 4f 20 55 53 45 52 20 4e 41 4d 45 22 0d 0a 20  NO USER NAME".. 
5350: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
5360: 0a 20 20 20 20 69 66 20 7b 21 5b 69 73 45 61 67  .    if {![isEag
5370: 6c 65 5d 20 7c 7c 20 5b 63 61 74 63 68 20 7b 0d  le] || [catch {.
5380: 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 6c 6f  .      object lo
5390: 61 64 20 53 79 73 74 65 6d 2e 44 69 72 65 63 74  ad System.Direct
53a0: 6f 72 79 53 65 72 76 69 63 65 73 2e 41 63 63 6f  oryServices.Acco
53b0: 75 6e 74 4d 61 6e 61 67 65 6d 65 6e 74 0d 0a 0d  untManagement...
53c0: 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e  .      object in
53d0: 76 6f 6b 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  voke \..        
53e0: 20 20 53 79 73 74 65 6d 2e 44 69 72 65 63 74 6f    System.Directo
53f0: 72 79 53 65 72 76 69 63 65 73 2e 41 63 63 6f 75  ryServices.Accou
5400: 6e 74 4d 61 6e 61 67 65 6d 65 6e 74 2e 55 73 65  ntManagement.Use
5410: 72 50 72 69 6e 63 69 70 61 6c 20 5c 0d 0a 20 20  rPrincipal \..  
5420: 20 20 20 20 20 20 20 20 43 75 72 72 65 6e 74 2e          Current.
5430: 44 69 73 70 6c 61 79 4e 61 6d 65 0d 0a 20 20 20  DisplayName..   
5440: 20 7d 20 64 69 73 70 6c 61 79 4e 61 6d 65 5d 7d   } displayName]}
5450: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 23   then {..      #
5460: 0d 0a 20 20 20 20 20 20 23 20 48 41 43 4b 3a 20  ..      # HACK: 
5470: 46 61 6c 6c 62 61 63 6b 20 74 6f 20 75 73 69 6e  Fallback to usin
5480: 67 20 61 20 76 61 6c 75 65 20 66 72 6f 6d 20 74  g a value from t
5490: 68 65 20 22 74 63 6c 5f 70 6c 61 74 66 6f 72 6d  he "tcl_platform
54a0: 22 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20  " array...      
54b0: 23 20 20 20 20 20 20 20 54 68 69 73 20 76 61 6c  #       This val
54c0: 75 65 20 69 73 20 6e 6f 74 20 73 65 74 20 62 79  ue is not set by
54d0: 20 6e 61 74 69 76 65 20 54 63 6c 20 6f 72 20 45   native Tcl or E
54e0: 61 67 6c 65 3b 20 74 68 65 72 65 66 6f 72 65 2c  agle; therefore,
54f0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #       
5500: 74 68 65 20 75 73 65 72 20 77 6f 75 6c 64 20 68  the user would h
5510: 61 76 65 20 74 6f 20 73 65 74 20 69 74 20 6d 61  ave to set it ma
5520: 6e 75 61 6c 6c 79 20 70 72 69 6f 72 20 74 6f 20  nually prior to 
5530: 63 61 6c 6c 69 6e 67 0d 0a 20 20 20 20 20 20 23  calling..      #
5540: 20 20 20 20 20 20 20 74 68 69 73 20 70 72 6f 63         this proc
5550: 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d  edure...      #.
5560: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
5570: 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c   exists ::tcl_pl
5580: 61 74 66 6f 72 6d 28 75 73 65 72 44 69 73 70 6c  atform(userDispl
5590: 61 79 4e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b  ayName)]} then {
55a0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 69  ..        set di
55b0: 73 70 6c 61 79 4e 61 6d 65 20 24 3a 3a 74 63 6c  splayName $::tcl
55c0: 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 44 69  _platform(userDi
55d0: 73 70 6c 61 79 4e 61 6d 65 29 0d 0a 20 20 20 20  splayName)..    
55e0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..    
55f0: 20 20 20 20 73 65 74 20 64 69 73 70 6c 61 79 4e      set displayN
5600: 61 6d 65 20 22 4e 4f 20 44 49 53 50 4c 41 59 20  ame "NO DISPLAY 
5610: 4e 41 4d 45 22 0d 0a 20 20 20 20 20 20 7d 0d 0a  NAME"..      }..
5620: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 0d 0a      }....    #..
5630: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20      # NOTE: Add 
5640: 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 71 75  the necessary qu
5650: 65 72 79 20 70 61 72 61 6d 65 74 65 72 73 20 74  ery parameters t
5660: 6f 20 74 68 65 20 6c 69 63 65 6e 73 65 20 72 65  o the license re
5670: 71 75 65 73 74 0d 0a 20 20 20 20 23 20 20 20 20  quest..    #    
5680: 20 20 20 55 52 49 2c 20 6d 61 6b 69 6e 67 20 73     URI, making s
5690: 75 72 65 20 74 6f 20 70 72 6f 70 65 72 6c 79 20  ure to properly 
56a0: 65 73 63 61 70 65 20 74 68 65 69 72 20 76 61 6c  escape their val
56b0: 75 65 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20  ues...    #..   
56c0: 20 69 66 20 7b 5b 69 73 45 61 67 6c 65 5d 7d 20   if {[isEagle]} 
56d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 61 70  then {..      ap
56e0: 70 65 6e 64 20 75 72 69 20 3f 75 73 65 72 4e 61  pend uri ?userNa
56f0: 6d 65 3d 20 5b 75 72 69 20 65 73 63 61 70 65 20  me= [uri escape 
5700: 64 61 74 61 20 24 75 73 65 72 4e 61 6d 65 5d 0d  data $userName].
5710: 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20 75 72  .      append ur
5720: 69 20 26 64 69 73 70 6c 61 79 4e 61 6d 65 3d 20  i &displayName= 
5730: 5b 75 72 69 20 65 73 63 61 70 65 20 64 61 74 61  [uri escape data
5740: 20 24 64 69 73 70 6c 61 79 4e 61 6d 65 5d 0d 0a   $displayName]..
5750: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..  
5760: 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75      package requ
5770: 69 72 65 20 68 74 74 70 20 32 2e 30 0d 0a 0d 0a  ire http 2.0....
5780: 20 20 20 20 20 20 61 70 70 65 6e 64 20 75 72 69        append uri
5790: 20 3f 20 5b 3a 3a 68 74 74 70 3a 3a 66 6f 72 6d   ? [::http::form
57a0: 61 74 51 75 65 72 79 20 5c 0d 0a 20 20 20 20 20  atQuery \..     
57b0: 20 20 20 20 20 75 73 65 72 4e 61 6d 65 20 24 75       userName $u
57c0: 73 65 72 4e 61 6d 65 20 64 69 73 70 6c 61 79 4e  serName displayN
57d0: 61 6d 65 20 24 64 69 73 70 6c 61 79 4e 61 6d 65  ame $displayName
57e0: 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ]..    }....    
57f0: 69 66 20 7b 5b 69 73 45 61 67 6c 65 5d 7d 20 74  if {[isEagle]} t
5800: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  hen {..      set
5810: 20 64 61 74 61 20 5b 75 72 69 20 64 6f 77 6e 6c   data [uri downl
5820: 6f 61 64 20 2d 69 6e 6c 69 6e 65 20 24 75 72 69  oad -inline $uri
5830: 5d 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  ]..    } else {.
5840: 0a 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72  .      package r
5850: 65 71 75 69 72 65 20 45 61 67 6c 65 2e 54 6f 6f  equire Eagle.Too
5860: 6c 73 2e 43 6f 6d 6d 6f 6e 0d 0a 0d 0a 20 20 20  ls.Common....   
5870: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70     namespace imp
5880: 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ort \..         
5890: 20 3a 3a 45 61 67 6c 65 3a 3a 54 6f 6f 6c 73 3a   ::Eagle::Tools:
58a0: 3a 43 6f 6d 6d 6f 6e 3a 3a 67 65 74 46 69 6c 65  :Common::getFile
58b0: 56 69 61 48 74 74 70 20 5c 0d 0a 20 20 20 20 20  ViaHttp \..     
58c0: 20 20 20 20 20 3a 3a 45 61 67 6c 65 3a 3a 54 6f       ::Eagle::To
58d0: 6f 6c 73 3a 3a 43 6f 6d 6d 6f 6e 3a 3a 77 72 69  ols::Common::wri
58e0: 74 65 46 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20  teFile....      
58f0: 73 65 74 20 64 61 74 61 20 5b 67 65 74 46 69 6c  set data [getFil
5900: 65 56 69 61 48 74 74 70 20 24 75 72 69 20 32 30  eViaHttp $uri 20
5910: 20 24 63 68 61 6e 6e 65 6c 20 24 71 75 69 65 74   $channel $quiet
5920: 20 2d 62 69 6e 61 72 79 20 74 72 75 65 5d 0d 0a   -binary true]..
5930: 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65        package re
5940: 71 75 69 72 65 20 45 61 67 6c 65 2e 41 75 78 69  quire Eagle.Auxi
5950: 6c 69 61 72 79 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  liary..    }....
5960: 20 20 20 20 69 66 20 7b 5b 67 65 74 44 69 63 74      if {[getDict
5970: 69 6f 6e 61 72 79 56 61 6c 75 65 20 24 64 61 74  ionaryValue $dat
5980: 61 20 72 65 74 75 72 6e 43 6f 64 65 5d 20 6e 65  a returnCode] ne
5990: 20 22 4f 6b 22 7d 20 74 68 65 6e 20 7b 0d 0a 20   "Ok"} then {.. 
59a0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
59b0: 20 6c 65 6e 67 74 68 20 24 64 61 74 61 5d 20 3e   length $data] >
59c0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..    
59d0: 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e      error [appen
59e0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..       
59f0: 20 20 20 20 20 22 72 65 71 75 65 73 74 20 66 61       "request fa
5a00: 69 6c 65 64 20 77 69 74 68 20 65 72 72 6f 72 20  iled with error 
5a10: 69 6e 66 6f 72 6d 61 74 69 6f 6e 3a 20 22 20 24  information: " $
5a20: 64 61 74 61 5d 0d 0a 20 20 20 20 20 20 7d 20 65  data]..      } e
5a30: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 65  lse {..        e
5a40: 72 72 6f 72 20 22 72 65 71 75 65 73 74 20 66 61  rror "request fa
5a50: 69 6c 65 64 20 77 69 74 68 6f 75 74 20 70 72 6f  iled without pro
5a60: 76 69 64 69 6e 67 20 65 72 72 6f 72 20 69 6e 66  viding error inf
5a70: 6f 72 6d 61 74 69 6f 6e 22 0d 0a 20 20 20 20 20  ormation"..     
5a80: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
5a90: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67   set fileName [g
5aa0: 65 74 54 65 6d 70 6f 72 61 72 79 46 69 6c 65 4e  etTemporaryFileN
5ab0: 61 6d 65 5d 0d 0a 20 20 20 20 77 72 69 74 65 46  ame]..    writeF
5ac0: 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 5b 67  ile $fileName [g
5ad0: 65 74 44 69 63 74 69 6f 6e 61 72 79 56 61 6c 75  etDictionaryValu
5ae0: 65 20 24 64 61 74 61 20 72 65 73 75 6c 74 5d 0d  e $data result].
5af0: 0a 20 20 20 20 73 65 74 20 6e 65 77 46 69 6c 65  .    set newFile
5b00: 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  Name [file join 
5b10: 24 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65  $directory [file
5b20: 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d   tail $fileName]
5b30: 5d 0d 0a 0d 0a 20 20 20 20 66 69 6c 65 20 6d 6b  ]....    file mk
5b40: 64 69 72 20 24 64 69 72 65 63 74 6f 72 79 3b 20  dir $directory; 
5b50: 66 69 6c 65 20 63 6f 70 79 20 24 66 69 6c 65 4e  file copy $fileN
5b60: 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65  ame $newFileName
5b70: 0d 0a 20 20 20 20 66 69 6c 65 20 64 65 6c 65 74  ..    file delet
5b80: 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20  e $fileName.... 
5b90: 20 20 20 72 65 74 75 72 6e 20 24 6e 65 77 46 69     return $newFi
5ba0: 6c 65 4e 61 6d 65 0d 0a 20 20 7d 0d 0a 0c 0d 0a  leName..  }.....
5bb0: 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 54    #..  # NOTE: T
5bc0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 61 74  his procedure at
5bd0: 74 65 6d 70 74 73 20 74 6f 20 73 75 62 6d 69 74  tempts to submit
5be0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73   the specified s
5bf0: 63 72 69 70 74 20 74 6f 20 61 20 72 65 6d 6f 74  cript to a remot
5c00: 65 0d 0a 20 20 23 20 20 20 20 20 20 20 73 61 6e  e..  #       san
5c10: 64 62 6f 78 20 66 6f 72 20 65 76 61 6c 75 61 74  dbox for evaluat
5c20: 69 6f 6e 2e 20 20 54 68 65 20 61 70 69 4b 65 79  ion.  The apiKey
5c30: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 74 68   parameter is th
5c40: 65 20 6f 70 74 69 6f 6e 61 6c 20 41 50 49 0d 0a  e optional API..
5c50: 20 20 23 20 20 20 20 20 20 20 6b 65 79 20 74 6f    #       key to
5c60: 20 75 73 65 2c 20 77 68 69 63 68 20 4d 41 59 20   use, which MAY 
5c70: 65 6e 61 62 6c 65 20 61 64 64 69 74 69 6f 6e 61  enable additiona
5c80: 6c 20 70 65 72 6d 69 73 73 69 6f 6e 73 20 69 6e  l permissions in
5c90: 20 74 68 65 20 72 65 6d 6f 74 65 0d 0a 20 20 23   the remote..  #
5ca0: 20 20 20 20 20 20 20 73 61 6e 64 62 6f 78 2e 20         sandbox. 
5cb0: 20 54 68 65 20 70 61 72 61 6d 73 20 70 61 72 61   The params para
5cc0: 6d 65 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61  meter contains a
5cd0: 6e 79 20 6f 70 74 69 6f 6e 61 6c 20 65 78 74 72  ny optional extr
5ce0: 61 20 6e 61 6d 65 73 0d 0a 20 20 23 20 20 20 20  a names..  #    
5cf0: 20 20 20 61 6e 64 20 76 61 6c 75 65 73 20 74 6f     and values to
5d00: 20 69 6e 63 6c 75 64 65 20 69 6e 20 74 68 65 20   include in the 
5d10: 73 75 62 6d 69 74 74 65 64 20 71 75 65 72 79 2e  submitted query.
5d20: 20 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20    Upon success, 
5d30: 74 68 69 73 0d 0a 20 20 23 20 20 20 20 20 20 20  this..  #       
5d40: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e  procedure return
5d50: 73 20 61 20 54 63 6c 20 64 69 63 74 69 6f 6e 61  s a Tcl dictiona
5d60: 72 79 20 74 68 61 74 20 69 6e 63 6c 75 64 65 73  ry that includes
5d70: 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 6b 65   at least the ke
5d80: 79 73 0d 0a 20 20 23 20 20 20 20 20 20 20 22 72  ys..  #       "r
5d90: 65 74 75 72 6e 43 6f 64 65 22 2c 20 22 72 65 73  eturnCode", "res
5da0: 75 6c 74 22 2c 20 61 6e 64 20 22 65 72 72 6f 72  ult", and "error
5db0: 4c 69 6e 65 22 2e 20 20 54 68 65 20 22 72 65 74  Line".  The "ret
5dc0: 75 72 6e 43 6f 64 65 22 20 76 61 6c 75 65 0d 0a  urnCode" value..
5dd0: 20 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20 62    #       will b
5de0: 65 20 22 4f 6b 22 2c 20 22 45 72 72 6f 72 22 2c  e "Ok", "Error",
5df0: 20 22 52 65 74 75 72 6e 22 2c 20 22 42 72 65 61   "Return", "Brea
5e00: 6b 22 2c 20 22 43 6f 6e 74 69 6e 75 65 22 2c 20  k", "Continue", 
5e10: 6f 72 20 70 6f 73 73 69 62 6c 79 0d 0a 20 20 23  or possibly..  #
5e20: 20 20 20 20 20 20 20 61 20 73 69 67 6e 65 64 20         a signed 
5e30: 69 6e 74 65 67 65 72 2e 20 20 54 68 65 20 22 72  integer.  The "r
5e40: 65 73 75 6c 74 22 20 76 61 6c 75 65 20 77 69 6c  esult" value wil
5e50: 6c 20 62 65 20 74 68 65 20 74 65 78 74 75 61 6c  l be the textual
5e60: 20 72 65 73 75 6c 74 0d 0a 20 20 23 20 20 20 20   result..  #    
5e70: 20 20 20 6f 66 20 74 68 65 20 73 63 72 69 70 74     of the script
5e80: 20 6f 72 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   or an error mes
5e90: 73 61 67 65 2e 20 20 54 68 65 20 22 65 72 72 6f  sage.  The "erro
5ea0: 72 4c 69 6e 65 22 20 76 61 6c 75 65 20 77 69 6c  rLine" value wil
5eb0: 6c 20 62 65 0d 0a 20 20 23 20 20 20 20 20 20 20  l be..  #       
5ec0: 7a 65 72 6f 20 6f 72 20 74 68 65 20 6c 69 6e 65  zero or the line
5ed0: 20 77 68 65 72 65 20 61 20 73 63 72 69 70 74 20   where a script 
5ee0: 65 72 72 6f 72 20 77 61 73 20 72 61 69 73 65 64  error was raised
5ef0: 2e 20 20 54 68 69 73 20 70 72 6f 63 65 64 75 72  .  This procedur
5f00: 65 0d 0a 20 20 23 20 20 20 20 20 20 20 6d 61 79  e..  #       may
5f10: 20 72 61 69 73 65 20 73 63 72 69 70 74 20 65 72   raise script er
5f20: 72 6f 72 73 2e 0d 0a 20 20 23 0d 0a 20 20 70 72  rors...  #..  pr
5f30: 6f 63 20 65 76 61 6c 75 61 74 65 49 6e 52 65 6d  oc evaluateInRem
5f40: 6f 74 65 53 61 6e 64 62 6f 78 20 7b 0d 0a 20 20  oteSandbox {..  
5f50: 20 20 20 20 20 20 20 20 73 63 72 69 70 74 20 7b          script {
5f60: 61 70 69 4b 65 79 20 22 22 7d 20 7b 70 61 72 61  apiKey ""} {para
5f70: 6d 73 20 22 22 7d 20 7b 63 68 61 6e 6e 65 6c 20  ms ""} {channel 
5f80: 73 74 64 6f 75 74 7d 20 7b 71 75 69 65 74 20 66  stdout} {quiet f
5f90: 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 73  alse} } {..    s
5fa0: 65 74 75 70 50 61 63 6b 61 67 65 54 6f 6f 6c 73  etupPackageTools
5fb0: 65 74 56 61 72 73 20 66 61 6c 73 65 0d 0a 0d 0a  etVars false....
5fc0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 62 61 73      variable bas
5fd0: 65 55 72 69 0d 0a 20 20 20 20 76 61 72 69 61 62  eUri..    variab
5fe0: 6c 65 20 73 61 6e 64 62 6f 78 45 76 61 6c 55 72  le sandboxEvalUr
5ff0: 69 0d 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  i..    variable 
6000: 73 61 6e 64 62 6f 78 45 76 61 6c 55 72 6e 73 0d  sandboxEvalUrns.
6010: 0a 0d 0a 20 20 20 20 73 65 74 20 75 72 6e 20 5b  ...    set urn [
6020: 73 75 62 73 74 20 5b 6c 69 6e 64 65 78 20 5c 0d  subst [lindex \.
6030: 0a 20 20 20 20 20 20 20 20 24 73 61 6e 64 62 6f  .        $sandbo
6040: 78 45 76 61 6c 55 72 6e 73 20 5b 65 78 70 72 20  xEvalUrns [expr 
6050: 7b 69 6e 74 28 72 61 6e 64 28 29 20 2a 20 5b 6c  {int(rand() * [l
6060: 6c 65 6e 67 74 68 20 24 73 61 6e 64 62 6f 78 45  length $sandboxE
6070: 76 61 6c 55 72 6e 73 5d 29 7d 5d 5d 5d 0d 0a 0d  valUrns])}]]]...
6080: 0a 20 20 20 20 73 65 74 20 75 72 69 20 5b 73 75  .    set uri [su
6090: 62 73 74 20 24 73 61 6e 64 62 6f 78 45 76 61 6c  bst $sandboxEval
60a0: 55 72 69 5d 0d 0a 0d 0a 20 20 20 20 73 65 74 20  Uri]....    set 
60b0: 71 75 65 72 79 20 5b 6c 69 73 74 20 67 6f 20 31  query [list go 1
60c0: 20 72 61 77 20 31 20 73 63 72 69 70 74 20 24 73   raw 1 script $s
60d0: 63 72 69 70 74 5d 0d 0a 0d 0a 20 20 20 20 69 66  cript]....    if
60e0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
60f0: 20 24 61 70 69 4b 65 79 5d 20 3e 20 30 7d 20 74   $apiKey] > 0} t
6100: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 6c 61 70  hen {..      lap
6110: 70 65 6e 64 20 71 75 65 72 79 20 61 70 69 4b 65  pend query apiKe
6120: 79 20 24 61 70 69 4b 65 79 0d 0a 20 20 20 20 7d  y $apiKey..    }
6130: 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 6c 6c 65  ....    if {[lle
6140: 6e 67 74 68 20 24 70 61 72 61 6d 73 5d 20 3e 20  ngth $params] > 
6150: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..     
6160: 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 71 75   eval lappend qu
6170: 65 72 79 20 24 70 61 72 61 6d 73 0d 0a 20 20 20  ery $params..   
6180: 20 7d 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 69   }....    if {[i
6190: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
61a0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 75  .      return [u
61b0: 72 69 20 75 70 6c 6f 61 64 20 2d 69 6e 6c 69 6e  ri upload -inlin
61c0: 65 20 2d 64 61 74 61 20 24 71 75 65 72 79 20 24  e -data $query $
61d0: 75 72 69 5d 0d 0a 20 20 20 20 7d 20 65 6c 73 65  uri]..    } else
61e0: 20 7b 0d 0a 20 20 20 20 20 20 70 61 63 6b 61 67   {..      packag
61f0: 65 20 72 65 71 75 69 72 65 20 68 74 74 70 20 32  e require http 2
6200: 2e 30 0d 0a 20 20 20 20 20 20 70 61 63 6b 61 67  .0..      packag
6210: 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e  e require Eagle.
6220: 54 6f 6f 6c 73 2e 43 6f 6d 6d 6f 6e 0d 0a 0d 0a  Tools.Common....
6230: 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20        namespace 
6240: 69 6d 70 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20  import \..      
6250: 20 20 20 20 3a 3a 45 61 67 6c 65 3a 3a 54 6f 6f      ::Eagle::Too
6260: 6c 73 3a 3a 43 6f 6d 6d 6f 6e 3a 3a 67 65 74 46  ls::Common::getF
6270: 69 6c 65 56 69 61 48 74 74 70 0d 0a 0d 0a 20 20  ileViaHttp....  
6280: 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 46      return [getF
6290: 69 6c 65 56 69 61 48 74 74 70 20 5c 0d 0a 20 20  ileViaHttp \..  
62a0: 20 20 20 20 20 20 20 20 24 75 72 69 20 32 30 20          $uri 20 
62b0: 24 63 68 61 6e 6e 65 6c 20 24 71 75 69 65 74 20  $channel $quiet 
62c0: 2d 62 69 6e 61 72 79 20 74 72 75 65 20 5c 0d 0a  -binary true \..
62d0: 20 20 20 20 20 20 20 20 20 20 2d 71 75 65 72 79            -query
62e0: 20 5b 65 76 61 6c 20 3a 3a 68 74 74 70 3a 3a 66   [eval ::http::f
62f0: 6f 72 6d 61 74 51 75 65 72 79 20 24 71 75 65 72  ormatQuery $quer
6300: 79 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  y]]..    }..  }.
6310: 0a 0c 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54  ....  #..  # NOT
6320: 45 3a 20 50 72 6f 76 69 64 65 20 74 68 65 20 45  E: Provide the E
6330: 61 67 6c 65 20 22 70 61 63 6b 61 67 65 20 74 6f  agle "package to
6340: 6f 6c 73 65 74 22 20 70 61 63 6b 61 67 65 20 74  olset" package t
6350: 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65  o the interprete
6360: 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61  r...  #..  packa
6370: 67 65 20 70 72 6f 76 69 64 65 20 45 61 67 6c 65  ge provide Eagle
6380: 2e 50 61 63 6b 61 67 65 2e 54 6f 6f 6c 73 65 74  .Package.Toolset
6390: 20 5c 0d 0a 20 20 20 20 5b 65 78 70 72 20 7b 5b   \..    [expr {[
63a0: 69 73 45 61 67 6c 65 5d 20 3f 20 5b 69 6e 66 6f  isEagle] ? [info
63b0: 20 65 6e 67 69 6e 65 20 50 61 74 63 68 4c 65 76   engine PatchLev
63c0: 65 6c 5d 20 3a 20 22 31 2e 30 22 7d 5d 0d 0a 7d  el] : "1.0"}]..}
63d0: 0d 0a 0c                                         ...