/ Hex Artifact Content
Login

Artifact b9e0777a213c23156b6542842c238479e496ebf5:


0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 74 63 6c 73 68  #!/usr/bin/tclsh
0010: 0a 23 0a 23 20 54 68 69 73 20 73 63 72 69 70 74  .#.# This script
0020: 20 69 73 20 75 73 65 64 20 74 6f 20 67 65 6e 65   is used to gene
0030: 72 61 74 65 20 61 20 56 53 49 58 20 28 56 69 73  rate a VSIX (Vis
0040: 75 61 6c 20 53 74 75 64 69 6f 20 45 78 74 65 6e  ual Studio Exten
0050: 73 69 6f 6e 29 20 66 69 6c 65 20 66 6f 72 0a 23  sion) file for.#
0060: 20 53 51 4c 69 74 65 20 75 73 61 62 6c 65 20 62   SQLite usable b
0070: 79 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 2e  y Visual Studio.
0080: 0a 23 0a 23 20 50 52 45 52 45 51 55 49 53 49 54  .#.# PREREQUISIT
0090: 45 53 0a 23 0a 23 20 31 2e 20 54 63 6c 20 38 2e  ES.#.# 1. Tcl 8.
00a0: 34 20 61 6e 64 20 6c 61 74 65 72 20 61 72 65 20  4 and later are 
00b0: 73 75 70 70 6f 72 74 65 64 2c 20 65 61 72 6c 69  supported, earli
00c0: 65 72 20 76 65 72 73 69 6f 6e 73 20 68 61 76 65  er versions have
00d0: 20 6e 6f 74 20 62 65 65 6e 20 74 65 73 74 65 64   not been tested
00e0: 2e 0a 23 0a 23 20 32 2e 20 54 68 65 20 22 73 71  ..#.# 2. The "sq
00f0: 6c 69 74 65 33 2e 68 22 20 66 69 6c 65 20 69 73  lite3.h" file is
0100: 20 61 73 73 75 6d 65 64 20 74 6f 20 65 78 69 73   assumed to exis
0110: 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  t in the parent 
0120: 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65  directory of the
0130: 0a 23 20 20 20 20 64 69 72 65 63 74 6f 72 79 20  .#    directory 
0140: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
0150: 73 63 72 69 70 74 2e 20 20 54 68 65 20 5b 6f 70  script.  The [op
0160: 74 69 6f 6e 61 6c 5d 20 73 65 63 6f 6e 64 20 63  tional] second c
0170: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0a 23 20 20 20  ommand line.#   
0180: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 69   argument to thi
0190: 73 20 73 63 72 69 70 74 20 6d 61 79 20 62 65 20  s script may be 
01a0: 75 73 65 64 20 74 6f 20 73 70 65 63 69 66 79 20  used to specify 
01b0: 61 6e 20 61 6c 74 65 72 6e 61 74 65 20 6c 6f 63  an alternate loc
01c0: 61 74 69 6f 6e 2e 0a 23 20 20 20 20 54 68 69 73  ation..#    This
01d0: 20 73 63 72 69 70 74 20 61 6c 73 6f 20 61 73 73   script also ass
01e0: 75 6d 65 73 20 74 68 61 74 20 74 68 65 20 22 73  umes that the "s
01f0: 71 6c 69 74 65 33 2e 68 22 20 66 69 6c 65 20 63  qlite3.h" file c
0200: 6f 72 72 65 73 70 6f 6e 64 73 20 77 69 74 68 20  orresponds with 
0210: 74 68 65 0a 23 20 20 20 20 76 65 72 73 69 6f 6e  the.#    version
0220: 20 6f 66 20 74 68 65 20 62 69 6e 61 72 69 65 73   of the binaries
0230: 20 74 6f 20 62 65 20 70 61 63 6b 61 67 65 64 2e   to be packaged.
0240: 20 20 54 68 69 73 20 61 73 73 75 6d 70 74 69 6f    This assumptio
0250: 6e 20 69 73 20 6e 6f 74 20 76 65 72 69 66 69 65  n is not verifie
0260: 64 0a 23 20 20 20 20 62 79 20 74 68 69 73 20 73  d.#    by this s
0270: 63 72 69 70 74 2e 0a 23 0a 23 20 33 2e 20 54 68  cript..#.# 3. Th
0280: 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  e temporary dire
0290: 63 74 6f 72 79 20 73 70 65 63 69 66 69 65 64 20  ctory specified 
02a0: 69 6e 20 74 68 65 20 54 45 4d 50 20 6f 72 20 54  in the TEMP or T
02b0: 4d 50 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76  MP environment v
02c0: 61 72 69 61 62 6c 65 73 0a 23 20 20 20 20 6d 75  ariables.#    mu
02d0: 73 74 20 72 65 66 65 72 20 74 6f 20 61 6e 20 65  st refer to an e
02e0: 78 69 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72  xisting director
02f0: 79 20 77 72 69 74 61 62 6c 65 20 62 79 20 74 68  y writable by th
0300: 65 20 63 75 72 72 65 6e 74 20 75 73 65 72 2e 0a  e current user..
0310: 23 0a 23 20 34 2e 20 54 68 65 20 22 7a 69 70 22  #.# 4. The "zip"
0320: 20 61 6e 64 20 22 75 6e 7a 69 70 22 20 63 6f 6d   and "unzip" com
0330: 6d 61 6e 64 20 6c 69 6e 65 20 74 6f 6f 6c 73 20  mand line tools 
0340: 6d 75 73 74 20 62 65 20 6c 6f 63 61 74 65 64 20  must be located 
0350: 65 69 74 68 65 72 20 69 6e 20 61 0a 23 20 20 20  either in a.#   
0360: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61   directory conta
0370: 69 6e 65 64 20 69 6e 20 74 68 65 20 50 41 54 48  ined in the PATH
0380: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72   environment var
0390: 69 61 62 6c 65 20 6f 72 20 73 70 65 63 69 66 69  iable or specifi
03a0: 65 64 20 61 73 20 74 68 65 0a 23 20 20 20 20 65  ed as the.#    e
03b0: 78 61 63 74 20 66 69 6c 65 20 6e 61 6d 65 73 20  xact file names 
03c0: 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 74 68  to execute in th
03d0: 65 20 22 5a 69 70 54 6f 6f 6c 22 20 61 6e 64 20  e "ZipTool" and 
03e0: 22 55 6e 5a 69 70 54 6f 6f 6c 22 20 65 6e 76 69  "UnZipTool" envi
03f0: 72 6f 6e 6d 65 6e 74 0a 23 20 20 20 20 76 61 72  ronment.#    var
0400: 69 61 62 6c 65 73 2c 20 72 65 73 70 65 63 74 69  iables, respecti
0410: 76 65 6c 79 2e 0a 23 0a 23 20 35 2e 20 54 68 65  vely..#.# 5. The
0420: 20 74 65 6d 70 6c 61 74 65 20 56 53 49 58 20 66   template VSIX f
0430: 69 6c 65 20 28 77 68 69 63 68 20 69 73 20 62 61  ile (which is ba
0440: 73 69 63 61 6c 6c 79 20 61 20 7a 69 70 20 66 69  sically a zip fi
0450: 6c 65 29 20 6d 75 73 74 20 62 65 20 6c 6f 63 61  le) must be loca
0460: 74 65 64 20 69 6e 0a 23 20 20 20 20 61 20 22 77  ted in.#    a "w
0470: 69 6e 22 20 64 69 72 65 63 74 6f 72 79 20 69 6e  in" directory in
0480: 73 69 64 65 20 74 68 65 20 64 69 72 65 63 74 6f  side the directo
0490: 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ry containing th
04a0: 69 73 20 73 63 72 69 70 74 2e 20 20 49 74 20 73  is script.  It s
04b0: 68 6f 75 6c 64 0a 23 20 20 20 20 6e 6f 74 20 63  hould.#    not c
04c0: 6f 6e 74 61 69 6e 20 61 6e 79 20 65 78 65 63 75  ontain any execu
04d0: 74 61 62 6c 65 20 62 69 6e 61 72 69 65 73 2e 20  table binaries. 
04e0: 20 49 74 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20   It should only 
04f0: 63 6f 6e 74 61 69 6e 20 64 79 6e 61 6d 69 63 0a  contain dynamic.
0500: 23 20 20 20 20 74 65 78 74 75 61 6c 20 63 6f 6e  #    textual con
0510: 74 65 6e 74 20 66 69 6c 65 73 20 74 6f 20 62 65  tent files to be
0520: 20 70 72 6f 63 65 73 73 65 64 20 75 73 69 6e 67   processed using
0530: 20 5b 73 75 62 73 74 5d 20 61 6e 64 2f 6f 72 20   [subst] and/or 
0540: 73 74 61 74 69 63 20 63 6f 6e 74 65 6e 74 0a 23  static content.#
0550: 20 20 20 20 66 69 6c 65 73 20 74 6f 20 62 65 20      files to be 
0560: 63 6f 70 69 65 64 20 76 65 72 62 61 74 69 6d 2e  copied verbatim.
0570: 0a 23 0a 23 20 36 2e 20 54 68 65 20 65 78 65 63  .#.# 6. The exec
0580: 75 74 61 62 6c 65 20 61 6e 64 20 6f 74 68 65 72  utable and other
0590: 20 63 6f 6d 70 69 6c 65 64 20 62 69 6e 61 72 79   compiled binary
05a0: 20 66 69 6c 65 73 20 74 6f 20 62 65 20 70 61 63   files to be pac
05b0: 6b 61 67 65 64 20 69 6e 74 6f 20 74 68 65 0a 23  kaged into the.#
05c0: 20 20 20 20 66 69 6e 61 6c 20 56 53 49 58 20 66      final VSIX f
05d0: 69 6c 65 20 28 65 2e 67 2e 20 44 4c 4c 73 2c 20  ile (e.g. DLLs, 
05e0: 4c 49 42 73 2c 20 61 6e 64 20 50 44 42 73 29 20  LIBs, and PDBs) 
05f0: 6d 75 73 74 20 62 65 20 6c 6f 63 61 74 65 64 20  must be located 
0600: 69 6e 20 61 20 73 69 6e 67 6c 65 0a 23 20 20 20  in a single.#   
0610: 20 64 69 72 65 63 74 6f 72 79 20 74 72 65 65 2e   directory tree.
0620: 20 20 54 68 65 20 74 6f 70 2d 6c 65 76 65 6c 20    The top-level 
0630: 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65  directory of the
0640: 20 74 72 65 65 20 6d 75 73 74 20 62 65 20 73 70   tree must be sp
0650: 65 63 69 66 69 65 64 20 61 73 0a 23 20 20 20 20  ecified as.#    
0660: 74 68 65 20 66 69 72 73 74 20 63 6f 6d 6d 61 6e  the first comman
0670: 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 20  d line argument 
0680: 74 6f 20 74 68 69 73 20 73 63 72 69 70 74 2e 20  to this script. 
0690: 20 54 68 65 20 73 65 63 6f 6e 64 20 6c 65 76 65   The second leve
06a0: 6c 0a 23 20 20 20 20 73 75 62 2d 64 69 72 65 63  l.#    sub-direc
06b0: 74 6f 72 79 20 6e 61 6d 65 73 20 6d 75 73 74 20  tory names must 
06c0: 6d 61 74 63 68 20 74 68 6f 73 65 20 6f 66 20 74  match those of t
06d0: 68 65 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75  he build configu
06e0: 72 61 74 69 6f 6e 20 28 65 2e 67 2e 0a 23 20 20  ration (e.g..#  
06f0: 20 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65    "Debug" or "Re
0700: 74 61 69 6c 22 29 2e 20 20 54 68 65 20 74 68 69  tail").  The thi
0710: 72 64 20 6c 65 76 65 6c 20 73 75 62 2d 64 69 72  rd level sub-dir
0720: 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 6d 75 73  ectory names mus
0730: 74 20 6d 61 74 63 68 0a 23 20 20 20 20 74 68 6f  t match.#    tho
0740: 73 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f  se of the platfo
0750: 72 6d 20 28 65 2e 67 2e 20 22 78 38 36 22 2c 20  rm (e.g. "x86", 
0760: 22 78 36 34 22 2c 20 61 6e 64 20 22 41 52 4d 22  "x64", and "ARM"
0770: 29 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  ).  For example,
0780: 20 74 68 65 0a 23 20 20 20 20 62 69 6e 61 72 79   the.#    binary
0790: 20 66 69 6c 65 73 20 74 6f 20 62 65 20 70 61 63   files to be pac
07a0: 6b 61 67 65 64 20 77 6f 75 6c 64 20 6e 65 65 64  kaged would need
07b0: 20 74 6f 20 62 65 20 6f 72 67 61 6e 69 7a 65 64   to be organized
07c0: 20 61 73 20 66 6f 6c 6c 6f 77 73 20 77 68 65 6e   as follows when
07d0: 0a 23 20 20 20 20 70 61 63 6b 61 67 69 6e 67 20  .#    packaging 
07e0: 74 68 65 20 22 44 65 62 75 67 22 20 61 6e 64 20  the "Debug" and 
07f0: 22 52 65 74 61 69 6c 22 20 62 75 69 6c 64 20 63  "Retail" build c
0800: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 66 6f  onfigurations fo
0810: 72 20 74 68 65 20 22 78 38 36 22 20 61 6e 64 0a  r the "x86" and.
0820: 23 20 20 20 20 22 78 36 34 22 20 70 6c 61 74 66  #    "x64" platf
0830: 6f 72 6d 73 20 28 69 6e 20 74 68 69 73 20 65 78  orms (in this ex
0840: 61 6d 70 6c 65 2c 20 22 43 3a 5c 74 65 6d 70 22  ample, "C:\temp"
0850: 20 69 73 20 74 68 65 20 74 6f 70 2d 6c 65 76 65   is the top-leve
0860: 6c 20 64 69 72 65 63 74 6f 72 79 20 61 73 0a 23  l directory as.#
0870: 20 20 20 20 73 70 65 63 69 66 69 65 64 20 69 6e      specified in
0880: 20 74 68 65 20 66 69 72 73 74 20 63 6f 6d 6d 61   the first comma
0890: 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74  nd line argument
08a0: 29 3a 0a 23 0a 23 20 20 20 20 20 20 20 20 20 20  ):.#.#          
08b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
08c0: 3a 5c 54 65 6d 70 5c 44 65 62 75 67 5c 78 38 36  :\Temp\Debug\x86
08d0: 5c 73 71 6c 69 74 65 33 2e 6c 69 62 0a 23 20 20  \sqlite3.lib.#  
08e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08f0: 20 20 20 20 20 20 20 43 3a 5c 54 65 6d 70 5c 44         C:\Temp\D
0900: 65 62 75 67 5c 78 38 36 5c 73 71 6c 69 74 65 33  ebug\x86\sqlite3
0910: 2e 64 6c 6c 0a 23 20 20 20 20 20 20 20 20 20 20  .dll.#          
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
0930: 3a 5c 54 65 6d 70 5c 44 65 62 75 67 5c 78 38 36  :\Temp\Debug\x86
0940: 5c 73 71 6c 69 74 65 33 2e 70 64 62 0a 23 20 20  \sqlite3.pdb.#  
0950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0960: 20 20 20 20 20 20 20 43 3a 5c 54 65 6d 70 5c 44         C:\Temp\D
0970: 65 62 75 67 5c 78 36 34 5c 73 71 6c 69 74 65 33  ebug\x64\sqlite3
0980: 2e 6c 69 62 0a 23 20 20 20 20 20 20 20 20 20 20  .lib.#          
0990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
09a0: 3a 5c 54 65 6d 70 5c 44 65 62 75 67 5c 78 36 34  :\Temp\Debug\x64
09b0: 5c 73 71 6c 69 74 65 33 2e 64 6c 6c 0a 23 20 20  \sqlite3.dll.#  
09c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09d0: 20 20 20 20 20 20 20 43 3a 5c 54 65 6d 70 5c 44         C:\Temp\D
09e0: 65 62 75 67 5c 78 36 34 5c 73 71 6c 69 74 65 33  ebug\x64\sqlite3
09f0: 2e 70 64 62 0a 23 20 20 20 20 20 20 20 20 20 20  .pdb.#          
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
0a10: 3a 5c 54 65 6d 70 5c 52 65 74 61 69 6c 5c 78 38  :\Temp\Retail\x8
0a20: 36 5c 73 71 6c 69 74 65 33 2e 6c 69 62 0a 23 20  6\sqlite3.lib.# 
0a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a40: 20 20 20 20 20 20 20 20 43 3a 5c 54 65 6d 70 5c          C:\Temp\
0a50: 52 65 74 61 69 6c 5c 78 38 36 5c 73 71 6c 69 74  Retail\x86\sqlit
0a60: 65 33 2e 64 6c 6c 0a 23 20 20 20 20 20 20 20 20  e3.dll.#        
0a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a80: 20 43 3a 5c 54 65 6d 70 5c 52 65 74 61 69 6c 5c   C:\Temp\Retail\
0a90: 78 38 36 5c 73 71 6c 69 74 65 33 2e 70 64 62 0a  x86\sqlite3.pdb.
0aa0: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
0ab0: 20 20 20 20 20 20 20 20 20 20 43 3a 5c 54 65 6d            C:\Tem
0ac0: 70 5c 52 65 74 61 69 6c 5c 78 36 34 5c 73 71 6c  p\Retail\x64\sql
0ad0: 69 74 65 33 2e 6c 69 62 0a 23 20 20 20 20 20 20  ite3.lib.#      
0ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0af0: 20 20 20 43 3a 5c 54 65 6d 70 5c 52 65 74 61 69     C:\Temp\Retai
0b00: 6c 5c 78 36 34 5c 73 71 6c 69 74 65 33 2e 64 6c  l\x64\sqlite3.dl
0b10: 6c 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20  l.#             
0b20: 20 20 20 20 20 20 20 20 20 20 20 20 43 3a 5c 54              C:\T
0b30: 65 6d 70 5c 52 65 74 61 69 6c 5c 78 36 34 5c 73  emp\Retail\x64\s
0b40: 71 6c 69 74 65 33 2e 70 64 62 0a 23 0a 23 20 20  qlite3.pdb.#.#  
0b50: 20 20 54 68 65 20 61 62 6f 76 65 20 64 69 72 65    The above dire
0b60: 63 74 6f 72 79 20 74 72 65 65 20 6f 72 67 61 6e  ctory tree organ
0b70: 69 7a 61 74 69 6f 6e 20 69 73 20 70 65 72 66 6f  ization is perfo
0b80: 72 6d 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  rmed automatical
0b90: 6c 79 20 69 66 20 74 68 65 0a 23 20 20 20 20 22  ly if the.#    "
0ba0: 74 6f 6f 6c 5c 62 75 69 6c 64 2d 61 6c 6c 2d 6d  tool\build-all-m
0bb0: 73 76 63 2e 62 61 74 22 20 62 61 74 63 68 20 73  svc.bat" batch s
0bc0: 63 72 69 70 74 20 69 73 20 75 73 65 64 20 74 6f  cript is used to
0bd0: 20 62 75 69 6c 64 20 74 68 65 20 62 69 6e 61 72   build the binar
0be0: 79 20 66 69 6c 65 73 0a 23 20 20 20 20 74 6f 20  y files.#    to 
0bf0: 62 65 20 70 61 63 6b 61 67 65 64 2e 0a 23 0a 23  be packaged..#.#
0c00: 20 55 53 41 47 45 0a 23 0a 23 20 54 68 65 20 66   USAGE.#.# The f
0c10: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
0c20: 20 74 68 69 73 20 73 63 72 69 70 74 20 69 73 20   this script is 
0c30: 72 65 71 75 69 72 65 64 20 61 6e 64 20 6d 75 73  required and mus
0c40: 74 20 62 65 20 74 68 65 20 6e 61 6d 65 20 6f 66  t be the name of
0c50: 20 74 68 65 0a 23 20 74 6f 70 2d 6c 65 76 65 6c   the.# top-level
0c60: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61   directory conta
0c70: 69 6e 69 6e 67 20 74 68 65 20 64 69 72 65 63 74  ining the direct
0c80: 6f 72 69 65 73 20 61 6e 64 20 66 69 6c 65 73 20  ories and files 
0c90: 6f 72 67 61 6e 69 7a 65 64 20 69 6e 74 6f 20 61  organized into a
0ca0: 0a 23 20 74 72 65 65 20 61 73 20 64 65 73 63 72  .# tree as descr
0cb0: 69 62 65 64 20 69 6e 20 69 74 65 6d 20 36 20 6f  ibed in item 6 o
0cc0: 66 20 74 68 65 20 50 52 45 52 45 51 55 49 53 49  f the PREREQUISI
0cd0: 54 45 53 20 73 65 63 74 69 6f 6e 2c 20 61 62 6f  TES section, abo
0ce0: 76 65 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 0a  ve.  The second.
0cf0: 23 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 70  # argument is op
0d00: 74 69 6f 6e 61 6c 20 61 6e 64 20 69 66 20 70 72  tional and if pr
0d10: 65 73 65 6e 74 20 6d 75 73 74 20 63 6f 6e 74 61  esent must conta
0d20: 69 6e 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  in the name of t
0d30: 68 65 20 64 69 72 65 63 74 6f 72 79 0a 23 20 63  he directory.# c
0d40: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 6f  ontaining the ro
0d50: 6f 74 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65  ot of the source
0d60: 20 74 72 65 65 20 66 6f 72 20 53 51 4c 69 74 65   tree for SQLite
0d70: 2e 20 20 54 68 65 20 74 68 69 72 64 20 61 72 67  .  The third arg
0d80: 75 6d 65 6e 74 20 69 73 0a 23 20 6f 70 74 69 6f  ument is.# optio
0d90: 6e 61 6c 20 61 6e 64 20 69 66 20 70 72 65 73 65  nal and if prese
0da0: 6e 74 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  nt must contain 
0db0: 74 68 65 20 66 6c 61 76 6f 72 20 74 68 65 20 56  the flavor the V
0dc0: 53 49 58 20 70 61 63 6b 61 67 65 20 74 6f 20 62  SIX package to b
0dd0: 75 69 6c 64 2e 0a 23 20 43 75 72 72 65 6e 74 6c  uild..# Currentl
0de0: 79 2c 20 74 68 65 20 6f 6e 6c 79 20 73 75 70 70  y, the only supp
0df0: 6f 72 74 65 64 20 70 61 63 6b 61 67 65 20 66 6c  orted package fl
0e00: 61 76 6f 72 73 20 61 72 65 20 22 57 69 6e 52 54  avors are "WinRT
0e10: 22 2c 20 22 57 69 6e 52 54 38 31 22 2c 20 22 57  ", "WinRT81", "W
0e20: 50 38 30 22 2c 0a 23 20 22 57 50 38 31 22 2c 20  P80",.# "WP81", 
0e30: 61 6e 64 20 22 57 69 6e 33 32 22 2e 20 20 54 68  and "Win32".  Th
0e40: 65 20 66 6f 75 72 74 68 20 61 72 67 75 6d 65 6e  e fourth argumen
0e50: 74 20 69 73 20 6f 70 74 69 6f 6e 61 6c 20 61 6e  t is optional an
0e60: 64 20 69 66 20 70 72 65 73 65 6e 74 20 6d 75 73  d if present mus
0e70: 74 20 62 65 0a 23 20 61 20 73 74 72 69 6e 67 20  t be.# a string 
0e80: 63 6f 6e 74 61 69 6e 69 6e 67 20 61 20 6c 69 73  containing a lis
0e90: 74 20 6f 66 20 70 6c 61 74 66 6f 72 6d 73 20 74  t of platforms t
0ea0: 6f 20 69 6e 63 6c 75 64 65 20 69 6e 20 74 68 65  o include in the
0eb0: 20 56 53 49 58 20 70 61 63 6b 61 67 65 2e 20 20   VSIX package.  
0ec0: 54 68 65 0a 23 20 70 6c 61 74 66 6f 72 6d 20 6c  The.# platform l
0ed0: 69 73 74 20 69 73 20 22 70 6c 61 74 66 6f 72 6d  ist is "platform
0ee0: 31 2c 70 6c 61 74 66 6f 72 6d 32 2c 70 6c 61 74  1,platform2,plat
0ef0: 66 6f 72 6d 33 22 2e 20 20 54 68 65 20 66 69 66  form3".  The fif
0f00: 74 68 20 61 72 67 75 6d 65 6e 74 20 69 73 0a 23  th argument is.#
0f10: 20 6f 70 74 69 6f 6e 61 6c 20 61 6e 64 20 69 66   optional and if
0f20: 20 70 72 65 73 65 6e 74 20 6d 75 73 74 20 63 6f   present must co
0f30: 6e 74 61 69 6e 20 74 68 65 20 76 65 72 73 69 6f  ntain the versio
0f40: 6e 20 6f 66 20 56 69 73 75 61 6c 20 53 74 75 64  n of Visual Stud
0f50: 69 6f 20 72 65 71 75 69 72 65 64 20 62 79 0a 23  io required by.#
0f60: 20 74 68 65 20 70 61 63 6b 61 67 65 2e 20 20 43   the package.  C
0f70: 75 72 72 65 6e 74 6c 79 2c 20 74 68 65 20 6f 6e  urrently, the on
0f80: 6c 79 20 73 75 70 70 6f 72 74 65 64 20 76 65 72  ly supported ver
0f90: 73 69 6f 6e 73 20 61 72 65 20 22 32 30 31 32 22  sions are "2012"
0fa0: 20 61 6e 64 20 22 32 30 31 33 22 2e 0a 23 20 54   and "2013"..# T
0fb0: 68 65 20 70 61 63 6b 61 67 65 20 66 6c 61 76 6f  he package flavo
0fc0: 72 73 20 22 57 69 6e 52 54 38 31 22 20 61 6e 64  rs "WinRT81" and
0fd0: 20 22 57 50 38 31 22 20 61 72 65 20 6f 6e 6c 79   "WP81" are only
0fe0: 20 73 75 70 70 6f 72 74 65 64 20 77 68 65 6e 20   supported when 
0ff0: 74 68 65 20 56 69 73 75 61 6c 0a 23 20 53 74 75  the Visual.# Stu
1000: 64 69 6f 20 76 65 72 73 69 6f 6e 20 69 73 20 22  dio version is "
1010: 32 30 31 33 22 2e 20 20 54 79 70 69 63 61 6c 6c  2013".  Typicall
1020: 79 2c 20 77 68 65 6e 20 6f 6e 20 57 69 6e 64 6f  y, when on Windo
1030: 77 73 2c 20 74 68 69 73 20 73 63 72 69 70 74 20  ws, this script 
1040: 69 73 0a 23 20 65 78 65 63 75 74 65 64 20 75 73  is.# executed us
1050: 69 6e 67 20 63 6f 6d 6d 61 6e 64 73 20 73 69 6d  ing commands sim
1060: 69 6c 61 72 20 74 6f 20 74 68 65 20 66 6f 6c 6c  ilar to the foll
1070: 6f 77 69 6e 67 20 66 72 6f 6d 20 61 20 6e 6f 72  owing from a nor
1080: 6d 61 6c 20 57 69 6e 64 6f 77 73 0a 23 20 63 6f  mal Windows.# co
1090: 6d 6d 61 6e 64 20 70 72 6f 6d 70 74 3a 0a 23 0a  mmand prompt:.#.
10a0: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
10b0: 20 20 20 20 20 20 20 20 20 20 43 44 20 2f 44 20            CD /D 
10c0: 43 3a 5c 64 65 76 5c 73 71 6c 69 74 65 5c 63 6f  C:\dev\sqlite\co
10d0: 72 65 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  re.#            
10e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 63 6c               tcl
10f0: 73 68 20 74 6f 6f 6c 5c 6d 6b 76 73 69 78 2e 74  sh tool\mkvsix.t
1100: 63 6c 20 43 3a 5c 54 65 6d 70 0a 23 0a 23 20 49  cl C:\Temp.#.# I
1110: 6e 20 74 68 65 20 65 78 61 6d 70 6c 65 20 61 62  n the example ab
1120: 6f 76 65 2c 20 22 43 3a 5c 64 65 76 5c 73 71 6c  ove, "C:\dev\sql
1130: 69 74 65 5c 63 6f 72 65 22 20 72 65 70 72 65 73  ite\core" repres
1140: 65 6e 74 73 20 74 68 65 20 72 6f 6f 74 20 6f 66  ents the root of
1150: 20 74 68 65 20 73 6f 75 72 63 65 0a 23 20 74 72   the source.# tr
1160: 65 65 20 66 6f 72 20 53 51 4c 69 74 65 20 61 6e  ee for SQLite an
1170: 64 20 22 43 3a 5c 54 65 6d 70 22 20 72 65 70 72  d "C:\Temp" repr
1180: 65 73 65 6e 74 73 20 74 68 65 20 74 6f 70 2d 6c  esents the top-l
1190: 65 76 65 6c 20 64 69 72 65 63 74 6f 72 79 20 63  evel directory c
11a0: 6f 6e 74 61 69 6e 69 6e 67 0a 23 20 74 68 65 20  ontaining.# the 
11b0: 65 78 65 63 75 74 61 62 6c 65 20 61 6e 64 20 6f  executable and o
11c0: 74 68 65 72 20 63 6f 6d 70 69 6c 65 64 20 62 69  ther compiled bi
11d0: 6e 61 72 79 20 66 69 6c 65 73 2c 20 6f 72 67 61  nary files, orga
11e0: 6e 69 7a 65 64 20 69 6e 74 6f 20 61 20 64 69 72  nized into a dir
11f0: 65 63 74 6f 72 79 0a 23 20 74 72 65 65 20 61 73  ectory.# tree as
1200: 20 64 65 73 63 72 69 62 65 64 20 69 6e 20 69 74   described in it
1210: 65 6d 20 36 20 6f 66 20 74 68 65 20 50 52 45 52  em 6 of the PRER
1220: 45 51 55 49 53 49 54 45 53 20 73 65 63 74 69 6f  EQUISITES sectio
1230: 6e 2c 20 61 62 6f 76 65 2e 0a 23 0a 23 20 54 68  n, above..#.# Th
1240: 69 73 20 73 63 72 69 70 74 20 73 68 6f 75 6c 64  is script should
1250: 20 77 6f 72 6b 20 6f 6e 20 6e 6f 6e 2d 57 69 6e   work on non-Win
1260: 64 6f 77 73 20 70 6c 61 74 66 6f 72 6d 73 20 61  dows platforms a
1270: 73 20 77 65 6c 6c 2c 20 70 72 6f 76 69 64 65 64  s well, provided
1280: 20 74 68 61 74 20 61 6c 6c 0a 23 20 74 68 65 20   that all.# the 
1290: 72 65 71 75 69 72 65 6d 65 6e 74 73 20 6c 69 73  requirements lis
12a0: 74 65 64 20 69 6e 20 74 68 65 20 50 52 45 52 45  ted in the PRERE
12b0: 51 55 49 53 49 54 45 53 20 73 65 63 74 69 6f 6e  QUISITES section
12c0: 20 61 72 65 20 6d 65 74 2e 0a 23 0a 23 20 4e 4f   are met..#.# NO
12d0: 54 45 53 0a 23 0a 23 20 54 68 65 20 74 65 6d 70  TES.#.# The temp
12e0: 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20  orary directory 
12f0: 69 73 20 75 73 65 64 20 61 73 20 61 20 73 74 61  is used as a sta
1300: 67 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 68  ging area for th
1310: 65 20 66 69 6e 61 6c 20 56 53 49 58 20 66 69 6c  e final VSIX fil
1320: 65 2e 0a 23 20 54 68 65 20 74 65 6d 70 6c 61 74  e..# The templat
1330: 65 20 56 53 49 58 20 66 69 6c 65 20 69 73 20 65  e VSIX file is e
1340: 78 74 72 61 63 74 65 64 2c 20 69 74 73 20 63 6f  xtracted, its co
1350: 6e 74 65 6e 74 73 20 70 72 6f 63 65 73 73 65 64  ntents processed
1360: 2c 20 61 6e 64 20 74 68 65 6e 20 74 68 65 0a 23  , and then the.#
1370: 20 72 65 73 75 6c 74 69 6e 67 20 66 69 6c 65 73   resulting files
1380: 20 61 72 65 20 70 61 63 6b 61 67 65 64 20 69 6e   are packaged in
1390: 74 6f 20 74 68 65 20 66 69 6e 61 6c 20 56 53 49  to the final VSI
13a0: 58 20 66 69 6c 65 2e 0a 23 0a 70 61 63 6b 61 67  X file..#.packag
13b0: 65 20 72 65 71 75 69 72 65 20 54 63 6c 20 38 2e  e require Tcl 8.
13c0: 34 0a 0c 0a 70 72 6f 63 20 66 61 69 6c 20 7b 20  4...proc fail { 
13d0: 7b 65 72 72 6f 72 20 22 22 7d 20 7b 75 73 61 67  {error ""} {usag
13e0: 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0a 20 20 69  e false} } {.  i
13f0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
1400: 68 20 24 65 72 72 6f 72 5d 20 3e 20 30 7d 20 74  h $error] > 0} t
1410: 68 65 6e 20 7b 0a 20 20 20 20 70 75 74 73 20 73  hen {.    puts s
1420: 74 64 6f 75 74 20 24 65 72 72 6f 72 0a 20 20 20  tdout $error.   
1430: 20 69 66 20 7b 21 24 75 73 61 67 65 7d 20 74 68   if {!$usage} th
1440: 65 6e 20 7b 65 78 69 74 20 31 7d 0a 20 20 7d 0a  en {exit 1}.  }.
1450: 0a 20 20 70 75 74 73 20 73 74 64 6f 75 74 20 22  .  puts stdout "
1460: 75 73 61 67 65 3a 5c 0a 5b 66 69 6c 65 20 74 61  usage:\.[file ta
1470: 69 6c 20 5b 69 6e 66 6f 20 6e 61 6d 65 6f 66 65  il [info nameofe
1480: 78 65 63 75 74 61 62 6c 65 5d 5d 5c 0a 5b 66 69  xecutable]]\.[fi
1490: 6c 65 20 74 61 69 6c 20 5b 69 6e 66 6f 20 73 63  le tail [info sc
14a0: 72 69 70 74 5d 5d 20 3c 62 69 6e 61 72 79 44 69  ript]] <binaryDi
14b0: 72 65 63 74 6f 72 79 3e 20 5c 5b 73 6f 75 72 63  rectory> \[sourc
14c0: 65 44 69 72 65 63 74 6f 72 79 5c 5d 5c 0a 5c 5b  eDirectory\]\.\[
14d0: 70 61 63 6b 61 67 65 46 6c 61 76 6f 72 5c 5d 20  packageFlavor\] 
14e0: 5c 5b 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5c  \[platformNames\
14f0: 5d 20 5c 5b 76 73 56 65 72 73 69 6f 6e 5c 5d 22  ] \[vsVersion\]"
1500: 0a 0a 20 20 65 78 69 74 20 31 0a 7d 0a 0c 0a 70  ..  exit 1.}...p
1510: 72 6f 63 20 67 65 74 45 6e 76 69 72 6f 6e 6d 65  roc getEnvironme
1520: 6e 74 56 61 72 69 61 62 6c 65 20 7b 20 6e 61 6d  ntVariable { nam
1530: 65 20 7d 20 7b 0a 20 20 23 0a 20 20 23 20 4e 4f  e } {.  #.  # NO
1540: 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20  TE: Returns the 
1550: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 70 65  value of the spe
1560: 63 69 66 69 65 64 20 65 6e 76 69 72 6f 6e 6d 65  cified environme
1570: 6e 74 20 76 61 72 69 61 62 6c 65 20 6f 72 20 61  nt variable or a
1580: 6e 20 65 6d 70 74 79 0a 20 20 23 20 20 20 20 20  n empty.  #     
1590: 20 20 73 74 72 69 6e 67 20 66 6f 72 20 65 6e 76    string for env
15a0: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
15b0: 65 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 65  es that do not e
15c0: 78 69 73 74 20 69 6e 20 74 68 65 20 63 75 72 72  xist in the curr
15d0: 65 6e 74 0a 20 20 23 20 20 20 20 20 20 20 70 72  ent.  #       pr
15e0: 6f 63 65 73 73 20 65 6e 76 69 72 6f 6e 6d 65 6e  ocess environmen
15f0: 74 2e 0a 20 20 23 0a 20 20 72 65 74 75 72 6e 20  t..  #.  return 
1600: 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 65 78 69  [expr {[info exi
1610: 73 74 73 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29  sts ::env($name)
1620: 5d 20 3f 20 24 3a 3a 65 6e 76 28 24 6e 61 6d 65  ] ? $::env($name
1630: 29 20 3a 20 22 22 7d 5d 0a 7d 0a 0c 0a 70 72 6f  ) : ""}].}...pro
1640: 63 20 67 65 74 54 65 6d 70 6f 72 61 72 79 50 61  c getTemporaryPa
1650: 74 68 20 7b 7d 20 7b 0a 20 20 23 0a 20 20 23 20  th {} {.  #.  # 
1660: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68  NOTE: Returns th
1670: 65 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 70 61 74  e normalized pat
1680: 68 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 74  h to the first t
1690: 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f  emporary directo
16a0: 72 79 20 66 6f 75 6e 64 0a 20 20 23 20 20 20 20  ry found.  #    
16b0: 20 20 20 69 6e 20 74 68 65 20 74 79 70 69 63 61     in the typica
16c0: 6c 20 73 65 74 20 6f 66 20 65 6e 76 69 72 6f 6e  l set of environ
16d0: 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20 75  ment variables u
16e0: 73 65 64 20 66 6f 72 20 74 68 61 74 20 70 75 72  sed for that pur
16f0: 70 6f 73 65 0a 20 20 23 20 20 20 20 20 20 20 6f  pose.  #       o
1700: 72 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e  r an empty strin
1710: 67 20 74 6f 20 73 69 67 6e 61 6c 20 61 20 66 61  g to signal a fa
1720: 69 6c 75 72 65 20 74 6f 20 6c 6f 63 61 74 65 20  ilure to locate 
1730: 73 75 63 68 20 61 20 64 69 72 65 63 74 6f 72 79  such a directory
1740: 2e 0a 20 20 23 0a 20 20 73 65 74 20 6e 61 6d 65  ..  #.  set name
1750: 73 20 5b 6c 69 73 74 5d 0a 0a 20 20 66 6f 72 65  s [list]..  fore
1760: 61 63 68 20 6e 61 6d 65 20 5b 6c 69 73 74 20 54  ach name [list T
1770: 45 4d 50 20 54 4d 50 5d 20 7b 0a 20 20 20 20 6c  EMP TMP] {.    l
1780: 61 70 70 65 6e 64 20 6e 61 6d 65 73 20 5b 73 74  append names [st
1790: 72 69 6e 67 20 74 6f 75 70 70 65 72 20 24 6e 61  ring toupper $na
17a0: 6d 65 5d 20 5b 73 74 72 69 6e 67 20 74 6f 6c 6f  me] [string tolo
17b0: 77 65 72 20 24 6e 61 6d 65 5d 20 5c 0a 20 20 20  wer $name] \.   
17c0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 74 6f 74       [string tot
17d0: 69 74 6c 65 20 24 6e 61 6d 65 5d 0a 20 20 7d 0a  itle $name].  }.
17e0: 0a 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20  .  foreach name 
17f0: 24 6e 61 6d 65 73 20 7b 0a 20 20 20 20 73 65 74  $names {.    set
1800: 20 76 61 6c 75 65 20 5b 67 65 74 45 6e 76 69 72   value [getEnvir
1810: 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 20 24  onmentVariable $
1820: 6e 61 6d 65 5d 0a 0a 20 20 20 20 69 66 20 7b 5b  name]..    if {[
1830: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76  string length $v
1840: 61 6c 75 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  alue] > 0} then 
1850: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  {.      return [
1860: 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 24  file normalize $
1870: 76 61 6c 75 65 5d 0a 20 20 20 20 7d 0a 20 20 7d  value].    }.  }
1880: 0a 0a 20 20 72 65 74 75 72 6e 20 22 22 0a 7d 0a  ..  return "".}.
1890: 0c 0a 70 72 6f 63 20 61 70 70 65 6e 64 41 72 67  ..proc appendArg
18a0: 73 20 7b 20 61 72 67 73 20 7d 20 7b 0a 20 20 23  s { args } {.  #
18b0: 0a 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72  .  # NOTE: Retur
18c0: 6e 73 20 61 6c 6c 20 70 61 73 73 65 64 20 61 72  ns all passed ar
18d0: 67 75 6d 65 6e 74 73 20 6a 6f 69 6e 65 64 20 74  guments joined t
18e0: 6f 67 65 74 68 65 72 20 61 73 20 61 20 73 69 6e  ogether as a sin
18f0: 67 6c 65 20 73 74 72 69 6e 67 20 77 69 74 68 0a  gle string with.
1900: 20 20 23 20 20 20 20 20 20 20 6e 6f 20 69 6e 74    #       no int
1910: 65 72 76 65 6e 69 6e 67 20 73 70 61 63 65 73 20  ervening spaces 
1920: 62 65 74 77 65 65 6e 20 61 72 67 75 6d 65 6e 74  between argument
1930: 73 2e 0a 20 20 23 0a 20 20 65 76 61 6c 20 61 70  s..  #.  eval ap
1940: 70 65 6e 64 20 72 65 73 75 6c 74 20 24 61 72 67  pend result $arg
1950: 73 0a 7d 0a 0c 0a 70 72 6f 63 20 72 65 61 64 46  s.}...proc readF
1960: 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d  ile { fileName }
1970: 20 7b 0a 20 20 23 0a 20 20 23 20 4e 4f 54 45 3a   {.  #.  # NOTE:
1980: 20 52 65 61 64 73 20 61 6e 64 20 72 65 74 75 72   Reads and retur
1990: 6e 73 20 74 68 65 20 65 6e 74 69 72 65 20 63 6f  ns the entire co
19a0: 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 73 70  ntents of the sp
19b0: 65 63 69 66 69 65 64 20 66 69 6c 65 2c 20 77 68  ecified file, wh
19c0: 69 63 68 0a 20 20 23 20 20 20 20 20 20 20 6d 61  ich.  #       ma
19d0: 79 20 63 6f 6e 74 61 69 6e 20 62 69 6e 61 72 79  y contain binary
19e0: 20 64 61 74 61 2e 0a 20 20 23 0a 20 20 73 65 74   data..  #.  set
19f0: 20 66 69 6c 65 5f 69 64 20 5b 6f 70 65 6e 20 24   file_id [open $
1a00: 66 69 6c 65 4e 61 6d 65 20 52 44 4f 4e 4c 59 5d  fileName RDONLY]
1a10: 0a 20 20 66 63 6f 6e 66 69 67 75 72 65 20 24 66  .  fconfigure $f
1a20: 69 6c 65 5f 69 64 20 2d 65 6e 63 6f 64 69 6e 67  ile_id -encoding
1a30: 20 62 69 6e 61 72 79 20 2d 74 72 61 6e 73 6c 61   binary -transla
1a40: 74 69 6f 6e 20 62 69 6e 61 72 79 0a 20 20 73 65  tion binary.  se
1a50: 74 20 72 65 73 75 6c 74 20 5b 72 65 61 64 20 24  t result [read $
1a60: 66 69 6c 65 5f 69 64 5d 0a 20 20 63 6c 6f 73 65  file_id].  close
1a70: 20 24 66 69 6c 65 5f 69 64 0a 20 20 72 65 74 75   $file_id.  retu
1a80: 72 6e 20 24 72 65 73 75 6c 74 0a 7d 0a 0c 0a 70  rn $result.}...p
1a90: 72 6f 63 20 77 72 69 74 65 46 69 6c 65 20 7b 20  roc writeFile { 
1aa0: 66 69 6c 65 4e 61 6d 65 20 64 61 74 61 20 7d 20  fileName data } 
1ab0: 7b 0a 20 20 23 0a 20 20 23 20 4e 4f 54 45 3a 20  {.  #.  # NOTE: 
1ac0: 57 72 69 74 65 73 20 74 68 65 20 65 6e 74 69 72  Writes the entir
1ad0: 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68  e contents of th
1ae0: 65 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65  e specified file
1af0: 2c 20 77 68 69 63 68 20 6d 61 79 20 63 6f 6e 74  , which may cont
1b00: 61 69 6e 0a 20 20 23 20 20 20 20 20 20 20 62 69  ain.  #       bi
1b10: 6e 61 72 79 20 64 61 74 61 2e 0a 20 20 23 0a 20  nary data..  #. 
1b20: 20 73 65 74 20 66 69 6c 65 5f 69 64 20 5b 6f 70   set file_id [op
1b30: 65 6e 20 24 66 69 6c 65 4e 61 6d 65 20 7b 57 52  en $fileName {WR
1b40: 4f 4e 4c 59 20 43 52 45 41 54 20 54 52 55 4e 43  ONLY CREAT TRUNC
1b50: 7d 5d 0a 20 20 66 63 6f 6e 66 69 67 75 72 65 20  }].  fconfigure 
1b60: 24 66 69 6c 65 5f 69 64 20 2d 65 6e 63 6f 64 69  $file_id -encodi
1b70: 6e 67 20 62 69 6e 61 72 79 20 2d 74 72 61 6e 73  ng binary -trans
1b80: 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 0a 20 20  lation binary.  
1b90: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
1ba0: 24 66 69 6c 65 5f 69 64 20 24 64 61 74 61 0a 20  $file_id $data. 
1bb0: 20 63 6c 6f 73 65 20 24 66 69 6c 65 5f 69 64 0a   close $file_id.
1bc0: 20 20 72 65 74 75 72 6e 20 22 22 0a 7d 0a 0c 0a    return "".}...
1bd0: 23 0a 23 20 54 4f 44 4f 3a 20 4d 6f 64 69 66 79  #.# TODO: Modify
1be0: 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   this procedure 
1bf0: 77 68 65 6e 20 61 20 6e 65 77 20 76 65 72 73 69  when a new versi
1c00: 6f 6e 20 6f 66 20 56 69 73 75 61 6c 20 53 74 75  on of Visual Stu
1c10: 64 69 6f 20 69 73 20 72 65 6c 65 61 73 65 64 2e  dio is released.
1c20: 0a 23 0a 70 72 6f 63 20 67 65 74 4d 69 6e 56 73  .#.proc getMinVs
1c30: 56 65 72 73 69 6f 6e 58 6d 6c 43 68 75 6e 6b 20  VersionXmlChunk 
1c40: 7b 20 76 73 56 65 72 73 69 6f 6e 20 7d 20 7b 0a  { vsVersion } {.
1c50: 20 20 73 77 69 74 63 68 20 2d 65 78 61 63 74 20    switch -exact 
1c60: 24 76 73 56 65 72 73 69 6f 6e 20 7b 0a 20 20 20  $vsVersion {.   
1c70: 20 32 30 31 32 20 7b 0a 20 20 20 20 20 20 72 65   2012 {.      re
1c80: 74 75 72 6e 20 5b 61 70 70 65 6e 64 41 72 67 73  turn [appendArgs
1c90: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 22 5c 72   \.          "\r
1ca0: 5c 6e 20 20 20 20 22 20 7b 4d 69 6e 56 53 56 65  \n    " {MinVSVe
1cb0: 72 73 69 6f 6e 3d 22 31 31 2e 30 22 7d 5d 0a 20  rsion="11.0"}]. 
1cc0: 20 20 20 7d 0a 20 20 20 20 32 30 31 33 20 7b 0a     }.    2013 {.
1cd0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 61 70        return [ap
1ce0: 70 65 6e 64 41 72 67 73 20 5c 0a 20 20 20 20 20  pendArgs \.     
1cf0: 20 20 20 20 20 22 5c 72 5c 6e 20 20 20 20 22 20       "\r\n    " 
1d00: 7b 4d 69 6e 56 53 56 65 72 73 69 6f 6e 3d 22 31  {MinVSVersion="1
1d10: 32 2e 30 22 7d 5d 0a 20 20 20 20 7d 0a 20 20 20  2.0"}].    }.   
1d20: 20 32 30 31 35 20 7b 0a 20 20 20 20 20 20 72 65   2015 {.      re
1d30: 74 75 72 6e 20 5b 61 70 70 65 6e 64 41 72 67 73  turn [appendArgs
1d40: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 22 5c 72   \.          "\r
1d50: 5c 6e 20 20 20 20 22 20 7b 4d 69 6e 56 53 56 65  \n    " {MinVSVe
1d60: 72 73 69 6f 6e 3d 22 31 34 2e 30 22 7d 5d 0a 20  rsion="14.0"}]. 
1d70: 20 20 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74     }.    default
1d80: 20 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   {.      return 
1d90: 22 22 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0c  "".    }.  }.}..
1da0: 0a 23 0a 23 20 54 4f 44 4f 3a 20 4d 6f 64 69 66  .#.# TODO: Modif
1db0: 79 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  y this procedure
1dc0: 20 77 68 65 6e 20 61 20 6e 65 77 20 76 65 72 73   when a new vers
1dd0: 69 6f 6e 20 6f 66 20 56 69 73 75 61 6c 20 53 74  ion of Visual St
1de0: 75 64 69 6f 20 69 73 20 72 65 6c 65 61 73 65 64  udio is released
1df0: 2e 0a 23 0a 70 72 6f 63 20 67 65 74 4d 61 78 50  ..#.proc getMaxP
1e00: 6c 61 74 66 6f 72 6d 56 65 72 73 69 6f 6e 58 6d  latformVersionXm
1e10: 6c 43 68 75 6e 6b 20 7b 20 70 61 63 6b 61 67 65  lChunk { package
1e20: 46 6c 61 76 6f 72 20 76 73 56 65 72 73 69 6f 6e  Flavor vsVersion
1e30: 20 7d 20 7b 0a 20 20 23 0a 20 20 23 20 4e 4f 54   } {.  #.  # NOT
1e40: 45 3a 20 4f 6e 6c 79 20 56 69 73 75 61 6c 20 53  E: Only Visual S
1e50: 74 75 64 69 6f 20 32 30 31 33 20 61 6e 64 20 6c  tudio 2013 and l
1e60: 61 74 65 72 20 73 75 70 70 6f 72 74 20 74 68 69  ater support thi
1e70: 73 20 61 74 74 72 69 62 75 74 65 20 77 69 74 68  s attribute with
1e80: 69 6e 20 74 68 65 0a 20 20 23 20 20 20 20 20 20  in the.  #      
1e90: 20 53 44 4b 20 6d 61 6e 69 66 65 73 74 2e 0a 20   SDK manifest.. 
1ea0: 20 23 0a 20 20 69 66 20 7b 21 5b 73 74 72 69 6e   #.  if {![strin
1eb0: 67 20 65 71 75 61 6c 20 24 76 73 56 65 72 73 69  g equal $vsVersi
1ec0: 6f 6e 20 32 30 31 33 5d 20 26 26 20 5c 0a 20 20  on 2013] && \.  
1ed0: 20 20 20 20 21 5b 73 74 72 69 6e 67 20 65 71 75      ![string equ
1ee0: 61 6c 20 24 76 73 56 65 72 73 69 6f 6e 20 32 30  al $vsVersion 20
1ef0: 31 35 5d 7d 20 74 68 65 6e 20 7b 0a 20 20 20 20  15]} then {.    
1f00: 72 65 74 75 72 6e 20 22 22 0a 20 20 7d 0a 0a 20  return "".  }.. 
1f10: 20 73 77 69 74 63 68 20 2d 65 78 61 63 74 20 24   switch -exact $
1f20: 70 61 63 6b 61 67 65 46 6c 61 76 6f 72 20 7b 0a  packageFlavor {.
1f30: 20 20 20 20 57 69 6e 52 54 20 7b 0a 20 20 20 20      WinRT {.    
1f40: 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64    return [append
1f50: 41 72 67 73 20 5c 0a 20 20 20 20 20 20 20 20 20  Args \.         
1f60: 20 22 5c 72 5c 6e 20 20 20 20 22 20 7b 4d 61 78   "\r\n    " {Max
1f70: 50 6c 61 74 66 6f 72 6d 56 65 72 73 69 6f 6e 3d  PlatformVersion=
1f80: 22 38 2e 30 22 7d 5d 0a 20 20 20 20 7d 0a 20 20  "8.0"}].    }.  
1f90: 20 20 57 69 6e 52 54 38 31 20 7b 0a 20 20 20 20    WinRT81 {.    
1fa0: 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64    return [append
1fb0: 41 72 67 73 20 5c 0a 20 20 20 20 20 20 20 20 20  Args \.         
1fc0: 20 22 5c 72 5c 6e 20 20 20 20 22 20 7b 4d 61 78   "\r\n    " {Max
1fd0: 50 6c 61 74 66 6f 72 6d 56 65 72 73 69 6f 6e 3d  PlatformVersion=
1fe0: 22 38 2e 31 22 7d 5d 0a 20 20 20 20 7d 0a 20 20  "8.1"}].    }.  
1ff0: 20 20 57 50 38 30 20 7b 0a 20 20 20 20 20 20 72    WP80 {.      r
2000: 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 41 72 67  eturn [appendArg
2010: 73 20 5c 0a 20 20 20 20 20 20 20 20 20 20 22 5c  s \.          "\
2020: 72 5c 6e 20 20 20 20 22 20 7b 4d 61 78 50 6c 61  r\n    " {MaxPla
2030: 74 66 6f 72 6d 56 65 72 73 69 6f 6e 3d 22 38 2e  tformVersion="8.
2040: 30 22 7d 5d 0a 20 20 20 20 7d 0a 20 20 20 20 57  0"}].    }.    W
2050: 50 38 31 20 7b 0a 20 20 20 20 20 20 72 65 74 75  P81 {.      retu
2060: 72 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  rn [appendArgs \
2070: 0a 20 20 20 20 20 20 20 20 20 20 22 5c 72 5c 6e  .          "\r\n
2080: 20 20 20 20 22 20 7b 4d 61 78 50 6c 61 74 66 6f      " {MaxPlatfo
2090: 72 6d 56 65 72 73 69 6f 6e 3d 22 38 2e 31 22 7d  rmVersion="8.1"}
20a0: 5d 0a 20 20 20 20 7d 0a 20 20 20 20 64 65 66 61  ].    }.    defa
20b0: 75 6c 74 20 7b 0a 20 20 20 20 20 20 72 65 74 75  ult {.      retu
20c0: 72 6e 20 22 22 0a 20 20 20 20 7d 0a 20 20 7d 0a  rn "".    }.  }.
20d0: 7d 0a 0c 0a 23 0a 23 20 54 4f 44 4f 3a 20 4d 6f  }...#.# TODO: Mo
20e0: 64 69 66 79 20 74 68 69 73 20 70 72 6f 63 65 64  dify this proced
20f0: 75 72 65 20 77 68 65 6e 20 61 20 6e 65 77 20 76  ure when a new v
2100: 65 72 73 69 6f 6e 20 6f 66 20 56 69 73 75 61 6c  ersion of Visual
2110: 20 53 74 75 64 69 6f 20 69 73 20 72 65 6c 65 61   Studio is relea
2120: 73 65 64 2e 0a 23 0a 70 72 6f 63 20 67 65 74 45  sed..#.proc getE
2130: 78 74 72 61 46 69 6c 65 4c 69 73 74 58 6d 6c 43  xtraFileListXmlC
2140: 68 75 6e 6b 20 7b 20 70 61 63 6b 61 67 65 46 6c  hunk { packageFl
2150: 61 76 6f 72 20 76 73 56 65 72 73 69 6f 6e 20 7d  avor vsVersion }
2160: 20 7b 0a 20 20 23 0a 20 20 23 20 4e 4f 54 45 3a   {.  #.  # NOTE:
2170: 20 57 69 6e 64 6f 77 73 20 50 68 6f 6e 65 20 38   Windows Phone 8
2180: 2e 30 20 64 6f 65 73 20 6e 6f 74 20 72 65 71 75  .0 does not requ
2190: 69 72 65 20 61 6e 79 20 65 78 74 72 61 20 61 74  ire any extra at
21a0: 74 72 69 62 75 74 65 73 20 69 6e 20 69 74 73 20  tributes in its 
21b0: 56 53 49 58 0a 20 20 23 20 20 20 20 20 20 20 70  VSIX.  #       p
21c0: 61 63 6b 61 67 65 20 53 44 4b 20 6d 61 6e 69 66  ackage SDK manif
21d0: 65 73 74 73 3b 20 68 6f 77 65 76 65 72 2c 20 69  ests; however, i
21e0: 74 20 61 70 70 65 61 72 73 20 74 68 61 74 20 57  t appears that W
21f0: 69 6e 64 6f 77 73 20 50 68 6f 6e 65 20 38 2e 31  indows Phone 8.1
2200: 0a 20 20 23 20 20 20 20 20 20 20 64 6f 65 73 2e  .  #       does.
2210: 0a 20 20 23 0a 20 20 69 66 20 7b 5b 73 74 72 69  .  #.  if {[stri
2220: 6e 67 20 65 71 75 61 6c 20 24 70 61 63 6b 61 67  ng equal $packag
2230: 65 46 6c 61 76 6f 72 20 57 50 38 30 5d 7d 20 74  eFlavor WP80]} t
2240: 68 65 6e 20 7b 0a 20 20 20 20 72 65 74 75 72 6e  hen {.    return
2250: 20 22 22 0a 20 20 7d 0a 0a 20 20 73 65 74 20 61   "".  }..  set a
2260: 70 70 6c 69 65 73 54 6f 20 5b 65 78 70 72 20 7b  ppliesTo [expr {
2270: 5b 73 74 72 69 6e 67 20 65 71 75 61 6c 20 24 70  [string equal $p
2280: 61 63 6b 61 67 65 46 6c 61 76 6f 72 20 57 69 6e  ackageFlavor Win
2290: 33 32 5d 20 3f 20 5c 0a 20 20 20 20 20 20 22 56  32] ? \.      "V
22a0: 69 73 75 61 6c 43 22 20 3a 20 22 57 69 6e 64 6f  isualC" : "Windo
22b0: 77 73 41 70 70 43 6f 6e 74 61 69 6e 65 72 22 7d  wsAppContainer"}
22c0: 5d 0a 0a 20 20 73 77 69 74 63 68 20 2d 65 78 61  ]..  switch -exa
22d0: 63 74 20 24 76 73 56 65 72 73 69 6f 6e 20 7b 0a  ct $vsVersion {.
22e0: 20 20 20 20 32 30 31 32 20 7b 0a 20 20 20 20 20      2012 {.     
22f0: 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 41   return [appendA
2300: 72 67 73 20 5c 0a 20 20 20 20 20 20 20 20 20 20  rgs \.          
2310: 22 5c 72 5c 6e 20 20 20 20 22 20 41 70 70 6c 69  "\r\n    " Appli
2320: 65 73 54 6f 3d 5c 22 20 24 61 70 70 6c 69 65 73  esTo=\" $applies
2330: 54 6f 20 5c 22 20 5c 0a 20 20 20 20 20 20 20 20  To \" \.        
2340: 20 20 22 5c 72 5c 6e 20 20 20 20 22 20 7b 44 65    "\r\n    " {De
2350: 70 65 6e 64 73 4f 6e 3d 22 4d 69 63 72 6f 73 6f  pendsOn="Microso
2360: 66 74 2e 56 43 4c 69 62 73 2c 20 76 65 72 73 69  ft.VCLibs, versi
2370: 6f 6e 3d 31 31 2e 30 22 7d 5d 0a 20 20 20 20 7d  on=11.0"}].    }
2380: 0a 20 20 20 20 32 30 31 33 20 7b 0a 20 20 20 20  .    2013 {.    
2390: 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64    return [append
23a0: 41 72 67 73 20 5c 0a 20 20 20 20 20 20 20 20 20  Args \.         
23b0: 20 22 5c 72 5c 6e 20 20 20 20 22 20 41 70 70 6c   "\r\n    " Appl
23c0: 69 65 73 54 6f 3d 5c 22 20 24 61 70 70 6c 69 65  iesTo=\" $applie
23d0: 73 54 6f 20 5c 22 20 5c 0a 20 20 20 20 20 20 20  sTo \" \.       
23e0: 20 20 20 22 5c 72 5c 6e 20 20 20 20 22 20 7b 44     "\r\n    " {D
23f0: 65 70 65 6e 64 73 4f 6e 3d 22 4d 69 63 72 6f 73  ependsOn="Micros
2400: 6f 66 74 2e 56 43 4c 69 62 73 2c 20 76 65 72 73  oft.VCLibs, vers
2410: 69 6f 6e 3d 31 32 2e 30 22 7d 5d 0a 20 20 20 20  ion=12.0"}].    
2420: 7d 0a 20 20 20 20 32 30 31 35 20 7b 0a 20 20 20  }.    2015 {.   
2430: 20 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e     return [appen
2440: 64 41 72 67 73 20 5c 0a 20 20 20 20 20 20 20 20  dArgs \.        
2450: 20 20 22 5c 72 5c 6e 20 20 20 20 22 20 41 70 70    "\r\n    " App
2460: 6c 69 65 73 54 6f 3d 5c 22 20 24 61 70 70 6c 69  liesTo=\" $appli
2470: 65 73 54 6f 20 5c 22 20 5c 0a 20 20 20 20 20 20  esTo \" \.      
2480: 20 20 20 20 22 5c 72 5c 6e 20 20 20 20 22 20 7b      "\r\n    " {
2490: 44 65 70 65 6e 64 73 4f 6e 3d 22 4d 69 63 72 6f  DependsOn="Micro
24a0: 73 6f 66 74 2e 56 43 4c 69 62 73 2c 20 76 65 72  soft.VCLibs, ver
24b0: 73 69 6f 6e 3d 31 34 2e 30 22 7d 5d 0a 20 20 20  sion=14.0"}].   
24c0: 20 7d 0a 20 20 20 20 64 65 66 61 75 6c 74 20 7b   }.    default {
24d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22  .      return ""
24e0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0c 0a 70  .    }.  }.}...p
24f0: 72 6f 63 20 72 65 70 6c 61 63 65 46 69 6c 65 4e  roc replaceFileN
2500: 61 6d 65 54 6f 6b 65 6e 73 20 7b 20 66 69 6c 65  ameTokens { file
2510: 4e 61 6d 65 20 6e 61 6d 65 20 62 75 69 6c 64 4e  Name name buildN
2520: 61 6d 65 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ame platformName
2530: 20 7d 20 7b 0a 20 20 23 0a 20 20 23 20 4e 4f 54   } {.  #.  # NOT
2540: 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 73  E: Returns the s
2550: 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61  pecified file na
2560: 6d 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  me containing th
2570: 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20  e platform name 
2580: 69 6e 73 74 65 61 64 0a 20 20 23 20 20 20 20 20  instead.  #     
2590: 20 20 6f 66 20 70 6c 61 74 66 6f 72 6d 20 70 6c    of platform pl
25a0: 61 63 65 68 6f 6c 64 65 72 20 74 6f 6b 65 6e 73  aceholder tokens
25b0: 2e 0a 20 20 23 0a 20 20 72 65 74 75 72 6e 20 5b  ..  #.  return [
25c0: 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74  string map [list
25d0: 20 3c 62 75 69 6c 64 3e 20 24 62 75 69 6c 64 4e   <build> $buildN
25e0: 61 6d 65 20 3c 70 6c 61 74 66 6f 72 6d 3e 20 24  ame <platform> $
25f0: 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 5c 0a 20  platformName \. 
2600: 20 20 20 20 20 3c 6e 61 6d 65 3e 20 24 6e 61 6d       <name> $nam
2610: 65 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0a 7d 0a  e] $fileName].}.
2620: 0c 0a 70 72 6f 63 20 73 75 62 73 74 46 69 6c 65  ..proc substFile
2630: 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0a   { fileName } {.
2640: 20 20 23 0a 20 20 23 20 4e 4f 54 45 3a 20 50 65    #.  # NOTE: Pe
2650: 72 66 6f 72 6d 73 20 61 6c 6c 20 54 63 6c 20 63  rforms all Tcl c
2660: 6f 6d 6d 61 6e 64 2c 20 76 61 72 69 61 62 6c 65  ommand, variable
2670: 2c 20 61 6e 64 20 62 61 63 6b 73 6c 61 73 68 20  , and backslash 
2680: 73 75 62 73 74 69 74 75 74 69 6f 6e 73 20 69 6e  substitutions in
2690: 0a 20 20 23 20 20 20 20 20 20 20 74 68 65 20 73  .  #       the s
26a0: 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 61 6e  pecified file an
26b0: 64 20 74 68 65 6e 20 72 65 77 72 69 74 65 73 20  d then rewrites 
26c0: 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  the contents of 
26d0: 74 68 61 74 20 73 61 6d 65 20 66 69 6c 65 0a 20  that same file. 
26e0: 20 23 20 20 20 20 20 20 20 77 69 74 68 20 74 68   #       with th
26f0: 65 20 73 75 62 73 74 69 74 75 74 65 64 20 64 61  e substituted da
2700: 74 61 2e 0a 20 20 23 0a 20 20 72 65 74 75 72 6e  ta..  #.  return
2710: 20 5b 77 72 69 74 65 46 69 6c 65 20 24 66 69 6c   [writeFile $fil
2720: 65 4e 61 6d 65 20 5b 75 70 6c 65 76 65 6c 20 31  eName [uplevel 1
2730: 20 5b 6c 69 73 74 20 73 75 62 73 74 20 5b 72 65   [list subst [re
2740: 61 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65  adFile $fileName
2750: 5d 5d 5d 5d 0a 7d 0a 0c 0a 23 0a 23 20 4e 4f 54  ]]]].}...#.# NOT
2760: 45 3a 20 54 68 69 73 20 69 73 20 74 68 65 20 65  E: This is the e
2770: 6e 74 72 79 20 70 6f 69 6e 74 20 66 6f 72 20 74  ntry point for t
2780: 68 69 73 20 73 63 72 69 70 74 2e 0a 23 0a 73 65  his script..#.se
2790: 74 20 73 63 72 69 70 74 20 5b 66 69 6c 65 20 6e  t script [file n
27a0: 6f 72 6d 61 6c 69 7a 65 20 5b 69 6e 66 6f 20 73  ormalize [info s
27b0: 63 72 69 70 74 5d 5d 0a 0a 69 66 20 7b 5b 73 74  cript]]..if {[st
27c0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 63 72  ring length $scr
27d0: 69 70 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ipt] == 0} then 
27e0: 7b 0a 20 20 66 61 69 6c 20 22 73 63 72 69 70 74  {.  fail "script
27f0: 20 66 69 6c 65 20 63 75 72 72 65 6e 74 6c 79 20   file currently 
2800: 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20  being evaluated 
2810: 69 73 20 75 6e 6b 6e 6f 77 6e 22 20 74 72 75 65  is unknown" true
2820: 0a 7d 0a 0a 73 65 74 20 70 61 74 68 20 5b 66 69  .}..set path [fi
2830: 6c 65 20 64 69 72 6e 61 6d 65 20 24 73 63 72 69  le dirname $scri
2840: 70 74 5d 0a 73 65 74 20 72 6f 6f 74 4e 61 6d 65  pt].set rootName
2850: 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20   [file rootname 
2860: 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 63 72 69  [file tail $scri
2870: 70 74 5d 5d 0a 0a 23 23 23 23 23 23 23 23 23 23  pt]]..##########
2880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2890: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28c0: 23 23 23 23 23 0a 0a 23 0a 23 20 4e 4f 54 45 3a  #####..#.# NOTE:
28d0: 20 50 72 6f 63 65 73 73 20 61 6e 64 20 76 65 72   Process and ver
28e0: 69 66 79 20 61 6c 6c 20 74 68 65 20 63 6f 6d 6d  ify all the comm
28f0: 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e  and line argumen
2900: 74 73 2e 0a 23 0a 73 65 74 20 61 72 67 63 20 5b  ts..#.set argc [
2910: 6c 6c 65 6e 67 74 68 20 24 61 72 67 76 5d 0a 69  llength $argv].i
2920: 66 20 7b 24 61 72 67 63 20 3c 20 31 20 7c 7c 20  f {$argc < 1 || 
2930: 24 61 72 67 63 20 3e 20 35 7d 20 74 68 65 6e 20  $argc > 5} then 
2940: 7b 66 61 69 6c 7d 0a 0a 73 65 74 20 62 69 6e 61  {fail}..set bina
2950: 72 79 44 69 72 65 63 74 6f 72 79 20 5b 6c 69 6e  ryDirectory [lin
2960: 64 65 78 20 24 61 72 67 76 20 30 5d 0a 0a 69 66  dex $argv 0]..if
2970: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
2980: 20 24 62 69 6e 61 72 79 44 69 72 65 63 74 6f 72   $binaryDirector
2990: 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0a  y] == 0} then {.
29a0: 20 20 66 61 69 6c 20 22 69 6e 76 61 6c 69 64 20    fail "invalid 
29b0: 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79  binary directory
29c0: 22 0a 7d 0a 0a 69 66 20 7b 21 5b 66 69 6c 65 20  ".}..if {![file 
29d0: 65 78 69 73 74 73 20 24 62 69 6e 61 72 79 44 69  exists $binaryDi
29e0: 72 65 63 74 6f 72 79 5d 20 7c 7c 20 5c 0a 20 20  rectory] || \.  
29f0: 20 20 21 5b 66 69 6c 65 20 69 73 64 69 72 65 63    ![file isdirec
2a00: 74 6f 72 79 20 24 62 69 6e 61 72 79 44 69 72 65  tory $binaryDire
2a10: 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0a 20  ctory]} then {. 
2a20: 20 66 61 69 6c 20 22 62 69 6e 61 72 79 20 64 69   fail "binary di
2a30: 72 65 63 74 6f 72 79 20 64 6f 65 73 20 6e 6f 74  rectory does not
2a40: 20 65 78 69 73 74 22 0a 7d 0a 0a 69 66 20 7b 24   exist".}..if {$
2a50: 61 72 67 63 20 3e 3d 20 32 7d 20 74 68 65 6e 20  argc >= 2} then 
2a60: 7b 0a 20 20 73 65 74 20 73 6f 75 72 63 65 44 69  {.  set sourceDi
2a70: 72 65 63 74 6f 72 79 20 5b 6c 69 6e 64 65 78 20  rectory [lindex 
2a80: 24 61 72 67 76 20 31 5d 0a 7d 20 65 6c 73 65 20  $argv 1].} else 
2a90: 7b 0a 20 20 23 0a 20 20 23 20 4e 4f 54 45 3a 20  {.  #.  # NOTE: 
2aa0: 41 73 73 75 6d 65 20 74 68 61 74 20 74 68 65 20  Assume that the 
2ab0: 73 6f 75 72 63 65 20 64 69 72 65 63 74 6f 72 79  source directory
2ac0: 20 69 73 20 74 68 65 20 70 61 72 65 6e 74 20 64   is the parent d
2ad0: 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20  irectory of the 
2ae0: 6f 6e 65 0a 20 20 23 20 20 20 20 20 20 20 74 68  one.  #       th
2af0: 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73  at contains this
2b00: 20 73 63 72 69 70 74 20 66 69 6c 65 2e 0a 20 20   script file..  
2b10: 23 0a 20 20 73 65 74 20 73 6f 75 72 63 65 44 69  #.  set sourceDi
2b20: 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69  rectory [file di
2b30: 72 6e 61 6d 65 20 24 70 61 74 68 5d 0a 7d 0a 0a  rname $path].}..
2b40: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
2b50: 74 68 20 24 73 6f 75 72 63 65 44 69 72 65 63 74  th $sourceDirect
2b60: 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ory] == 0} then 
2b70: 7b 0a 20 20 66 61 69 6c 20 22 69 6e 76 61 6c 69  {.  fail "invali
2b80: 64 20 73 6f 75 72 63 65 20 64 69 72 65 63 74 6f  d source directo
2b90: 72 79 22 0a 7d 0a 0a 69 66 20 7b 21 5b 66 69 6c  ry".}..if {![fil
2ba0: 65 20 65 78 69 73 74 73 20 24 73 6f 75 72 63 65  e exists $source
2bb0: 44 69 72 65 63 74 6f 72 79 5d 20 7c 7c 20 5c 0a  Directory] || \.
2bc0: 20 20 20 20 21 5b 66 69 6c 65 20 69 73 64 69 72      ![file isdir
2bd0: 65 63 74 6f 72 79 20 24 73 6f 75 72 63 65 44 69  ectory $sourceDi
2be0: 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b  rectory]} then {
2bf0: 0a 20 20 66 61 69 6c 20 22 73 6f 75 72 63 65 20  .  fail "source 
2c00: 64 69 72 65 63 74 6f 72 79 20 64 6f 65 73 20 6e  directory does n
2c10: 6f 74 20 65 78 69 73 74 22 0a 7d 0a 0a 69 66 20  ot exist".}..if 
2c20: 7b 24 61 72 67 63 20 3e 3d 20 33 7d 20 74 68 65  {$argc >= 3} the
2c30: 6e 20 7b 0a 20 20 73 65 74 20 70 61 63 6b 61 67  n {.  set packag
2c40: 65 46 6c 61 76 6f 72 20 5b 6c 69 6e 64 65 78 20  eFlavor [lindex 
2c50: 24 61 72 67 76 20 32 5d 0a 7d 20 65 6c 73 65 20  $argv 2].} else 
2c60: 7b 0a 20 20 23 0a 20 20 23 20 4e 4f 54 45 3a 20  {.  #.  # NOTE: 
2c70: 41 73 73 75 6d 65 20 74 68 65 20 70 61 63 6b 61  Assume the packa
2c80: 67 65 20 66 6c 61 76 6f 72 20 69 73 20 57 69 6e  ge flavor is Win
2c90: 52 54 2e 0a 20 20 23 0a 20 20 73 65 74 20 70 61  RT..  #.  set pa
2ca0: 63 6b 61 67 65 46 6c 61 76 6f 72 20 57 69 6e 52  ckageFlavor WinR
2cb0: 54 0a 7d 0a 0a 69 66 20 7b 5b 73 74 72 69 6e 67  T.}..if {[string
2cc0: 20 6c 65 6e 67 74 68 20 24 70 61 63 6b 61 67 65   length $package
2cd0: 46 6c 61 76 6f 72 5d 20 3d 3d 20 30 7d 20 74 68  Flavor] == 0} th
2ce0: 65 6e 20 7b 0a 20 20 66 61 69 6c 20 22 69 6e 76  en {.  fail "inv
2cf0: 61 6c 69 64 20 70 61 63 6b 61 67 65 20 66 6c 61  alid package fla
2d00: 76 6f 72 22 0a 7d 0a 0a 69 66 20 7b 24 61 72 67  vor".}..if {$arg
2d10: 63 20 3e 3d 20 34 7d 20 74 68 65 6e 20 7b 0a 20  c >= 4} then {. 
2d20: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 4e 61 6d   set platformNam
2d30: 65 73 20 5b 6c 69 73 74 5d 0a 0a 20 20 66 6f 72  es [list]..  for
2d40: 65 61 63 68 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  each platformNam
2d50: 65 20 5b 73 70 6c 69 74 20 5b 6c 69 6e 64 65 78  e [split [lindex
2d60: 20 24 61 72 67 76 20 33 5d 20 22 2c 20 22 5d 20   $argv 3] ", "] 
2d70: 7b 0a 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f  {.    set platfo
2d80: 72 6d 4e 61 6d 65 20 5b 73 74 72 69 6e 67 20 74  rmName [string t
2d90: 72 69 6d 20 24 70 6c 61 74 66 6f 72 6d 4e 61 6d  rim $platformNam
2da0: 65 5d 0a 0a 20 20 20 20 69 66 20 7b 5b 73 74 72  e]..    if {[str
2db0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74  ing length $plat
2dc0: 66 6f 72 6d 4e 61 6d 65 5d 20 3e 20 30 7d 20 74  formName] > 0} t
2dd0: 68 65 6e 20 7b 0a 20 20 20 20 20 20 6c 61 70 70  hen {.      lapp
2de0: 65 6e 64 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  end platformName
2df0: 73 20 24 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 0a  s $platformName.
2e00: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 69 66 20      }.  }.}..if 
2e10: 7b 24 61 72 67 63 20 3e 3d 20 35 7d 20 74 68 65  {$argc >= 5} the
2e20: 6e 20 7b 0a 20 20 73 65 74 20 76 73 56 65 72 73  n {.  set vsVers
2e30: 69 6f 6e 20 5b 6c 69 6e 64 65 78 20 24 61 72 67  ion [lindex $arg
2e40: 76 20 34 5d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20  v 4].} else {.  
2e50: 73 65 74 20 76 73 56 65 72 73 69 6f 6e 20 32 30  set vsVersion 20
2e60: 31 32 0a 7d 0a 0a 69 66 20 7b 5b 73 74 72 69 6e  12.}..if {[strin
2e70: 67 20 6c 65 6e 67 74 68 20 24 76 73 56 65 72 73  g length $vsVers
2e80: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ion] == 0} then 
2e90: 7b 0a 20 20 66 61 69 6c 20 22 69 6e 76 61 6c 69  {.  fail "invali
2ea0: 64 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  d Visual Studio 
2eb0: 76 65 72 73 69 6f 6e 22 0a 7d 0a 0a 69 66 20 7b  version".}..if {
2ec0: 21 5b 73 74 72 69 6e 67 20 65 71 75 61 6c 20 24  ![string equal $
2ed0: 76 73 56 65 72 73 69 6f 6e 20 32 30 31 32 5d 20  vsVersion 2012] 
2ee0: 26 26 20 21 5b 73 74 72 69 6e 67 20 65 71 75 61  && ![string equa
2ef0: 6c 20 24 76 73 56 65 72 73 69 6f 6e 20 32 30 31  l $vsVersion 201
2f00: 33 5d 20 26 26 20 5c 0a 20 20 20 20 21 5b 73 74  3] && \.    ![st
2f10: 72 69 6e 67 20 65 71 75 61 6c 20 24 76 73 56 65  ring equal $vsVe
2f20: 72 73 69 6f 6e 20 32 30 31 35 5d 7d 20 74 68 65  rsion 2015]} the
2f30: 6e 20 7b 0a 20 20 66 61 69 6c 20 5b 61 70 70 65  n {.  fail [appe
2f40: 6e 64 41 72 67 73 20 5c 0a 20 20 20 20 20 20 22  ndArgs \.      "
2f50: 75 6e 73 75 70 70 6f 72 74 65 64 20 56 69 73 75  unsupported Visu
2f60: 61 6c 20 53 74 75 64 69 6f 20 76 65 72 73 69 6f  al Studio versio
2f70: 6e 2c 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f  n, must be one o
2f80: 66 3a 20 22 20 5c 0a 20 20 20 20 20 20 5b 6c 69  f: " \.      [li
2f90: 73 74 20 32 30 31 32 20 32 30 31 33 20 32 30 31  st 2012 2013 201
2fa0: 35 5d 5d 0a 7d 0a 0a 73 65 74 20 73 68 6f 72 74  5]].}..set short
2fb0: 4e 61 6d 65 73 28 57 69 6e 52 54 2c 32 30 31 32  Names(WinRT,2012
2fc0: 29 20 53 51 4c 69 74 65 2e 57 69 6e 52 54 0a 73  ) SQLite.WinRT.s
2fd0: 65 74 20 73 68 6f 72 74 4e 61 6d 65 73 28 57 69  et shortNames(Wi
2fe0: 6e 52 54 2c 32 30 31 33 29 20 53 51 4c 69 74 65  nRT,2013) SQLite
2ff0: 2e 57 69 6e 52 54 2e 32 30 31 33 0a 73 65 74 20  .WinRT.2013.set 
3000: 73 68 6f 72 74 4e 61 6d 65 73 28 57 69 6e 52 54  shortNames(WinRT
3010: 38 31 2c 32 30 31 33 29 20 53 51 4c 69 74 65 2e  81,2013) SQLite.
3020: 57 69 6e 52 54 38 31 0a 73 65 74 20 73 68 6f 72  WinRT81.set shor
3030: 74 4e 61 6d 65 73 28 57 50 38 30 2c 32 30 31 32  tNames(WP80,2012
3040: 29 20 53 51 4c 69 74 65 2e 57 50 38 30 0a 73 65  ) SQLite.WP80.se
3050: 74 20 73 68 6f 72 74 4e 61 6d 65 73 28 57 50 38  t shortNames(WP8
3060: 30 2c 32 30 31 33 29 20 53 51 4c 69 74 65 2e 57  0,2013) SQLite.W
3070: 50 38 30 2e 32 30 31 33 0a 73 65 74 20 73 68 6f  P80.2013.set sho
3080: 72 74 4e 61 6d 65 73 28 57 50 38 31 2c 32 30 31  rtNames(WP81,201
3090: 33 29 20 53 51 4c 69 74 65 2e 57 50 38 31 0a 73  3) SQLite.WP81.s
30a0: 65 74 20 73 68 6f 72 74 4e 61 6d 65 73 28 57 69  et shortNames(Wi
30b0: 6e 33 32 2c 32 30 31 32 29 20 53 51 4c 69 74 65  n32,2012) SQLite
30c0: 2e 57 69 6e 33 32 0a 73 65 74 20 73 68 6f 72 74  .Win32.set short
30d0: 4e 61 6d 65 73 28 57 69 6e 33 32 2c 32 30 31 33  Names(Win32,2013
30e0: 29 20 53 51 4c 69 74 65 2e 57 69 6e 33 32 2e 32  ) SQLite.Win32.2
30f0: 30 31 33 0a 73 65 74 20 73 68 6f 72 74 4e 61 6d  013.set shortNam
3100: 65 73 28 55 57 50 2c 32 30 31 35 29 20 53 51 4c  es(UWP,2015) SQL
3110: 69 74 65 2e 55 57 50 2e 32 30 31 35 0a 0a 73 65  ite.UWP.2015..se
3120: 74 20 64 69 73 70 6c 61 79 4e 61 6d 65 73 28 57  t displayNames(W
3130: 69 6e 52 54 2c 32 30 31 32 29 20 22 53 51 4c 69  inRT,2012) "SQLi
3140: 74 65 20 66 6f 72 20 57 69 6e 64 6f 77 73 20 52  te for Windows R
3150: 75 6e 74 69 6d 65 22 0a 73 65 74 20 64 69 73 70  untime".set disp
3160: 6c 61 79 4e 61 6d 65 73 28 57 69 6e 52 54 2c 32  layNames(WinRT,2
3170: 30 31 33 29 20 22 53 51 4c 69 74 65 20 66 6f 72  013) "SQLite for
3180: 20 57 69 6e 64 6f 77 73 20 52 75 6e 74 69 6d 65   Windows Runtime
3190: 22 0a 73 65 74 20 64 69 73 70 6c 61 79 4e 61 6d  ".set displayNam
31a0: 65 73 28 57 69 6e 52 54 38 31 2c 32 30 31 33 29  es(WinRT81,2013)
31b0: 20 22 53 51 4c 69 74 65 20 66 6f 72 20 57 69 6e   "SQLite for Win
31c0: 64 6f 77 73 20 52 75 6e 74 69 6d 65 20 28 57 69  dows Runtime (Wi
31d0: 6e 64 6f 77 73 20 38 2e 31 29 22 0a 73 65 74 20  ndows 8.1)".set 
31e0: 64 69 73 70 6c 61 79 4e 61 6d 65 73 28 57 50 38  displayNames(WP8
31f0: 30 2c 32 30 31 32 29 20 22 53 51 4c 69 74 65 20  0,2012) "SQLite 
3200: 66 6f 72 20 57 69 6e 64 6f 77 73 20 50 68 6f 6e  for Windows Phon
3210: 65 22 0a 73 65 74 20 64 69 73 70 6c 61 79 4e 61  e".set displayNa
3220: 6d 65 73 28 57 50 38 30 2c 32 30 31 33 29 20 22  mes(WP80,2013) "
3230: 53 51 4c 69 74 65 20 66 6f 72 20 57 69 6e 64 6f  SQLite for Windo
3240: 77 73 20 50 68 6f 6e 65 22 0a 73 65 74 20 64 69  ws Phone".set di
3250: 73 70 6c 61 79 4e 61 6d 65 73 28 57 50 38 31 2c  splayNames(WP81,
3260: 32 30 31 33 29 20 22 53 51 4c 69 74 65 20 66 6f  2013) "SQLite fo
3270: 72 20 57 69 6e 64 6f 77 73 20 50 68 6f 6e 65 20  r Windows Phone 
3280: 38 2e 31 22 0a 73 65 74 20 64 69 73 70 6c 61 79  8.1".set display
3290: 4e 61 6d 65 73 28 57 69 6e 33 32 2c 32 30 31 32  Names(Win32,2012
32a0: 29 20 22 53 51 4c 69 74 65 20 66 6f 72 20 57 69  ) "SQLite for Wi
32b0: 6e 64 6f 77 73 22 0a 73 65 74 20 64 69 73 70 6c  ndows".set displ
32c0: 61 79 4e 61 6d 65 73 28 57 69 6e 33 32 2c 32 30  ayNames(Win32,20
32d0: 31 33 29 20 22 53 51 4c 69 74 65 20 66 6f 72 20  13) "SQLite for 
32e0: 57 69 6e 64 6f 77 73 22 0a 73 65 74 20 64 69 73  Windows".set dis
32f0: 70 6c 61 79 4e 61 6d 65 73 28 55 57 50 2c 32 30  playNames(UWP,20
3300: 31 35 29 20 22 53 51 4c 69 74 65 20 66 6f 72 20  15) "SQLite for 
3310: 55 6e 69 76 65 72 73 61 6c 20 57 69 6e 64 6f 77  Universal Window
3320: 73 20 50 6c 61 74 66 6f 72 6d 22 0a 0a 69 66 20  s Platform"..if 
3330: 7b 5b 73 74 72 69 6e 67 20 65 71 75 61 6c 20 24  {[string equal $
3340: 70 61 63 6b 61 67 65 46 6c 61 76 6f 72 20 57 69  packageFlavor Wi
3350: 6e 52 54 5d 7d 20 74 68 65 6e 20 7b 0a 20 20 73  nRT]} then {.  s
3360: 65 74 20 73 68 6f 72 74 4e 61 6d 65 20 24 73 68  et shortName $sh
3370: 6f 72 74 4e 61 6d 65 73 28 24 70 61 63 6b 61 67  ortNames($packag
3380: 65 46 6c 61 76 6f 72 2c 24 76 73 56 65 72 73 69  eFlavor,$vsVersi
3390: 6f 6e 29 0a 20 20 73 65 74 20 64 69 73 70 6c 61  on).  set displa
33a0: 79 4e 61 6d 65 20 24 64 69 73 70 6c 61 79 4e 61  yName $displayNa
33b0: 6d 65 73 28 24 70 61 63 6b 61 67 65 46 6c 61 76  mes($packageFlav
33c0: 6f 72 2c 24 76 73 56 65 72 73 69 6f 6e 29 0a 20  or,$vsVersion). 
33d0: 20 73 65 74 20 74 61 72 67 65 74 50 6c 61 74 66   set targetPlatf
33e0: 6f 72 6d 49 64 65 6e 74 69 66 69 65 72 20 57 69  ormIdentifier Wi
33f0: 6e 64 6f 77 73 0a 20 20 73 65 74 20 74 61 72 67  ndows.  set targ
3400: 65 74 50 6c 61 74 66 6f 72 6d 56 65 72 73 69 6f  etPlatformVersio
3410: 6e 20 76 38 2e 30 0a 20 20 73 65 74 20 6d 69 6e  n v8.0.  set min
3420: 56 73 56 65 72 73 69 6f 6e 20 5b 67 65 74 4d 69  VsVersion [getMi
3430: 6e 56 73 56 65 72 73 69 6f 6e 58 6d 6c 43 68 75  nVsVersionXmlChu
3440: 6e 6b 20 24 76 73 56 65 72 73 69 6f 6e 5d 0a 20  nk $vsVersion]. 
3450: 20 73 65 74 20 6d 61 78 50 6c 61 74 66 6f 72 6d   set maxPlatform
3460: 56 65 72 73 69 6f 6e 20 5c 0a 20 20 20 20 20 20  Version \.      
3470: 5b 67 65 74 4d 61 78 50 6c 61 74 66 6f 72 6d 56  [getMaxPlatformV
3480: 65 72 73 69 6f 6e 58 6d 6c 43 68 75 6e 6b 20 24  ersionXmlChunk $
3490: 70 61 63 6b 61 67 65 46 6c 61 76 6f 72 20 24 76  packageFlavor $v
34a0: 73 56 65 72 73 69 6f 6e 5d 0a 20 20 73 65 74 20  sVersion].  set 
34b0: 65 78 74 72 61 53 64 6b 50 61 74 68 20 22 22 0a  extraSdkPath "".
34c0: 20 20 73 65 74 20 65 78 74 72 61 46 69 6c 65 4c    set extraFileL
34d0: 69 73 74 41 74 74 72 69 62 75 74 65 73 20 5c 0a  istAttributes \.
34e0: 20 20 20 20 20 20 5b 67 65 74 45 78 74 72 61 46        [getExtraF
34f0: 69 6c 65 4c 69 73 74 58 6d 6c 43 68 75 6e 6b 20  ileListXmlChunk 
3500: 24 70 61 63 6b 61 67 65 46 6c 61 76 6f 72 20 24  $packageFlavor $
3510: 76 73 56 65 72 73 69 6f 6e 5d 0a 7d 20 65 6c 73  vsVersion].} els
3520: 65 69 66 20 7b 5b 73 74 72 69 6e 67 20 65 71 75  eif {[string equ
3530: 61 6c 20 24 70 61 63 6b 61 67 65 46 6c 61 76 6f  al $packageFlavo
3540: 72 20 57 69 6e 52 54 38 31 5d 7d 20 74 68 65 6e  r WinRT81]} then
3550: 20 7b 0a 20 20 69 66 20 7b 24 76 73 56 65 72 73   {.  if {$vsVers
3560: 69 6f 6e 20 6e 65 20 22 32 30 31 33 22 7d 20 74  ion ne "2013"} t
3570: 68 65 6e 20 7b 0a 20 20 20 20 66 61 69 6c 20 5b  hen {.    fail [
3580: 61 70 70 65 6e 64 41 72 67 73 20 5c 0a 20 20 20  appendArgs \.   
3590: 20 20 20 20 20 22 75 6e 73 75 70 70 6f 72 74 65       "unsupporte
35a0: 64 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 2c 20 70  d combination, p
35b0: 61 63 6b 61 67 65 20 66 6c 61 76 6f 72 20 22 20  ackage flavor " 
35c0: 24 70 61 63 6b 61 67 65 46 6c 61 76 6f 72 20 5c  $packageFlavor \
35d0: 0a 20 20 20 20 20 20 20 20 22 20 69 73 20 6f 6e  .        " is on
35e0: 6c 79 20 73 75 70 70 6f 72 74 65 64 20 77 69 74  ly supported wit
35f0: 68 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  h Visual Studio 
3600: 32 30 31 33 22 5d 0a 20 20 7d 0a 20 20 73 65 74  2013"].  }.  set
3610: 20 73 68 6f 72 74 4e 61 6d 65 20 24 73 68 6f 72   shortName $shor
3620: 74 4e 61 6d 65 73 28 24 70 61 63 6b 61 67 65 46  tNames($packageF
3630: 6c 61 76 6f 72 2c 24 76 73 56 65 72 73 69 6f 6e  lavor,$vsVersion
3640: 29 0a 20 20 73 65 74 20 64 69 73 70 6c 61 79 4e  ).  set displayN
3650: 61 6d 65 20 24 64 69 73 70 6c 61 79 4e 61 6d 65  ame $displayName
3660: 73 28 24 70 61 63 6b 61 67 65 46 6c 61 76 6f 72  s($packageFlavor
3670: 2c 24 76 73 56 65 72 73 69 6f 6e 29 0a 20 20 73  ,$vsVersion).  s
3680: 65 74 20 74 61 72 67 65 74 50 6c 61 74 66 6f 72  et targetPlatfor
3690: 6d 49 64 65 6e 74 69 66 69 65 72 20 57 69 6e 64  mIdentifier Wind
36a0: 6f 77 73 0a 20 20 73 65 74 20 74 61 72 67 65 74  ows.  set target
36b0: 50 6c 61 74 66 6f 72 6d 56 65 72 73 69 6f 6e 20  PlatformVersion 
36c0: 76 38 2e 31 0a 20 20 73 65 74 20 6d 69 6e 56 73  v8.1.  set minVs
36d0: 56 65 72 73 69 6f 6e 20 5b 67 65 74 4d 69 6e 56  Version [getMinV
36e0: 73 56 65 72 73 69 6f 6e 58 6d 6c 43 68 75 6e 6b  sVersionXmlChunk
36f0: 20 24 76 73 56 65 72 73 69 6f 6e 5d 0a 20 20 73   $vsVersion].  s
3700: 65 74 20 6d 61 78 50 6c 61 74 66 6f 72 6d 56 65  et maxPlatformVe
3710: 72 73 69 6f 6e 20 5c 0a 20 20 20 20 20 20 5b 67  rsion \.      [g
3720: 65 74 4d 61 78 50 6c 61 74 66 6f 72 6d 56 65 72  etMaxPlatformVer
3730: 73 69 6f 6e 58 6d 6c 43 68 75 6e 6b 20 24 70 61  sionXmlChunk $pa
3740: 63 6b 61 67 65 46 6c 61 76 6f 72 20 24 76 73 56  ckageFlavor $vsV
3750: 65 72 73 69 6f 6e 5d 0a 20 20 73 65 74 20 65 78  ersion].  set ex
3760: 74 72 61 53 64 6b 50 61 74 68 20 22 22 0a 20 20  traSdkPath "".  
3770: 73 65 74 20 65 78 74 72 61 46 69 6c 65 4c 69 73  set extraFileLis
3780: 74 41 74 74 72 69 62 75 74 65 73 20 5c 0a 20 20  tAttributes \.  
3790: 20 20 20 20 5b 67 65 74 45 78 74 72 61 46 69 6c      [getExtraFil
37a0: 65 4c 69 73 74 58 6d 6c 43 68 75 6e 6b 20 24 70  eListXmlChunk $p
37b0: 61 63 6b 61 67 65 46 6c 61 76 6f 72 20 24 76 73  ackageFlavor $vs
37c0: 56 65 72 73 69 6f 6e 5d 0a 7d 20 65 6c 73 65 69  Version].} elsei
37d0: 66 20 7b 5b 73 74 72 69 6e 67 20 65 71 75 61 6c  f {[string equal
37e0: 20 24 70 61 63 6b 61 67 65 46 6c 61 76 6f 72 20   $packageFlavor 
37f0: 57 50 38 30 5d 7d 20 74 68 65 6e 20 7b 0a 20 20  WP80]} then {.  
3800: 73 65 74 20 73 68 6f 72 74 4e 61 6d 65 20 24 73  set shortName $s
3810: 68 6f 72 74 4e 61 6d 65 73 28 24 70 61 63 6b 61  hortNames($packa
3820: 67 65 46 6c 61 76 6f 72 2c 24 76 73 56 65 72 73  geFlavor,$vsVers
3830: 69 6f 6e 29 0a 20 20 73 65 74 20 64 69 73 70 6c  ion).  set displ
3840: 61 79 4e 61 6d 65 20 24 64 69 73 70 6c 61 79 4e  ayName $displayN
3850: 61 6d 65 73 28 24 70 61 63 6b 61 67 65 46 6c 61  ames($packageFla
3860: 76 6f 72 2c 24 76 73 56 65 72 73 69 6f 6e 29 0a  vor,$vsVersion).
3870: 20 20 73 65 74 20 74 61 72 67 65 74 50 6c 61 74    set targetPlat
3880: 66 6f 72 6d 49 64 65 6e 74 69 66 69 65 72 20 22  formIdentifier "
3890: 57 69 6e 64 6f 77 73 20 50 68 6f 6e 65 22 0a 20  Windows Phone". 
38a0: 20 73 65 74 20 74 61 72 67 65 74 50 6c 61 74 66   set targetPlatf
38b0: 6f 72 6d 56 65 72 73 69 6f 6e 20 76 38 2e 30 0a  ormVersion v8.0.
38c0: 20 20 73 65 74 20 6d 69 6e 56 73 56 65 72 73 69    set minVsVersi
38d0: 6f 6e 20 5b 67 65 74 4d 69 6e 56 73 56 65 72 73  on [getMinVsVers
38e0: 69 6f 6e 58 6d 6c 43 68 75 6e 6b 20 24 76 73 56  ionXmlChunk $vsV
38f0: 65 72 73 69 6f 6e 5d 0a 20 20 73 65 74 20 6d 61  ersion].  set ma
3900: 78 50 6c 61 74 66 6f 72 6d 56 65 72 73 69 6f 6e  xPlatformVersion
3910: 20 5c 0a 20 20 20 20 20 20 5b 67 65 74 4d 61 78   \.      [getMax
3920: 50 6c 61 74 66 6f 72 6d 56 65 72 73 69 6f 6e 58  PlatformVersionX
3930: 6d 6c 43 68 75 6e 6b 20 24 70 61 63 6b 61 67 65  mlChunk $package
3940: 46 6c 61 76 6f 72 20 24 76 73 56 65 72 73 69 6f  Flavor $vsVersio
3950: 6e 5d 0a 20 20 73 65 74 20 65 78 74 72 61 53 64  n].  set extraSd
3960: 6b 50 61 74 68 20 22 5c 5c 2e 2e 5c 5c 24 74 61  kPath "\\..\\$ta
3970: 72 67 65 74 50 6c 61 74 66 6f 72 6d 49 64 65 6e  rgetPlatformIden
3980: 74 69 66 69 65 72 22 0a 20 20 73 65 74 20 65 78  tifier".  set ex
3990: 74 72 61 46 69 6c 65 4c 69 73 74 41 74 74 72 69  traFileListAttri
39a0: 62 75 74 65 73 20 5c 0a 20 20 20 20 20 20 5b 67  butes \.      [g
39b0: 65 74 45 78 74 72 61 46 69 6c 65 4c 69 73 74 58  etExtraFileListX
39c0: 6d 6c 43 68 75 6e 6b 20 24 70 61 63 6b 61 67 65  mlChunk $package
39d0: 46 6c 61 76 6f 72 20 24 76 73 56 65 72 73 69 6f  Flavor $vsVersio
39e0: 6e 5d 0a 7d 20 65 6c 73 65 69 66 20 7b 5b 73 74  n].} elseif {[st
39f0: 72 69 6e 67 20 65 71 75 61 6c 20 24 70 61 63 6b  ring equal $pack
3a00: 61 67 65 46 6c 61 76 6f 72 20 57 50 38 31 5d 7d  ageFlavor WP81]}
3a10: 20 74 68 65 6e 20 7b 0a 20 20 69 66 20 7b 24 76   then {.  if {$v
3a20: 73 56 65 72 73 69 6f 6e 20 6e 65 20 22 32 30 31  sVersion ne "201
3a30: 33 22 7d 20 74 68 65 6e 20 7b 0a 20 20 20 20 66  3"} then {.    f
3a40: 61 69 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ail [appendArgs 
3a50: 5c 0a 20 20 20 20 20 20 20 20 22 75 6e 73 75 70  \.        "unsup
3a60: 70 6f 72 74 65 64 20 63 6f 6d 62 69 6e 61 74 69  ported combinati
3a70: 6f 6e 2c 20 70 61 63 6b 61 67 65 20 66 6c 61 76  on, package flav
3a80: 6f 72 20 22 20 24 70 61 63 6b 61 67 65 46 6c 61  or " $packageFla
3a90: 76 6f 72 20 5c 0a 20 20 20 20 20 20 20 20 22 20  vor \.        " 
3aa0: 69 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65  is only supporte
3ab0: 64 20 77 69 74 68 20 56 69 73 75 61 6c 20 53 74  d with Visual St
3ac0: 75 64 69 6f 20 32 30 31 33 22 5d 0a 20 20 7d 0a  udio 2013"].  }.
3ad0: 20 20 73 65 74 20 73 68 6f 72 74 4e 61 6d 65 20    set shortName 
3ae0: 24 73 68 6f 72 74 4e 61 6d 65 73 28 24 70 61 63  $shortNames($pac
3af0: 6b 61 67 65 46 6c 61 76 6f 72 2c 24 76 73 56 65  kageFlavor,$vsVe
3b00: 72 73 69 6f 6e 29 0a 20 20 73 65 74 20 64 69 73  rsion).  set dis
3b10: 70 6c 61 79 4e 61 6d 65 20 24 64 69 73 70 6c 61  playName $displa
3b20: 79 4e 61 6d 65 73 28 24 70 61 63 6b 61 67 65 46  yNames($packageF
3b30: 6c 61 76 6f 72 2c 24 76 73 56 65 72 73 69 6f 6e  lavor,$vsVersion
3b40: 29 0a 20 20 73 65 74 20 74 61 72 67 65 74 50 6c  ).  set targetPl
3b50: 61 74 66 6f 72 6d 49 64 65 6e 74 69 66 69 65 72  atformIdentifier
3b60: 20 57 69 6e 64 6f 77 73 50 68 6f 6e 65 41 70 70   WindowsPhoneApp
3b70: 0a 20 20 73 65 74 20 74 61 72 67 65 74 50 6c 61  .  set targetPla
3b80: 74 66 6f 72 6d 56 65 72 73 69 6f 6e 20 76 38 2e  tformVersion v8.
3b90: 31 0a 20 20 73 65 74 20 6d 69 6e 56 73 56 65 72  1.  set minVsVer
3ba0: 73 69 6f 6e 20 5b 67 65 74 4d 69 6e 56 73 56 65  sion [getMinVsVe
3bb0: 72 73 69 6f 6e 58 6d 6c 43 68 75 6e 6b 20 24 76  rsionXmlChunk $v
3bc0: 73 56 65 72 73 69 6f 6e 5d 0a 20 20 73 65 74 20  sVersion].  set 
3bd0: 6d 61 78 50 6c 61 74 66 6f 72 6d 56 65 72 73 69  maxPlatformVersi
3be0: 6f 6e 20 5c 0a 20 20 20 20 20 20 5b 67 65 74 4d  on \.      [getM
3bf0: 61 78 50 6c 61 74 66 6f 72 6d 56 65 72 73 69 6f  axPlatformVersio
3c00: 6e 58 6d 6c 43 68 75 6e 6b 20 24 70 61 63 6b 61  nXmlChunk $packa
3c10: 67 65 46 6c 61 76 6f 72 20 24 76 73 56 65 72 73  geFlavor $vsVers
3c20: 69 6f 6e 5d 0a 20 20 73 65 74 20 65 78 74 72 61  ion].  set extra
3c30: 53 64 6b 50 61 74 68 20 22 5c 5c 2e 2e 5c 5c 24  SdkPath "\\..\\$
3c40: 74 61 72 67 65 74 50 6c 61 74 66 6f 72 6d 49 64  targetPlatformId
3c50: 65 6e 74 69 66 69 65 72 22 0a 20 20 73 65 74 20  entifier".  set 
3c60: 65 78 74 72 61 46 69 6c 65 4c 69 73 74 41 74 74  extraFileListAtt
3c70: 72 69 62 75 74 65 73 20 5c 0a 20 20 20 20 20 20  ributes \.      
3c80: 5b 67 65 74 45 78 74 72 61 46 69 6c 65 4c 69 73  [getExtraFileLis
3c90: 74 58 6d 6c 43 68 75 6e 6b 20 24 70 61 63 6b 61  tXmlChunk $packa
3ca0: 67 65 46 6c 61 76 6f 72 20 24 76 73 56 65 72 73  geFlavor $vsVers
3cb0: 69 6f 6e 5d 0a 7d 20 65 6c 73 65 69 66 20 7b 5b  ion].} elseif {[
3cc0: 73 74 72 69 6e 67 20 65 71 75 61 6c 20 24 70 61  string equal $pa
3cd0: 63 6b 61 67 65 46 6c 61 76 6f 72 20 55 57 50 5d  ckageFlavor UWP]
3ce0: 7d 20 74 68 65 6e 20 7b 0a 20 20 69 66 20 7b 24  } then {.  if {$
3cf0: 76 73 56 65 72 73 69 6f 6e 20 6e 65 20 22 32 30  vsVersion ne "20
3d00: 31 35 22 7d 20 74 68 65 6e 20 7b 0a 20 20 20 20  15"} then {.    
3d10: 66 61 69 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  fail [appendArgs
3d20: 20 5c 0a 20 20 20 20 20 20 20 20 22 75 6e 73 75   \.        "unsu
3d30: 70 70 6f 72 74 65 64 20 63 6f 6d 62 69 6e 61 74  pported combinat
3d40: 69 6f 6e 2c 20 70 61 63 6b 61 67 65 20 66 6c 61  ion, package fla
3d50: 76 6f 72 20 22 20 24 70 61 63 6b 61 67 65 46 6c  vor " $packageFl
3d60: 61 76 6f 72 20 5c 0a 20 20 20 20 20 20 20 20 22  avor \.        "
3d70: 20 69 73 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74   is only support
3d80: 65 64 20 77 69 74 68 20 56 69 73 75 61 6c 20 53  ed with Visual S
3d90: 74 75 64 69 6f 20 32 30 31 35 22 5d 0a 20 20 7d  tudio 2015"].  }
3da0: 0a 20 20 73 65 74 20 73 68 6f 72 74 4e 61 6d 65  .  set shortName
3db0: 20 24 73 68 6f 72 74 4e 61 6d 65 73 28 24 70 61   $shortNames($pa
3dc0: 63 6b 61 67 65 46 6c 61 76 6f 72 2c 24 76 73 56  ckageFlavor,$vsV
3dd0: 65 72 73 69 6f 6e 29 0a 20 20 73 65 74 20 64 69  ersion).  set di
3de0: 73 70 6c 61 79 4e 61 6d 65 20 24 64 69 73 70 6c  splayName $displ
3df0: 61 79 4e 61 6d 65 73 28 24 70 61 63 6b 61 67 65  ayNames($package
3e00: 46 6c 61 76 6f 72 2c 24 76 73 56 65 72 73 69 6f  Flavor,$vsVersio
3e10: 6e 29 0a 20 20 73 65 74 20 74 61 72 67 65 74 50  n).  set targetP
3e20: 6c 61 74 66 6f 72 6d 49 64 65 6e 74 69 66 69 65  latformIdentifie
3e30: 72 20 55 41 50 3b 20 23 20 4e 4f 54 45 3a 20 4e  r UAP; # NOTE: N
3e40: 6f 74 20 22 55 57 50 22 2e 0a 20 20 73 65 74 20  ot "UWP"..  set 
3e50: 74 61 72 67 65 74 50 6c 61 74 66 6f 72 6d 56 65  targetPlatformVe
3e60: 72 73 69 6f 6e 20 76 30 2e 38 2e 30 2e 30 0a 20  rsion v0.8.0.0. 
3e70: 20 73 65 74 20 6d 69 6e 56 73 56 65 72 73 69 6f   set minVsVersio
3e80: 6e 20 5b 67 65 74 4d 69 6e 56 73 56 65 72 73 69  n [getMinVsVersi
3e90: 6f 6e 58 6d 6c 43 68 75 6e 6b 20 24 76 73 56 65  onXmlChunk $vsVe
3ea0: 72 73 69 6f 6e 5d 0a 20 20 73 65 74 20 6d 61 78  rsion].  set max
3eb0: 50 6c 61 74 66 6f 72 6d 56 65 72 73 69 6f 6e 20  PlatformVersion 
3ec0: 5c 0a 20 20 20 20 20 20 5b 67 65 74 4d 61 78 50  \.      [getMaxP
3ed0: 6c 61 74 66 6f 72 6d 56 65 72 73 69 6f 6e 58 6d  latformVersionXm
3ee0: 6c 43 68 75 6e 6b 20 24 70 61 63 6b 61 67 65 46  lChunk $packageF
3ef0: 6c 61 76 6f 72 20 24 76 73 56 65 72 73 69 6f 6e  lavor $vsVersion
3f00: 5d 0a 20 20 73 65 74 20 65 78 74 72 61 53 64 6b  ].  set extraSdk
3f10: 50 61 74 68 20 22 5c 5c 2e 2e 5c 5c 24 74 61 72  Path "\\..\\$tar
3f20: 67 65 74 50 6c 61 74 66 6f 72 6d 49 64 65 6e 74  getPlatformIdent
3f30: 69 66 69 65 72 22 0a 20 20 73 65 74 20 65 78 74  ifier".  set ext
3f40: 72 61 46 69 6c 65 4c 69 73 74 41 74 74 72 69 62  raFileListAttrib
3f50: 75 74 65 73 20 5c 0a 20 20 20 20 20 20 5b 67 65  utes \.      [ge
3f60: 74 45 78 74 72 61 46 69 6c 65 4c 69 73 74 58 6d  tExtraFileListXm
3f70: 6c 43 68 75 6e 6b 20 24 70 61 63 6b 61 67 65 46  lChunk $packageF
3f80: 6c 61 76 6f 72 20 24 76 73 56 65 72 73 69 6f 6e  lavor $vsVersion
3f90: 5d 0a 7d 20 65 6c 73 65 69 66 20 7b 5b 73 74 72  ].} elseif {[str
3fa0: 69 6e 67 20 65 71 75 61 6c 20 24 70 61 63 6b 61  ing equal $packa
3fb0: 67 65 46 6c 61 76 6f 72 20 57 69 6e 33 32 5d 7d  geFlavor Win32]}
3fc0: 20 74 68 65 6e 20 7b 0a 20 20 73 65 74 20 73 68   then {.  set sh
3fd0: 6f 72 74 4e 61 6d 65 20 24 73 68 6f 72 74 4e 61  ortName $shortNa
3fe0: 6d 65 73 28 24 70 61 63 6b 61 67 65 46 6c 61 76  mes($packageFlav
3ff0: 6f 72 2c 24 76 73 56 65 72 73 69 6f 6e 29 0a 20  or,$vsVersion). 
4000: 20 73 65 74 20 64 69 73 70 6c 61 79 4e 61 6d 65   set displayName
4010: 20 24 64 69 73 70 6c 61 79 4e 61 6d 65 73 28 24   $displayNames($
4020: 70 61 63 6b 61 67 65 46 6c 61 76 6f 72 2c 24 76  packageFlavor,$v
4030: 73 56 65 72 73 69 6f 6e 29 0a 20 20 73 65 74 20  sVersion).  set 
4040: 74 61 72 67 65 74 50 6c 61 74 66 6f 72 6d 49 64  targetPlatformId
4050: 65 6e 74 69 66 69 65 72 20 57 69 6e 64 6f 77 73  entifier Windows
4060: 0a 20 20 73 65 74 20 74 61 72 67 65 74 50 6c 61  .  set targetPla
4070: 74 66 6f 72 6d 56 65 72 73 69 6f 6e 20 76 38 2e  tformVersion v8.
4080: 30 0a 20 20 73 65 74 20 6d 69 6e 56 73 56 65 72  0.  set minVsVer
4090: 73 69 6f 6e 20 5b 67 65 74 4d 69 6e 56 73 56 65  sion [getMinVsVe
40a0: 72 73 69 6f 6e 58 6d 6c 43 68 75 6e 6b 20 24 76  rsionXmlChunk $v
40b0: 73 56 65 72 73 69 6f 6e 5d 0a 20 20 73 65 74 20  sVersion].  set 
40c0: 6d 61 78 50 6c 61 74 66 6f 72 6d 56 65 72 73 69  maxPlatformVersi
40d0: 6f 6e 20 5c 0a 20 20 20 20 20 20 5b 67 65 74 4d  on \.      [getM
40e0: 61 78 50 6c 61 74 66 6f 72 6d 56 65 72 73 69 6f  axPlatformVersio
40f0: 6e 58 6d 6c 43 68 75 6e 6b 20 24 70 61 63 6b 61  nXmlChunk $packa
4100: 67 65 46 6c 61 76 6f 72 20 24 76 73 56 65 72 73  geFlavor $vsVers
4110: 69 6f 6e 5d 0a 20 20 73 65 74 20 65 78 74 72 61  ion].  set extra
4120: 53 64 6b 50 61 74 68 20 22 22 0a 20 20 73 65 74  SdkPath "".  set
4130: 20 65 78 74 72 61 46 69 6c 65 4c 69 73 74 41 74   extraFileListAt
4140: 74 72 69 62 75 74 65 73 20 5c 0a 20 20 20 20 20  tributes \.     
4150: 20 5b 67 65 74 45 78 74 72 61 46 69 6c 65 4c 69   [getExtraFileLi
4160: 73 74 58 6d 6c 43 68 75 6e 6b 20 24 70 61 63 6b  stXmlChunk $pack
4170: 61 67 65 46 6c 61 76 6f 72 20 24 76 73 56 65 72  ageFlavor $vsVer
4180: 73 69 6f 6e 5d 0a 7d 20 65 6c 73 65 20 7b 0a 20  sion].} else {. 
4190: 20 66 61 69 6c 20 5b 61 70 70 65 6e 64 41 72 67   fail [appendArg
41a0: 73 20 5c 0a 20 20 20 20 20 20 22 75 6e 73 75 70  s \.      "unsup
41b0: 70 6f 72 74 65 64 20 70 61 63 6b 61 67 65 20 66  ported package f
41c0: 6c 61 76 6f 72 2c 20 6d 75 73 74 20 62 65 20 6f  lavor, must be o
41d0: 6e 65 20 6f 66 3a 20 22 20 5c 0a 20 20 20 20 20  ne of: " \.     
41e0: 20 5b 6c 69 73 74 20 57 69 6e 52 54 20 57 69 6e   [list WinRT Win
41f0: 52 54 38 31 20 57 50 38 30 20 57 50 38 31 20 55  RT81 WP80 WP81 U
4200: 57 50 20 57 69 6e 33 32 5d 5d 0a 7d 0a 0a 23 23  WP Win32]].}..##
4210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4220: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4250: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23  #############..#
4260: 0a 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74  .# NOTE: Evaluat
4270: 65 20 74 68 65 20 75 73 65 72 2d 73 70 65 63 69  e the user-speci
4280: 66 69 63 20 63 75 73 74 6f 6d 69 7a 61 74 69 6f  fic customizatio
4290: 6e 73 20 66 69 6c 65 2c 20 69 66 20 69 74 20 65  ns file, if it e
42a0: 78 69 73 74 73 2e 0a 23 0a 73 65 74 20 75 73 65  xists..#.set use
42b0: 72 46 69 6c 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  rFile [file join
42c0: 20 24 70 61 74 68 20 5b 61 70 70 65 6e 64 41 72   $path [appendAr
42d0: 67 73 20 5c 0a 20 20 20 20 24 72 6f 6f 74 4e 61  gs \.    $rootNa
42e0: 6d 65 20 2e 20 24 74 63 6c 5f 70 6c 61 74 66 6f  me . $tcl_platfo
42f0: 72 6d 28 75 73 65 72 29 20 2e 74 63 6c 5d 5d 0a  rm(user) .tcl]].
4300: 0a 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74  .if {[file exist
4310: 73 20 24 75 73 65 72 46 69 6c 65 5d 20 26 26 20  s $userFile] && 
4320: 5c 0a 20 20 20 20 5b 66 69 6c 65 20 69 73 66 69  \.    [file isfi
4330: 6c 65 20 24 75 73 65 72 46 69 6c 65 5d 7d 20 74  le $userFile]} t
4340: 68 65 6e 20 7b 0a 20 20 73 6f 75 72 63 65 20 24  hen {.  source $
4350: 75 73 65 72 46 69 6c 65 0a 7d 0a 0a 23 23 23 23  userFile.}..####
4360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4370: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4380: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4390: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
43a0: 23 23 23 23 23 23 23 23 23 23 23 0a 0a 73 65 74  ###########..set
43b0: 20 74 65 6d 70 6c 61 74 65 46 69 6c 65 20 5b 66   templateFile [f
43c0: 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 77  ile join $path w
43d0: 69 6e 20 73 71 6c 69 74 65 2e 76 73 69 78 5d 0a  in sqlite.vsix].
43e0: 0a 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73  .if {![file exis
43f0: 74 73 20 24 74 65 6d 70 6c 61 74 65 46 69 6c 65  ts $templateFile
4400: 5d 20 7c 7c 20 5c 0a 20 20 20 20 21 5b 66 69 6c  ] || \.    ![fil
4410: 65 20 69 73 66 69 6c 65 20 24 74 65 6d 70 6c 61  e isfile $templa
4420: 74 65 46 69 6c 65 5d 7d 20 74 68 65 6e 20 7b 0a  teFile]} then {.
4430: 20 20 66 61 69 6c 20 5b 61 70 70 65 6e 64 41 72    fail [appendAr
4440: 67 73 20 22 74 65 6d 70 6c 61 74 65 20 66 69 6c  gs "template fil
4450: 65 20 5c 22 22 20 24 74 65 6d 70 6c 61 74 65 46  e \"" $templateF
4460: 69 6c 65 20 22 5c 22 20 64 6f 65 73 20 6e 6f 74  ile "\" does not
4470: 20 65 78 69 73 74 22 5d 0a 7d 0a 0a 73 65 74 20   exist"].}..set 
4480: 63 75 72 72 65 6e 74 44 69 72 65 63 74 6f 72 79  currentDirectory
4490: 20 5b 70 77 64 5d 0a 73 65 74 20 6f 75 74 70 75   [pwd].set outpu
44a0: 74 46 69 6c 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  tFile [file join
44b0: 20 24 63 75 72 72 65 6e 74 44 69 72 65 63 74 6f   $currentDirecto
44c0: 72 79 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73  ry [appendArgs s
44d0: 71 6c 69 74 65 2d 20 5c 0a 20 20 20 20 24 70 61  qlite- \.    $pa
44e0: 63 6b 61 67 65 46 6c 61 76 6f 72 20 2d 6f 75 74  ckageFlavor -out
44f0: 70 75 74 2e 76 73 69 78 5d 5d 0a 0a 69 66 20 7b  put.vsix]]..if {
4500: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 6f 75  [file exists $ou
4510: 74 70 75 74 46 69 6c 65 5d 7d 20 74 68 65 6e 20  tputFile]} then 
4520: 7b 0a 20 20 66 61 69 6c 20 5b 61 70 70 65 6e 64  {.  fail [append
4530: 41 72 67 73 20 22 6f 75 74 70 75 74 20 66 69 6c  Args "output fil
4540: 65 20 5c 22 22 20 24 6f 75 74 70 75 74 46 69 6c  e \"" $outputFil
4550: 65 20 22 5c 22 20 61 6c 72 65 61 64 79 20 65 78  e "\" already ex
4560: 69 73 74 73 22 5d 0a 7d 0a 0a 23 23 23 23 23 23  ists"].}..######
4570: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45b0: 23 23 23 23 23 23 23 23 23 0a 0a 23 0a 23 20 4e  #########..#.# N
45c0: 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74  OTE: Make sure t
45d0: 68 61 74 20 61 20 76 61 6c 69 64 20 74 65 6d 70  hat a valid temp
45e0: 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20  orary directory 
45f0: 65 78 69 73 74 73 2e 0a 23 0a 73 65 74 20 74 65  exists..#.set te
4600: 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79  mporaryDirectory
4610: 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 50 61   [getTemporaryPa
4620: 74 68 5d 0a 0a 69 66 20 7b 5b 73 74 72 69 6e 67  th]..if {[string
4630: 20 6c 65 6e 67 74 68 20 24 74 65 6d 70 6f 72 61   length $tempora
4640: 72 79 44 69 72 65 63 74 6f 72 79 5d 20 3d 3d 20  ryDirectory] == 
4650: 30 20 7c 7c 20 5c 0a 20 20 20 20 21 5b 66 69 6c  0 || \.    ![fil
4660: 65 20 65 78 69 73 74 73 20 24 74 65 6d 70 6f 72  e exists $tempor
4670: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 7c 7c  aryDirectory] ||
4680: 20 5c 0a 20 20 20 20 21 5b 66 69 6c 65 20 69 73   \.    ![file is
4690: 64 69 72 65 63 74 6f 72 79 20 24 74 65 6d 70 6f  directory $tempo
46a0: 72 61 72 79 44 69 72 65 63 74 6f 72 79 5d 7d 20  raryDirectory]} 
46b0: 74 68 65 6e 20 7b 0a 20 20 66 61 69 6c 20 22 63  then {.  fail "c
46c0: 61 6e 6e 6f 74 20 6c 6f 63 61 74 65 20 61 20 75  annot locate a u
46d0: 73 61 62 6c 65 20 74 65 6d 70 6f 72 61 72 79 20  sable temporary 
46e0: 64 69 72 65 63 74 6f 72 79 22 0a 7d 0a 0a 23 0a  directory".}..#.
46f0: 23 20 4e 4f 54 45 3a 20 53 65 74 75 70 20 74 68  # NOTE: Setup th
4700: 65 20 73 74 61 67 69 6e 67 20 64 69 72 65 63 74  e staging direct
4710: 6f 72 79 20 74 6f 20 68 61 76 65 20 61 20 75 6e  ory to have a un
4720: 69 71 75 65 20 6e 61 6d 65 20 69 6e 73 69 64 65  ique name inside
4730: 20 6f 66 20 74 68 65 0a 23 20 20 20 20 20 20 20   of the.#       
4740: 63 6f 6e 66 69 67 75 72 65 64 20 74 65 6d 70 6f  configured tempo
4750: 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e 0a  rary directory..
4760: 23 0a 73 65 74 20 73 74 61 67 69 6e 67 44 69 72  #.set stagingDir
4770: 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 6e 6f 72  ectory [file nor
4780: 6d 61 6c 69 7a 65 20 5b 66 69 6c 65 20 6a 6f 69  malize [file joi
4790: 6e 20 24 74 65 6d 70 6f 72 61 72 79 44 69 72 65  n $temporaryDire
47a0: 63 74 6f 72 79 20 5c 0a 20 20 20 20 5b 61 70 70  ctory \.    [app
47b0: 65 6e 64 41 72 67 73 20 24 72 6f 6f 74 4e 61 6d  endArgs $rootNam
47c0: 65 20 2e 20 5b 70 69 64 5d 5d 5d 5d 0a 0a 23 23  e . [pid]]]]..##
47d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
47e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
47f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4810: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23  #############..#
4820: 0a 23 20 4e 4f 54 45 3a 20 43 6f 6e 66 69 67 75  .# NOTE: Configu
4830: 72 65 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20  re the external 
4840: 7a 69 70 70 69 6e 67 20 74 6f 6f 6c 2e 20 20 46  zipping tool.  F
4850: 69 72 73 74 2c 20 73 65 65 20 69 66 20 69 74 20  irst, see if it 
4860: 68 61 73 20 61 6c 72 65 61 64 79 0a 23 20 20 20  has already.#   
4870: 20 20 20 20 62 65 65 6e 20 70 72 65 2d 63 6f 6e      been pre-con
4880: 66 69 67 75 72 65 64 2e 20 20 49 66 20 6e 6f 74  figured.  If not
4890: 2c 20 74 72 79 20 74 6f 20 71 75 65 72 79 20 69  , try to query i
48a0: 74 20 66 72 6f 6d 20 74 68 65 20 65 6e 76 69 72  t from the envir
48b0: 6f 6e 6d 65 6e 74 2e 0a 23 20 20 20 20 20 20 20  onment..#       
48c0: 46 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62 61 63  Finally, fallbac
48d0: 6b 20 6f 6e 20 74 68 65 20 64 65 66 61 75 6c 74  k on the default
48e0: 20 6f 66 20 73 69 6d 70 6c 79 20 22 7a 69 70 22   of simply "zip"
48f0: 2c 20 77 68 69 63 68 20 77 69 6c 6c 20 74 68 65  , which will the
4900: 6e 0a 23 20 20 20 20 20 20 20 62 65 20 61 73 73  n.#       be ass
4910: 75 6d 65 64 20 74 6f 20 65 78 69 73 74 20 73 6f  umed to exist so
4920: 6d 65 77 68 65 72 65 20 61 6c 6f 6e 67 20 74 68  mewhere along th
4930: 65 20 50 41 54 48 2e 0a 23 0a 69 66 20 7b 21 5b  e PATH..#.if {![
4940: 69 6e 66 6f 20 65 78 69 73 74 73 20 7a 69 70 5d  info exists zip]
4950: 7d 20 74 68 65 6e 20 7b 0a 20 20 69 66 20 7b 5b  } then {.  if {[
4960: 69 6e 66 6f 20 65 78 69 73 74 73 20 65 6e 76 28  info exists env(
4970: 5a 69 70 54 6f 6f 6c 29 5d 7d 20 74 68 65 6e 20  ZipTool)]} then 
4980: 7b 0a 20 20 20 20 73 65 74 20 7a 69 70 20 24 65  {.    set zip $e
4990: 6e 76 28 5a 69 70 54 6f 6f 6c 29 0a 20 20 7d 0a  nv(ZipTool).  }.
49a0: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
49b0: 73 74 73 20 7a 69 70 5d 20 7c 7c 20 21 5b 66 69  sts zip] || ![fi
49c0: 6c 65 20 65 78 69 73 74 73 20 24 7a 69 70 5d 7d  le exists $zip]}
49d0: 20 74 68 65 6e 20 7b 0a 20 20 20 20 73 65 74 20   then {.    set 
49e0: 7a 69 70 20 7a 69 70 0a 20 20 7d 0a 7d 0a 0a 23  zip zip.  }.}..#
49f0: 0a 23 20 4e 4f 54 45 3a 20 43 6f 6e 66 69 67 75  .# NOTE: Configu
4a00: 72 65 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20  re the external 
4a10: 75 6e 7a 69 70 70 69 6e 67 20 74 6f 6f 6c 2e 20  unzipping tool. 
4a20: 20 46 69 72 73 74 2c 20 73 65 65 20 69 66 20 69   First, see if i
4a30: 74 20 68 61 73 20 61 6c 72 65 61 64 79 0a 23 20  t has already.# 
4a40: 20 20 20 20 20 20 62 65 65 6e 20 70 72 65 2d 63        been pre-c
4a50: 6f 6e 66 69 67 75 72 65 64 2e 20 20 49 66 20 6e  onfigured.  If n
4a60: 6f 74 2c 20 74 72 79 20 74 6f 20 71 75 65 72 79  ot, try to query
4a70: 20 69 74 20 66 72 6f 6d 20 74 68 65 20 65 6e 76   it from the env
4a80: 69 72 6f 6e 6d 65 6e 74 2e 0a 23 20 20 20 20 20  ironment..#     
4a90: 20 20 46 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62    Finally, fallb
4aa0: 61 63 6b 20 6f 6e 20 74 68 65 20 64 65 66 61 75  ack on the defau
4ab0: 6c 74 20 6f 66 20 73 69 6d 70 6c 79 20 22 75 6e  lt of simply "un
4ac0: 7a 69 70 22 2c 20 77 68 69 63 68 20 77 69 6c 6c  zip", which will
4ad0: 20 74 68 65 6e 0a 23 20 20 20 20 20 20 20 62 65   then.#       be
4ae0: 20 61 73 73 75 6d 65 64 20 74 6f 20 65 78 69 73   assumed to exis
4af0: 74 20 73 6f 6d 65 77 68 65 72 65 20 61 6c 6f 6e  t somewhere alon
4b00: 67 20 74 68 65 20 50 41 54 48 2e 0a 23 0a 69 66  g the PATH..#.if
4b10: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists 
4b20: 75 6e 7a 69 70 5d 7d 20 74 68 65 6e 20 7b 0a 20  unzip]} then {. 
4b30: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
4b40: 73 20 65 6e 76 28 55 6e 5a 69 70 54 6f 6f 6c 29  s env(UnZipTool)
4b50: 5d 7d 20 74 68 65 6e 20 7b 0a 20 20 20 20 73 65  ]} then {.    se
4b60: 74 20 75 6e 7a 69 70 20 24 65 6e 76 28 55 6e 5a  t unzip $env(UnZ
4b70: 69 70 54 6f 6f 6c 29 0a 20 20 7d 0a 20 20 69 66  ipTool).  }.  if
4b80: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists 
4b90: 75 6e 7a 69 70 5d 20 7c 7c 20 21 5b 66 69 6c 65  unzip] || ![file
4ba0: 20 65 78 69 73 74 73 20 24 75 6e 7a 69 70 5d 7d   exists $unzip]}
4bb0: 20 74 68 65 6e 20 7b 0a 20 20 20 20 73 65 74 20   then {.    set 
4bc0: 75 6e 7a 69 70 20 75 6e 7a 69 70 0a 20 20 7d 0a  unzip unzip.  }.
4bd0: 7d 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  }..#############
4be0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4bf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4c00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4c10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4c20: 23 23 0a 0a 23 0a 23 20 4e 4f 54 45 3a 20 41 74  ##..#.# NOTE: At
4c30: 74 65 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74  tempt to extract
4c40: 20 74 68 65 20 53 51 4c 69 74 65 20 76 65 72 73   the SQLite vers
4c50: 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 22 73 71  ion from the "sq
4c60: 6c 69 74 65 33 2e 68 22 20 68 65 61 64 65 72 20  lite3.h" header 
4c70: 66 69 6c 65 0a 23 20 20 20 20 20 20 20 69 6e 20  file.#       in 
4c80: 74 68 65 20 73 6f 75 72 63 65 20 64 69 72 65 63  the source direc
4c90: 74 6f 72 79 2e 20 20 54 68 69 73 20 73 63 72 69  tory.  This scri
4ca0: 70 74 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  pt assumes that 
4cb0: 74 68 65 20 68 65 61 64 65 72 20 66 69 6c 65 20  the header file 
4cc0: 68 61 73 0a 23 20 20 20 20 20 20 20 61 6c 72 65  has.#       alre
4cd0: 61 64 79 20 62 65 65 6e 20 67 65 6e 65 72 61 74  ady been generat
4ce0: 65 64 20 62 79 20 74 68 65 20 62 75 69 6c 64 20  ed by the build 
4cf0: 70 72 6f 63 65 73 73 2e 0a 23 0a 73 65 74 20 70  process..#.set p
4d00: 61 74 74 65 72 6e 20 7b 5e 23 64 65 66 69 6e 65  attern {^#define
4d10: 5c 73 2b 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  \s+SQLITE_VERSIO
4d20: 4e 5c 73 2b 22 28 2e 2a 29 22 24 7d 0a 73 65 74  N\s+"(.*)"$}.set
4d30: 20 64 61 74 61 20 5b 72 65 61 64 46 69 6c 65 20   data [readFile 
4d40: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 73 6f 75 72  [file join $sour
4d50: 63 65 44 69 72 65 63 74 6f 72 79 20 73 71 6c 69  ceDirectory sqli
4d60: 74 65 33 2e 68 5d 5d 0a 0a 69 66 20 7b 21 5b 72  te3.h]]..if {![r
4d70: 65 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24  egexp -line -- $
4d80: 70 61 74 74 65 72 6e 20 24 64 61 74 61 20 64 75  pattern $data du
4d90: 6d 6d 79 20 76 65 72 73 69 6f 6e 5d 7d 20 74 68  mmy version]} th
4da0: 65 6e 20 7b 0a 20 20 66 61 69 6c 20 5b 61 70 70  en {.  fail [app
4db0: 65 6e 64 41 72 67 73 20 22 63 61 6e 6e 6f 74 20  endArgs "cannot 
4dc0: 6c 6f 63 61 74 65 20 53 51 4c 49 54 45 5f 56 45  locate SQLITE_VE
4dd0: 52 53 49 4f 4e 20 76 61 6c 75 65 20 69 6e 20 5c  RSION value in \
4de0: 22 22 20 5c 0a 20 20 20 20 20 20 5b 66 69 6c 65  "" \.      [file
4df0: 20 6a 6f 69 6e 20 24 73 6f 75 72 63 65 44 69 72   join $sourceDir
4e00: 65 63 74 6f 72 79 20 73 71 6c 69 74 65 33 2e 68  ectory sqlite3.h
4e10: 5d 20 5c 22 5d 0a 7d 0a 0a 23 23 23 23 23 23 23  ] \"].}..#######
4e20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4e30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4e40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4e50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4e60: 23 23 23 23 23 23 23 23 0a 0a 23 0a 23 20 4e 4f  ########..#.# NO
4e70: 54 45 3a 20 53 65 74 75 70 20 61 6c 6c 20 74 68  TE: Setup all th
4e80: 65 20 6d 61 73 74 65 72 20 66 69 6c 65 20 6c 69  e master file li
4e90: 73 74 20 64 61 74 61 2e 20 20 54 68 69 73 20 69  st data.  This i
4ea0: 6e 63 6c 75 64 65 73 20 74 68 65 20 73 6f 75 72  ncludes the sour
4eb0: 63 65 20 66 69 6c 65 0a 23 20 20 20 20 20 20 20  ce file.#       
4ec0: 6e 61 6d 65 73 2c 20 74 68 65 20 64 65 73 74 69  names, the desti
4ed0: 6e 61 74 69 6f 6e 20 66 69 6c 65 20 6e 61 6d 65  nation file name
4ee0: 73 2c 20 61 6e 64 20 74 68 65 20 66 69 6c 65 20  s, and the file 
4ef0: 70 72 6f 63 65 73 73 69 6e 67 20 66 6c 61 67 73  processing flags
4f00: 2e 20 20 54 68 65 0a 23 20 20 20 20 20 20 20 70  .  The.#       p
4f10: 6f 73 73 69 62 6c 65 20 66 69 6c 65 20 70 72 6f  ossible file pro
4f20: 63 65 73 73 69 6e 67 20 66 6c 61 67 73 20 61 72  cessing flags ar
4f30: 65 3a 0a 23 0a 23 20 20 20 20 20 20 20 22 62 75  e:.#.#       "bu
4f40: 69 6c 64 4e 65 75 74 72 61 6c 22 20 2d 2d 20 54  ildNeutral" -- T
4f50: 68 69 73 20 66 6c 61 67 20 69 6e 64 69 63 61 74  his flag indicat
4f60: 65 73 20 74 68 65 20 66 69 6c 65 20 6c 6f 63 61  es the file loca
4f70: 74 69 6f 6e 20 61 6e 64 20 63 6f 6e 74 65 6e 74  tion and content
4f80: 20 64 6f 0a 23 20 20 20 20 20 20 20 20 20 20 20   do.#           
4f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f                no
4fa0: 74 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 65 20  t depend on the 
4fb0: 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74  build configurat
4fc0: 69 6f 6e 2e 0a 23 0a 23 20 20 20 20 20 20 20 22  ion..#.#       "
4fd0: 70 6c 61 74 66 6f 72 6d 4e 65 75 74 72 61 6c 22  platformNeutral"
4fe0: 20 2d 2d 20 54 68 69 73 20 66 6c 61 67 20 69 6e   -- This flag in
4ff0: 64 69 63 61 74 65 73 20 74 68 65 20 66 69 6c 65  dicates the file
5000: 20 6c 6f 63 61 74 69 6f 6e 20 61 6e 64 20 63 6f   location and co
5010: 6e 74 65 6e 74 0a 23 20 20 20 20 20 20 20 20 20  ntent.#         
5020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5030: 20 20 20 64 6f 20 6e 6f 74 20 64 65 70 65 6e 64     do not depend
5040: 20 6f 6e 20 74 68 65 20 62 75 69 6c 64 20 70 6c   on the build pl
5050: 61 74 66 6f 72 6d 2e 0a 23 0a 23 20 20 20 20 20  atform..#.#     
5060: 20 20 22 73 75 62 73 74 22 20 2d 2d 20 54 68 69    "subst" -- Thi
5070: 73 20 66 6c 61 67 20 69 6e 64 69 63 61 74 65 73  s flag indicates
5080: 20 74 68 61 74 20 74 68 65 20 66 69 6c 65 20 63   that the file c
5090: 6f 6e 74 61 69 6e 73 20 64 79 6e 61 6d 69 63 20  ontains dynamic 
50a0: 74 65 78 74 75 61 6c 0a 23 20 20 20 20 20 20 20  textual.#       
50b0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 65             conte
50c0: 6e 74 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f  nt that needs to
50d0: 20 62 65 20 70 72 6f 63 65 73 73 65 64 20 75 73   be processed us
50e0: 69 6e 67 20 5b 73 75 62 73 74 5d 20 70 72 69 6f  ing [subst] prio
50f0: 72 20 74 6f 0a 23 20 20 20 20 20 20 20 20 20 20  r to.#          
5100: 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 69 6e          packagin
5110: 67 20 74 68 65 20 66 69 6c 65 20 69 6e 74 6f 20  g the file into 
5120: 74 68 65 20 66 69 6e 61 6c 20 56 53 49 58 20 70  the final VSIX p
5130: 61 63 6b 61 67 65 2e 20 20 54 68 65 20 70 72 69  ackage.  The pri
5140: 6d 61 72 79 0a 23 20 20 20 20 20 20 20 20 20 20  mary.#          
5150: 20 20 20 20 20 20 20 20 75 73 65 20 6f 66 20 74          use of t
5160: 68 69 73 20 66 6c 61 67 20 69 73 20 74 6f 20 69  his flag is to i
5170: 6e 73 65 72 74 20 74 68 65 20 6e 61 6d 65 20 6f  nsert the name o
5180: 66 20 74 68 65 20 56 53 49 58 20 70 61 63 6b 61  f the VSIX packa
5190: 67 65 2c 0a 23 20 20 20 20 20 20 20 20 20 20 20  ge,.#           
51a0: 20 20 20 20 20 20 20 73 6f 6d 65 20 70 61 63 6b         some pack
51b0: 61 67 65 20 66 6c 61 76 6f 72 2d 73 70 65 63 69  age flavor-speci
51c0: 66 69 63 20 76 61 6c 75 65 2c 20 6f 72 20 74 68  fic value, or th
51d0: 65 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e  e SQLite version
51e0: 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .#              
51f0: 20 20 20 20 69 6e 74 6f 20 61 20 66 69 6c 65 2e      into a file.
5200: 0a 23 0a 23 20 20 20 20 20 20 20 22 6e 6f 44 65  .#.#       "noDe
5210: 62 75 67 22 20 2d 2d 20 54 68 69 73 20 66 6c 61  bug" -- This fla
5220: 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  g indicates that
5230: 20 74 68 65 20 66 69 6c 65 20 73 68 6f 75 6c 64   the file should
5240: 20 62 65 20 73 6b 69 70 70 65 64 20 77 68 65 6e   be skipped when
5250: 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .#              
5260: 20 20 20 20 20 20 70 72 6f 63 65 73 73 69 6e 67        processing
5270: 20 74 68 65 20 64 65 62 75 67 20 62 75 69 6c 64   the debug build
5280: 2e 0a 23 0a 23 20 20 20 20 20 20 20 22 6e 6f 52  ..#.#       "noR
5290: 65 74 61 69 6c 22 20 2d 2d 20 54 68 69 73 20 66  etail" -- This f
52a0: 6c 61 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  lag indicates th
52b0: 61 74 20 74 68 65 20 66 69 6c 65 20 73 68 6f 75  at the file shou
52c0: 6c 64 20 62 65 20 73 6b 69 70 70 65 64 20 77 68  ld be skipped wh
52d0: 65 6e 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  en.#            
52e0: 20 20 20 20 20 20 20 20 20 70 72 6f 63 65 73 73           process
52f0: 69 6e 67 20 74 68 65 20 72 65 74 61 69 6c 20 62  ing the retail b
5300: 75 69 6c 64 2e 0a 23 0a 23 20 20 20 20 20 20 20  uild..#.#       
5310: 22 6d 6f 76 65 22 20 2d 2d 20 54 68 69 73 20 66  "move" -- This f
5320: 6c 61 67 20 69 6e 64 69 63 61 74 65 73 20 74 68  lag indicates th
5330: 61 74 20 74 68 65 20 66 69 6c 65 20 73 68 6f 75  at the file shou
5340: 6c 64 20 62 65 20 6d 6f 76 65 64 20 66 72 6f 6d  ld be moved from
5350: 20 74 68 65 0a 23 20 20 20 20 20 20 20 20 20 20   the.#          
5360: 20 20 20 20 20 20 20 73 6f 75 72 63 65 20 74 6f         source to
5370: 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e   the destination
5380: 20 69 6e 73 74 65 61 64 20 6f 66 20 62 65 69 6e   instead of bein
5390: 67 20 63 6f 70 69 65 64 2e 0a 23 0a 23 20 20 20  g copied..#.#   
53a0: 20 20 20 20 54 68 69 73 20 66 69 6c 65 20 6d 65      This file me
53b0: 74 61 64 61 74 61 20 6d 61 79 20 62 65 20 6f 76  tadata may be ov
53c0: 65 72 72 69 64 64 65 6e 2c 20 65 69 74 68 65 72  erridden, either
53d0: 20 69 6e 20 77 68 6f 6c 65 20 6f 72 20 69 6e 20   in whole or in 
53e0: 70 61 72 74 2c 20 76 69 61 0a 23 20 20 20 20 20  part, via.#     
53f0: 20 20 74 68 65 20 75 73 65 72 2d 73 70 65 63 69    the user-speci
5400: 66 69 63 20 63 75 73 74 6f 6d 69 7a 61 74 69 6f  fic customizatio
5410: 6e 73 20 66 69 6c 65 2e 0a 23 0a 69 66 20 7b 21  ns file..#.if {!
5420: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 66 69 6c  [info exists fil
5430: 65 4e 61 6d 65 73 28 73 6f 75 72 63 65 29 5d 7d  eNames(source)]}
5440: 20 74 68 65 6e 20 7b 0a 20 20 73 65 74 20 66 69   then {.  set fi
5450: 6c 65 4e 61 6d 65 73 28 73 6f 75 72 63 65 29 20  leNames(source) 
5460: 5b 6c 69 73 74 20 22 22 20 22 22 20 5c 0a 20 20  [list "" "" \.  
5470: 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 73 74    [file join $st
5480: 61 67 69 6e 67 44 69 72 65 63 74 6f 72 79 20 44  agingDirectory D
5490: 65 73 69 67 6e 54 69 6d 65 20 3c 62 75 69 6c 64  esignTime <build
54a0: 3e 20 3c 70 6c 61 74 66 6f 72 6d 3e 20 73 71 6c  > <platform> sql
54b0: 69 74 65 33 2e 70 72 6f 70 73 5d 20 5c 0a 20 20  ite3.props] \.  
54c0: 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 73 6f    [file join $so
54d0: 75 72 63 65 44 69 72 65 63 74 6f 72 79 20 73 71  urceDirectory sq
54e0: 6c 69 74 65 33 2e 68 5d 20 5c 0a 20 20 20 20 5b  lite3.h] \.    [
54f0: 66 69 6c 65 20 6a 6f 69 6e 20 24 62 69 6e 61 72  file join $binar
5500: 79 44 69 72 65 63 74 6f 72 79 20 3c 62 75 69 6c  yDirectory <buil
5510: 64 3e 20 3c 70 6c 61 74 66 6f 72 6d 3e 20 73 71  d> <platform> sq
5520: 6c 69 74 65 33 2e 6c 69 62 5d 20 5c 0a 20 20 20  lite3.lib] \.   
5530: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 62 69 6e   [file join $bin
5540: 61 72 79 44 69 72 65 63 74 6f 72 79 20 3c 62 75  aryDirectory <bu
5550: 69 6c 64 3e 20 3c 70 6c 61 74 66 6f 72 6d 3e 20  ild> <platform> 
5560: 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 0a 0a 20  sqlite3.dll]].. 
5570: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
5580: 74 73 20 6e 6f 28 73 79 6d 62 6f 6c 73 29 5d 7d  ts no(symbols)]}
5590: 20 74 68 65 6e 20 7b 0a 20 20 20 20 6c 61 70 70   then {.    lapp
55a0: 65 6e 64 20 66 69 6c 65 4e 61 6d 65 73 28 73 6f  end fileNames(so
55b0: 75 72 63 65 29 20 5c 0a 20 20 20 20 20 20 20 20  urce) \.        
55c0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 62 69 6e 61  [file join $bina
55d0: 72 79 44 69 72 65 63 74 6f 72 79 20 3c 62 75 69  ryDirectory <bui
55e0: 6c 64 3e 20 3c 70 6c 61 74 66 6f 72 6d 3e 20 73  ld> <platform> s
55f0: 71 6c 69 74 65 33 2e 70 64 62 5d 0a 20 20 7d 0a  qlite3.pdb].  }.
5600: 7d 0a 0a 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78  }..if {![info ex
5610: 69 73 74 73 20 66 69 6c 65 4e 61 6d 65 73 28 64  ists fileNames(d
5620: 65 73 74 69 6e 61 74 69 6f 6e 29 5d 7d 20 74 68  estination)]} th
5630: 65 6e 20 7b 0a 20 20 73 65 74 20 66 69 6c 65 4e  en {.  set fileN
5640: 61 6d 65 73 28 64 65 73 74 69 6e 61 74 69 6f 6e  ames(destination
5650: 29 20 5b 6c 69 73 74 20 5c 0a 20 20 20 20 5b 66  ) [list \.    [f
5660: 69 6c 65 20 6a 6f 69 6e 20 24 73 74 61 67 69 6e  ile join $stagin
5670: 67 44 69 72 65 63 74 6f 72 79 20 65 78 74 65 6e  gDirectory exten
5680: 73 69 6f 6e 2e 76 73 69 78 6d 61 6e 69 66 65 73  sion.vsixmanifes
5690: 74 5d 20 5c 0a 20 20 20 20 5b 66 69 6c 65 20 6a  t] \.    [file j
56a0: 6f 69 6e 20 24 73 74 61 67 69 6e 67 44 69 72 65  oin $stagingDire
56b0: 63 74 6f 72 79 20 53 44 4b 4d 61 6e 69 66 65 73  ctory SDKManifes
56c0: 74 2e 78 6d 6c 5d 20 5c 0a 20 20 20 20 5b 66 69  t.xml] \.    [fi
56d0: 6c 65 20 6a 6f 69 6e 20 24 73 74 61 67 69 6e 67  le join $staging
56e0: 44 69 72 65 63 74 6f 72 79 20 44 65 73 69 67 6e  Directory Design
56f0: 54 69 6d 65 20 3c 62 75 69 6c 64 3e 20 3c 70 6c  Time <build> <pl
5700: 61 74 66 6f 72 6d 3e 20 3c 6e 61 6d 65 3e 2e 70  atform> <name>.p
5710: 72 6f 70 73 5d 20 5c 0a 20 20 20 20 5b 66 69 6c  rops] \.    [fil
5720: 65 20 6a 6f 69 6e 20 24 73 74 61 67 69 6e 67 44  e join $stagingD
5730: 69 72 65 63 74 6f 72 79 20 44 65 73 69 67 6e 54  irectory DesignT
5740: 69 6d 65 20 3c 62 75 69 6c 64 3e 20 3c 70 6c 61  ime <build> <pla
5750: 74 66 6f 72 6d 3e 20 73 71 6c 69 74 65 33 2e 68  tform> sqlite3.h
5760: 5d 20 5c 0a 20 20 20 20 5b 66 69 6c 65 20 6a 6f  ] \.    [file jo
5770: 69 6e 20 24 73 74 61 67 69 6e 67 44 69 72 65 63  in $stagingDirec
5780: 74 6f 72 79 20 44 65 73 69 67 6e 54 69 6d 65 20  tory DesignTime 
5790: 3c 62 75 69 6c 64 3e 20 3c 70 6c 61 74 66 6f 72  <build> <platfor
57a0: 6d 3e 20 73 71 6c 69 74 65 33 2e 6c 69 62 5d 20  m> sqlite3.lib] 
57b0: 5c 0a 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e  \.    [file join
57c0: 20 24 73 74 61 67 69 6e 67 44 69 72 65 63 74 6f   $stagingDirecto
57d0: 72 79 20 52 65 64 69 73 74 20 3c 62 75 69 6c 64  ry Redist <build
57e0: 3e 20 3c 70 6c 61 74 66 6f 72 6d 3e 20 73 71 6c  > <platform> sql
57f0: 69 74 65 33 2e 64 6c 6c 5d 5d 0a 0a 20 20 69 66  ite3.dll]]..  if
5800: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists 
5810: 6e 6f 28 73 79 6d 62 6f 6c 73 29 5d 7d 20 74 68  no(symbols)]} th
5820: 65 6e 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64  en {.    lappend
5830: 20 66 69 6c 65 4e 61 6d 65 73 28 64 65 73 74 69   fileNames(desti
5840: 6e 61 74 69 6f 6e 29 20 5c 0a 20 20 20 20 20 20  nation) \.      
5850: 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 73 74    [file join $st
5860: 61 67 69 6e 67 44 69 72 65 63 74 6f 72 79 20 52  agingDirectory R
5870: 65 64 69 73 74 20 3c 62 75 69 6c 64 3e 20 3c 70  edist <build> <p
5880: 6c 61 74 66 6f 72 6d 3e 20 73 71 6c 69 74 65 33  latform> sqlite3
5890: 2e 70 64 62 5d 0a 20 20 7d 0a 7d 0a 0a 69 66 20  .pdb].  }.}..if 
58a0: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 66  {![info exists f
58b0: 69 6c 65 4e 61 6d 65 73 28 66 6c 61 67 73 29 5d  ileNames(flags)]
58c0: 7d 20 74 68 65 6e 20 7b 0a 20 20 73 65 74 20 66  } then {.  set f
58d0: 69 6c 65 4e 61 6d 65 73 28 66 6c 61 67 73 29 20  ileNames(flags) 
58e0: 5b 6c 69 73 74 20 5c 0a 20 20 20 20 20 20 5b 6c  [list \.      [l
58f0: 69 73 74 20 62 75 69 6c 64 4e 65 75 74 72 61 6c  ist buildNeutral
5900: 20 70 6c 61 74 66 6f 72 6d 4e 65 75 74 72 61 6c   platformNeutral
5910: 20 73 75 62 73 74 5d 20 5c 0a 20 20 20 20 20 20   subst] \.      
5920: 5b 6c 69 73 74 20 62 75 69 6c 64 4e 65 75 74 72  [list buildNeutr
5930: 61 6c 20 70 6c 61 74 66 6f 72 6d 4e 65 75 74 72  al platformNeutr
5940: 61 6c 20 73 75 62 73 74 5d 20 5c 0a 20 20 20 20  al subst] \.    
5950: 20 20 5b 6c 69 73 74 20 62 75 69 6c 64 4e 65 75    [list buildNeu
5960: 74 72 61 6c 20 70 6c 61 74 66 6f 72 6d 4e 65 75  tral platformNeu
5970: 74 72 61 6c 20 73 75 62 73 74 20 6d 6f 76 65 5d  tral subst move]
5980: 20 5c 0a 20 20 20 20 20 20 5b 6c 69 73 74 20 62   \.      [list b
5990: 75 69 6c 64 4e 65 75 74 72 61 6c 20 70 6c 61 74  uildNeutral plat
59a0: 66 6f 72 6d 4e 65 75 74 72 61 6c 5d 20 5c 0a 20  formNeutral] \. 
59b0: 20 20 20 20 20 5b 6c 69 73 74 5d 20 5b 6c 69 73       [list] [lis
59c0: 74 5d 20 5b 6c 69 73 74 20 6e 6f 52 65 74 61 69  t] [list noRetai
59d0: 6c 5d 5d 0a 0a 20 20 69 66 20 7b 21 5b 69 6e 66  l]]..  if {![inf
59e0: 6f 20 65 78 69 73 74 73 20 6e 6f 28 73 79 6d 62  o exists no(symb
59f0: 6f 6c 73 29 5d 7d 20 74 68 65 6e 20 7b 0a 20 20  ols)]} then {.  
5a00: 20 20 6c 61 70 70 65 6e 64 20 66 69 6c 65 4e 61    lappend fileNa
5a10: 6d 65 73 28 66 6c 61 67 73 29 20 5b 6c 69 73 74  mes(flags) [list
5a20: 20 6e 6f 52 65 74 61 69 6c 5d 0a 20 20 7d 0a 7d   noRetail].  }.}
5a30: 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ..##############
5a40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5a50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5a60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5a70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5a80: 23 0a 0a 23 0a 23 20 4e 4f 54 45 3a 20 53 65 74  #..#.# NOTE: Set
5a90: 75 70 20 74 68 65 20 6c 69 73 74 20 6f 66 20 62  up the list of b
5aa0: 75 69 6c 64 73 20 73 75 70 70 6f 72 74 65 64 20  uilds supported 
5ab0: 62 79 20 74 68 69 73 20 73 63 72 69 70 74 2e 20  by this script. 
5ac0: 20 54 68 65 73 65 20 6d 61 79 20 62 65 0a 23 20   These may be.# 
5ad0: 20 20 20 20 20 20 6f 76 65 72 72 69 64 64 65 6e        overridden
5ae0: 20 76 69 61 20 74 68 65 20 75 73 65 72 2d 73 70   via the user-sp
5af0: 65 63 69 66 69 63 20 63 75 73 74 6f 6d 69 7a 61  ecific customiza
5b00: 74 69 6f 6e 73 20 66 69 6c 65 2e 0a 23 0a 69 66  tions file..#.if
5b10: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists 
5b20: 62 75 69 6c 64 4e 61 6d 65 73 5d 7d 20 74 68 65  buildNames]} the
5b30: 6e 20 7b 0a 20 20 73 65 74 20 62 75 69 6c 64 4e  n {.  set buildN
5b40: 61 6d 65 73 20 5b 6c 69 73 74 20 44 65 62 75 67  ames [list Debug
5b50: 20 52 65 74 61 69 6c 5d 0a 7d 0a 0a 23 23 23 23   Retail].}..####
5b60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5b90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ba0: 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 0a 23  ###########..#.#
5bb0: 20 4e 4f 54 45 3a 20 53 65 74 75 70 20 74 68 65   NOTE: Setup the
5bc0: 20 6c 69 73 74 20 6f 66 20 70 6c 61 74 66 6f 72   list of platfor
5bd0: 6d 73 20 73 75 70 70 6f 72 74 65 64 20 62 79 20  ms supported by 
5be0: 74 68 69 73 20 73 63 72 69 70 74 2e 20 20 54 68  this script.  Th
5bf0: 65 73 65 20 6d 61 79 20 62 65 0a 23 20 20 20 20  ese may be.#    
5c00: 20 20 20 6f 76 65 72 72 69 64 64 65 6e 20 76 69     overridden vi
5c10: 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  a the command li
5c20: 6e 65 20 6f 72 20 74 68 65 20 75 73 65 72 2d 73  ne or the user-s
5c30: 70 65 63 69 66 69 63 20 63 75 73 74 6f 6d 69 7a  pecific customiz
5c40: 61 74 69 6f 6e 73 0a 23 20 20 20 20 20 20 20 66  ations.#       f
5c50: 69 6c 65 2e 0a 23 0a 69 66 20 7b 21 5b 69 6e 66  ile..#.if {![inf
5c60: 6f 20 65 78 69 73 74 73 20 70 6c 61 74 66 6f 72  o exists platfor
5c70: 6d 4e 61 6d 65 73 5d 20 7c 7c 20 5b 6c 6c 65 6e  mNames] || [llen
5c80: 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 4e 61 6d  gth $platformNam
5c90: 65 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  es] == 0} then {
5ca0: 0a 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 4e  .  set platformN
5cb0: 61 6d 65 73 20 5b 6c 69 73 74 20 78 38 36 20 78  ames [list x86 x
5cc0: 36 34 20 41 52 4d 5d 0a 7d 0a 0a 23 23 23 23 23  64 ARM].}..#####
5cd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ce0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5d10: 23 23 23 23 23 23 23 23 23 23 0a 0a 23 0a 23 20  ##########..#.# 
5d20: 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20  NOTE: Make sure 
5d30: 74 68 65 20 73 74 61 67 69 6e 67 20 64 69 72 65  the staging dire
5d40: 63 74 6f 72 79 20 65 78 69 73 74 73 2c 20 63 72  ctory exists, cr
5d50: 65 61 74 69 6e 67 20 69 74 20 69 66 20 6e 65 63  eating it if nec
5d60: 65 73 73 61 72 79 2e 0a 23 0a 66 69 6c 65 20 6d  essary..#.file m
5d70: 6b 64 69 72 20 24 73 74 61 67 69 6e 67 44 69 72  kdir $stagingDir
5d80: 65 63 74 6f 72 79 0a 0a 23 0a 23 20 4e 4f 54 45  ectory..#.# NOTE
5d90: 3a 20 42 75 69 6c 64 20 74 68 65 20 54 63 6c 20  : Build the Tcl 
5da0: 63 6f 6d 6d 61 6e 64 20 75 73 65 64 20 74 6f 20  command used to 
5db0: 65 78 74 72 61 63 74 20 74 68 65 20 74 65 6d 70  extract the temp
5dc0: 6c 61 74 65 20 56 53 49 58 20 70 61 63 6b 61 67  late VSIX packag
5dd0: 65 20 74 6f 0a 23 20 20 20 20 20 20 20 74 68 65  e to.#       the
5de0: 20 73 74 61 67 69 6e 67 20 64 69 72 65 63 74 6f   staging directo
5df0: 72 79 2e 0a 23 0a 73 65 74 20 65 78 74 72 61 63  ry..#.set extrac
5e00: 74 43 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 65  tCommand [list e
5e10: 78 65 63 20 2d 2d 20 24 75 6e 7a 69 70 20 24 74  xec -- $unzip $t
5e20: 65 6d 70 6c 61 74 65 46 69 6c 65 20 2d 64 20 24  emplateFile -d $
5e30: 73 74 61 67 69 6e 67 44 69 72 65 63 74 6f 72 79  stagingDirectory
5e40: 5d 0a 0a 23 0a 23 20 4e 4f 54 45 3a 20 45 78 74  ]..#.# NOTE: Ext
5e50: 72 61 63 74 20 74 68 65 20 74 65 6d 70 6c 61 74  ract the templat
5e60: 65 20 56 53 49 58 20 70 61 63 6b 61 67 65 20 74  e VSIX package t
5e70: 6f 20 74 68 65 20 73 74 61 67 69 6e 67 20 64 69  o the staging di
5e80: 72 65 63 74 6f 72 79 2e 0a 23 0a 65 76 61 6c 20  rectory..#.eval 
5e90: 24 65 78 74 72 61 63 74 43 6f 6d 6d 61 6e 64 0a  $extractCommand.
5ea0: 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  .###############
5eb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ed0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ee0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
5ef0: 0a 0a 23 0a 23 20 4e 4f 54 45 3a 20 50 72 6f 63  ..#.# NOTE: Proc
5f00: 65 73 73 20 65 61 63 68 20 66 69 6c 65 20 69 6e  ess each file in
5f10: 20 74 68 65 20 6d 61 73 74 65 72 20 66 69 6c 65   the master file
5f20: 20 6c 69 73 74 2e 20 20 54 68 65 72 65 20 61 72   list.  There ar
5f30: 65 20 61 63 74 75 61 6c 6c 79 20 74 68 72 65 65  e actually three
5f40: 0a 23 20 20 20 20 20 20 20 70 61 72 61 6c 6c 65  .#       paralle
5f50: 6c 20 6c 69 73 74 73 20 74 68 61 74 20 63 6f 6e  l lists that con
5f60: 74 61 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20  tain the source 
5f70: 66 69 6c 65 20 6e 61 6d 65 73 2c 20 74 68 65 20  file names, the 
5f80: 64 65 73 74 69 6e 61 74 69 6f 6e 20 66 69 6c 65  destination file
5f90: 0a 23 20 20 20 20 20 20 20 6e 61 6d 65 73 2c 20  .#       names, 
5fa0: 61 6e 64 20 74 68 65 20 66 69 6c 65 20 70 72 6f  and the file pro
5fb0: 63 65 73 73 69 6e 67 20 66 6c 61 67 73 2e 20 49  cessing flags. I
5fc0: 66 20 74 68 65 20 22 62 75 69 6c 64 4e 65 75 74  f the "buildNeut
5fd0: 72 61 6c 22 20 66 6c 61 67 20 69 73 0a 23 20 20  ral" flag is.#  
5fe0: 20 20 20 20 20 70 72 65 73 65 6e 74 2c 20 74 68       present, th
5ff0: 65 20 66 69 6c 65 20 6c 6f 63 61 74 69 6f 6e 20  e file location 
6000: 61 6e 64 20 63 6f 6e 74 65 6e 74 20 64 6f 20 6e  and content do n
6010: 6f 74 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 65  ot depend on the
6020: 20 62 75 69 6c 64 0a 23 20 20 20 20 20 20 20 63   build.#       c
6030: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 61 6e 64  onfiguration and
6040: 20 22 43 6f 6d 6d 6f 6e 43 6f 6e 66 69 67 75 72   "CommonConfigur
6050: 61 74 69 6f 6e 22 20 77 69 6c 6c 20 62 65 20 75  ation" will be u
6060: 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  sed in place of 
6070: 74 68 65 0a 23 20 20 20 20 20 20 20 62 75 69 6c  the.#       buil
6080: 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  d configuration 
6090: 6e 61 6d 65 2e 20 20 49 66 20 74 68 65 20 22 70  name.  If the "p
60a0: 6c 61 74 66 6f 72 6d 4e 65 75 74 72 61 6c 22 20  latformNeutral" 
60b0: 66 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74 2c  flag is present,
60c0: 0a 23 20 20 20 20 20 20 20 74 68 65 20 66 69 6c  .#       the fil
60d0: 65 20 6c 6f 63 61 74 69 6f 6e 20 61 6e 64 20 63  e location and c
60e0: 6f 6e 74 65 6e 74 20 64 6f 20 6e 6f 74 20 64 65  ontent do not de
60f0: 70 65 6e 64 20 6f 6e 20 74 68 65 20 62 75 69 6c  pend on the buil
6100: 64 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 0a 23  d platform and.#
6110: 20 20 20 20 20 20 20 22 6e 65 75 74 72 61 6c 22         "neutral"
6120: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 69 6e   will be used in
6130: 20 70 6c 61 63 65 20 6f 66 20 74 68 65 20 62 75   place of the bu
6140: 69 6c 64 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d  ild platform nam
6150: 65 2e 20 20 49 66 20 74 68 65 0a 23 20 20 20 20  e.  If the.#    
6160: 20 20 20 22 73 75 62 73 74 22 20 66 6c 61 67 20     "subst" flag 
6170: 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 20  is present, the 
6180: 66 69 6c 65 20 69 73 20 61 73 73 75 6d 65 64 20  file is assumed 
6190: 74 6f 20 62 65 20 61 20 74 65 78 74 20 66 69 6c  to be a text fil
61a0: 65 20 74 68 61 74 20 6d 61 79 0a 23 20 20 20 20  e that may.#    
61b0: 20 20 20 63 6f 6e 74 61 69 6e 20 54 63 6c 20 76     contain Tcl v
61c0: 61 72 69 61 62 6c 65 2c 20 63 6f 6d 6d 61 6e 64  ariable, command
61d0: 2c 20 61 6e 64 20 62 61 63 6b 73 6c 61 73 68 20  , and backslash 
61e0: 72 65 70 6c 61 63 65 6d 65 6e 74 73 2c 20 74 6f  replacements, to
61f0: 20 62 65 0a 23 20 20 20 20 20 20 20 64 79 6e 61   be.#       dyna
6200: 6d 69 63 61 6c 6c 79 20 72 65 70 6c 61 63 65 64  mically replaced
6210: 20 64 75 72 69 6e 67 20 70 72 6f 63 65 73 73 69   during processi
6220: 6e 67 20 75 73 69 6e 67 20 74 68 65 20 54 63 6c  ng using the Tcl
6230: 20 5b 73 75 62 73 74 5d 20 63 6f 6d 6d 61 6e 64   [subst] command
6240: 2e 0a 23 20 20 20 20 20 20 20 49 66 20 74 68 65  ..#       If the
6250: 20 22 6e 6f 44 65 62 75 67 22 20 66 6c 61 67 20   "noDebug" flag 
6260: 69 73 20 70 72 65 73 65 6e 74 2c 20 74 68 65 20  is present, the 
6270: 66 69 6c 65 20 77 69 6c 6c 20 62 65 20 73 6b 69  file will be ski
6280: 70 70 65 64 20 77 68 65 6e 0a 23 20 20 20 20 20  pped when.#     
6290: 20 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72    processing for
62a0: 20 74 68 65 20 64 65 62 75 67 20 62 75 69 6c 64   the debug build
62b0: 2e 20 20 49 66 20 74 68 65 20 22 6e 6f 52 65 74  .  If the "noRet
62c0: 61 69 6c 22 20 66 6c 61 67 20 69 73 20 70 72 65  ail" flag is pre
62d0: 73 65 6e 74 2c 20 74 68 65 0a 23 20 20 20 20 20  sent, the.#     
62e0: 20 20 66 69 6c 65 20 77 69 6c 6c 20 62 65 20 73    file will be s
62f0: 6b 69 70 70 65 64 20 77 68 65 6e 20 70 72 6f 63  kipped when proc
6300: 65 73 73 69 6e 67 20 66 6f 72 20 74 68 65 20 72  essing for the r
6310: 65 74 61 69 6c 20 62 75 69 6c 64 2e 20 20 49 66  etail build.  If
6320: 20 74 68 65 0a 23 20 20 20 20 20 20 20 22 6d 6f   the.#       "mo
6330: 76 65 22 20 66 6c 61 67 20 69 73 20 70 72 65 73  ve" flag is pres
6340: 65 6e 74 2c 20 74 68 65 20 73 6f 75 72 63 65 20  ent, the source 
6350: 66 69 6c 65 20 77 69 6c 6c 20 62 65 20 64 65 6c  file will be del
6360: 65 74 65 64 20 61 66 74 65 72 20 69 74 20 69 73  eted after it is
6370: 0a 23 20 20 20 20 20 20 20 63 6f 70 69 65 64 20  .#       copied 
6380: 74 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69  to the destinati
6390: 6f 6e 20 66 69 6c 65 2e 20 20 49 66 20 74 68 65  on file.  If the
63a0: 20 73 6f 75 72 63 65 20 66 69 6c 65 20 6e 61 6d   source file nam
63b0: 65 20 69 73 20 61 6e 20 65 6d 70 74 79 0a 23 20  e is an empty.# 
63c0: 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20 74 68        string, th
63d0: 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 66 69  e destination fi
63e0: 6c 65 20 6e 61 6d 65 20 77 69 6c 6c 20 62 65 20  le name will be 
63f0: 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61  assumed to alrea
6400: 64 79 20 65 78 69 73 74 20 69 6e 0a 23 20 20 20  dy exist in.#   
6410: 20 20 20 20 74 68 65 20 73 74 61 67 69 6e 67 20      the staging 
6420: 64 69 72 65 63 74 6f 72 79 20 61 6e 64 20 77 69  directory and wi
6430: 6c 6c 20 6e 6f 74 20 62 65 20 63 6f 70 69 65 64  ll not be copied
6440: 3b 20 68 6f 77 65 76 65 72 2c 20 54 63 6c 20 76  ; however, Tcl v
6450: 61 72 69 61 62 6c 65 2c 0a 23 20 20 20 20 20 20  ariable,.#      
6460: 20 63 6f 6d 6d 61 6e 64 2c 20 61 6e 64 20 62 61   command, and ba
6470: 63 6b 73 6c 61 73 68 20 72 65 70 6c 61 63 65 6d  ckslash replacem
6480: 65 6e 74 73 20 6d 61 79 20 73 74 69 6c 6c 20 62  ents may still b
6490: 65 20 70 65 72 66 6f 72 6d 65 64 20 6f 6e 20 74  e performed on t
64a0: 68 65 0a 23 20 20 20 20 20 20 20 64 65 73 74 69  he.#       desti
64b0: 6e 61 74 69 6f 6e 20 66 69 6c 65 20 70 72 69 6f  nation file prio
64c0: 72 20 74 6f 20 74 68 65 20 66 69 6e 61 6c 20 56  r to the final V
64d0: 53 49 58 20 70 61 63 6b 61 67 65 20 62 65 69 6e  SIX package bein
64e0: 67 20 62 75 69 6c 74 20 69 66 20 74 68 65 0a 23  g built if the.#
64f0: 20 20 20 20 20 20 20 22 73 75 62 73 74 22 20 66         "subst" f
6500: 6c 61 67 20 69 73 20 70 72 65 73 65 6e 74 2e 0a  lag is present..
6510: 23 0a 66 6f 72 65 61 63 68 20 73 6f 75 72 63 65  #.foreach source
6520: 46 69 6c 65 4e 61 6d 65 20 20 20 20 20 20 24 66  FileName      $f
6530: 69 6c 65 4e 61 6d 65 73 28 73 6f 75 72 63 65 29  ileNames(source)
6540: 20 5c 0a 20 20 20 20 20 20 20 20 64 65 73 74 69   \.        desti
6550: 6e 61 74 69 6f 6e 46 69 6c 65 4e 61 6d 65 20 24  nationFileName $
6560: 66 69 6c 65 4e 61 6d 65 73 28 64 65 73 74 69 6e  fileNames(destin
6570: 61 74 69 6f 6e 29 20 5c 0a 20 20 20 20 20 20 20  ation) \.       
6580: 20 66 69 6c 65 46 6c 61 67 73 20 20 20 20 20 20   fileFlags      
6590: 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 73 28       $fileNames(
65a0: 66 6c 61 67 73 29 20 7b 0a 20 20 23 0a 20 20 23  flags) {.  #.  #
65b0: 20 4e 4f 54 45 3a 20 50 72 6f 63 65 73 73 20 74   NOTE: Process t
65c0: 68 65 20 66 69 6c 65 20 66 6c 61 67 73 20 69 6e  he file flags in
65d0: 74 6f 20 73 65 70 61 72 61 74 65 20 62 6f 6f 6c  to separate bool
65e0: 65 61 6e 20 76 61 72 69 61 62 6c 65 73 20 74 68  ean variables th
65f0: 61 74 20 6d 61 79 20 62 65 0a 20 20 23 20 20 20  at may be.  #   
6600: 20 20 20 20 75 73 65 64 20 77 69 74 68 69 6e 20      used within 
6610: 74 68 65 20 6c 6f 6f 70 2e 0a 20 20 23 0a 20 20  the loop..  #.  
6620: 73 65 74 20 69 73 42 75 69 6c 64 4e 65 75 74 72  set isBuildNeutr
6630: 61 6c 20 5b 65 78 70 72 20 7b 5b 6c 73 65 61 72  al [expr {[lsear
6640: 63 68 20 24 66 69 6c 65 46 6c 61 67 73 20 62 75  ch $fileFlags bu
6650: 69 6c 64 4e 65 75 74 72 61 6c 5d 20 21 3d 20 2d  ildNeutral] != -
6660: 31 7d 5d 0a 20 20 73 65 74 20 69 73 50 6c 61 74  1}].  set isPlat
6670: 66 6f 72 6d 4e 65 75 74 72 61 6c 20 5b 65 78 70  formNeutral [exp
6680: 72 20 7b 5b 6c 73 65 61 72 63 68 20 24 66 69 6c  r {[lsearch $fil
6690: 65 46 6c 61 67 73 20 70 6c 61 74 66 6f 72 6d 4e  eFlags platformN
66a0: 65 75 74 72 61 6c 5d 20 21 3d 20 2d 31 7d 5d 0a  eutral] != -1}].
66b0: 20 20 73 65 74 20 69 73 4d 6f 76 65 20 5b 65 78    set isMove [ex
66c0: 70 72 20 7b 5b 6c 73 65 61 72 63 68 20 24 66 69  pr {[lsearch $fi
66d0: 6c 65 46 6c 61 67 73 20 6d 6f 76 65 5d 20 21 3d  leFlags move] !=
66e0: 20 2d 31 7d 5d 0a 20 20 73 65 74 20 75 73 65 53   -1}].  set useS
66f0: 75 62 73 74 20 5b 65 78 70 72 20 7b 5b 6c 73 65  ubst [expr {[lse
6700: 61 72 63 68 20 24 66 69 6c 65 46 6c 61 67 73 20  arch $fileFlags 
6710: 73 75 62 73 74 5d 20 21 3d 20 2d 31 7d 5d 0a 0a  subst] != -1}]..
6720: 20 20 23 0a 20 20 23 20 4e 4f 54 45 3a 20 49 66    #.  # NOTE: If
6730: 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 69 6c   the current fil
6740: 65 20 69 73 20 62 75 69 6c 64 2d 6e 65 75 74 72  e is build-neutr
6750: 61 6c 2c 20 74 68 65 6e 20 6f 6e 6c 79 20 6f 6e  al, then only on
6760: 65 20 62 75 69 6c 64 20 77 69 6c 6c 0a 20 20 23  e build will.  #
6770: 20 20 20 20 20 20 20 62 65 20 70 72 6f 63 65 73         be proces
6780: 73 65 64 20 66 6f 72 20 69 74 2c 20 6e 61 6d 65  sed for it, name
6790: 6c 79 20 22 43 6f 6d 6d 6f 6e 43 6f 6e 66 69 67  ly "CommonConfig
67a0: 75 72 61 74 69 6f 6e 22 3b 20 6f 74 68 65 72 77  uration"; otherw
67b0: 69 73 65 2c 20 65 61 63 68 0a 20 20 23 20 20 20  ise, each.  #   
67c0: 20 20 20 20 73 75 70 70 6f 72 74 65 64 20 62 75      supported bu
67d0: 69 6c 64 20 77 69 6c 6c 20 62 65 20 70 72 6f 63  ild will be proc
67e0: 65 73 73 65 64 20 66 6f 72 20 69 74 20 69 6e 64  essed for it ind
67f0: 69 76 69 64 75 61 6c 6c 79 2e 0a 20 20 23 0a 20  ividually..  #. 
6800: 20 66 6f 72 65 61 63 68 20 62 75 69 6c 64 4e 61   foreach buildNa
6810: 6d 65 20 5c 0a 20 20 20 20 20 20 5b 65 78 70 72  me \.      [expr
6820: 20 7b 24 69 73 42 75 69 6c 64 4e 65 75 74 72 61   {$isBuildNeutra
6830: 6c 20 3f 20 5b 6c 69 73 74 20 43 6f 6d 6d 6f 6e  l ? [list Common
6840: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 3a  Configuration] :
6850: 20 24 62 75 69 6c 64 4e 61 6d 65 73 7d 5d 20 7b   $buildNames}] {
6860: 0a 20 20 20 20 23 0a 20 20 20 20 23 20 4e 4f 54  .    #.    # NOT
6870: 45 3a 20 53 68 6f 75 6c 64 20 74 68 65 20 63 75  E: Should the cu
6880: 72 72 65 6e 74 20 66 69 6c 65 20 62 65 20 73 6b  rrent file be sk
6890: 69 70 70 65 64 20 66 6f 72 20 74 68 69 73 20 62  ipped for this b
68a0: 75 69 6c 64 3f 0a 20 20 20 20 23 0a 20 20 20 20  uild?.    #.    
68b0: 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 24 66 69  if {[lsearch $fi
68c0: 6c 65 46 6c 61 67 73 20 6e 6f 24 7b 62 75 69 6c  leFlags no${buil
68d0: 64 4e 61 6d 65 7d 5d 20 21 3d 20 2d 31 7d 20 74  dName}] != -1} t
68e0: 68 65 6e 20 7b 0a 20 20 20 20 20 20 63 6f 6e 74  hen {.      cont
68f0: 69 6e 75 65 0a 20 20 20 20 7d 0a 0a 20 20 20 20  inue.    }..    
6900: 23 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66  #.    # NOTE: If
6910: 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 69 6c   the current fil
6920: 65 20 69 73 20 70 6c 61 74 66 6f 72 6d 2d 6e 65  e is platform-ne
6930: 75 74 72 61 6c 2c 20 74 68 65 6e 20 6f 6e 6c 79  utral, then only
6940: 20 6f 6e 65 20 70 6c 61 74 66 6f 72 6d 0a 20 20   one platform.  
6950: 20 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20 62    #       will b
6960: 65 20 70 72 6f 63 65 73 73 65 64 20 66 6f 72 20  e processed for 
6970: 69 74 2c 20 6e 61 6d 65 6c 79 20 22 6e 65 75 74  it, namely "neut
6980: 72 61 6c 22 3b 20 6f 74 68 65 72 77 69 73 65 2c  ral"; otherwise,
6990: 20 65 61 63 68 0a 20 20 20 20 23 20 20 20 20 20   each.    #     
69a0: 20 20 73 75 70 70 6f 72 74 65 64 20 70 6c 61 74    supported plat
69b0: 66 6f 72 6d 20 77 69 6c 6c 20 62 65 20 70 72 6f  form will be pro
69c0: 63 65 73 73 65 64 20 66 6f 72 20 69 74 20 69 6e  cessed for it in
69d0: 64 69 76 69 64 75 61 6c 6c 79 2e 0a 20 20 20 20  dividually..    
69e0: 23 0a 20 20 20 20 66 6f 72 65 61 63 68 20 70 6c  #.    foreach pl
69f0: 61 74 66 6f 72 6d 4e 61 6d 65 20 5c 0a 20 20 20  atformName \.   
6a00: 20 20 20 20 20 5b 65 78 70 72 20 7b 24 69 73 50       [expr {$isP
6a10: 6c 61 74 66 6f 72 6d 4e 65 75 74 72 61 6c 20 3f  latformNeutral ?
6a20: 20 5b 6c 69 73 74 20 6e 65 75 74 72 61 6c 5d 20   [list neutral] 
6a30: 3a 20 24 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  : $platformNames
6a40: 7d 5d 20 7b 0a 20 20 20 20 20 20 23 0a 20 20 20  }] {.      #.   
6a50: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74     # NOTE: Use t
6a60: 68 65 20 61 63 74 75 61 6c 20 70 6c 61 74 66 6f  he actual platfo
6a70: 72 6d 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 64  rm name in the d
6a80: 65 73 74 69 6e 61 74 69 6f 6e 20 66 69 6c 65 20  estination file 
6a90: 6e 61 6d 65 2e 0a 20 20 20 20 20 20 23 0a 20 20  name..      #.  
6aa0: 20 20 20 20 73 65 74 20 6e 65 77 44 65 73 74 69      set newDesti
6ab0: 6e 61 74 69 6f 6e 46 69 6c 65 4e 61 6d 65 20 5b  nationFileName [
6ac0: 72 65 70 6c 61 63 65 46 69 6c 65 4e 61 6d 65 54  replaceFileNameT
6ad0: 6f 6b 65 6e 73 20 24 64 65 73 74 69 6e 61 74 69  okens $destinati
6ae0: 6f 6e 46 69 6c 65 4e 61 6d 65 20 5c 0a 20 20 20  onFileName \.   
6af0: 20 20 20 20 20 20 20 24 73 68 6f 72 74 4e 61 6d         $shortNam
6b00: 65 20 24 62 75 69 6c 64 4e 61 6d 65 20 24 70 6c  e $buildName $pl
6b10: 61 74 66 6f 72 6d 4e 61 6d 65 5d 0a 0a 20 20 20  atformName]..   
6b20: 20 20 20 23 0a 20 20 20 20 20 20 23 20 4e 4f 54     #.      # NOT
6b30: 45 3a 20 44 6f 65 73 20 74 68 65 20 73 6f 75 72  E: Does the sour
6b40: 63 65 20 66 69 6c 65 20 6e 65 65 64 20 74 6f 20  ce file need to 
6b50: 62 65 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65  be copied to the
6b60: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 66 69 6c   destination fil
6b70: 65 3f 0a 20 20 20 20 20 20 23 0a 20 20 20 20 20  e?.      #.     
6b80: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
6b90: 67 74 68 20 24 73 6f 75 72 63 65 46 69 6c 65 4e  gth $sourceFileN
6ba0: 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ame] > 0} then {
6bb0: 0a 20 20 20 20 20 20 20 20 23 0a 20 20 20 20 20  .        #.     
6bc0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74     # NOTE: First
6bd0: 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20  , make sure the 
6be0: 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 69 72 65  destination dire
6bf0: 63 74 6f 72 79 20 65 78 69 73 74 73 2e 0a 20 20  ctory exists..  
6c00: 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 20 20        #.        
6c10: 66 69 6c 65 20 6d 6b 64 69 72 20 5b 66 69 6c 65  file mkdir [file
6c20: 20 64 69 72 6e 61 6d 65 20 24 6e 65 77 44 65 73   dirname $newDes
6c30: 74 69 6e 61 74 69 6f 6e 46 69 6c 65 4e 61 6d 65  tinationFileName
6c40: 5d 0a 0a 20 20 20 20 20 20 20 20 23 0a 20 20 20  ]..        #.   
6c50: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
6c60: 6e 2c 20 63 6f 70 79 20 74 68 65 20 73 6f 75 72  n, copy the sour
6c70: 63 65 20 66 69 6c 65 20 74 6f 20 74 68 65 20 64  ce file to the d
6c80: 65 73 74 69 6e 61 74 69 6f 6e 20 66 69 6c 65 20  estination file 
6c90: 76 65 72 62 61 74 69 6d 2e 0a 20 20 20 20 20 20  verbatim..      
6ca0: 20 20 23 0a 20 20 20 20 20 20 20 20 73 65 74 20    #.        set 
6cb0: 6e 65 77 53 6f 75 72 63 65 46 69 6c 65 4e 61 6d  newSourceFileNam
6cc0: 65 20 5b 72 65 70 6c 61 63 65 46 69 6c 65 4e 61  e [replaceFileNa
6cd0: 6d 65 54 6f 6b 65 6e 73 20 24 73 6f 75 72 63 65  meTokens $source
6ce0: 46 69 6c 65 4e 61 6d 65 20 5c 0a 20 20 20 20 20  FileName \.     
6cf0: 20 20 20 20 20 20 20 24 73 68 6f 72 74 4e 61 6d         $shortNam
6d00: 65 20 24 62 75 69 6c 64 4e 61 6d 65 20 24 70 6c  e $buildName $pl
6d10: 61 74 66 6f 72 6d 4e 61 6d 65 5d 0a 0a 20 20 20  atformName]..   
6d20: 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 24       file copy $
6d30: 6e 65 77 53 6f 75 72 63 65 46 69 6c 65 4e 61 6d  newSourceFileNam
6d40: 65 20 24 6e 65 77 44 65 73 74 69 6e 61 74 69 6f  e $newDestinatio
6d50: 6e 46 69 6c 65 4e 61 6d 65 0a 0a 20 20 20 20 20  nFileName..     
6d60: 20 20 20 23 0a 20 20 20 20 20 20 20 20 23 20 4e     #.        # N
6d70: 4f 54 45 3a 20 49 66 20 74 68 69 73 20 69 73 20  OTE: If this is 
6d80: 61 20 6d 6f 76 65 20 69 6e 73 74 65 61 64 20 6f  a move instead o
6d90: 66 20 61 20 63 6f 70 79 2c 20 64 65 6c 65 74 65  f a copy, delete
6da0: 20 74 68 65 20 73 6f 75 72 63 65 20 66 69 6c 65   the source file
6db0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #      
6dc0: 20 6e 6f 77 2e 0a 20 20 20 20 20 20 20 20 23 0a   now..        #.
6dd0: 20 20 20 20 20 20 20 20 69 66 20 7b 24 69 73 4d          if {$isM
6de0: 6f 76 65 7d 20 74 68 65 6e 20 7b 0a 20 20 20 20  ove} then {.    
6df0: 20 20 20 20 20 20 66 69 6c 65 20 64 65 6c 65 74        file delet
6e00: 65 20 24 6e 65 77 53 6f 75 72 63 65 46 69 6c 65  e $newSourceFile
6e10: 4e 61 6d 65 0a 20 20 20 20 20 20 20 20 7d 0a 20  Name.        }. 
6e20: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 23 0a       }..      #.
6e30: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f        # NOTE: Do
6e40: 65 73 20 74 68 65 20 64 65 73 74 69 6e 61 74 69  es the destinati
6e50: 6f 6e 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 20  on file contain 
6e60: 64 79 6e 61 6d 69 63 20 72 65 70 6c 61 63 65 6d  dynamic replacem
6e70: 65 6e 74 73 20 74 68 61 74 20 6d 75 73 74 0a 20  ents that must. 
6e80: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20       #       be 
6e90: 70 72 6f 63 65 73 73 65 64 20 6e 6f 77 3f 0a 20  processed now?. 
6ea0: 20 20 20 20 20 23 0a 20 20 20 20 20 20 69 66 20       #.      if 
6eb0: 7b 24 75 73 65 53 75 62 73 74 7d 20 74 68 65 6e  {$useSubst} then
6ec0: 20 7b 0a 20 20 20 20 20 20 20 20 23 0a 20 20 20   {.        #.   
6ed0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 50 65 72       # NOTE: Per
6ee0: 66 6f 72 6d 20 61 6e 79 20 64 79 6e 61 6d 69 63  form any dynamic
6ef0: 20 72 65 70 6c 61 63 65 6d 65 6e 74 73 20 63 6f   replacements co
6f00: 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 64  ntained in the d
6f10: 65 73 74 69 6e 61 74 69 6f 6e 0a 20 20 20 20 20  estination.     
6f20: 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20     #       file 
6f30: 61 6e 64 20 74 68 65 6e 20 72 65 2d 77 72 69 74  and then re-writ
6f40: 65 20 69 74 20 69 6e 2d 70 6c 61 63 65 2e 0a 20  e it in-place.. 
6f50: 20 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 20         #.       
6f60: 20 73 75 62 73 74 46 69 6c 65 20 24 6e 65 77 44   substFile $newD
6f70: 65 73 74 69 6e 61 74 69 6f 6e 46 69 6c 65 4e 61  estinationFileNa
6f80: 6d 65 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  me.      }.    }
6f90: 0a 20 20 7d 0a 7d 0a 0a 23 23 23 23 23 23 23 23  .  }.}..########
6fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6fb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6fc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6fd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6fe0: 23 23 23 23 23 23 23 0a 0a 23 0a 23 20 4e 4f 54  #######..#.# NOT
6ff0: 45 3a 20 43 68 61 6e 67 65 20 74 68 65 20 63 75  E: Change the cu
7000: 72 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20  rrent directory 
7010: 74 6f 20 74 68 65 20 73 74 61 67 69 6e 67 20 64  to the staging d
7020: 69 72 65 63 74 6f 72 79 20 73 6f 20 74 68 61 74  irectory so that
7030: 20 74 68 65 0a 23 20 20 20 20 20 20 20 65 78 74   the.#       ext
7040: 65 72 6e 61 6c 20 61 72 63 68 69 76 65 20 62 75  ernal archive bu
7050: 69 6c 64 69 6e 67 20 74 6f 6f 6c 20 63 61 6e 20  ilding tool can 
7060: 70 69 63 6b 75 70 20 74 68 65 20 6e 65 63 65 73  pickup the neces
7070: 73 61 72 79 20 66 69 6c 65 73 20 75 73 69 6e 67  sary files using
7080: 0a 23 20 20 20 20 20 20 20 72 65 6c 61 74 69 76  .#       relativ
7090: 65 20 70 61 74 68 73 2e 0a 23 0a 63 64 20 24 73  e paths..#.cd $s
70a0: 74 61 67 69 6e 67 44 69 72 65 63 74 6f 72 79 0a  tagingDirectory.
70b0: 0a 23 0a 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64  .#.# NOTE: Build
70c0: 20 74 68 65 20 54 63 6c 20 63 6f 6d 6d 61 6e 64   the Tcl command
70d0: 20 75 73 65 64 20 74 6f 20 61 72 63 68 69 76 65   used to archive
70e0: 20 74 68 65 20 66 69 6e 61 6c 20 56 53 49 58 20   the final VSIX 
70f0: 70 61 63 6b 61 67 65 20 69 6e 20 74 68 65 0a 23  package in the.#
7100: 20 20 20 20 20 20 20 6f 75 74 70 75 74 20 64 69         output di
7110: 72 65 63 74 6f 72 79 2e 0a 23 0a 73 65 74 20 61  rectory..#.set a
7120: 72 63 68 69 76 65 43 6f 6d 6d 61 6e 64 20 5b 6c  rchiveCommand [l
7130: 69 73 74 20 65 78 65 63 20 2d 2d 20 24 7a 69 70  ist exec -- $zip
7140: 20 2d 72 20 24 6f 75 74 70 75 74 46 69 6c 65 20   -r $outputFile 
7150: 2a 5d 0a 0a 23 0a 23 20 4e 4f 54 45 3a 20 42 75  *]..#.# NOTE: Bu
7160: 69 6c 64 20 74 68 65 20 66 69 6e 61 6c 20 56 53  ild the final VS
7170: 49 58 20 70 61 63 6b 61 67 65 20 61 72 63 68 69  IX package archi
7180: 76 65 20 69 6e 20 74 68 65 20 6f 75 74 70 75 74  ve in the output
7190: 20 64 69 72 65 63 74 6f 72 79 2e 0a 23 0a 65 76   directory..#.ev
71a0: 61 6c 20 24 61 72 63 68 69 76 65 43 6f 6d 6d 61  al $archiveComma
71b0: 6e 64 0a 0a 23 0a 23 20 4e 4f 54 45 3a 20 43 68  nd..#.# NOTE: Ch
71c0: 61 6e 67 65 20 62 61 63 6b 20 74 6f 20 74 68 65  ange back to the
71d0: 20 70 72 65 76 69 6f 75 73 6c 79 20 73 61 76 65   previously save
71e0: 64 20 63 75 72 72 65 6e 74 20 64 69 72 65 63 74  d current direct
71f0: 6f 72 79 2e 0a 23 0a 63 64 20 24 63 75 72 72 65  ory..#.cd $curre
7200: 6e 74 44 69 72 65 63 74 6f 72 79 0a 0a 23 0a 23  ntDirectory..#.#
7210: 20 4e 4f 54 45 3a 20 43 6c 65 61 6e 75 70 20 74   NOTE: Cleanup t
7220: 68 65 20 74 65 6d 70 6f 72 61 72 79 20 73 74 61  he temporary sta
7230: 67 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2e 0a  ging directory..
7240: 23 0a 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66  #.file delete -f
7250: 6f 72 63 65 20 24 73 74 61 67 69 6e 67 44 69 72  orce $stagingDir
7260: 65 63 74 6f 72 79 0a 0a 23 23 23 23 23 23 23 23  ectory..########
7270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
72a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
72b0: 23 23 23 23 23 23 23 0a 0a 23 0a 23 20 4e 4f 54  #######..#.# NOT
72c0: 45 3a 20 53 75 63 63 65 73 73 2c 20 65 6d 69 74  E: Success, emit
72d0: 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69   the fully quali
72e0: 66 69 65 64 20 70 61 74 68 20 6f 66 20 74 68 65  fied path of the
72f0: 20 67 65 6e 65 72 61 74 65 64 20 56 53 49 58 20   generated VSIX 
7300: 66 69 6c 65 2e 0a 23 0a 70 75 74 73 20 73 74 64  file..#.puts std
7310: 6f 75 74 20 24 6f 75 74 70 75 74 46 69 6c 65 0a  out $outputFile.