/ Hex Artifact Content
Login

Artifact c55f64ca200308fb5fa5c1ee751ea95a13977b5a:


0000: 40 45 43 48 4f 20 4f 46 46 0d 0a 0d 0a 3a 3a 0d  @ECHO OFF....::.
0010: 0a 3a 3a 20 62 75 69 6c 64 2d 61 6c 6c 2d 6d 73  .:: build-all-ms
0020: 76 63 2e 62 61 74 20 2d 2d 0d 0a 3a 3a 0d 0a 3a  vc.bat --..::..:
0030: 3a 20 4d 75 6c 74 69 2d 50 6c 61 74 66 6f 72 6d  : Multi-Platform
0040: 20 42 75 69 6c 64 20 54 6f 6f 6c 20 66 6f 72 20   Build Tool for 
0050: 4d 53 56 43 0d 0a 3a 3a 0d 0a 0d 0a 52 45 4d 0d  MSVC..::....REM.
0060: 0a 52 45 4d 20 54 68 69 73 20 62 61 74 63 68 20  .REM This batch 
0070: 73 63 72 69 70 74 20 69 73 20 75 73 65 64 20 74  script is used t
0080: 6f 20 62 75 69 6c 64 20 74 68 65 20 53 51 4c 69  o build the SQLi
0090: 74 65 20 44 4c 4c 20 66 6f 72 20 6d 75 6c 74 69  te DLL for multi
00a0: 70 6c 65 20 70 6c 61 74 66 6f 72 6d 73 0d 0a 52  ple platforms..R
00b0: 45 4d 20 61 6e 64 20 63 6f 6e 66 69 67 75 72 61  EM and configura
00c0: 74 69 6f 6e 73 20 75 73 69 6e 67 20 4d 53 56 43  tions using MSVC
00d0: 2e 20 20 54 68 65 20 62 75 69 6c 74 20 53 51 4c  .  The built SQL
00e0: 69 74 65 20 44 4c 4c 73 2c 20 74 68 65 69 72 20  ite DLLs, their 
00f0: 61 73 73 6f 63 69 61 74 65 64 0d 0a 52 45 4d 20  associated..REM 
0100: 69 6d 70 6f 72 74 20 6c 69 62 72 61 72 69 65 73  import libraries
0110: 2c 20 61 6e 64 20 6f 70 74 69 6f 6e 61 6c 6c 79  , and optionally
0120: 20 74 68 65 69 72 20 73 79 6d 62 6f 6c 73 20 66   their symbols f
0130: 69 6c 65 73 2c 20 61 72 65 20 70 6c 61 63 65 64  iles, are placed
0140: 20 77 69 74 68 69 6e 0d 0a 52 45 4d 20 74 68 65   within..REM the
0150: 20 64 69 72 65 63 74 6f 72 79 20 73 70 65 63 69   directory speci
0160: 66 69 65 64 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  fied on the comm
0170: 61 6e 64 20 6c 69 6e 65 2c 20 69 6e 20 73 75 62  and line, in sub
0180: 2d 64 69 72 65 63 74 6f 72 69 65 73 20 6e 61 6d  -directories nam
0190: 65 64 20 66 6f 72 0d 0a 52 45 4d 20 74 68 65 69  ed for..REM thei
01a0: 72 20 72 65 73 70 65 63 74 69 76 65 20 70 6c 61  r respective pla
01b0: 74 66 6f 72 6d 73 20 61 6e 64 20 63 6f 6e 66 69  tforms and confi
01c0: 67 75 72 61 74 69 6f 6e 73 2e 20 20 54 68 69 73  gurations.  This
01d0: 20 62 61 74 63 68 20 73 63 72 69 70 74 20 6d 75   batch script mu
01e0: 73 74 20 62 65 0d 0a 52 45 4d 20 72 75 6e 20 66  st be..REM run f
01f0: 72 6f 6d 20 69 6e 73 69 64 65 20 61 20 56 69 73  rom inside a Vis
0200: 75 61 6c 20 53 74 75 64 69 6f 20 43 6f 6d 6d 61  ual Studio Comma
0210: 6e 64 20 50 72 6f 6d 70 74 20 66 6f 72 20 74 68  nd Prompt for th
0220: 65 20 64 65 73 69 72 65 64 20 76 65 72 73 69 6f  e desired versio
0230: 6e 20 6f 66 0d 0a 52 45 4d 20 56 69 73 75 61 6c  n of..REM Visual
0240: 20 53 74 75 64 69 6f 20 5e 28 74 68 65 20 69 6e   Studio ^(the in
0250: 69 74 69 61 6c 20 70 6c 61 74 66 6f 72 6d 20 63  itial platform c
0260: 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74 68  onfigured for th
0270: 65 20 63 6f 6d 6d 61 6e 64 20 70 72 6f 6d 70 74  e command prompt
0280: 20 64 6f 65 73 0d 0a 52 45 4d 20 6e 6f 74 20 72   does..REM not r
0290: 65 61 6c 6c 79 20 6d 61 74 74 65 72 5e 29 2e 20  eally matter^). 
02a0: 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 63 6f 6d   Exactly one com
02b0: 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65  mand line argume
02c0: 6e 74 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  nt is required, 
02d0: 74 68 65 0d 0a 52 45 4d 20 6e 61 6d 65 20 6f 66  the..REM name of
02e0: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 69 72   an existing dir
02f0: 65 63 74 6f 72 79 20 74 6f 20 62 65 20 75 73 65  ectory to be use
0300: 64 20 61 73 20 74 68 65 20 66 69 6e 61 6c 20 64  d as the final d
0310: 65 73 74 69 6e 61 74 69 6f 6e 20 64 69 72 65 63  estination direc
0320: 74 6f 72 79 0d 0a 52 45 4d 20 66 6f 72 20 74 68  tory..REM for th
0330: 65 20 67 65 6e 65 72 61 74 65 64 20 6f 75 74 70  e generated outp
0340: 75 74 20 66 69 6c 65 73 2c 20 77 68 69 63 68 20  ut files, which 
0350: 77 69 6c 6c 20 62 65 20 70 6c 61 63 65 64 20 69  will be placed i
0360: 6e 20 73 75 62 2d 64 69 72 65 63 74 6f 72 69 65  n sub-directorie
0370: 73 0d 0a 52 45 4d 20 63 72 65 61 74 65 64 20 74  s..REM created t
0380: 68 65 72 65 69 6e 2e 20 20 49 64 65 61 6c 6c 79  herein.  Ideally
0390: 2c 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20  , the directory 
03a0: 73 70 65 63 69 66 69 65 64 20 73 68 6f 75 6c 64  specified should
03b0: 20 62 65 20 65 6d 70 74 79 2e 0d 0a 52 45 4d 0d   be empty...REM.
03c0: 0a 52 45 4d 20 45 78 61 6d 70 6c 65 3a 0d 0a 52  .REM Example:..R
03d0: 45 4d 0d 0a 52 45 4d 20 20 20 20 20 20 20 20 20  EM..REM         
03e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
03f0: 44 20 2f 44 20 43 3a 5c 64 65 76 5c 73 71 6c 69  D /D C:\dev\sqli
0400: 74 65 5c 63 6f 72 65 0d 0a 52 45 4d 20 20 20 20  te\core..REM    
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 6f 6f 6c 5c 62 75 69 6c 64 2d 61      tool\build-a
0430: 6c 6c 2d 6d 73 76 63 2e 62 61 74 20 43 3a 5c 54  ll-msvc.bat C:\T
0440: 65 6d 70 0d 0a 52 45 4d 0d 0a 52 45 4d 20 49 6e  emp..REM..REM In
0450: 20 74 68 65 20 65 78 61 6d 70 6c 65 20 61 62 6f   the example abo
0460: 76 65 2c 20 22 43 3a 5c 64 65 76 5c 73 71 6c 69  ve, "C:\dev\sqli
0470: 74 65 5c 63 6f 72 65 22 20 72 65 70 72 65 73 65  te\core" represe
0480: 6e 74 73 20 74 68 65 20 72 6f 6f 74 20 6f 66 20  nts the root of 
0490: 74 68 65 0d 0a 52 45 4d 20 73 6f 75 72 63 65 20  the..REM source 
04a0: 74 72 65 65 20 66 6f 72 20 53 51 4c 69 74 65 20  tree for SQLite 
04b0: 61 6e 64 20 22 43 3a 5c 54 65 6d 70 22 20 72 65  and "C:\Temp" re
04c0: 70 72 65 73 65 6e 74 73 20 74 68 65 20 66 69 6e  presents the fin
04d0: 61 6c 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a  al destination..
04e0: 52 45 4d 20 64 69 72 65 63 74 6f 72 79 20 66 6f  REM directory fo
04f0: 72 20 74 68 65 20 67 65 6e 65 72 61 74 65 64 20  r the generated 
0500: 6f 75 74 70 75 74 20 66 69 6c 65 73 2e 0d 0a 52  output files...R
0510: 45 4d 0d 0a 52 45 4d 20 54 68 65 72 65 20 61 72  EM..REM There ar
0520: 65 20 73 65 76 65 72 61 6c 20 65 6e 76 69 72 6f  e several enviro
0530: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20  nment variables 
0540: 74 68 61 74 20 6d 61 79 20 62 65 20 73 65 74 20  that may be set 
0550: 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 0d 0a 52  to modify the..R
0560: 45 4d 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74  EM behavior of t
0570: 68 69 73 20 62 61 74 63 68 20 73 63 72 69 70 74  his batch script
0580: 20 61 6e 64 20 69 74 73 20 61 73 73 6f 63 69 61   and its associa
0590: 74 65 64 20 4d 61 6b 65 66 69 6c 65 2e 20 20 54  ted Makefile.  T
05a0: 68 65 20 6c 69 73 74 20 6f 66 0d 0a 52 45 4d 20  he list of..REM 
05b0: 70 6c 61 74 66 6f 72 6d 73 20 74 6f 20 62 75 69  platforms to bui
05c0: 6c 64 20 6d 61 79 20 62 65 20 6f 76 65 72 72 69  ld may be overri
05d0: 64 65 6e 20 62 79 20 75 73 69 6e 67 20 74 68 65  den by using the
05e0: 20 50 4c 41 54 46 4f 52 4d 53 20 65 6e 76 69 72   PLATFORMS envir
05f0: 6f 6e 6d 65 6e 74 0d 0a 52 45 4d 20 76 61 72 69  onment..REM vari
0600: 61 62 6c 65 2c 20 77 68 69 63 68 20 73 68 6f 75  able, which shou
0610: 6c 64 20 63 6f 6e 74 61 69 6e 20 61 20 6c 69 73  ld contain a lis
0620: 74 20 6f 66 20 70 6c 61 74 66 6f 72 6d 73 20 5e  t of platforms ^
0630: 28 65 2e 67 2e 20 78 38 36 20 78 38 36 5f 61 6d  (e.g. x86 x86_am
0640: 64 36 34 0d 0a 52 45 4d 20 78 38 36 5f 61 72 6d  d64..REM x86_arm
0650: 5e 29 2e 20 20 41 6c 6c 20 70 6c 61 74 66 6f 72  ^).  All platfor
0660: 6d 73 20 6d 75 73 74 20 62 65 20 73 75 70 70 6f  ms must be suppo
0670: 72 74 65 64 20 62 79 20 74 68 65 20 76 65 72 73  rted by the vers
0680: 69 6f 6e 20 6f 66 20 56 69 73 75 61 6c 20 53 74  ion of Visual St
0690: 75 64 69 6f 0d 0a 52 45 4d 20 62 65 69 6e 67 20  udio..REM being 
06a0: 75 73 65 64 2e 20 20 54 68 65 20 6c 69 73 74 20  used.  The list 
06b0: 6f 66 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  of configuration
06c0: 73 20 74 6f 20 62 75 69 6c 64 20 6d 61 79 20 62  s to build may b
06d0: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d  e overridden by.
06e0: 0a 52 45 4d 20 73 65 74 74 69 6e 67 20 74 68 65  .REM setting the
06f0: 20 43 4f 4e 46 49 47 55 52 41 54 49 4f 4e 53 20   CONFIGURATIONS 
0700: 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69  environment vari
0710: 61 62 6c 65 2c 20 77 68 69 63 68 20 73 68 6f 75  able, which shou
0720: 6c 64 20 63 6f 6e 74 61 69 6e 20 61 0d 0a 52 45  ld contain a..RE
0730: 4d 20 6c 69 73 74 20 6f 66 20 63 6f 6e 66 69 67  M list of config
0740: 75 72 61 74 69 6f 6e 73 20 74 6f 20 62 75 69 6c  urations to buil
0750: 64 20 5e 28 65 2e 67 2e 20 44 65 62 75 67 20 52  d ^(e.g. Debug R
0760: 65 74 61 69 6c 5e 29 2e 20 20 4e 65 69 74 68 65  etail^).  Neithe
0770: 72 20 6f 66 20 74 68 65 73 65 0d 0a 52 45 4d 20  r of these..REM 
0780: 76 61 72 69 61 62 6c 65 20 76 61 6c 75 65 73 20  variable values 
0790: 6d 61 79 20 63 6f 6e 74 61 69 6e 20 61 6e 79 20  may contain any 
07a0: 64 6f 75 62 6c 65 20 71 75 6f 74 65 73 2c 20 73  double quotes, s
07b0: 75 72 72 6f 75 6e 64 69 6e 67 20 6f 72 20 65 6d  urrounding or em
07c0: 62 65 64 64 65 64 2e 0d 0a 52 45 4d 20 46 69 6e  bedded...REM Fin
07d0: 61 6c 6c 79 2c 20 74 68 65 20 4e 43 52 54 4c 49  ally, the NCRTLI
07e0: 42 50 41 54 48 20 61 6e 64 20 4e 53 44 4b 4c 49  BPATH and NSDKLI
07f0: 42 50 41 54 48 20 65 6e 76 69 72 6f 6e 6d 65 6e  BPATH environmen
0800: 74 20 76 61 72 69 61 62 6c 65 73 20 6d 61 79 20  t variables may 
0810: 62 65 20 73 65 74 0d 0a 52 45 4d 20 74 6f 20 73  be set..REM to s
0820: 70 65 63 69 66 79 20 74 68 65 20 6c 6f 63 61 74  pecify the locat
0830: 69 6f 6e 20 6f 66 20 74 68 65 20 43 52 54 20 61  ion of the CRT a
0840: 6e 64 20 53 44 4b 2c 20 72 65 73 70 65 63 74 69  nd SDK, respecti
0850: 76 65 6c 79 2c 20 6e 65 65 64 65 64 20 74 6f 20  vely, needed to 
0860: 63 6f 6d 70 69 6c 65 0d 0a 52 45 4d 20 65 78 65  compile..REM exe
0870: 63 75 74 61 62 6c 65 73 20 6e 61 74 69 76 65 20  cutables native 
0880: 74 6f 20 74 68 65 20 61 72 63 68 69 74 65 63 74  to the architect
0890: 75 72 65 20 6f 66 20 74 68 65 20 62 75 69 6c 64  ure of the build
08a0: 20 6d 61 63 68 69 6e 65 20 64 75 72 69 6e 67 20   machine during 
08b0: 61 6e 79 0d 0a 52 45 4d 20 63 72 6f 73 73 2d 63  any..REM cross-c
08c0: 6f 6d 70 69 6c 61 74 69 6f 6e 20 74 68 61 74 20  ompilation that 
08d0: 6d 61 79 20 62 65 20 6e 65 63 65 73 73 61 72 79  may be necessary
08e0: 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74  , depending on t
08f0: 68 65 20 70 6c 61 74 66 6f 72 6d 73 20 74 6f 20  he platforms to 
0900: 62 65 0d 0a 52 45 4d 20 62 75 69 6c 74 2e 20 20  be..REM built.  
0910: 54 68 65 73 65 20 76 61 6c 75 65 73 20 69 6e 20  These values in 
0920: 74 68 65 73 65 20 74 77 6f 20 76 61 72 69 61 62  these two variab
0930: 6c 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73 75  les should be su
0940: 72 72 6f 75 6e 64 65 64 20 62 79 20 64 6f 75 62  rrounded by doub
0950: 6c 65 0d 0a 52 45 4d 20 71 75 6f 74 65 73 20 69  le..REM quotes i
0960: 66 20 74 68 65 79 20 63 6f 6e 74 61 69 6e 20 73  f they contain s
0970: 70 61 63 65 73 2e 0d 0a 52 45 4d 0d 0a 52 45 4d  paces...REM..REM
0980: 20 50 6c 65 61 73 65 20 6e 6f 74 65 20 74 68 61   Please note tha
0990: 74 20 74 68 65 20 53 51 4c 69 74 65 20 62 75 69  t the SQLite bui
09a0: 6c 64 20 70 72 6f 63 65 73 73 20 70 65 72 66 6f  ld process perfo
09b0: 72 6d 65 64 20 62 79 20 74 68 65 20 4d 61 6b 65  rmed by the Make
09c0: 66 69 6c 65 0d 0a 52 45 4d 20 61 73 73 6f 63 69  file..REM associ
09d0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 62  ated with this b
09e0: 61 74 63 68 20 73 63 72 69 70 74 20 72 65 71 75  atch script requ
09f0: 69 72 65 73 20 62 6f 74 68 20 47 61 77 6b 20 5e  ires both Gawk ^
0a00: 28 67 61 77 6b 2e 65 78 65 5e 29 20 61 6e 64 20  (gawk.exe^) and 
0a10: 54 63 6c 0d 0a 52 45 4d 20 38 2e 35 20 5e 28 74  Tcl..REM 8.5 ^(t
0a20: 63 6c 73 68 38 35 2e 65 78 65 5e 29 20 74 6f 20  clsh85.exe^) to 
0a30: 62 65 20 70 72 65 73 65 6e 74 20 69 6e 20 61 20  be present in a 
0a40: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69  directory contai
0a50: 6e 65 64 20 69 6e 20 74 68 65 20 50 41 54 48 0d  ned in the PATH.
0a60: 0a 52 45 4d 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  .REM environment
0a70: 20 76 61 72 69 61 62 6c 65 20 75 6e 6c 65 73 73   variable unless
0a80: 20 61 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20   a pre-existing 
0a90: 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 66 69 6c  amalgamation fil
0aa0: 65 20 69 73 20 75 73 65 64 2e 0d 0a 52 45 4d 0d  e is used...REM.
0ab0: 0a 53 45 54 4c 4f 43 41 4c 0d 0a 0d 0a 52 45 4d  .SETLOCAL....REM
0ac0: 20 53 45 54 20 5f 5f 45 43 48 4f 3d 45 43 48 4f   SET __ECHO=ECHO
0ad0: 0d 0a 52 45 4d 20 53 45 54 20 5f 5f 45 43 48 4f  ..REM SET __ECHO
0ae0: 32 3d 45 43 48 4f 0d 0a 52 45 4d 20 53 45 54 20  2=ECHO..REM SET 
0af0: 5f 5f 45 43 48 4f 33 3d 45 43 48 4f 0d 0a 49 46  __ECHO3=ECHO..IF
0b00: 20 4e 4f 54 20 44 45 46 49 4e 45 44 20 5f 41 45   NOT DEFINED _AE
0b10: 43 48 4f 20 28 53 45 54 20 5f 41 45 43 48 4f 3d  CHO (SET _AECHO=
0b20: 52 45 4d 29 0d 0a 49 46 20 4e 4f 54 20 44 45 46  REM)..IF NOT DEF
0b30: 49 4e 45 44 20 5f 43 45 43 48 4f 20 28 53 45 54  INED _CECHO (SET
0b40: 20 5f 43 45 43 48 4f 3d 52 45 4d 29 0d 0a 49 46   _CECHO=REM)..IF
0b50: 20 4e 4f 54 20 44 45 46 49 4e 45 44 20 5f 56 45   NOT DEFINED _VE
0b60: 43 48 4f 20 28 53 45 54 20 5f 56 45 43 48 4f 3d  CHO (SET _VECHO=
0b70: 52 45 4d 29 0d 0a 0d 0a 25 5f 41 45 43 48 4f 25  REM)....%_AECHO%
0b80: 20 52 75 6e 6e 69 6e 67 20 25 30 20 25 2a 0d 0a   Running %0 %*..
0b90: 0d 0a 52 45 4d 20 53 45 54 20 44 46 4c 41 47 53  ..REM SET DFLAGS
0ba0: 3d 2f 4c 0d 0a 0d 0a 25 5f 56 45 43 48 4f 25 20  =/L....%_VECHO% 
0bb0: 44 46 6c 61 67 73 20 3d 20 27 25 44 46 4c 41 47  DFlags = '%DFLAG
0bc0: 53 25 27 0d 0a 0d 0a 53 45 54 20 46 46 4c 41 47  S%'....SET FFLAG
0bd0: 53 3d 2f 56 20 2f 46 20 2f 47 20 2f 48 20 2f 49  S=/V /F /G /H /I
0be0: 20 2f 52 20 2f 59 20 2f 5a 0d 0a 0d 0a 25 5f 56   /R /Y /Z....%_V
0bf0: 45 43 48 4f 25 20 46 46 6c 61 67 73 20 3d 20 27  ECHO% FFlags = '
0c00: 25 46 46 4c 41 47 53 25 27 0d 0a 0d 0a 53 45 54  %FFLAGS%'....SET
0c10: 20 52 4f 4f 54 3d 25 7e 64 70 30 5c 2e 2e 0d 0a   ROOT=%~dp0\....
0c20: 53 45 54 20 52 4f 4f 54 3d 25 52 4f 4f 54 3a 5c  SET ROOT=%ROOT:\
0c30: 5c 3d 5c 25 0d 0a 0d 0a 25 5f 56 45 43 48 4f 25  \=\%....%_VECHO%
0c40: 20 52 6f 6f 74 20 3d 20 27 25 52 4f 4f 54 25 27   Root = '%ROOT%'
0c50: 0d 0a 0d 0a 52 45 4d 0d 0a 52 45 4d 20 4e 4f 54  ....REM..REM NOT
0c60: 45 3a 20 54 68 65 20 66 69 72 73 74 20 61 6e 64  E: The first and
0c70: 20 6f 6e 6c 79 20 61 72 67 75 6d 65 6e 74 20 74   only argument t
0c80: 6f 20 74 68 69 73 20 62 61 74 63 68 20 66 69 6c  o this batch fil
0c90: 65 20 73 68 6f 75 6c 64 20 62 65 20 74 68 65 20  e should be the 
0ca0: 6f 75 74 70 75 74 0d 0a 52 45 4d 20 20 20 20 20  output..REM     
0cb0: 20 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72    directory wher
0cc0: 65 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 2d 73  e the platform-s
0cd0: 70 65 63 69 66 69 63 20 62 69 6e 61 72 79 20 64  pecific binary d
0ce0: 69 72 65 63 74 6f 72 69 65 73 20 73 68 6f 75 6c  irectories shoul
0cf0: 64 20 62 65 0d 0a 52 45 4d 20 20 20 20 20 20 20  d be..REM       
0d00: 63 72 65 61 74 65 64 2e 0d 0a 52 45 4d 0d 0a 53  created...REM..S
0d10: 45 54 20 42 49 4e 41 52 59 44 49 52 45 43 54 4f  ET BINARYDIRECTO
0d20: 52 59 3d 25 31 0d 0a 0d 0a 49 46 20 4e 4f 54 20  RY=%1....IF NOT 
0d30: 44 45 46 49 4e 45 44 20 42 49 4e 41 52 59 44 49  DEFINED BINARYDI
0d40: 52 45 43 54 4f 52 59 20 28 0d 0a 20 20 47 4f 54  RECTORY (..  GOT
0d50: 4f 20 75 73 61 67 65 0d 0a 29 0d 0a 0d 0a 25 5f  O usage..)....%_
0d60: 56 45 43 48 4f 25 20 42 69 6e 61 72 79 44 69 72  VECHO% BinaryDir
0d70: 65 63 74 6f 72 79 20 3d 20 27 25 42 49 4e 41 52  ectory = '%BINAR
0d80: 59 44 49 52 45 43 54 4f 52 59 25 27 0d 0a 0d 0a  YDIRECTORY%'....
0d90: 53 45 54 20 44 55 4d 4d 59 3d 25 32 0d 0a 0d 0a  SET DUMMY=%2....
0da0: 49 46 20 44 45 46 49 4e 45 44 20 44 55 4d 4d 59  IF DEFINED DUMMY
0db0: 20 28 0d 0a 20 20 47 4f 54 4f 20 75 73 61 67 65   (..  GOTO usage
0dc0: 0d 0a 29 0d 0a 0d 0a 52 45 4d 0d 0a 52 45 4d 20  ..)....REM..REM 
0dd0: 4e 4f 54 45 3a 20 46 72 6f 6d 20 74 68 69 73 20  NOTE: From this 
0de0: 70 6f 69 6e 74 2c 20 77 65 20 6e 65 65 64 20 61  point, we need a
0df0: 20 63 6c 65 61 6e 20 65 72 72 6f 72 20 6c 65 76   clean error lev
0e00: 65 6c 2e 20 20 52 65 73 65 74 20 69 74 20 6e 6f  el.  Reset it no
0e10: 77 2e 0d 0a 52 45 4d 0d 0a 43 41 4c 4c 20 3a 66  w...REM..CALL :f
0e20: 6e 5f 52 65 73 65 74 45 72 72 6f 72 4c 65 76 65  n_ResetErrorLeve
0e30: 6c 0d 0a 0d 0a 52 45 4d 0d 0a 52 45 4d 20 4e 4f  l....REM..REM NO
0e40: 54 45 3a 20 43 68 61 6e 67 65 20 74 68 65 20 63  TE: Change the c
0e50: 75 72 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79  urrent directory
0e60: 20 74 6f 20 74 68 65 20 72 6f 6f 74 20 6f 66 20   to the root of 
0e70: 74 68 65 20 73 6f 75 72 63 65 20 74 72 65 65 2c  the source tree,
0e80: 20 73 61 76 69 6e 67 0d 0a 52 45 4d 20 20 20 20   saving..REM    
0e90: 20 20 20 74 68 65 20 63 75 72 72 65 6e 74 20 64     the current d
0ea0: 69 72 65 63 74 6f 72 79 20 6f 6e 20 74 68 65 20  irectory on the 
0eb0: 64 69 72 65 63 74 6f 72 79 20 73 74 61 63 6b 2e  directory stack.
0ec0: 0d 0a 52 45 4d 0d 0a 25 5f 5f 45 43 48 4f 32 25  ..REM..%__ECHO2%
0ed0: 20 50 55 53 48 44 20 22 25 52 4f 4f 54 25 22 0d   PUSHD "%ROOT%".
0ee0: 0a 0d 0a 49 46 20 45 52 52 4f 52 4c 45 56 45 4c  ...IF ERRORLEVEL
0ef0: 20 31 20 28 0d 0a 20 20 45 43 48 4f 20 43 6f 75   1 (..  ECHO Cou
0f00: 6c 64 20 6e 6f 74 20 63 68 61 6e 67 65 20 64 69  ld not change di
0f10: 72 65 63 74 6f 72 79 20 74 6f 20 22 25 52 4f 4f  rectory to "%ROO
0f20: 54 25 22 2e 0d 0a 20 20 47 4f 54 4f 20 65 72 72  T%"...  GOTO err
0f30: 6f 72 73 0d 0a 29 0d 0a 0d 0a 52 45 4d 0d 0a 52  ors..)....REM..R
0f40: 45 4d 20 4e 4f 54 45 3a 20 54 68 69 73 20 62 61  EM NOTE: This ba
0f50: 74 63 68 20 66 69 6c 65 20 72 65 71 75 69 72 65  tch file require
0f60: 73 20 74 68 65 20 43 6f 6d 53 70 65 63 20 65 6e  s the ComSpec en
0f70: 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
0f80: 6c 65 20 74 6f 20 62 65 20 73 65 74 2c 0d 0a 52  le to be set,..R
0f90: 45 4d 20 20 20 20 20 20 20 74 79 70 69 63 61 6c  EM       typical
0fa0: 6c 79 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 20  ly to something 
0fb0: 6c 69 6b 65 20 22 43 3a 5c 57 69 6e 64 6f 77 73  like "C:\Windows
0fc0: 5c 53 79 73 74 65 6d 33 32 5c 63 6d 64 2e 65 78  \System32\cmd.ex
0fd0: 65 22 2e 0d 0a 52 45 4d 0d 0a 49 46 20 4e 4f 54  e"...REM..IF NOT
0fe0: 20 44 45 46 49 4e 45 44 20 43 6f 6d 53 70 65 63   DEFINED ComSpec
0ff0: 20 28 0d 0a 20 20 45 43 48 4f 20 54 68 65 20 43   (..  ECHO The C
1000: 6f 6d 53 70 65 63 20 65 6e 76 69 72 6f 6e 6d 65  omSpec environme
1010: 6e 74 20 76 61 72 69 61 62 6c 65 20 6d 75 73 74  nt variable must
1020: 20 62 65 20 64 65 66 69 6e 65 64 2e 0d 0a 20 20   be defined...  
1030: 47 4f 54 4f 20 65 72 72 6f 72 73 0d 0a 29 0d 0a  GOTO errors..)..
1040: 0d 0a 52 45 4d 0d 0a 52 45 4d 20 4e 4f 54 45 3a  ..REM..REM NOTE:
1050: 20 54 68 69 73 20 62 61 74 63 68 20 66 69 6c 65   This batch file
1060: 20 72 65 71 75 69 72 65 73 20 74 68 65 20 56 63   requires the Vc
1070: 49 6e 73 74 61 6c 6c 44 69 72 20 65 6e 76 69 72  InstallDir envir
1080: 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20  onment variable 
1090: 74 6f 20 62 65 0d 0a 52 45 4d 20 20 20 20 20 20  to be..REM      
10a0: 20 73 65 74 2e 20 20 54 79 69 70 63 61 6c 6c 79   set.  Tyipcally
10b0: 2c 20 74 68 69 73 20 6d 65 61 6e 73 20 74 68 69  , this means thi
10c0: 73 20 62 61 74 63 68 20 66 69 6c 65 20 6e 65 65  s batch file nee
10d0: 64 73 20 74 6f 20 62 65 20 72 75 6e 20 66 72 6f  ds to be run fro
10e0: 6d 20 61 6e 0d 0a 52 45 4d 20 20 20 20 20 20 20  m an..REM       
10f0: 4d 53 56 43 20 63 6f 6d 6d 61 6e 64 20 70 72 6f  MSVC command pro
1100: 6d 70 74 2e 0d 0a 52 45 4d 0d 0a 49 46 20 4e 4f  mpt...REM..IF NO
1110: 54 20 44 45 46 49 4e 45 44 20 56 43 49 4e 53 54  T DEFINED VCINST
1120: 41 4c 4c 44 49 52 20 28 0d 0a 20 20 45 43 48 4f  ALLDIR (..  ECHO
1130: 20 54 68 65 20 56 43 49 4e 53 54 41 4c 4c 44 49   The VCINSTALLDI
1140: 52 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61  R environment va
1150: 72 69 61 62 6c 65 20 6d 75 73 74 20 62 65 20 64  riable must be d
1160: 65 66 69 6e 65 64 2e 0d 0a 20 20 47 4f 54 4f 20  efined...  GOTO 
1170: 65 72 72 6f 72 73 0d 0a 29 0d 0a 0d 0a 52 45 4d  errors..)....REM
1180: 0d 0a 52 45 4d 20 4e 4f 54 45 3a 20 49 66 20 74  ..REM NOTE: If t
1190: 68 65 20 6c 69 73 74 20 6f 66 20 70 6c 61 74 66  he list of platf
11a0: 6f 72 6d 73 20 69 73 20 6e 6f 74 20 61 6c 72 65  orms is not alre
11b0: 61 64 79 20 73 65 74 2c 20 75 73 65 20 74 68 65  ady set, use the
11c0: 20 64 65 66 61 75 6c 74 20 6c 69 73 74 2e 0d 0a   default list...
11d0: 52 45 4d 0d 0a 49 46 20 4e 4f 54 20 44 45 46 49  REM..IF NOT DEFI
11e0: 4e 45 44 20 50 4c 41 54 46 4f 52 4d 53 20 28 0d  NED PLATFORMS (.
11f0: 0a 20 20 53 45 54 20 50 4c 41 54 46 4f 52 4d 53  .  SET PLATFORMS
1200: 3d 78 38 36 20 78 38 36 5f 61 6d 64 36 34 20 78  =x86 x86_amd64 x
1210: 38 36 5f 61 72 6d 0d 0a 29 0d 0a 0d 0a 25 5f 56  86_arm..)....%_V
1220: 45 43 48 4f 25 20 50 6c 61 74 66 6f 72 6d 73 20  ECHO% Platforms 
1230: 3d 20 27 25 50 4c 41 54 46 4f 52 4d 53 25 27 0d  = '%PLATFORMS%'.
1240: 0a 0d 0a 52 45 4d 0d 0a 52 45 4d 20 4e 4f 54 45  ...REM..REM NOTE
1250: 3a 20 49 66 20 74 68 65 20 6c 69 73 74 20 6f 66  : If the list of
1260: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20   configurations 
1270: 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 73  is not already s
1280: 65 74 2c 20 75 73 65 20 74 68 65 20 64 65 66 61  et, use the defa
1290: 75 6c 74 0d 0a 52 45 4d 20 20 20 20 20 20 20 6c  ult..REM       l
12a0: 69 73 74 2e 0d 0a 52 45 4d 0d 0a 49 46 20 4e 4f  ist...REM..IF NO
12b0: 54 20 44 45 46 49 4e 45 44 20 43 4f 4e 46 49 47  T DEFINED CONFIG
12c0: 55 52 41 54 49 4f 4e 53 20 28 0d 0a 20 20 53 45  URATIONS (..  SE
12d0: 54 20 43 4f 4e 46 49 47 55 52 41 54 49 4f 4e 53  T CONFIGURATIONS
12e0: 3d 44 65 62 75 67 20 52 65 74 61 69 6c 0d 0a 29  =Debug Retail..)
12f0: 0d 0a 0d 0a 25 5f 56 45 43 48 4f 25 20 43 6f 6e  ....%_VECHO% Con
1300: 66 69 67 75 72 61 74 69 6f 6e 73 20 3d 20 27 25  figurations = '%
1310: 43 4f 4e 46 49 47 55 52 41 54 49 4f 4e 53 25 27  CONFIGURATIONS%'
1320: 0d 0a 0d 0a 52 45 4d 0d 0a 52 45 4d 20 4e 4f 54  ....REM..REM NOT
1330: 45 3a 20 53 65 74 75 70 20 65 6e 76 69 72 6f 6e  E: Setup environ
1340: 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20 74  ment variables t
1350: 6f 20 74 72 61 6e 73 6c 61 74 65 20 62 65 74 77  o translate betw
1360: 65 65 6e 20 74 68 65 20 4d 53 56 43 20 70 6c 61  een the MSVC pla
1370: 74 66 6f 72 6d 0d 0a 52 45 4d 20 20 20 20 20 20  tform..REM      
1380: 20 6e 61 6d 65 73 20 61 6e 64 20 74 68 65 20 6e   names and the n
1390: 61 6d 65 73 20 74 6f 20 62 65 20 75 73 65 64 20  ames to be used 
13a0: 66 6f 72 20 74 68 65 20 70 6c 61 74 66 6f 72 6d  for the platform
13b0: 2d 73 70 65 63 69 66 69 63 20 62 69 6e 61 72 79  -specific binary
13c0: 0d 0a 52 45 4d 20 20 20 20 20 20 20 64 69 72 65  ..REM       dire
13d0: 63 74 6f 72 69 65 73 2e 0d 0a 52 45 4d 0d 0a 53  ctories...REM..S
13e0: 45 54 20 61 6d 64 36 34 5f 4e 41 4d 45 3d 78 36  ET amd64_NAME=x6
13f0: 34 0d 0a 53 45 54 20 61 72 6d 5f 4e 41 4d 45 3d  4..SET arm_NAME=
1400: 41 52 4d 0d 0a 53 45 54 20 78 36 34 5f 4e 41 4d  ARM..SET x64_NAM
1410: 45 3d 78 36 34 0d 0a 53 45 54 20 78 38 36 5f 4e  E=x64..SET x86_N
1420: 41 4d 45 3d 78 38 36 0d 0a 53 45 54 20 78 38 36  AME=x86..SET x86
1430: 5f 61 6d 64 36 34 5f 4e 41 4d 45 3d 78 36 34 0d  _amd64_NAME=x64.
1440: 0a 53 45 54 20 78 38 36 5f 61 72 6d 5f 4e 41 4d  .SET x86_arm_NAM
1450: 45 3d 41 52 4d 0d 0a 53 45 54 20 78 38 36 5f 78  E=ARM..SET x86_x
1460: 36 34 5f 4e 41 4d 45 3d 78 36 34 0d 0a 0d 0a 25  64_NAME=x64....%
1470: 5f 56 45 43 48 4f 25 20 61 6d 64 36 34 5f 4e 61  _VECHO% amd64_Na
1480: 6d 65 20 3d 20 27 25 61 6d 64 36 34 5f 4e 41 4d  me = '%amd64_NAM
1490: 45 25 27 0d 0a 25 5f 56 45 43 48 4f 25 20 61 72  E%'..%_VECHO% ar
14a0: 6d 5f 4e 61 6d 65 20 3d 20 27 25 61 72 6d 5f 4e  m_Name = '%arm_N
14b0: 41 4d 45 25 27 0d 0a 25 5f 56 45 43 48 4f 25 20  AME%'..%_VECHO% 
14c0: 78 36 34 5f 4e 61 6d 65 20 3d 20 27 25 78 36 34  x64_Name = '%x64
14d0: 5f 4e 41 4d 45 25 27 0d 0a 25 5f 56 45 43 48 4f  _NAME%'..%_VECHO
14e0: 25 20 78 38 36 5f 4e 61 6d 65 20 3d 20 27 25 78  % x86_Name = '%x
14f0: 38 36 5f 4e 41 4d 45 25 27 0d 0a 25 5f 56 45 43  86_NAME%'..%_VEC
1500: 48 4f 25 20 78 38 36 5f 61 6d 64 36 34 5f 4e 61  HO% x86_amd64_Na
1510: 6d 65 20 3d 20 27 25 78 38 36 5f 61 6d 64 36 34  me = '%x86_amd64
1520: 5f 4e 41 4d 45 25 27 0d 0a 25 5f 56 45 43 48 4f  _NAME%'..%_VECHO
1530: 25 20 78 38 36 5f 61 72 6d 5f 4e 61 6d 65 20 3d  % x86_arm_Name =
1540: 20 27 25 78 38 36 5f 61 72 6d 5f 4e 41 4d 45 25   '%x86_arm_NAME%
1550: 27 0d 0a 25 5f 56 45 43 48 4f 25 20 78 38 36 5f  '..%_VECHO% x86_
1560: 78 36 34 5f 4e 61 6d 65 20 3d 20 27 25 78 38 36  x64_Name = '%x86
1570: 5f 78 36 34 5f 4e 41 4d 45 25 27 0d 0a 0d 0a 52  _x64_NAME%'....R
1580: 45 4d 0d 0a 52 45 4d 20 4e 4f 54 45 3a 20 43 68  EM..REM NOTE: Ch
1590: 65 63 6b 20 66 6f 72 20 74 68 65 20 65 78 74 65  eck for the exte
15a0: 72 6e 61 6c 20 74 6f 6f 6c 73 20 6e 65 65 64 65  rnal tools neede
15b0: 64 20 64 75 72 69 6e 67 20 74 68 65 20 62 75 69  d during the bui
15c0: 6c 64 20 70 72 6f 63 65 73 73 20 5e 28 69 2e 65  ld process ^(i.e
15d0: 2e 0d 0a 52 45 4d 20 20 20 20 20 20 20 74 68 6f  ...REM       tho
15e0: 73 65 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 67  se that do not g
15f0: 65 74 20 63 6f 6d 70 69 6c 65 64 20 61 73 20 70  et compiled as p
1600: 61 72 74 20 6f 66 20 74 68 65 20 62 75 69 6c 64  art of the build
1610: 20 70 72 6f 63 65 73 73 20 69 74 73 65 6c 66 5e   process itself^
1620: 29 0d 0a 52 45 4d 20 20 20 20 20 20 20 61 6c 6f  )..REM       alo
1630: 6e 67 20 74 68 65 20 50 41 54 48 2e 0d 0a 52 45  ng the PATH...RE
1640: 4d 0d 0a 46 4f 52 20 25 25 54 20 49 4e 20 28 67  M..FOR %%T IN (g
1650: 61 77 6b 2e 65 78 65 20 74 63 6c 73 68 38 35 2e  awk.exe tclsh85.
1660: 65 78 65 29 20 44 4f 20 28 0d 0a 20 20 53 45 54  exe) DO (..  SET
1670: 20 25 25 54 5f 50 41 54 48 3d 25 25 7e 64 70 24   %%T_PATH=%%~dp$
1680: 50 41 54 48 3a 54 0d 0a 29 0d 0a 0d 0a 52 45 4d  PATH:T..)....REM
1690: 0d 0a 52 45 4d 20 4e 4f 54 45 3a 20 54 68 65 20  ..REM NOTE: The 
16a0: 47 61 77 6b 20 65 78 65 63 75 74 61 62 6c 65 20  Gawk executable 
16b0: 22 67 61 77 6b 2e 65 78 65 22 20 69 73 20 72 65  "gawk.exe" is re
16c0: 71 75 69 72 65 64 20 64 75 72 69 6e 67 20 74 68  quired during th
16d0: 65 20 53 51 4c 69 74 65 20 62 75 69 6c 64 0d 0a  e SQLite build..
16e0: 52 45 4d 20 20 20 20 20 20 20 70 72 6f 63 65 73  REM       proces
16f0: 73 20 75 6e 6c 65 73 73 20 61 20 70 72 65 2d 65  s unless a pre-e
1700: 78 69 73 74 69 6e 67 20 61 6d 61 6c 67 61 6d 61  xisting amalgama
1710: 74 69 6f 6e 20 66 69 6c 65 20 69 73 20 75 73 65  tion file is use
1720: 64 2e 0d 0a 52 45 4d 0d 0a 49 46 20 4e 4f 54 20  d...REM..IF NOT 
1730: 44 45 46 49 4e 45 44 20 67 61 77 6b 2e 65 78 65  DEFINED gawk.exe
1740: 5f 50 41 54 48 20 28 0d 0a 20 20 45 43 48 4f 20  _PATH (..  ECHO 
1750: 54 68 65 20 47 61 77 6b 20 65 78 65 63 75 74 61  The Gawk executa
1760: 62 6c 65 20 22 67 61 77 6b 2e 65 78 65 22 20 69  ble "gawk.exe" i
1770: 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 62 65  s required to be
1780: 20 69 6e 20 74 68 65 20 50 41 54 48 2e 0d 0a 20   in the PATH... 
1790: 20 47 4f 54 4f 20 65 72 72 6f 72 73 0d 0a 29 0d   GOTO errors..).
17a0: 0a 0d 0a 52 45 4d 0d 0a 52 45 4d 20 4e 4f 54 45  ...REM..REM NOTE
17b0: 3a 20 54 68 65 20 54 63 6c 20 38 2e 35 20 65 78  : The Tcl 8.5 ex
17c0: 65 63 75 74 61 62 6c 65 20 22 74 63 6c 73 68 38  ecutable "tclsh8
17d0: 35 2e 65 78 65 22 20 69 73 20 72 65 71 75 69 72  5.exe" is requir
17e0: 65 64 20 64 75 72 69 6e 67 20 74 68 65 20 53 51  ed during the SQ
17f0: 4c 69 74 65 0d 0a 52 45 4d 20 20 20 20 20 20 20  Lite..REM       
1800: 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 75 6e  build process un
1810: 6c 65 73 73 20 61 20 70 72 65 2d 65 78 69 73 74  less a pre-exist
1820: 69 6e 67 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  ing amalgamation
1830: 20 66 69 6c 65 20 69 73 20 75 73 65 64 2e 0d 0a   file is used...
1840: 52 45 4d 0d 0a 49 46 20 4e 4f 54 20 44 45 46 49  REM..IF NOT DEFI
1850: 4e 45 44 20 74 63 6c 73 68 38 35 2e 65 78 65 5f  NED tclsh85.exe_
1860: 50 41 54 48 20 28 0d 0a 20 20 45 43 48 4f 20 54  PATH (..  ECHO T
1870: 68 65 20 54 63 6c 20 38 2e 35 20 65 78 65 63 75  he Tcl 8.5 execu
1880: 74 61 62 6c 65 20 22 74 63 6c 73 68 38 35 2e 65  table "tclsh85.e
1890: 78 65 22 20 69 73 20 72 65 71 75 69 72 65 64 20  xe" is required 
18a0: 74 6f 20 62 65 20 69 6e 20 74 68 65 20 50 41 54  to be in the PAT
18b0: 48 2e 0d 0a 20 20 47 4f 54 4f 20 65 72 72 6f 72  H...  GOTO error
18c0: 73 0d 0a 29 0d 0a 0d 0a 52 45 4d 0d 0a 52 45 4d  s..)....REM..REM
18d0: 20 4e 4f 54 45 3a 20 53 65 74 20 74 68 65 20 54   NOTE: Set the T
18e0: 4f 4f 4c 50 41 54 48 20 76 61 72 69 61 62 6c 65  OOLPATH variable
18f0: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6c 6c 20   to contain all 
1900: 74 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 20  the directories 
1910: 77 68 65 72 65 20 74 68 65 0d 0a 52 45 4d 20 20  where the..REM  
1920: 20 20 20 20 20 65 78 74 65 72 6e 61 6c 20 74 6f       external to
1930: 6f 6c 73 20 77 65 72 65 20 66 6f 75 6e 64 20 69  ols were found i
1940: 6e 20 74 68 65 20 73 65 61 72 63 68 20 61 62 6f  n the search abo
1950: 76 65 2e 0d 0a 52 45 4d 0d 0a 53 45 54 20 54 4f  ve...REM..SET TO
1960: 4f 4c 50 41 54 48 3d 25 67 61 77 6b 2e 65 78 65  OLPATH=%gawk.exe
1970: 5f 50 41 54 48 25 3b 25 74 63 6c 73 68 38 35 2e  _PATH%;%tclsh85.
1980: 65 78 65 5f 50 41 54 48 25 0d 0a 0d 0a 25 5f 56  exe_PATH%....%_V
1990: 45 43 48 4f 25 20 54 6f 6f 6c 50 61 74 68 20 3d  ECHO% ToolPath =
19a0: 20 27 25 54 4f 4f 4c 50 41 54 48 25 27 0d 0a 0d   '%TOOLPATH%'...
19b0: 0a 52 45 4d 0d 0a 52 45 4d 20 4e 4f 54 45 3a 20  .REM..REM NOTE: 
19c0: 43 68 65 63 6b 20 66 6f 72 20 4d 53 56 43 20 32  Check for MSVC 2
19d0: 30 31 32 20 62 65 63 61 75 73 65 20 74 68 65 20  012 because the 
19e0: 57 69 6e 64 6f 77 73 20 53 44 4b 20 64 69 72 65  Windows SDK dire
19f0: 63 74 6f 72 79 20 68 61 6e 64 6c 69 6e 67 20 69  ctory handling i
1a00: 73 0d 0a 52 45 4d 20 20 20 20 20 20 20 73 6c 69  s..REM       sli
1a10: 67 68 74 6c 79 20 64 69 66 66 65 72 65 6e 74 20  ghtly different 
1a20: 66 6f 72 20 74 68 61 74 20 76 65 72 73 69 6f 6e  for that version
1a30: 2e 0d 0a 52 45 4d 0d 0a 49 46 20 22 25 56 69 73  ...REM..IF "%Vis
1a40: 75 61 6c 53 74 75 64 69 6f 56 65 72 73 69 6f 6e  ualStudioVersion
1a50: 25 22 20 3d 3d 20 22 31 31 2e 30 22 20 28 0d 0a  %" == "11.0" (..
1a60: 20 20 52 45 4d 0d 0a 20 20 52 45 4d 20 4e 4f 54    REM..  REM NOT
1a70: 45 3a 20 49 66 20 74 68 65 20 57 69 6e 64 6f 77  E: If the Window
1a80: 73 20 53 44 4b 20 6c 69 62 72 61 72 79 20 70 61  s SDK library pa
1a90: 74 68 20 68 61 73 20 61 6c 72 65 61 64 79 20 62  th has already b
1aa0: 65 65 6e 20 73 65 74 2c 20 64 6f 20 6e 6f 74 20  een set, do not 
1ab0: 73 65 74 0d 0a 20 20 52 45 4d 20 20 20 20 20 20  set..  REM      
1ac0: 20 69 74 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67   it to something
1ad0: 20 65 6c 73 65 20 6c 61 74 65 72 20 6f 6e 2e 0d   else later on..
1ae0: 0a 20 20 52 45 4d 0d 0a 20 20 49 46 20 4e 4f 54  .  REM..  IF NOT
1af0: 20 44 45 46 49 4e 45 44 20 4e 53 44 4b 4c 49 42   DEFINED NSDKLIB
1b00: 50 41 54 48 20 28 0d 0a 20 20 20 20 53 45 54 20  PATH (..    SET 
1b10: 53 45 54 5f 4e 53 44 4b 4c 49 42 50 41 54 48 3d  SET_NSDKLIBPATH=
1b20: 31 0d 0a 20 20 29 0d 0a 29 20 45 4c 53 45 20 28  1..  )..) ELSE (
1b30: 0d 0a 20 20 43 41 4c 4c 20 3a 66 6e 5f 55 6e 73  ..  CALL :fn_Uns
1b40: 65 74 56 61 72 69 61 62 6c 65 20 53 45 54 5f 4e  etVariable SET_N
1b50: 53 44 4b 4c 49 42 50 41 54 48 0d 0a 29 0d 0a 0d  SDKLIBPATH..)...
1b60: 0a 52 45 4d 0d 0a 52 45 4d 20 4e 4f 54 45 3a 20  .REM..REM NOTE: 
1b70: 43 68 65 63 6b 20 69 66 20 74 68 69 73 20 69 73  Check if this is
1b80: 20 74 68 65 20 57 69 6e 64 6f 77 73 20 50 68 6f   the Windows Pho
1b90: 6e 65 20 53 44 4b 2e 20 20 49 66 20 73 6f 2c 20  ne SDK.  If so, 
1ba0: 61 20 64 69 66 66 65 72 65 6e 74 20 62 61 74 63  a different batc
1bb0: 68 0d 0a 52 45 4d 20 20 20 20 20 20 20 66 69 6c  h..REM       fil
1bc0: 65 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74  e is necessary t
1bd0: 6f 20 73 65 74 75 70 20 74 68 65 20 62 75 69 6c  o setup the buil
1be0: 64 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2e 20 20  d environment.  
1bf0: 53 69 6e 63 65 20 74 68 65 20 76 61 72 69 61 62  Since the variab
1c00: 6c 65 0d 0a 52 45 4d 20 20 20 20 20 20 20 76 61  le..REM       va
1c10: 6c 75 65 73 20 69 6e 76 6f 6c 76 65 64 20 68 65  lues involved he
1c20: 72 65 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 70  re may contain p
1c30: 61 72 65 6e 74 68 65 73 69 73 2c 20 75 73 69 6e  arenthesis, usin
1c40: 67 20 47 4f 54 4f 20 69 6e 73 74 65 61 64 20 6f  g GOTO instead o
1c50: 66 0d 0a 52 45 4d 20 20 20 20 20 20 20 61 6e 20  f..REM       an 
1c60: 49 46 20 62 6c 6f 63 6b 20 69 73 20 72 65 71 75  IF block is requ
1c70: 69 72 65 64 2e 0d 0a 52 45 4d 0d 0a 49 46 20 44  ired...REM..IF D
1c80: 45 46 49 4e 45 44 20 57 69 6e 64 6f 77 73 50 68  EFINED WindowsPh
1c90: 6f 6e 65 4b 69 74 44 69 72 20 47 4f 54 4f 20 73  oneKitDir GOTO s
1ca0: 65 74 5f 76 63 76 61 72 73 61 6c 6c 5f 70 68 6f  et_vcvarsall_pho
1cb0: 6e 65 0d 0a 53 45 54 20 56 43 56 41 52 53 41 4c  ne..SET VCVARSAL
1cc0: 4c 3d 25 56 43 49 4e 53 54 41 4c 4c 44 49 52 25  L=%VCINSTALLDIR%
1cd0: 5c 76 63 76 61 72 73 61 6c 6c 2e 62 61 74 0d 0a  \vcvarsall.bat..
1ce0: 47 4f 54 4f 20 73 65 74 5f 76 63 76 61 72 73 61  GOTO set_vcvarsa
1cf0: 6c 6c 5f 64 6f 6e 65 0d 0a 3a 73 65 74 5f 76 63  ll_done..:set_vc
1d00: 76 61 72 73 61 6c 6c 5f 70 68 6f 6e 65 0d 0a 53  varsall_phone..S
1d10: 45 54 20 56 43 56 41 52 53 41 4c 4c 3d 25 56 43  ET VCVARSALL=%VC
1d20: 49 4e 53 54 41 4c 4c 44 49 52 25 5c 57 50 53 44  INSTALLDIR%\WPSD
1d30: 4b 5c 57 50 38 30 5c 76 63 76 61 72 73 70 68 6f  K\WP80\vcvarspho
1d40: 6e 65 61 6c 6c 2e 62 61 74 0d 0a 3a 73 65 74 5f  neall.bat..:set_
1d50: 76 63 76 61 72 73 61 6c 6c 5f 64 6f 6e 65 0d 0a  vcvarsall_done..
1d60: 0d 0a 52 45 4d 0d 0a 52 45 4d 20 4e 4f 54 45 3a  ..REM..REM NOTE:
1d70: 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 75 74   This is the out
1d80: 65 72 20 6c 6f 6f 70 2e 20 20 54 68 65 72 65 20  er loop.  There 
1d90: 73 68 6f 75 6c 64 20 62 65 20 65 78 61 63 74 6c  should be exactl
1da0: 79 20 6f 6e 65 20 69 74 65 72 61 74 69 6f 6e 20  y one iteration 
1db0: 70 65 72 0d 0a 52 45 4d 20 20 20 20 20 20 20 70  per..REM       p
1dc0: 6c 61 74 66 6f 72 6d 2e 0d 0a 52 45 4d 0d 0a 46  latform...REM..F
1dd0: 4f 52 20 25 25 50 20 49 4e 20 28 25 50 4c 41 54  OR %%P IN (%PLAT
1de0: 46 4f 52 4d 53 25 29 20 44 4f 20 28 0d 0a 20 20  FORMS%) DO (..  
1df0: 52 45 4d 0d 0a 20 20 52 45 4d 20 4e 4f 54 45 3a  REM..  REM NOTE:
1e00: 20 55 73 69 6e 67 20 74 68 65 20 4d 53 56 43 20   Using the MSVC 
1e10: 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 2c 20 6c  platform name, l
1e20: 6f 6f 6b 75 70 20 74 68 65 20 73 69 6d 70 6c 65  ookup the simple
1e30: 72 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20  r platform name 
1e40: 74 6f 0d 0a 20 20 52 45 4d 20 20 20 20 20 20 20  to..  REM       
1e50: 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
1e60: 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74  name of the plat
1e70: 66 6f 72 6d 2d 73 70 65 63 69 66 69 63 20 62 69  form-specific bi
1e80: 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 76  nary directory v
1e90: 69 61 0d 0a 20 20 52 45 4d 20 20 20 20 20 20 20  ia..  REM       
1ea0: 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  the environment 
1eb0: 76 61 72 69 61 62 6c 65 73 20 73 65 74 75 70 20  variables setup 
1ec0: 65 61 72 6c 69 65 72 2e 0d 0a 20 20 52 45 4d 0d  earlier...  REM.
1ed0: 0a 20 20 43 41 4c 4c 20 3a 66 6e 5f 43 6f 70 79  .  CALL :fn_Copy
1ee0: 56 61 72 69 61 62 6c 65 20 25 25 50 5f 4e 41 4d  Variable %%P_NAM
1ef0: 45 20 50 4c 41 54 46 4f 52 4d 4e 41 4d 45 0d 0a  E PLATFORMNAME..
1f00: 0d 0a 20 20 52 45 4d 0d 0a 20 20 52 45 4d 20 4e  ..  REM..  REM N
1f10: 4f 54 45 3a 20 54 68 69 73 20 69 73 20 74 68 65  OTE: This is the
1f20: 20 69 6e 6e 65 72 20 6c 6f 6f 70 2e 20 20 54 68   inner loop.  Th
1f30: 65 72 65 20 73 68 6f 75 6c 64 20 62 65 20 65 78  ere should be ex
1f40: 61 63 74 6c 79 20 6f 6e 65 20 69 74 65 72 61 74  actly one iterat
1f50: 69 6f 6e 2e 0d 0a 20 20 52 45 4d 20 20 20 20 20  ion...  REM     
1f60: 20 20 54 68 69 73 20 6c 6f 6f 70 20 69 73 20 6e    This loop is n
1f70: 65 63 65 73 73 61 72 79 20 62 65 63 61 75 73 65  ecessary because
1f80: 20 74 68 65 20 50 6c 61 74 66 6f 72 6d 4e 61 6d   the PlatformNam
1f90: 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 0d 0a 20  e environment.. 
1fa0: 20 52 45 4d 20 20 20 20 20 20 20 76 61 72 69 61   REM       varia
1fb0: 62 6c 65 20 77 61 73 20 73 65 74 20 61 62 6f 76  ble was set abov
1fc0: 65 20 61 6e 64 20 74 68 61 74 20 76 61 6c 75 65  e and that value
1fd0: 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 73 6f   is needed by so
1fe0: 6d 65 20 6f 66 20 74 68 65 0d 0a 20 20 52 45 4d  me of the..  REM
1ff0: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73 20         commands 
2000: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
2010: 20 69 6e 6e 65 72 20 6c 6f 6f 70 2e 20 20 49 66   inner loop.  If
2020: 20 74 68 65 73 65 20 63 6f 6d 6d 61 6e 64 73 20   these commands 
2030: 77 65 72 65 0d 0a 20 20 52 45 4d 20 20 20 20 20  were..  REM     
2040: 20 20 64 69 72 65 63 74 6c 79 20 63 6f 6e 74 61    directly conta
2050: 69 6e 65 64 20 69 6e 20 74 68 65 20 6f 75 74 65  ined in the oute
2060: 72 20 6c 6f 6f 70 2c 20 74 68 65 20 50 6c 61 74  r loop, the Plat
2070: 66 6f 72 6d 4e 61 6d 65 20 65 6e 76 69 72 6f 6e  formName environ
2080: 6d 65 6e 74 0d 0a 20 20 52 45 4d 20 20 20 20 20  ment..  REM     
2090: 20 20 76 61 72 69 61 62 6c 65 20 77 6f 75 6c 64    variable would
20a0: 20 62 65 20 73 74 75 63 6b 20 77 69 74 68 20 69   be stuck with i
20b0: 74 73 20 69 6e 69 74 69 61 6c 20 65 6d 70 74 79  ts initial empty
20c0: 20 76 61 6c 75 65 20 69 6e 73 74 65 61 64 2e 0d   value instead..
20d0: 0a 20 20 52 45 4d 0d 0a 20 20 46 4f 52 20 2f 46  .  REM..  FOR /F
20e0: 20 22 74 6f 6b 65 6e 73 3d 32 2a 20 64 65 6c 69   "tokens=2* deli
20f0: 6d 73 3d 3d 22 20 25 25 44 20 49 4e 20 28 27 53  ms==" %%D IN ('S
2100: 45 54 20 50 4c 41 54 46 4f 52 4d 4e 41 4d 45 27  ET PLATFORMNAME'
2110: 29 20 44 4f 20 28 0d 0a 20 20 20 20 52 45 4d 0d  ) DO (..    REM.
2120: 0a 20 20 20 20 52 45 4d 20 4e 4f 54 45 3a 20 41  .    REM NOTE: A
2130: 74 74 65 6d 70 74 20 74 6f 20 63 6c 65 61 6e 20  ttempt to clean 
2140: 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  the environment 
2150: 6f 66 20 61 6c 6c 20 76 61 72 69 61 62 6c 65 73  of all variables
2160: 20 75 73 65 64 20 62 79 20 4d 53 56 43 0d 0a 20   used by MSVC.. 
2170: 20 20 20 52 45 4d 20 20 20 20 20 20 20 61 6e 64     REM       and
2180: 2f 6f 72 20 56 69 73 75 61 6c 20 53 74 75 64 69  /or Visual Studi
2190: 6f 2e 20 20 54 68 69 73 20 62 6c 6f 63 6b 20 6d  o.  This block m
21a0: 61 79 20 6e 65 65 64 20 74 6f 20 62 65 20 75 70  ay need to be up
21b0: 64 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20  dated in the..  
21c0: 20 20 52 45 4d 20 20 20 20 20 20 20 66 75 74 75    REM       futu
21d0: 72 65 20 74 6f 20 61 63 63 6f 75 6e 74 20 66 6f  re to account fo
21e0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 65 6e 76  r additional env
21f0: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
2200: 65 73 2e 0d 0a 20 20 20 20 52 45 4d 0d 0a 20 20  es...    REM..  
2210: 20 20 43 41 4c 4c 20 3a 66 6e 5f 55 6e 73 65 74    CALL :fn_Unset
2220: 56 61 72 69 61 62 6c 65 20 44 65 76 45 6e 76 44  Variable DevEnvD
2230: 69 72 0d 0a 20 20 20 20 43 41 4c 4c 20 3a 66 6e  ir..    CALL :fn
2240: 5f 55 6e 73 65 74 56 61 72 69 61 62 6c 65 20 45  _UnsetVariable E
2250: 78 74 65 6e 73 69 6f 6e 53 64 6b 44 69 72 0d 0a  xtensionSdkDir..
2260: 20 20 20 20 43 41 4c 4c 20 3a 66 6e 5f 55 6e 73      CALL :fn_Uns
2270: 65 74 56 61 72 69 61 62 6c 65 20 46 72 61 6d 65  etVariable Frame
2280: 77 6f 72 6b 33 35 56 65 72 73 69 6f 6e 0d 0a 20  work35Version.. 
2290: 20 20 20 43 41 4c 4c 20 3a 66 6e 5f 55 6e 73 65     CALL :fn_Unse
22a0: 74 56 61 72 69 61 62 6c 65 20 46 72 61 6d 65 77  tVariable Framew
22b0: 6f 72 6b 44 69 72 0d 0a 20 20 20 20 43 41 4c 4c  orkDir..    CALL
22c0: 20 3a 66 6e 5f 55 6e 73 65 74 56 61 72 69 61 62   :fn_UnsetVariab
22d0: 6c 65 20 46 72 61 6d 65 77 6f 72 6b 44 69 72 33  le FrameworkDir3
22e0: 32 0d 0a 20 20 20 20 43 41 4c 4c 20 3a 66 6e 5f  2..    CALL :fn_
22f0: 55 6e 73 65 74 56 61 72 69 61 62 6c 65 20 46 72  UnsetVariable Fr
2300: 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 0d 0a  ameworkVersion..
2310: 20 20 20 20 43 41 4c 4c 20 3a 66 6e 5f 55 6e 73      CALL :fn_Uns
2320: 65 74 56 61 72 69 61 62 6c 65 20 46 72 61 6d 65  etVariable Frame
2330: 77 6f 72 6b 56 65 72 73 69 6f 6e 33 32 0d 0a 20  workVersion32.. 
2340: 20 20 20 43 41 4c 4c 20 3a 66 6e 5f 55 6e 73 65     CALL :fn_Unse
2350: 74 56 61 72 69 61 62 6c 65 20 46 53 48 41 52 50  tVariable FSHARP
2360: 49 4e 53 54 41 4c 4c 44 49 52 0d 0a 20 20 20 20  INSTALLDIR..    
2370: 43 41 4c 4c 20 3a 66 6e 5f 55 6e 73 65 74 56 61  CALL :fn_UnsetVa
2380: 72 69 61 62 6c 65 20 49 4e 43 4c 55 44 45 0d 0a  riable INCLUDE..
2390: 20 20 20 20 43 41 4c 4c 20 3a 66 6e 5f 55 6e 73      CALL :fn_Uns
23a0: 65 74 56 61 72 69 61 62 6c 65 20 4c 49 42 0d 0a  etVariable LIB..
23b0: 20 20 20 20 43 41 4c 4c 20 3a 66 6e 5f 55 6e 73      CALL :fn_Uns
23c0: 65 74 56 61 72 69 61 62 6c 65 20 4c 49 42 50 41  etVariable LIBPA
23d0: 54 48 0d 0a 20 20 20 20 43 41 4c 4c 20 3a 66 6e  TH..    CALL :fn
23e0: 5f 55 6e 73 65 74 56 61 72 69 61 62 6c 65 20 50  _UnsetVariable P
23f0: 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 52 45 4d  latform..    REM
2400: 20 43 41 4c 4c 20 3a 66 6e 5f 55 6e 73 65 74 56   CALL :fn_UnsetV
2410: 61 72 69 61 62 6c 65 20 56 43 49 4e 53 54 41 4c  ariable VCINSTAL
2420: 4c 44 49 52 0d 0a 20 20 20 20 43 41 4c 4c 20 3a  LDIR..    CALL :
2430: 66 6e 5f 55 6e 73 65 74 56 61 72 69 61 62 6c 65  fn_UnsetVariable
2440: 20 56 53 49 4e 53 54 41 4c 4c 44 49 52 0d 0a 20   VSINSTALLDIR.. 
2450: 20 20 20 43 41 4c 4c 20 3a 66 6e 5f 55 6e 73 65     CALL :fn_Unse
2460: 74 56 61 72 69 61 62 6c 65 20 57 69 6e 64 6f 77  tVariable Window
2470: 73 50 68 6f 6e 65 4b 69 74 44 69 72 0d 0a 20 20  sPhoneKitDir..  
2480: 20 20 43 41 4c 4c 20 3a 66 6e 5f 55 6e 73 65 74    CALL :fn_Unset
2490: 56 61 72 69 61 62 6c 65 20 57 69 6e 64 6f 77 73  Variable Windows
24a0: 53 64 6b 44 69 72 0d 0a 20 20 20 20 43 41 4c 4c  SdkDir..    CALL
24b0: 20 3a 66 6e 5f 55 6e 73 65 74 56 61 72 69 61 62   :fn_UnsetVariab
24c0: 6c 65 20 57 69 6e 64 6f 77 73 53 64 6b 44 69 72  le WindowsSdkDir
24d0: 5f 33 35 0d 0a 20 20 20 20 43 41 4c 4c 20 3a 66  _35..    CALL :f
24e0: 6e 5f 55 6e 73 65 74 56 61 72 69 61 62 6c 65 20  n_UnsetVariable 
24f0: 57 69 6e 64 6f 77 73 53 64 6b 44 69 72 5f 6f 6c  WindowsSdkDir_ol
2500: 64 0d 0a 0d 0a 20 20 20 20 52 45 4d 0d 0a 20 20  d....    REM..  
2510: 20 20 52 45 4d 20 4e 4f 54 45 3a 20 52 65 73 65    REM NOTE: Rese
2520: 74 20 74 68 65 20 50 41 54 48 20 68 65 72 65 20  t the PATH here 
2530: 74 6f 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20  to the absolute 
2540: 62 61 72 65 20 6d 69 6e 69 6d 75 6d 20 72 65 71  bare minimum req
2550: 75 69 72 65 64 2e 0d 0a 20 20 20 20 52 45 4d 0d  uired...    REM.
2560: 0a 20 20 20 20 53 45 54 20 50 41 54 48 3d 25 54  .    SET PATH=%T
2570: 4f 4f 4c 50 41 54 48 25 3b 25 53 79 73 74 65 6d  OOLPATH%;%System
2580: 52 6f 6f 74 25 5c 53 79 73 74 65 6d 33 32 3b 25  Root%\System32;%
2590: 53 79 73 74 65 6d 52 6f 6f 74 25 0d 0a 0d 0a 20  SystemRoot%.... 
25a0: 20 20 20 46 4f 52 20 25 25 42 20 49 4e 20 28 25     FOR %%B IN (%
25b0: 43 4f 4e 46 49 47 55 52 41 54 49 4f 4e 53 25 29  CONFIGURATIONS%)
25c0: 20 44 4f 20 28 0d 0a 20 20 20 20 20 20 52 45 4d   DO (..      REM
25d0: 0d 0a 20 20 20 20 20 20 52 45 4d 20 4e 4f 54 45  ..      REM NOTE
25e0: 3a 20 57 68 65 6e 20 70 72 65 70 61 72 69 6e 67  : When preparing
25f0: 20 74 68 65 20 64 65 62 75 67 20 62 75 69 6c 64   the debug build
2600: 2c 20 73 65 74 20 74 68 65 20 44 45 42 55 47 20  , set the DEBUG 
2610: 61 6e 64 20 4d 45 4d 44 45 42 55 47 0d 0a 20 20  and MEMDEBUG..  
2620: 20 20 20 20 52 45 4d 20 20 20 20 20 20 20 65 6e      REM       en
2630: 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
2640: 6c 65 73 20 74 6f 20 62 65 20 70 69 63 6b 65 64  les to be picked
2650: 20 75 70 20 62 79 20 74 68 65 20 4d 53 56 43 20   up by the MSVC 
2660: 6d 61 6b 65 66 69 6c 65 0d 0a 20 20 20 20 20 20  makefile..      
2670: 52 45 4d 20 20 20 20 20 20 20 69 74 73 65 6c 66  REM       itself
2680: 2e 0d 0a 20 20 20 20 20 20 52 45 4d 0d 0a 20 20  ...      REM..  
2690: 20 20 20 20 49 46 20 2f 49 20 22 25 25 42 22 20      IF /I "%%B" 
26a0: 3d 3d 20 22 44 65 62 75 67 22 20 28 0d 0a 20 20  == "Debug" (..  
26b0: 20 20 20 20 20 20 53 45 54 20 44 45 42 55 47 3d        SET DEBUG=
26c0: 32 0d 0a 20 20 20 20 20 20 20 20 53 45 54 20 4d  2..        SET M
26d0: 45 4d 44 45 42 55 47 3d 31 0d 0a 20 20 20 20 20  EMDEBUG=1..     
26e0: 20 29 20 45 4c 53 45 20 28 0d 0a 20 20 20 20 20   ) ELSE (..     
26f0: 20 20 20 43 41 4c 4c 20 3a 66 6e 5f 55 6e 73 65     CALL :fn_Unse
2700: 74 56 61 72 69 61 62 6c 65 20 44 45 42 55 47 0d  tVariable DEBUG.
2710: 0a 20 20 20 20 20 20 20 20 43 41 4c 4c 20 3a 66  .        CALL :f
2720: 6e 5f 55 6e 73 65 74 56 61 72 69 61 62 6c 65 20  n_UnsetVariable 
2730: 4d 45 4d 44 45 42 55 47 0d 0a 20 20 20 20 20 20  MEMDEBUG..      
2740: 29 0d 0a 0d 0a 20 20 20 20 20 20 52 45 4d 0d 0a  )....      REM..
2750: 20 20 20 20 20 20 52 45 4d 20 4e 4f 54 45 3a 20        REM NOTE: 
2760: 4c 61 75 6e 63 68 20 61 20 6e 65 73 74 65 64 20  Launch a nested 
2770: 63 6f 6d 6d 61 6e 64 20 73 68 65 6c 6c 20 74 6f  command shell to
2780: 20 70 65 72 66 6f 72 6d 20 74 68 65 20 66 6f 6c   perform the fol
2790: 6c 6f 77 69 6e 67 20 73 74 65 70 73 3a 0d 0a 20  lowing steps:.. 
27a0: 20 20 20 20 20 52 45 4d 0d 0a 20 20 20 20 20 20       REM..      
27b0: 52 45 4d 20 20 20 20 20 20 20 31 2e 20 53 65 74  REM       1. Set
27c0: 75 70 20 74 68 65 20 4d 53 56 43 20 65 6e 76 69  up the MSVC envi
27d0: 72 6f 6e 6d 65 6e 74 20 66 6f 72 20 74 68 69 73  ronment for this
27e0: 20 70 6c 61 74 66 6f 72 6d 20 75 73 69 6e 67 20   platform using 
27f0: 74 68 65 0d 0a 20 20 20 20 20 20 52 45 4d 20 20  the..      REM  
2800: 20 20 20 20 20 20 20 20 6f 66 66 69 63 69 61 6c          official
2810: 20 62 61 74 63 68 20 66 69 6c 65 2e 0d 0a 20 20   batch file...  
2820: 20 20 20 20 52 45 4d 0d 0a 20 20 20 20 20 20 52      REM..      R
2830: 45 4d 20 20 20 20 20 20 20 32 2e 20 4d 61 6b 65  EM       2. Make
2840: 20 73 75 72 65 20 74 68 61 74 20 6e 6f 20 73 74   sure that no st
2850: 61 6c 65 20 62 75 69 6c 64 20 6f 75 74 70 75 74  ale build output
2860: 20 66 69 6c 65 73 20 61 72 65 20 70 72 65 73 65   files are prese
2870: 6e 74 2e 0d 0a 20 20 20 20 20 20 52 45 4d 0d 0a  nt...      REM..
2880: 20 20 20 20 20 20 52 45 4d 20 20 20 20 20 20 20        REM       
2890: 33 2e 20 42 75 69 6c 64 20 74 68 65 20 22 73 71  3. Build the "sq
28a0: 6c 69 74 65 33 2e 64 6c 6c 22 20 61 6e 64 20 22  lite3.dll" and "
28b0: 73 71 6c 69 74 65 33 2e 6c 69 62 22 20 62 69 6e  sqlite3.lib" bin
28c0: 61 72 69 65 73 20 66 6f 72 20 74 68 69 73 0d 0a  aries for this..
28d0: 20 20 20 20 20 20 52 45 4d 20 20 20 20 20 20 20        REM       
28e0: 20 20 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20     platform...  
28f0: 20 20 20 20 52 45 4d 0d 0a 20 20 20 20 20 20 52      REM..      R
2900: 45 4d 20 20 20 20 20 20 20 34 2e 20 43 6f 70 79  EM       4. Copy
2910: 20 74 68 65 20 22 73 71 6c 69 74 65 33 2e 64 6c   the "sqlite3.dl
2920: 6c 22 20 61 6e 64 20 22 73 71 6c 69 74 65 33 2e  l" and "sqlite3.
2930: 6c 69 62 22 20 62 69 6e 61 72 69 65 73 20 66 6f  lib" binaries fo
2940: 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20 52 45  r this..      RE
2950: 4d 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66  M          platf
2960: 6f 72 6d 20 74 6f 20 74 68 65 20 70 6c 61 74 66  orm to the platf
2970: 6f 72 6d 2d 73 70 65 63 69 66 69 63 20 64 69 72  orm-specific dir
2980: 65 63 74 6f 72 79 20 62 65 6e 65 61 74 68 20 74  ectory beneath t
2990: 68 65 0d 0a 20 20 20 20 20 20 52 45 4d 20 20 20  he..      REM   
29a0: 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64 69         binary di
29b0: 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20  rectory...      
29c0: 52 45 4d 0d 0a 20 20 20 20 20 20 22 25 43 6f 6d  REM..      "%Com
29d0: 53 70 65 63 25 22 20 2f 43 20 28 0d 0a 20 20 20  Spec%" /C (..   
29e0: 20 20 20 20 20 52 45 4d 0d 0a 20 20 20 20 20 20       REM..      
29f0: 20 20 52 45 4d 20 4e 4f 54 45 3a 20 41 74 74 65    REM NOTE: Atte
2a00: 6d 70 74 20 74 6f 20 73 65 74 75 70 20 74 68 65  mpt to setup the
2a10: 20 4d 53 56 43 20 65 6e 76 69 72 6f 6e 6d 65 6e   MSVC environmen
2a20: 74 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66  t for this platf
2a30: 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 20 20 52 45  orm...        RE
2a40: 4d 0d 0a 20 20 20 20 20 20 20 20 25 5f 5f 45 43  M..        %__EC
2a50: 48 4f 33 25 20 43 41 4c 4c 20 22 25 56 43 56 41  HO3% CALL "%VCVA
2a60: 52 53 41 4c 4c 25 22 20 25 25 50 0d 0a 0d 0a 20  RSALL%" %%P.... 
2a70: 20 20 20 20 20 20 20 49 46 20 45 52 52 4f 52 4c         IF ERRORL
2a80: 45 56 45 4c 20 31 20 28 0d 0a 20 20 20 20 20 20  EVEL 1 (..      
2a90: 20 20 20 20 45 43 48 4f 20 46 61 69 6c 65 64 20      ECHO Failed 
2aa0: 74 6f 20 63 61 6c 6c 20 22 25 56 43 56 41 52 53  to call "%VCVARS
2ab0: 41 4c 4c 25 22 20 66 6f 72 20 70 6c 61 74 66 6f  ALL%" for platfo
2ac0: 72 6d 20 25 25 50 2e 0d 0a 20 20 20 20 20 20 20  rm %%P...       
2ad0: 20 20 20 47 4f 54 4f 20 65 72 72 6f 72 73 0d 0a     GOTO errors..
2ae0: 20 20 20 20 20 20 20 20 29 0d 0a 0d 0a 20 20 20          )....   
2af0: 20 20 20 20 20 52 45 4d 0d 0a 20 20 20 20 20 20       REM..      
2b00: 20 20 52 45 4d 20 4e 4f 54 45 3a 20 49 66 20 74    REM NOTE: If t
2b10: 68 69 73 20 62 61 74 63 68 20 66 69 6c 65 20 69  his batch file i
2b20: 73 20 6e 6f 74 20 72 75 6e 6e 69 6e 67 20 69 6e  s not running in
2b30: 20 22 77 68 61 74 2d 69 66 22 20 6d 6f 64 65 2c   "what-if" mode,
2b40: 20 63 68 65 63 6b 20 74 6f 0d 0a 20 20 20 20 20   check to..     
2b50: 20 20 20 52 45 4d 20 20 20 20 20 20 20 62 65 20     REM       be 
2b60: 73 75 72 65 20 77 65 20 77 65 72 65 20 61 63 74  sure we were act
2b70: 75 61 6c 6c 79 20 61 62 6c 65 20 74 6f 20 73 65  ually able to se
2b80: 74 75 70 20 74 68 65 20 4d 53 56 43 20 65 6e 76  tup the MSVC env
2b90: 69 72 6f 6e 6d 65 6e 74 0d 0a 20 20 20 20 20 20  ironment..      
2ba0: 20 20 52 45 4d 20 20 20 20 20 20 20 61 73 20 63    REM       as c
2bb0: 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e 73 20  urrent versions 
2bc0: 6f 66 20 74 68 65 69 72 20 6f 66 66 69 63 69 61  of their officia
2bd0: 6c 20 62 61 74 63 68 20 66 69 6c 65 20 64 6f 20  l batch file do 
2be0: 6e 6f 74 20 73 65 74 0d 0a 20 20 20 20 20 20 20  not set..       
2bf0: 20 52 45 4d 20 20 20 20 20 20 20 74 68 65 20 65   REM       the e
2c00: 78 69 74 20 63 6f 64 65 20 75 70 6f 6e 20 66 61  xit code upon fa
2c10: 69 6c 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  ilure...        
2c20: 52 45 4d 0d 0a 20 20 20 20 20 20 20 20 49 46 20  REM..        IF 
2c30: 4e 4f 54 20 44 45 46 49 4e 45 44 20 5f 5f 45 43  NOT DEFINED __EC
2c40: 48 4f 33 20 28 0d 0a 20 20 20 20 20 20 20 20 20  HO3 (..         
2c50: 20 49 46 20 4e 4f 54 20 44 45 46 49 4e 45 44 20   IF NOT DEFINED 
2c60: 57 69 6e 64 6f 77 73 50 68 6f 6e 65 4b 69 74 44  WindowsPhoneKitD
2c70: 69 72 20 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ir (..          
2c80: 20 20 49 46 20 4e 4f 54 20 44 45 46 49 4e 45 44    IF NOT DEFINED
2c90: 20 57 69 6e 64 6f 77 73 53 64 6b 44 69 72 20 28   WindowsSdkDir (
2ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cb0: 45 43 48 4f 20 43 61 6e 6e 6f 74 20 62 75 69 6c  ECHO Cannot buil
2cc0: 64 2c 20 57 69 6e 64 6f 77 73 20 53 44 4b 20 6e  d, Windows SDK n
2cd0: 6f 74 20 66 6f 75 6e 64 20 66 6f 72 20 70 6c 61  ot found for pla
2ce0: 74 66 6f 72 6d 20 25 25 50 2e 0d 0a 20 20 20 20  tform %%P...    
2cf0: 20 20 20 20 20 20 20 20 20 20 47 4f 54 4f 20 65            GOTO e
2d00: 72 72 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  rrors..         
2d10: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
2d20: 29 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 0d 0a  )..        )....
2d30: 20 20 20 20 20 20 20 20 52 45 4d 0d 0a 20 20 20          REM..   
2d40: 20 20 20 20 20 52 45 4d 20 4e 4f 54 45 3a 20 57       REM NOTE: W
2d50: 68 65 6e 20 75 73 69 6e 67 20 4d 53 56 43 20 32  hen using MSVC 2
2d60: 30 31 32 2c 20 74 68 65 20 6e 61 74 69 76 65 20  012, the native 
2d70: 53 44 4b 20 70 61 74 68 20 63 61 6e 6e 6f 74 20  SDK path cannot 
2d80: 73 69 6d 70 6c 79 20 75 73 65 0d 0a 20 20 20 20  simply use..    
2d90: 20 20 20 20 52 45 4d 20 20 20 20 20 20 20 74 68      REM       th
2da0: 65 20 22 6c 69 62 22 20 73 75 62 2d 64 69 72 65  e "lib" sub-dire
2db0: 63 74 6f 72 79 20 62 65 6e 65 61 74 68 20 74 68  ctory beneath th
2dc0: 65 20 6c 6f 63 61 74 69 6f 6e 20 73 70 65 63 69  e location speci
2dd0: 66 69 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20  fied in the..   
2de0: 20 20 20 20 20 52 45 4d 20 20 20 20 20 20 20 57       REM       W
2df0: 69 6e 64 6f 77 73 53 64 6b 44 69 72 20 65 6e 76  indowsSdkDir env
2e00: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
2e10: 65 20 62 65 63 61 75 73 65 20 74 68 61 74 20 6c  e because that l
2e20: 6f 63 61 74 69 6f 6e 20 64 6f 65 73 0d 0a 20 20  ocation does..  
2e30: 20 20 20 20 20 20 52 45 4d 20 20 20 20 20 20 20        REM       
2e40: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 63 6f 6e  not actually con
2e50: 74 61 69 6e 20 74 68 65 20 6e 65 63 65 73 73 61  tain the necessa
2e60: 72 79 20 6c 69 62 72 61 72 79 20 66 69 6c 65 73  ry library files
2e70: 20 66 6f 72 20 78 38 36 2e 0d 0a 20 20 20 20 20   for x86...     
2e80: 20 20 20 52 45 4d 20 20 20 20 20 20 20 54 68 69     REM       Thi
2e90: 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 66  s must be done f
2ea0: 6f 72 20 65 61 63 68 20 69 74 65 72 61 74 69 6f  or each iteratio
2eb0: 6e 20 62 65 63 61 75 73 65 20 69 74 20 72 65 6c  n because it rel
2ec0: 69 65 73 20 75 70 6f 6e 0d 0a 20 20 20 20 20 20  ies upon..      
2ed0: 20 20 52 45 4d 20 20 20 20 20 20 20 74 68 65 20    REM       the 
2ee0: 57 69 6e 64 6f 77 73 53 64 6b 44 69 72 20 65 6e  WindowsSdkDir en
2ef0: 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
2f00: 6c 65 20 62 65 69 6e 67 20 73 65 74 20 62 79 20  le being set by 
2f10: 74 68 65 20 62 61 74 63 68 0d 0a 20 20 20 20 20  the batch..     
2f20: 20 20 20 52 45 4d 20 20 20 20 20 20 20 66 69 6c     REM       fil
2f30: 65 20 75 73 65 64 20 74 6f 20 73 65 74 75 70 20  e used to setup 
2f40: 74 68 65 20 4d 53 56 43 20 65 6e 76 69 72 6f 6e  the MSVC environ
2f50: 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 52  ment...        R
2f60: 45 4d 0d 0a 20 20 20 20 20 20 20 20 49 46 20 44  EM..        IF D
2f70: 45 46 49 4e 45 44 20 53 45 54 5f 4e 53 44 4b 4c  EFINED SET_NSDKL
2f80: 49 42 50 41 54 48 20 28 0d 0a 20 20 20 20 20 20  IBPATH (..      
2f90: 20 20 20 20 49 46 20 44 45 46 49 4e 45 44 20 57      IF DEFINED W
2fa0: 69 6e 64 6f 77 73 50 68 6f 6e 65 4b 69 74 44 69  indowsPhoneKitDi
2fb0: 72 20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r (..           
2fc0: 20 43 41 4c 4c 20 3a 66 6e 5f 43 6f 70 79 56 61   CALL :fn_CopyVa
2fd0: 72 69 61 62 6c 65 20 57 69 6e 64 6f 77 73 50 68  riable WindowsPh
2fe0: 6f 6e 65 4b 69 74 44 69 72 20 4e 53 44 4b 4c 49  oneKitDir NSDKLI
2ff0: 42 50 41 54 48 0d 0a 20 20 20 20 20 20 20 20 20  BPATH..         
3000: 20 20 20 43 41 4c 4c 20 3a 66 6e 5f 41 70 70 65     CALL :fn_Appe
3010: 6e 64 56 61 72 69 61 62 6c 65 20 4e 53 44 4b 4c  ndVariable NSDKL
3020: 49 42 50 41 54 48 20 5c 6c 69 62 5c 78 38 36 0d  IBPATH \lib\x86.
3030: 0a 20 20 20 20 20 20 20 20 20 20 29 20 45 4c 53  .          ) ELS
3040: 45 20 49 46 20 44 45 46 49 4e 45 44 20 57 69 6e  E IF DEFINED Win
3050: 64 6f 77 73 53 64 6b 44 69 72 20 28 0d 0a 20 20  dowsSdkDir (..  
3060: 20 20 20 20 20 20 20 20 20 20 43 41 4c 4c 20 3a            CALL :
3070: 66 6e 5f 43 6f 70 79 56 61 72 69 61 62 6c 65 20  fn_CopyVariable 
3080: 57 69 6e 64 6f 77 73 53 64 6b 44 69 72 20 4e 53  WindowsSdkDir NS
3090: 44 4b 4c 49 42 50 41 54 48 0d 0a 20 20 20 20 20  DKLIBPATH..     
30a0: 20 20 20 20 20 20 20 43 41 4c 4c 20 3a 66 6e 5f         CALL :fn_
30b0: 41 70 70 65 6e 64 56 61 72 69 61 62 6c 65 20 4e  AppendVariable N
30c0: 53 44 4b 4c 49 42 50 41 54 48 20 5c 6c 69 62 5c  SDKLIBPATH \lib\
30d0: 77 69 6e 38 5c 75 6d 5c 78 38 36 0d 0a 20 20 20  win8\um\x86..   
30e0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
30f0: 20 20 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20 52    )....        R
3100: 45 4d 0d 0a 20 20 20 20 20 20 20 20 52 45 4d 20  EM..        REM 
3110: 4e 4f 54 45 3a 20 55 6e 6c 65 73 73 20 70 72 65  NOTE: Unless pre
3120: 76 65 6e 74 65 64 20 66 72 6f 6d 20 64 6f 69 6e  vented from doin
3130: 67 20 73 6f 2c 20 69 6e 76 6f 6b 65 20 4e 4d 41  g so, invoke NMA
3140: 4b 45 20 77 69 74 68 20 74 68 65 20 4d 53 56 43  KE with the MSVC
3150: 0d 0a 20 20 20 20 20 20 20 20 52 45 4d 20 20 20  ..        REM   
3160: 20 20 20 20 6d 61 6b 65 66 69 6c 65 20 74 6f 20      makefile to 
3170: 63 6c 65 61 6e 20 61 6e 79 20 73 74 61 6c 65 20  clean any stale 
3180: 62 75 69 6c 64 20 6f 75 74 70 75 74 20 66 72 6f  build output fro
3190: 6d 20 70 72 65 76 69 6f 75 73 0d 0a 20 20 20 20  m previous..    
31a0: 20 20 20 20 52 45 4d 20 20 20 20 20 20 20 69 74      REM       it
31b0: 65 72 61 74 69 6f 6e 73 20 6f 66 20 74 68 69 73  erations of this
31c0: 20 6c 6f 6f 70 20 61 6e 64 2f 6f 72 20 70 72 65   loop and/or pre
31d0: 76 69 6f 75 73 20 72 75 6e 73 20 6f 66 20 74 68  vious runs of th
31e0: 69 73 20 62 61 74 63 68 0d 0a 20 20 20 20 20 20  is batch..      
31f0: 20 20 52 45 4d 20 20 20 20 20 20 20 66 69 6c 65    REM       file
3200: 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20  , etc...        
3210: 52 45 4d 0d 0a 20 20 20 20 20 20 20 20 49 46 20  REM..        IF 
3220: 4e 4f 54 20 44 45 46 49 4e 45 44 20 4e 4f 43 4c  NOT DEFINED NOCL
3230: 45 41 4e 20 28 0d 0a 20 20 20 20 20 20 20 20 20  EAN (..         
3240: 20 25 5f 5f 45 43 48 4f 25 20 6e 6d 61 6b 65 20   %__ECHO% nmake 
3250: 2d 66 20 4d 61 6b 65 66 69 6c 65 2e 6d 73 63 20  -f Makefile.msc 
3260: 63 6c 65 61 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  clean....       
3270: 20 20 20 49 46 20 45 52 52 4f 52 4c 45 56 45 4c     IF ERRORLEVEL
3280: 20 31 20 28 0d 0a 20 20 20 20 20 20 20 20 20 20   1 (..          
3290: 20 20 45 43 48 4f 20 46 61 69 6c 65 64 20 74 6f    ECHO Failed to
32a0: 20 63 6c 65 61 6e 20 66 6f 72 20 70 6c 61 74 66   clean for platf
32b0: 6f 72 6d 20 25 25 50 2e 0d 0a 20 20 20 20 20 20  orm %%P...      
32c0: 20 20 20 20 20 20 47 4f 54 4f 20 65 72 72 6f 72        GOTO error
32d0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a  s..          )..
32e0: 20 20 20 20 20 20 20 20 29 20 45 4c 53 45 20 28          ) ELSE (
32f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 52 45 4d 0d  ..          REM.
3300: 0a 20 20 20 20 20 20 20 20 20 20 52 45 4d 20 4e  .          REM N
3310: 4f 54 45 3a 20 45 76 65 6e 20 77 68 65 6e 20 74  OTE: Even when t
3320: 68 65 20 63 6c 65 61 6e 69 6e 67 20 73 74 65 70  he cleaning step
3330: 20 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c   has been disabl
3340: 65 64 2c 20 77 65 20 73 74 69 6c 6c 0d 0a 20 20  ed, we still..  
3350: 20 20 20 20 20 20 20 20 52 45 4d 20 20 20 20 20          REM     
3360: 20 20 6e 65 65 64 20 74 6f 20 72 65 6d 6f 76 65    need to remove
3370: 20 74 68 65 20 62 75 69 6c 64 20 6f 75 74 70 75   the build outpu
3380: 74 20 66 6f 72 20 74 68 65 20 66 69 6c 65 73 20  t for the files 
3390: 77 65 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20  we are..        
33a0: 20 20 52 45 4d 20 20 20 20 20 20 20 73 70 65 63    REM       spec
33b0: 69 66 69 63 61 6c 6c 79 20 77 61 6e 74 69 6e 67  ifically wanting
33c0: 20 74 6f 20 62 75 69 6c 64 20 66 6f 72 20 65 61   to build for ea
33d0: 63 68 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20  ch platform...  
33e0: 20 20 20 20 20 20 20 20 52 45 4d 0d 0a 20 20 20          REM..   
33f0: 20 20 20 20 20 20 20 25 5f 5f 45 43 48 4f 25 20         %__ECHO% 
3400: 44 45 4c 20 2f 51 20 2a 2e 6c 6f 20 73 71 6c 69  DEL /Q *.lo sqli
3410: 74 65 33 2e 64 6c 6c 20 73 71 6c 69 74 65 33 2e  te3.dll sqlite3.
3420: 6c 69 62 20 73 71 6c 69 74 65 33 2e 70 64 62 0d  lib sqlite3.pdb.
3430: 0a 20 20 20 20 20 20 20 20 29 0d 0a 0d 0a 20 20  .        )....  
3440: 20 20 20 20 20 20 52 45 4d 0d 0a 20 20 20 20 20        REM..     
3450: 20 20 20 52 45 4d 20 4e 4f 54 45 3a 20 43 61 6c     REM NOTE: Cal
3460: 6c 20 4e 4d 41 4b 45 20 77 69 74 68 20 74 68 65  l NMAKE with the
3470: 20 4d 53 56 43 20 6d 61 6b 65 66 69 6c 65 20 74   MSVC makefile t
3480: 6f 20 62 75 69 6c 64 20 74 68 65 20 22 73 71 6c  o build the "sql
3490: 69 74 65 33 2e 64 6c 6c 22 0d 0a 20 20 20 20 20  ite3.dll"..     
34a0: 20 20 20 52 45 4d 20 20 20 20 20 20 20 62 69 6e     REM       bin
34b0: 61 72 79 2e 20 20 54 68 65 20 78 38 36 20 63 6f  ary.  The x86 co
34c0: 6d 70 69 6c 65 72 20 77 69 6c 6c 20 62 65 20 75  mpiler will be u
34d0: 73 65 64 20 74 6f 20 63 6f 6d 70 69 6c 65 20 74  sed to compile t
34e0: 68 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  he native..     
34f0: 20 20 20 52 45 4d 20 20 20 20 20 20 20 63 6f 6d     REM       com
3500: 6d 61 6e 64 20 6c 69 6e 65 20 74 6f 6f 6c 73 20  mand line tools 
3510: 6e 65 65 64 65 64 20 64 75 72 69 6e 67 20 74 68  needed during th
3520: 65 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20  e build process 
3530: 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20 20  itself...       
3540: 20 52 45 4d 20 20 20 20 20 20 20 41 6c 73 6f 2c   REM       Also,
3550: 20 64 69 73 61 62 6c 65 20 6c 6f 6f 6b 69 6e 67   disable looking
3560: 20 66 6f 72 20 61 6e 64 2f 6f 72 20 6c 69 6e 6b   for and/or link
3570: 69 6e 67 20 74 6f 20 74 68 65 20 6e 61 74 69 76  ing to the nativ
3580: 65 20 54 63 6c 0d 0a 20 20 20 20 20 20 20 20 52  e Tcl..        R
3590: 45 4d 20 20 20 20 20 20 20 72 75 6e 74 69 6d 65  EM       runtime
35a0: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20   library...     
35b0: 20 20 20 52 45 4d 0d 0a 20 20 20 20 20 20 20 20     REM..        
35c0: 25 5f 5f 45 43 48 4f 25 20 6e 6d 61 6b 65 20 2d  %__ECHO% nmake -
35d0: 66 20 4d 61 6b 65 66 69 6c 65 2e 6d 73 63 20 73  f Makefile.msc s
35e0: 71 6c 69 74 65 33 2e 64 6c 6c 20 58 43 4f 4d 50  qlite3.dll XCOMP
35f0: 49 4c 45 3d 31 20 55 53 45 5f 4e 41 54 49 56 45  ILE=1 USE_NATIVE
3600: 5f 4c 49 42 50 41 54 48 53 3d 31 20 4e 4f 5f 54  _LIBPATHS=1 NO_T
3610: 43 4c 3d 31 20 25 4e 4d 41 4b 45 5f 41 52 47 53  CL=1 %NMAKE_ARGS
3620: 25 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 46 20  %....        IF 
3630: 45 52 52 4f 52 4c 45 56 45 4c 20 31 20 28 0d 0a  ERRORLEVEL 1 (..
3640: 20 20 20 20 20 20 20 20 20 20 45 43 48 4f 20 46            ECHO F
3650: 61 69 6c 65 64 20 74 6f 20 62 75 69 6c 64 20 25  ailed to build %
3660: 25 42 20 22 73 71 6c 69 74 65 33 2e 64 6c 6c 22  %B "sqlite3.dll"
3670: 20 66 6f 72 20 70 6c 61 74 66 6f 72 6d 20 25 25   for platform %%
3680: 50 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 47 4f  P...          GO
3690: 54 4f 20 65 72 72 6f 72 73 0d 0a 20 20 20 20 20  TO errors..     
36a0: 20 20 20 29 0d 0a 0d 0a 20 20 20 20 20 20 20 20     )....        
36b0: 52 45 4d 0d 0a 20 20 20 20 20 20 20 20 52 45 4d  REM..        REM
36c0: 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20   NOTE: Copy the 
36d0: 22 73 71 6c 69 74 65 33 2e 64 6c 6c 22 20 66 69  "sqlite3.dll" fi
36e0: 6c 65 20 74 6f 20 74 68 65 20 61 70 70 72 6f 70  le to the approp
36f0: 72 69 61 74 65 20 64 69 72 65 63 74 6f 72 79 20  riate directory 
3700: 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 52 45 4d  for..        REM
3710: 20 20 20 20 20 20 20 74 68 65 20 62 75 69 6c 64         the build
3720: 20 61 6e 64 20 70 6c 61 74 66 6f 72 6d 20 62 65   and platform be
3730: 6e 65 61 74 68 20 74 68 65 20 62 69 6e 61 72 79  neath the binary
3740: 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20   directory...   
3750: 20 20 20 20 20 52 45 4d 0d 0a 20 20 20 20 20 20       REM..      
3760: 20 20 25 5f 5f 45 43 48 4f 25 20 58 43 4f 50 59    %__ECHO% XCOPY
3770: 20 73 71 6c 69 74 65 33 2e 64 6c 6c 20 22 25 42   sqlite3.dll "%B
3780: 49 4e 41 52 59 44 49 52 45 43 54 4f 52 59 25 5c  INARYDIRECTORY%\
3790: 25 25 42 5c 25 25 44 5c 22 20 25 46 46 4c 41 47  %%B\%%D\" %FFLAG
37a0: 53 25 20 25 44 46 4c 41 47 53 25 0d 0a 0d 0a 20  S% %DFLAGS%.... 
37b0: 20 20 20 20 20 20 20 49 46 20 45 52 52 4f 52 4c         IF ERRORL
37c0: 45 56 45 4c 20 31 20 28 0d 0a 20 20 20 20 20 20  EVEL 1 (..      
37d0: 20 20 20 20 45 43 48 4f 20 46 61 69 6c 65 64 20      ECHO Failed 
37e0: 74 6f 20 63 6f 70 79 20 22 73 71 6c 69 74 65 33  to copy "sqlite3
37f0: 2e 64 6c 6c 22 20 74 6f 20 22 25 42 49 4e 41 52  .dll" to "%BINAR
3800: 59 44 49 52 45 43 54 4f 52 59 25 5c 25 25 42 5c  YDIRECTORY%\%%B\
3810: 25 25 44 5c 22 2e 0d 0a 20 20 20 20 20 20 20 20  %%D\"...        
3820: 20 20 47 4f 54 4f 20 65 72 72 6f 72 73 0d 0a 20    GOTO errors.. 
3830: 20 20 20 20 20 20 20 29 0d 0a 0d 0a 20 20 20 20         )....    
3840: 20 20 20 20 52 45 4d 0d 0a 20 20 20 20 20 20 20      REM..       
3850: 20 52 45 4d 20 4e 4f 54 45 3a 20 43 6f 70 79 20   REM NOTE: Copy 
3860: 74 68 65 20 22 73 71 6c 69 74 65 33 2e 6c 69 62  the "sqlite3.lib
3870: 22 20 66 69 6c 65 20 74 6f 20 74 68 65 20 61 70  " file to the ap
3880: 70 72 6f 70 72 69 61 74 65 20 64 69 72 65 63 74  propriate direct
3890: 6f 72 79 20 66 6f 72 0d 0a 20 20 20 20 20 20 20  ory for..       
38a0: 20 52 45 4d 20 20 20 20 20 20 20 74 68 65 20 62   REM       the b
38b0: 75 69 6c 64 20 61 6e 64 20 70 6c 61 74 66 6f 72  uild and platfor
38c0: 6d 20 62 65 6e 65 61 74 68 20 74 68 65 20 62 69  m beneath the bi
38d0: 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e 0d  nary directory..
38e0: 0a 20 20 20 20 20 20 20 20 52 45 4d 0d 0a 20 20  .        REM..  
38f0: 20 20 20 20 20 20 25 5f 5f 45 43 48 4f 25 20 58        %__ECHO% X
3900: 43 4f 50 59 20 73 71 6c 69 74 65 33 2e 6c 69 62  COPY sqlite3.lib
3910: 20 22 25 42 49 4e 41 52 59 44 49 52 45 43 54 4f   "%BINARYDIRECTO
3920: 52 59 25 5c 25 25 42 5c 25 25 44 5c 22 20 25 46  RY%\%%B\%%D\" %F
3930: 46 4c 41 47 53 25 20 25 44 46 4c 41 47 53 25 0d  FLAGS% %DFLAGS%.
3940: 0a 0d 0a 20 20 20 20 20 20 20 20 49 46 20 45 52  ...        IF ER
3950: 52 4f 52 4c 45 56 45 4c 20 31 20 28 0d 0a 20 20  RORLEVEL 1 (..  
3960: 20 20 20 20 20 20 20 20 45 43 48 4f 20 46 61 69          ECHO Fai
3970: 6c 65 64 20 74 6f 20 63 6f 70 79 20 22 73 71 6c  led to copy "sql
3980: 69 74 65 33 2e 6c 69 62 22 20 74 6f 20 22 25 42  ite3.lib" to "%B
3990: 49 4e 41 52 59 44 49 52 45 43 54 4f 52 59 25 5c  INARYDIRECTORY%\
39a0: 25 25 42 5c 25 25 44 5c 22 2e 0d 0a 20 20 20 20  %%B\%%D\"...    
39b0: 20 20 20 20 20 20 47 4f 54 4f 20 65 72 72 6f 72        GOTO error
39c0: 73 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 0d 0a  s..        )....
39d0: 20 20 20 20 20 20 20 20 52 45 4d 0d 0a 20 20 20          REM..   
39e0: 20 20 20 20 20 52 45 4d 20 4e 4f 54 45 3a 20 43       REM NOTE: C
39f0: 6f 70 79 20 74 68 65 20 22 73 71 6c 69 74 65 33  opy the "sqlite3
3a00: 2e 70 64 62 22 20 66 69 6c 65 20 74 6f 20 74 68  .pdb" file to th
3a10: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 64 69  e appropriate di
3a20: 72 65 63 74 6f 72 79 20 66 6f 72 0d 0a 20 20 20  rectory for..   
3a30: 20 20 20 20 20 52 45 4d 20 20 20 20 20 20 20 74       REM       t
3a40: 68 65 20 62 75 69 6c 64 20 61 6e 64 20 70 6c 61  he build and pla
3a50: 74 66 6f 72 6d 20 62 65 6e 65 61 74 68 20 74 68  tform beneath th
3a60: 65 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f  e binary directo
3a70: 72 79 20 75 6e 6c 65 73 73 20 77 65 0d 0a 20 20  ry unless we..  
3a80: 20 20 20 20 20 20 52 45 4d 20 20 20 20 20 20 20        REM       
3a90: 61 72 65 20 70 72 65 76 65 6e 74 65 64 20 66 72  are prevented fr
3aa0: 6f 6d 20 64 6f 69 6e 67 20 73 6f 2e 0d 0a 20 20  om doing so...  
3ab0: 20 20 20 20 20 20 52 45 4d 0d 0a 20 20 20 20 20        REM..     
3ac0: 20 20 20 49 46 20 4e 4f 54 20 44 45 46 49 4e 45     IF NOT DEFINE
3ad0: 44 20 4e 4f 53 59 4d 42 4f 4c 53 20 28 0d 0a 20  D NOSYMBOLS (.. 
3ae0: 20 20 20 20 20 20 20 20 20 25 5f 5f 45 43 48 4f           %__ECHO
3af0: 25 20 58 43 4f 50 59 20 73 71 6c 69 74 65 33 2e  % XCOPY sqlite3.
3b00: 70 64 62 20 22 25 42 49 4e 41 52 59 44 49 52 45  pdb "%BINARYDIRE
3b10: 43 54 4f 52 59 25 5c 25 25 42 5c 25 25 44 5c 22  CTORY%\%%B\%%D\"
3b20: 20 25 46 46 4c 41 47 53 25 20 25 44 46 4c 41 47   %FFLAGS% %DFLAG
3b30: 53 25 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  S%....          
3b40: 49 46 20 45 52 52 4f 52 4c 45 56 45 4c 20 31 20  IF ERRORLEVEL 1 
3b50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 45  (..            E
3b60: 43 48 4f 20 46 61 69 6c 65 64 20 74 6f 20 63 6f  CHO Failed to co
3b70: 70 79 20 22 73 71 6c 69 74 65 33 2e 70 64 62 22  py "sqlite3.pdb"
3b80: 20 74 6f 20 22 25 42 49 4e 41 52 59 44 49 52 45   to "%BINARYDIRE
3b90: 43 54 4f 52 59 25 5c 25 25 42 5c 25 25 44 5c 22  CTORY%\%%B\%%D\"
3ba0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47  ...            G
3bb0: 4f 54 4f 20 65 72 72 6f 72 73 0d 0a 20 20 20 20  OTO errors..    
3bc0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
3bd0: 20 29 0d 0a 20 20 20 20 20 20 29 0d 0a 20 20 20   )..      )..   
3be0: 20 29 0d 0a 20 20 29 0d 0a 0d 0a 20 20 52 45 4d   )..  )....  REM
3bf0: 0d 0a 20 20 52 45 4d 20 4e 4f 54 45 3a 20 48 61  ..  REM NOTE: Ha
3c00: 6e 64 6c 65 20 61 6e 79 20 65 72 72 6f 72 73 20  ndle any errors 
3c10: 67 65 6e 65 72 61 74 65 64 20 64 75 72 69 6e 67  generated during
3c20: 20 74 68 65 20 6e 65 73 74 65 64 20 63 6f 6d 6d   the nested comm
3c30: 61 6e 64 20 73 68 65 6c 6c 2e 0d 0a 20 20 52 45  and shell...  RE
3c40: 4d 0d 0a 20 20 49 46 20 45 52 52 4f 52 4c 45 56  M..  IF ERRORLEV
3c50: 45 4c 20 31 20 28 0d 0a 20 20 20 20 47 4f 54 4f  EL 1 (..    GOTO
3c60: 20 65 72 72 6f 72 73 0d 0a 20 20 29 0d 0a 29 0d   errors..  )..).
3c70: 0a 0d 0a 52 45 4d 0d 0a 52 45 4d 20 4e 4f 54 45  ...REM..REM NOTE
3c80: 3a 20 52 65 73 74 6f 72 65 20 74 68 65 20 73 61  : Restore the sa
3c90: 76 65 64 20 63 75 72 72 65 6e 74 20 64 69 72 65  ved current dire
3ca0: 63 74 6f 72 79 20 66 72 6f 6d 20 74 68 65 20 64  ctory from the d
3cb0: 69 72 65 63 74 6f 72 79 20 73 74 61 63 6b 2e 0d  irectory stack..
3cc0: 0a 52 45 4d 0d 0a 25 5f 5f 45 43 48 4f 32 25 20  .REM..%__ECHO2% 
3cd0: 50 4f 50 44 0d 0a 0d 0a 49 46 20 45 52 52 4f 52  POPD....IF ERROR
3ce0: 4c 45 56 45 4c 20 31 20 28 0d 0a 20 20 45 43 48  LEVEL 1 (..  ECH
3cf0: 4f 20 43 6f 75 6c 64 20 6e 6f 74 20 72 65 73 74  O Could not rest
3d00: 6f 72 65 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a  ore directory...
3d10: 20 20 47 4f 54 4f 20 65 72 72 6f 72 73 0d 0a 29    GOTO errors..)
3d20: 0d 0a 0d 0a 52 45 4d 0d 0a 52 45 4d 20 4e 4f 54  ....REM..REM NOT
3d30: 45 3a 20 49 66 20 77 65 20 67 65 74 20 74 6f 20  E: If we get to 
3d40: 74 68 69 73 20 70 6f 69 6e 74 2c 20 77 65 20 68  this point, we h
3d50: 61 76 65 20 73 75 63 63 65 65 64 65 64 2e 0d 0a  ave succeeded...
3d60: 52 45 4d 0d 0a 47 4f 54 4f 20 6e 6f 5f 65 72 72  REM..GOTO no_err
3d70: 6f 72 73 0d 0a 0d 0a 3a 66 6e 5f 52 65 73 65 74  ors....:fn_Reset
3d80: 45 72 72 6f 72 4c 65 76 65 6c 0d 0a 20 20 56 45  ErrorLevel..  VE
3d90: 52 49 46 59 20 3e 20 4e 55 4c 0d 0a 20 20 47 4f  RIFY > NUL..  GO
3da0: 54 4f 20 3a 45 4f 46 0d 0a 0d 0a 3a 66 6e 5f 53  TO :EOF....:fn_S
3db0: 65 74 45 72 72 6f 72 4c 65 76 65 6c 0d 0a 20 20  etErrorLevel..  
3dc0: 56 45 52 49 46 59 20 4d 41 59 42 45 20 32 3e 20  VERIFY MAYBE 2> 
3dd0: 4e 55 4c 0d 0a 20 20 47 4f 54 4f 20 3a 45 4f 46  NUL..  GOTO :EOF
3de0: 0d 0a 0d 0a 3a 66 6e 5f 43 6f 70 79 56 61 72 69  ....:fn_CopyVari
3df0: 61 62 6c 65 0d 0a 20 20 53 45 54 4c 4f 43 41 4c  able..  SETLOCAL
3e00: 0d 0a 20 20 49 46 20 4e 4f 54 20 44 45 46 49 4e  ..  IF NOT DEFIN
3e10: 45 44 20 25 31 20 47 4f 54 4f 20 3a 45 4f 46 0d  ED %1 GOTO :EOF.
3e20: 0a 20 20 49 46 20 22 25 32 22 20 3d 3d 20 22 22  .  IF "%2" == ""
3e30: 20 47 4f 54 4f 20 3a 45 4f 46 0d 0a 20 20 53 45   GOTO :EOF..  SE
3e40: 54 20 5f 5f 45 43 48 4f 5f 43 4d 44 3d 45 43 48  T __ECHO_CMD=ECH
3e50: 4f 20 25 25 25 31 25 25 0d 0a 20 20 46 4f 52 20  O %%%1%%..  FOR 
3e60: 2f 46 20 22 64 65 6c 69 6d 73 3d 22 20 25 25 56  /F "delims=" %%V
3e70: 20 49 4e 20 28 27 25 5f 5f 45 43 48 4f 5f 43 4d   IN ('%__ECHO_CM
3e80: 44 25 27 29 20 44 4f 20 28 0d 0a 20 20 20 20 53  D%') DO (..    S
3e90: 45 54 20 56 41 4c 55 45 3d 25 25 56 0d 0a 20 20  ET VALUE=%%V..  
3ea0: 29 0d 0a 20 20 45 4e 44 4c 4f 43 41 4c 20 26 26  )..  ENDLOCAL &&
3eb0: 20 53 45 54 20 25 32 3d 25 56 41 4c 55 45 25 0d   SET %2=%VALUE%.
3ec0: 0a 20 20 47 4f 54 4f 20 3a 45 4f 46 0d 0a 0d 0a  .  GOTO :EOF....
3ed0: 3a 66 6e 5f 55 6e 73 65 74 56 61 72 69 61 62 6c  :fn_UnsetVariabl
3ee0: 65 0d 0a 20 20 49 46 20 4e 4f 54 20 22 25 31 22  e..  IF NOT "%1"
3ef0: 20 3d 3d 20 22 22 20 28 0d 0a 20 20 20 20 53 45   == "" (..    SE
3f00: 54 20 25 31 3d 0d 0a 20 20 20 20 43 41 4c 4c 20  T %1=..    CALL 
3f10: 3a 66 6e 5f 52 65 73 65 74 45 72 72 6f 72 4c 65  :fn_ResetErrorLe
3f20: 76 65 6c 0d 0a 20 20 29 0d 0a 20 20 47 4f 54 4f  vel..  )..  GOTO
3f30: 20 3a 45 4f 46 0d 0a 0d 0a 3a 66 6e 5f 41 70 70   :EOF....:fn_App
3f40: 65 6e 64 56 61 72 69 61 62 6c 65 0d 0a 20 20 53  endVariable..  S
3f50: 45 54 20 5f 5f 45 43 48 4f 5f 43 4d 44 3d 45 43  ET __ECHO_CMD=EC
3f60: 48 4f 20 25 25 25 31 25 25 0d 0a 20 20 49 46 20  HO %%%1%%..  IF 
3f70: 44 45 46 49 4e 45 44 20 25 31 20 28 0d 0a 20 20  DEFINED %1 (..  
3f80: 20 20 46 4f 52 20 2f 46 20 22 64 65 6c 69 6d 73    FOR /F "delims
3f90: 3d 22 20 25 25 56 20 49 4e 20 28 27 25 5f 5f 45  =" %%V IN ('%__E
3fa0: 43 48 4f 5f 43 4d 44 25 27 29 20 44 4f 20 28 0d  CHO_CMD%') DO (.
3fb0: 0a 20 20 20 20 20 20 53 45 54 20 25 31 3d 25 25  .      SET %1=%%
3fc0: 56 25 7e 32 0d 0a 20 20 20 20 29 0d 0a 20 20 29  V%~2..    )..  )
3fd0: 20 45 4c 53 45 20 28 0d 0a 20 20 20 20 53 45 54   ELSE (..    SET
3fe0: 20 25 31 3d 25 7e 32 0d 0a 20 20 29 0d 0a 20 20   %1=%~2..  )..  
3ff0: 53 45 54 20 5f 5f 45 43 48 4f 5f 43 4d 44 3d 0d  SET __ECHO_CMD=.
4000: 0a 20 20 43 41 4c 4c 20 3a 66 6e 5f 52 65 73 65  .  CALL :fn_Rese
4010: 74 45 72 72 6f 72 4c 65 76 65 6c 0d 0a 20 20 47  tErrorLevel..  G
4020: 4f 54 4f 20 3a 45 4f 46 0d 0a 0d 0a 3a 75 73 61  OTO :EOF....:usa
4030: 67 65 0d 0a 20 20 45 43 48 4f 2e 0d 0a 20 20 45  ge..  ECHO...  E
4040: 43 48 4f 20 55 73 61 67 65 3a 20 25 7e 6e 78 30  CHO Usage: %~nx0
4050: 20 5e 3c 62 69 6e 61 72 79 44 69 72 65 63 74 6f   ^<binaryDirecto
4060: 72 79 5e 3e 0d 0a 20 20 45 43 48 4f 2e 0d 0a 20  ry^>..  ECHO... 
4070: 20 47 4f 54 4f 20 65 72 72 6f 72 73 0d 0a 0d 0a   GOTO errors....
4080: 3a 65 72 72 6f 72 73 0d 0a 20 20 43 41 4c 4c 20  :errors..  CALL 
4090: 3a 66 6e 5f 53 65 74 45 72 72 6f 72 4c 65 76 65  :fn_SetErrorLeve
40a0: 6c 0d 0a 20 20 45 4e 44 4c 4f 43 41 4c 0d 0a 20  l..  ENDLOCAL.. 
40b0: 20 45 43 48 4f 2e 0d 0a 20 20 45 43 48 4f 20 46   ECHO...  ECHO F
40c0: 61 69 6c 75 72 65 2c 20 65 72 72 6f 72 73 20 77  ailure, errors w
40d0: 65 72 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e  ere encountered.
40e0: 0d 0a 20 20 47 4f 54 4f 20 65 6e 64 5f 6f 66 5f  ..  GOTO end_of_
40f0: 66 69 6c 65 0d 0a 0d 0a 3a 6e 6f 5f 65 72 72 6f  file....:no_erro
4100: 72 73 0d 0a 20 20 43 41 4c 4c 20 3a 66 6e 5f 52  rs..  CALL :fn_R
4110: 65 73 65 74 45 72 72 6f 72 4c 65 76 65 6c 0d 0a  esetErrorLevel..
4120: 20 20 45 4e 44 4c 4f 43 41 4c 0d 0a 20 20 45 43    ENDLOCAL..  EC
4130: 48 4f 2e 0d 0a 20 20 45 43 48 4f 20 53 75 63 63  HO...  ECHO Succ
4140: 65 73 73 2c 20 6e 6f 20 65 72 72 6f 72 73 20 77  ess, no errors w
4150: 65 72 65 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e  ere encountered.
4160: 0d 0a 20 20 47 4f 54 4f 20 65 6e 64 5f 6f 66 5f  ..  GOTO end_of_
4170: 66 69 6c 65 0d 0a 0d 0a 3a 65 6e 64 5f 6f 66 5f  file....:end_of_
4180: 66 69 6c 65 0d 0a 25 5f 5f 45 43 48 4f 25 20 45  file..%__ECHO% E
4190: 58 49 54 20 2f 42 20 25 45 52 52 4f 52 4c 45 56  XIT /B %ERRORLEV
41a0: 45 4c 25 0d 0a                                   EL%..