Fossil

Hex Artifact Content
Login

Artifact fca5446493fbd27a40ceef594d7ac788a2118edde58daaf38c9abef275b2ea7d:


0000: 23 20 53 79 73 74 65 6d 20 61 75 74 6f 63 6f 6e  # System autocon
0010: 66 69 67 75 72 61 74 69 6f 6e 2e 20 54 72 79 3a  figuration. Try:
0020: 20 2e 2f 63 6f 6e 66 69 67 75 72 65 20 2d 2d 68   ./configure --h
0030: 65 6c 70 0a 0a 23 20 54 68 69 73 20 6d 75 73 74  elp..# This must
0040: 20 62 65 20 61 62 6f 76 65 20 22 6f 70 74 69 6f   be above "optio
0050: 6e 73 22 20 62 65 6c 6f 77 20 62 65 63 61 75 73  ns" below becaus
0060: 65 20 69 74 20 69 6d 70 6c 69 63 69 74 6c 79 20  e it implicitly 
0070: 62 72 69 6e 67 73 20 69 6e 20 74 68 65 0a 23 20  brings in the.# 
0080: 64 65 66 61 75 6c 74 20 41 75 74 6f 73 65 74 75  default Autosetu
0090: 70 20 6f 70 74 69 6f 6e 73 2c 20 74 68 69 6e 67  p options, thing
00a0: 73 20 6c 69 6b 65 20 2d 2d 70 72 65 66 69 78 2e  s like --prefix.
00b0: 0a 75 73 65 20 63 63 20 63 63 2d 6c 69 62 0a 0a  .use cc cc-lib..
00c0: 6f 70 74 69 6f 6e 73 20 7b 0a 20 20 20 20 77 69  options {.    wi
00d0: 74 68 2d 6f 70 65 6e 73 73 6c 3a 70 61 74 68 7c  th-openssl:path|
00e0: 61 75 74 6f 7c 74 72 65 65 7c 6e 6f 6e 65 0a 20  auto|tree|none. 
00f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0100: 20 20 20 20 20 20 20 20 3d 3e 20 7b 4c 6f 6f 6b          => {Look
0110: 20 66 6f 72 20 4f 70 65 6e 53 53 4c 20 69 6e 20   for OpenSSL in 
0120: 74 68 65 20 67 69 76 65 6e 20 70 61 74 68 2c 20  the given path, 
0130: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2c 20 69  automatically, i
0140: 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 72 65  n the source tre
0150: 65 2c 20 6f 72 20 6e 6f 6e 65 7d 0a 20 20 20 20  e, or none}.    
0160: 77 69 74 68 2d 7a 6c 69 62 3a 70 61 74 68 7c 61  with-zlib:path|a
0170: 75 74 6f 7c 74 72 65 65 0a 20 20 20 20 20 20 20  uto|tree.       
0180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0190: 20 20 3d 3e 20 7b 4c 6f 6f 6b 20 66 6f 72 20 7a    => {Look for z
01a0: 6c 69 62 20 69 6e 20 74 68 65 20 67 69 76 65 6e  lib in the given
01b0: 20 70 61 74 68 2c 20 61 75 74 6f 6d 61 74 69 63   path, automatic
01c0: 61 6c 6c 79 2c 20 6f 72 20 69 6e 20 74 68 65 20  ally, or in the 
01d0: 73 6f 75 72 63 65 20 74 72 65 65 7d 0a 20 20 20  source tree}.   
01e0: 20 77 69 74 68 2d 73 71 6c 69 74 65 3a 70 61 74   with-sqlite:pat
01f0: 68 7c 61 75 74 6f 7c 74 72 65 65 0a 20 20 20 20  h|auto|tree.    
0200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0210: 20 20 20 20 20 3d 3e 20 7b 4c 6f 6f 6b 20 66 6f       => {Look fo
0220: 72 20 73 71 6c 69 74 65 20 69 6e 20 74 68 65 20  r sqlite in the 
0230: 67 69 76 65 6e 20 70 61 74 68 2c 20 61 75 74 6f  given path, auto
0240: 6d 61 74 69 63 61 6c 6c 79 2c 20 6f 72 20 69 6e  matically, or in
0250: 20 74 68 65 20 73 6f 75 72 63 65 20 74 72 65 65   the source tree
0260: 2e 7d 0a 20 20 20 20 77 69 74 68 2d 65 78 65 63  .}.    with-exec
0270: 2d 72 65 6c 2d 70 61 74 68 73 3d 30 0a 20 20 20  -rel-paths=0.   
0280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0290: 20 20 20 20 20 20 3d 3e 20 7b 45 6e 61 62 6c 65        => {Enable
02a0: 20 72 65 6c 61 74 69 76 65 20 70 61 74 68 73 20   relative paths 
02b0: 66 6f 72 20 65 78 74 65 72 6e 61 6c 20 64 69 66  for external dif
02c0: 66 2f 67 64 69 66 66 7d 0a 20 20 20 20 77 69 74  f/gdiff}.    wit
02d0: 68 2d 73 61 6e 69 74 69 7a 65 72 3a 20 20 20 20  h-sanitizer:    
02e0: 20 20 3d 3e 20 7b 42 75 69 6c 64 20 77 69 74 68    => {Build with
02f0: 20 43 20 63 6f 6d 70 69 6c 65 72 27 73 20 2d 66   C compiler's -f
0300: 73 61 6e 69 74 69 7a 65 3d 4c 49 53 54 3b 20 65  sanitize=LIST; e
0310: 2e 67 2e 20 61 64 64 72 65 73 73 2c 65 6e 75 6d  .g. address,enum
0320: 2c 6e 75 6c 6c 2c 75 6e 64 65 66 69 6e 65 64 7d  ,null,undefined}
0330: 0a 20 20 20 20 77 69 74 68 2d 74 68 31 2d 64 6f  .    with-th1-do
0340: 63 73 3d 30 20 20 20 20 20 20 3d 3e 20 7b 45 6e  cs=0      => {En
0350: 61 62 6c 65 20 54 48 31 20 66 6f 72 20 65 6d 62  able TH1 for emb
0360: 65 64 64 65 64 20 64 6f 63 75 6d 65 6e 74 61 74  edded documentat
0370: 69 6f 6e 20 70 61 67 65 73 7d 0a 20 20 20 20 77  ion pages}.    w
0380: 69 74 68 2d 74 68 31 2d 68 6f 6f 6b 73 3d 30 20  ith-th1-hooks=0 
0390: 20 20 20 20 3d 3e 20 7b 45 6e 61 62 6c 65 20 54      => {Enable T
03a0: 48 31 20 68 6f 6f 6b 73 20 66 6f 72 20 63 6f 6d  H1 hooks for com
03b0: 6d 61 6e 64 73 20 61 6e 64 20 77 65 62 20 70 61  mands and web pa
03c0: 67 65 73 7d 0a 20 20 20 20 77 69 74 68 2d 74 63  ges}.    with-tc
03d0: 6c 3a 70 61 74 68 20 20 20 20 20 20 20 20 3d 3e  l:path        =>
03e0: 20 7b 45 6e 61 62 6c 65 20 54 63 6c 20 69 6e 74   {Enable Tcl int
03f0: 65 67 72 61 74 69 6f 6e 2c 20 77 69 74 68 20 54  egration, with T
0400: 63 6c 20 69 6e 20 74 68 65 20 73 70 65 63 69 66  cl in the specif
0410: 69 65 64 20 70 61 74 68 7d 0a 20 20 20 20 77 69  ied path}.    wi
0420: 74 68 2d 74 63 6c 2d 73 74 75 62 73 3d 30 20 20  th-tcl-stubs=0  
0430: 20 20 20 3d 3e 20 7b 45 6e 61 62 6c 65 20 54 63     => {Enable Tc
0440: 6c 20 69 6e 74 65 67 72 61 74 69 6f 6e 20 76 69  l integration vi
0450: 61 20 73 74 75 62 73 20 6c 69 62 72 61 72 79 20  a stubs library 
0460: 6d 65 63 68 61 6e 69 73 6d 7d 0a 20 20 20 20 77  mechanism}.    w
0470: 69 74 68 2d 74 63 6c 2d 70 72 69 76 61 74 65 2d  ith-tcl-private-
0480: 73 74 75 62 73 3d 30 0a 20 20 20 20 20 20 20 20  stubs=0.        
0490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04a0: 20 3d 3e 20 7b 45 6e 61 62 6c 65 20 54 63 6c 20   => {Enable Tcl 
04b0: 69 6e 74 65 67 72 61 74 69 6f 6e 20 76 69 61 20  integration via 
04c0: 70 72 69 76 61 74 65 20 73 74 75 62 73 20 6d 65  private stubs me
04d0: 63 68 61 6e 69 73 6d 7d 0a 20 20 20 20 77 69 74  chanism}.    wit
04e0: 68 2d 6d 6d 61 6e 3d 30 20 20 20 20 20 20 20 20  h-mman=0        
04f0: 20 20 3d 3e 20 7b 45 6e 61 62 6c 65 20 75 73 65    => {Enable use
0500: 20 6f 66 20 50 4f 53 49 58 20 6d 65 6d 6f 72 79   of POSIX memory
0510: 20 41 50 49 73 20 66 72 6f 6d 20 22 73 79 73 2f   APIs from "sys/
0520: 6d 6d 61 6e 2e 68 22 7d 0a 20 20 20 20 77 69 74  mman.h"}.    wit
0530: 68 2d 73 65 65 3d 30 20 20 20 20 20 20 20 20 20  h-see=0         
0540: 20 20 3d 3e 20 7b 45 6e 61 62 6c 65 20 74 68 65    => {Enable the
0550: 20 53 51 4c 69 74 65 20 45 6e 63 72 79 70 74 69   SQLite Encrypti
0560: 6f 6e 20 45 78 74 65 6e 73 69 6f 6e 20 28 53 45  on Extension (SE
0570: 45 29 7d 0a 20 20 20 20 70 72 69 6e 74 2d 6d 69  E)}.    print-mi
0580: 6e 69 6d 75 6d 2d 73 71 6c 69 74 65 2d 76 65 72  nimum-sqlite-ver
0590: 73 69 6f 6e 3d 30 0a 20 20 20 20 20 20 20 20 20  sion=0.         
05a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05b0: 3d 3e 20 7b 70 72 69 6e 74 20 74 68 65 20 6d 69  => {print the mi
05c0: 6e 69 6d 75 6d 20 53 51 4c 69 74 65 20 76 65 72  nimum SQLite ver
05d0: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 72 65 71 75  sion number requ
05e0: 69 72 65 64 2c 20 61 6e 64 20 65 78 69 74 7d 0a  ired, and exit}.
05f0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 2d 73 71 6c      internal-sql
0600: 69 74 65 3d 31 20 20 20 20 3d 3e 20 7b 44 6f 6e  ite=1    => {Don
0610: 27 74 20 75 73 65 20 74 68 65 20 69 6e 74 65 72  't use the inter
0620: 6e 61 6c 20 53 51 4c 69 74 65 2c 20 75 73 65 20  nal SQLite, use 
0630: 74 68 65 20 73 79 73 74 65 6d 20 6f 6e 65 7d 0a  the system one}.
0640: 20 20 20 20 73 74 61 74 69 63 3d 30 20 20 20 20      static=0    
0650: 20 20 20 20 20 20 20 20 20 3d 3e 20 7b 4c 69 6e           => {Lin
0660: 6b 20 61 20 73 74 61 74 69 63 20 65 78 65 63 75  k a static execu
0670: 74 61 62 6c 65 7d 0a 20 20 20 20 66 75 73 65 66  table}.    fusef
0680: 73 3d 31 20 20 20 20 20 20 20 20 20 20 20 20 20  s=1             
0690: 3d 3e 20 7b 44 69 73 61 62 6c 65 20 74 68 65 20  => {Disable the 
06a0: 46 75 73 65 20 46 69 6c 65 73 79 73 74 65 6d 7d  Fuse Filesystem}
06b0: 0a 20 20 20 20 66 6f 73 73 69 6c 2d 64 65 62 75  .    fossil-debu
06c0: 67 3d 30 20 20 20 20 20 20 20 3d 3e 20 7b 42 75  g=0       => {Bu
06d0: 69 6c 64 20 77 69 74 68 20 66 6f 73 73 69 6c 20  ild with fossil 
06e0: 64 65 62 75 67 67 69 6e 67 20 65 6e 61 62 6c 65  debugging enable
06f0: 64 7d 0a 20 20 20 20 6e 6f 2d 6f 70 74 3d 30 20  d}.    no-opt=0 
0700: 20 20 20 20 20 20 20 20 20 20 20 20 3d 3e 20 7b              => {
0710: 42 75 69 6c 64 20 77 69 74 68 6f 75 74 20 6f 70  Build without op
0720: 74 69 6d 69 7a 61 74 69 6f 6e 7d 0a 20 20 20 20  timization}.    
0730: 6a 73 6f 6e 3d 30 20 20 20 20 20 20 20 20 20 20  json=0          
0740: 20 20 20 20 20 3d 3e 20 7b 42 75 69 6c 64 20 77       => {Build w
0750: 69 74 68 20 66 6f 73 73 69 6c 20 4a 53 4f 4e 20  ith fossil JSON 
0760: 41 50 49 20 65 6e 61 62 6c 65 64 7d 0a 20 20 20  API enabled}.   
0770: 20 77 69 74 68 2d 65 6d 73 64 6b 3a 70 61 74 68   with-emsdk:path
0780: 20 20 20 20 20 20 3d 3e 20 7b 44 69 72 65 63 74        => {Direct
0790: 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ory containing t
07a0: 68 65 20 45 6d 73 63 72 69 70 74 65 6e 20 53 44  he Emscripten SD
07b0: 4b 7d 0a 20 20 20 20 63 6f 6d 70 69 6c 65 2d 63  K}.    compile-c
07c0: 6f 6d 6d 61 6e 64 73 3d 30 20 3d 3e 0a 20 20 20  ommands=0 =>.   
07d0: 20 20 20 22 43 68 65 63 6b 20 66 6f 72 20 63 6f     "Check for co
07e0: 6d 70 69 6c 65 5f 63 6f 6d 6d 61 6e 64 73 2e 6a  mpile_commands.j
07f0: 73 6f 6e 20 73 75 70 70 6f 72 74 2e 22 0a 7d 0a  son support.".}.
0800: 0a 23 20 55 70 64 61 74 65 20 74 68 65 20 6d 69  .# Update the mi
0810: 6e 69 6d 75 6d 20 72 65 71 75 69 72 65 64 20 53  nimum required S
0820: 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 6e 75  QLite version nu
0830: 6d 62 65 72 20 68 65 72 65 2c 20 61 6e 64 20 61  mber here, and a
0840: 6c 73 6f 0a 23 20 69 6e 20 73 72 63 2f 6d 61 69  lso.# in src/mai
0850: 6e 2e 63 20 6e 65 61 72 20 74 68 65 20 73 71 6c  n.c near the sql
0860: 69 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 5f  ite3_libversion_
0870: 6e 75 6d 62 65 72 28 29 20 63 61 6c 6c 2e 20 20  number() call.  
0880: 54 61 6b 65 20 63 61 72 65 0a 23 20 74 68 61 74  Take care.# that
0890: 20 62 6f 74 68 20 70 6c 61 63 65 73 20 61 67 72   both places agr
08a0: 65 65 21 0a 64 65 66 69 6e 65 20 4d 49 4e 49 4d  ee!.define MINIM
08b0: 55 4d 5f 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  UM_SQLITE_VERSIO
08c0: 4e 20 22 33 2e 34 36 2e 30 22 0a 0a 23 20 54 68  N "3.46.0"..# Th
08d0: 69 73 20 69 73 20 75 73 65 66 75 6c 20 66 6f 72  is is useful for
08e0: 20 70 65 6f 70 6c 65 20 77 61 6e 74 69 6e 67 20   people wanting 
08f0: 46 6f 73 73 69 6c 20 74 6f 20 75 73 65 20 61 6e  Fossil to use an
0900: 20 65 78 74 65 72 6e 61 6c 20 53 51 4c 69 74 65   external SQLite
0910: 20 6c 69 62 72 61 72 79 0a 23 20 74 6f 20 63 6f   library.# to co
0920: 6d 70 61 72 65 20 74 68 65 20 6f 6e 65 20 74 68  mpare the one th
0930: 65 79 20 68 61 76 65 20 61 67 61 69 6e 73 74 20  ey have against 
0940: 74 68 65 20 6d 69 6e 69 6d 75 6d 20 72 65 71 75  the minimum requ
0950: 69 72 65 64 0a 69 66 20 7b 5b 6f 70 74 2d 62 6f  ired.if {[opt-bo
0960: 6f 6c 20 70 72 69 6e 74 2d 6d 69 6e 69 6d 75 6d  ol print-minimum
0970: 2d 73 71 6c 69 74 65 2d 76 65 72 73 69 6f 6e 5d  -sqlite-version]
0980: 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 5b 67 65  } {.    puts [ge
0990: 74 2d 64 65 66 69 6e 65 20 4d 49 4e 49 4d 55 4d  t-define MINIMUM
09a0: 5f 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5d  _SQLITE_VERSION]
09b0: 0a 20 20 20 20 65 78 69 74 20 30 0a 7d 0a 0a 73  .    exit 0.}..s
09c0: 65 74 20 6f 75 74 4f 66 54 72 65 65 42 75 69 6c  et outOfTreeBuil
09d0: 64 20 30 0a 69 66 20 7b 21 5b 66 69 6c 65 20 65  d 0.if {![file e
09e0: 78 69 73 74 73 20 66 6f 73 73 69 6c 2e 31 5d 7d  xists fossil.1]}
09f0: 20 7b 0a 20 20 70 75 74 73 20 22 54 68 69 73 20   {.  puts "This 
0a00: 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 6e  appears to be an
0a10: 20 6f 75 74 2d 6f 66 2d 74 72 65 65 20 62 75 69   out-of-tree bui
0a20: 6c 64 2e 22 0a 20 20 73 65 74 20 6f 75 74 4f 66  ld.".  set outOf
0a30: 54 72 65 65 42 75 69 6c 64 20 31 0a 7d 0a 0a 23  TreeBuild 1.}..#
0a40: 20 73 71 6c 69 74 65 20 77 61 6e 74 73 20 74 68   sqlite wants th
0a50: 65 73 65 20 74 79 70 65 73 20 69 66 20 70 6f 73  ese types if pos
0a60: 73 69 62 6c 65 0a 63 63 2d 77 69 74 68 20 7b 2d  sible.cc-with {-
0a70: 69 6e 63 6c 75 64 65 73 20 7b 73 74 64 69 6e 74  includes {stdint
0a80: 2e 68 20 69 6e 74 74 79 70 65 73 2e 68 7d 7d 20  .h inttypes.h}} 
0a90: 7b 0a 20 20 20 20 63 63 2d 63 68 65 63 6b 2d 74  {.    cc-check-t
0aa0: 79 70 65 73 20 75 69 6e 74 33 32 5f 74 20 75 69  ypes uint32_t ui
0ab0: 6e 74 31 36 5f 74 20 69 6e 74 31 36 5f 74 20 75  nt16_t int16_t u
0ac0: 69 6e 74 38 5f 74 0a 7d 0a 0a 23 20 55 73 65 20  int8_t.}..# Use 
0ad0: 70 72 65 61 64 2f 70 77 72 69 74 65 20 73 79 73  pread/pwrite sys
0ae0: 74 65 6d 20 63 61 6c 6c 73 20 69 6e 20 70 6c 61  tem calls in pla
0af0: 63 65 20 6f 66 20 73 65 65 6b 20 2b 20 72 65 61  ce of seek + rea
0b00: 64 2f 77 72 69 74 65 20 69 66 20 70 6f 73 73 69  d/write if possi
0b10: 62 6c 65 0a 64 65 66 69 6e 65 20 55 53 45 5f 50  ble.define USE_P
0b20: 52 45 41 44 20 5b 63 63 2d 63 68 65 63 6b 2d 66  READ [cc-check-f
0b30: 75 6e 63 74 69 6f 6e 73 20 70 72 65 61 64 5d 0a  unctions pread].
0b40: 0a 23 20 49 66 20 77 65 20 68 61 76 65 20 63 73  .# If we have cs
0b50: 63 6f 70 65 20 68 65 72 65 2c 20 77 65 27 6c 6c  cope here, we'll
0b60: 20 75 73 65 20 69 74 20 69 6e 20 74 68 65 20 22   use it in the "
0b70: 74 61 67 73 22 20 74 61 72 67 65 74 0a 69 66 20  tags" target.if 
0b80: 7b 5b 63 63 2d 63 68 65 63 6b 2d 70 72 6f 67 73  {[cc-check-progs
0b90: 20 63 73 63 6f 70 65 5d 7d 20 7b 0a 20 20 20 20   cscope]} {.    
0ba0: 64 65 66 69 6e 65 20 43 4f 4c 4c 45 43 54 5f 43  define COLLECT_C
0bb0: 53 43 4f 50 45 5f 44 41 54 41 20 22 63 73 63 6f  SCOPE_DATA "csco
0bc0: 70 65 20 2d 62 52 20 24 3a 3a 61 75 74 6f 73 65  pe -bR $::autose
0bd0: 74 75 70 28 73 72 63 64 69 72 29 2f 73 72 63 2f  tup(srcdir)/src/
0be0: 2a 2e 5c 5b 63 68 5c 5d 22 0a 7d 20 65 6c 73 65  *.\[ch\]".} else
0bf0: 20 7b 0a 20 20 20 20 64 65 66 69 6e 65 20 43 4f   {.    define CO
0c00: 4c 4c 45 43 54 5f 43 53 43 4f 50 45 5f 44 41 54  LLECT_CSCOPE_DAT
0c10: 41 20 22 22 0a 7d 0a 0a 23 20 46 69 6e 64 20 74  A "".}..# Find t
0c20: 63 6c 73 68 20 66 6f 72 20 74 68 65 20 74 65 73  clsh for the tes
0c30: 74 20 73 75 69 74 65 2e 0a 23 0a 23 20 57 65 20  t suite..#.# We 
0c40: 63 61 6e 27 74 20 75 73 65 20 6a 69 6d 73 68 20  can't use jimsh 
0c50: 66 6f 72 20 74 68 69 73 3a 20 74 68 65 20 74 65  for this: the te
0c60: 73 74 20 73 75 69 74 65 20 75 73 65 73 20 66 65  st suite uses fe
0c70: 61 74 75 72 65 73 20 6f 66 20 54 63 6c 20 74 68  atures of Tcl th
0c80: 61 74 0a 23 20 4a 69 6d 20 64 6f 65 73 6e 27 74  at.# Jim doesn't
0c90: 20 73 75 70 70 6f 72 74 2c 20 65 69 74 68 65 72   support, either
0ca0: 20 73 74 61 74 69 63 61 6c 6c 79 20 6f 72 20 64   statically or d
0cb0: 75 65 20 74 6f 20 74 68 65 20 77 61 79 20 69 74  ue to the way it
0cc0: 27 73 20 62 75 69 6c 74 20 62 79 0a 23 20 61 75  's built by.# au
0cd0: 74 6f 73 65 74 75 70 2e 20 20 46 6f 72 20 65 78  tosetup.  For ex
0ce0: 61 6d 70 6c 65 2c 20 4a 69 6d 20 73 75 70 70 6f  ample, Jim suppo
0cf0: 72 74 73 20 60 66 69 6c 65 20 6e 6f 72 6d 61 6c  rts `file normal
0d00: 69 7a 65 60 2c 20 62 75 74 20 6f 6e 6c 79 20 69  ize`, but only i
0d10: 66 0a 23 20 79 6f 75 20 62 75 69 6c 64 20 69 74  f.# you build it
0d20: 20 77 69 74 68 20 48 41 56 45 5f 52 45 41 4c 50   with HAVE_REALP
0d30: 41 54 48 2c 20 77 68 69 63 68 20 77 6f 6e 27 74  ATH, which won't
0d40: 20 65 76 65 72 20 62 65 20 64 65 66 69 6e 65 64   ever be defined
0d50: 20 69 6e 20 74 68 69 73 0a 23 20 63 6f 6e 74 65   in this.# conte
0d60: 78 74 20 62 65 63 61 75 73 65 20 61 75 74 6f 73  xt because autos
0d70: 65 74 75 70 20 64 6f 65 73 6e 27 74 20 74 72 79  etup doesn't try
0d80: 20 74 6f 20 64 69 73 63 6f 76 65 72 20 70 6c 61   to discover pla
0d90: 74 66 6f 72 6d 2d 73 70 65 63 69 66 69 63 0a 23  tform-specific.#
0da0: 20 64 65 74 61 69 6c 73 20 6c 69 6b 65 20 74 68   details like th
0db0: 61 74 20 62 65 66 6f 72 65 20 69 74 20 64 65 63  at before it dec
0dc0: 69 64 65 73 20 74 6f 20 62 75 69 6c 64 20 6a 69  ides to build ji
0dd0: 6d 73 68 30 2e 20 20 42 65 73 69 64 65 73 20 77  msh0.  Besides w
0de0: 68 69 63 68 2c 0a 23 20 61 75 74 6f 73 65 74 75  hich,.# autosetu
0df0: 70 20 77 6f 6e 27 74 20 62 75 69 6c 64 20 6a 69  p won't build ji
0e00: 6d 73 68 30 20 61 74 20 61 6c 6c 20 69 66 20 69  msh0 at all if i
0e10: 74 20 63 61 6e 20 66 69 6e 64 20 74 63 6c 73 68  t can find tclsh
0e20: 20 69 74 73 65 6c 66 2e 0a 23 20 49 72 6f 6e 69   itself..# Ironi
0e30: 63 61 6c 6c 79 2c 20 74 68 69 73 20 6d 65 61 6e  cally, this mean
0e40: 73 20 77 65 20 6d 61 79 20 72 69 67 68 74 20 6e  s we may right n
0e50: 6f 77 20 62 65 20 72 75 6e 6e 69 6e 67 20 75 6e  ow be running un
0e60: 64 65 72 20 65 69 74 68 65 72 20 6a 69 6d 73 68  der either jimsh
0e70: 30 0a 23 20 6f 72 20 61 20 76 65 72 73 69 6f 6e  0.# or a version
0e80: 20 6f 66 20 74 63 6c 73 68 20 74 68 61 74 20 77   of tclsh that w
0e90: 65 20 66 69 6e 64 20 75 6e 73 75 69 74 61 62 6c  e find unsuitabl
0ea0: 65 20 62 65 6c 6f 77 21 0a 63 63 2d 63 68 65 63  e below!.cc-chec
0eb0: 6b 2d 70 72 6f 67 73 20 74 63 6c 73 68 0a 73 65  k-progs tclsh.se
0ec0: 74 20 68 62 74 64 20 2f 75 73 72 2f 6c 6f 63 61  t hbtd /usr/loca
0ed0: 6c 2f 43 65 6c 6c 61 72 2f 74 63 6c 2d 74 6b 0a  l/Cellar/tcl-tk.
0ee0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 65 71 75 61  if {[string equa
0ef0: 6c 20 66 61 6c 73 65 20 5b 67 65 74 2d 64 65 66  l false [get-def
0f00: 69 6e 65 20 54 43 4c 53 48 5d 5d 7d 20 7b 0a 20  ine TCLSH]]} {. 
0f10: 20 20 20 6d 73 67 2d 72 65 73 75 6c 74 20 22 57     msg-result "W
0f20: 41 52 4e 49 4e 47 3a 20 27 6d 61 6b 65 20 74 65  ARNING: 'make te
0f30: 73 74 27 20 77 69 6c 6c 20 6e 6f 74 20 72 75 6e  st' will not run
0f40: 20 68 65 72 65 2e 22 0a 7d 20 65 6c 73 65 20 7b   here.".} else {
0f50: 0a 20 20 20 20 73 65 74 20 76 20 5b 65 78 65 63  .    set v [exec
0f60: 20 2f 62 69 6e 2f 73 68 20 2d 63 20 22 65 63 68   /bin/sh -c "ech
0f70: 6f 20 27 70 75 74 73 20 5c 24 74 63 6c 5f 76 65  o 'puts \$tcl_ve
0f80: 72 73 69 6f 6e 27 20 7c 20 74 63 6c 73 68 22 5d  rsion' | tclsh"]
0f90: 0a 20 20 20 20 69 66 20 7b 5b 65 78 70 72 20 7b  .    if {[expr {
0fa0: 24 76 20 3e 3d 20 38 2e 36 7d 5d 7d 20 7b 0a 20  $v >= 8.6}]} {. 
0fb0: 20 20 20 20 20 20 20 6d 73 67 2d 72 65 73 75 6c         msg-resul
0fc0: 74 20 22 46 6f 75 6e 64 20 54 63 6c 73 68 20 76  t "Found Tclsh v
0fd0: 65 72 73 69 6f 6e 20 24 76 20 69 6e 20 74 68 65  ersion $v in the
0fe0: 20 50 41 54 48 2e 22 0a 20 20 20 20 20 20 20 20   PATH.".        
0ff0: 64 65 66 69 6e 65 20 54 43 4c 53 48 20 74 63 6c  define TCLSH tcl
1000: 73 68 0a 20 20 20 20 7d 20 65 6c 73 65 69 66 20  sh.    } elseif 
1010: 7b 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f  {[file isdirecto
1020: 72 79 20 24 68 62 74 64 5d 7d 20 7b 0a 20 20 20  ry $hbtd]} {.   
1030: 20 20 20 20 20 23 20 54 68 69 73 20 69 73 20 61       # This is a
1040: 20 6d 61 63 4f 53 20 73 79 73 74 65 6d 20 77 69   macOS system wi
1050: 74 68 20 74 68 65 20 48 6f 6d 65 62 72 65 77 20  th the Homebrew 
1060: 76 65 72 73 69 6f 6e 20 6f 66 20 54 63 6c 2f 54  version of Tcl/T
1070: 6b 0a 20 20 20 20 20 20 20 20 23 20 69 6e 73 74  k.        # inst
1080: 61 6c 6c 65 64 2e 20 20 53 65 6c 65 63 74 20 74  alled.  Select t
1090: 68 65 20 6e 65 77 65 73 74 20 76 65 72 73 69 6f  he newest versio
10a0: 6e 2e 20 20 49 74 20 77 6f 6e 27 74 20 6e 6f 72  n.  It won't nor
10b0: 6d 61 6c 6c 79 20 62 65 0a 20 20 20 20 20 20 20  mally be.       
10c0: 20 23 20 69 6e 20 74 68 65 20 50 41 54 48 20 74   # in the PATH t
10d0: 6f 20 61 76 6f 69 64 20 73 68 61 64 6f 77 69 6e  o avoid shadowin
10e0: 67 20 2f 75 73 72 2f 62 69 6e 2f 74 63 6c 73 68  g /usr/bin/tclsh
10f0: 2c 20 61 6e 64 20 65 76 65 6e 20 69 66 20 69 74  , and even if it
1100: 0a 20 20 20 20 20 20 20 20 23 20 77 65 72 65 20  .        # were 
1110: 69 6e 20 74 68 65 20 50 41 54 48 2c 20 69 74 27  in the PATH, it'
1120: 73 20 62 61 64 20 70 72 61 63 74 69 63 65 20 74  s bad practice t
1130: 6f 20 70 75 74 20 2f 75 73 72 2f 6c 6f 63 61 6c  o put /usr/local
1140: 2f 62 69 6e 20 28 74 68 65 0a 20 20 20 20 20 20  /bin (the.      
1150: 20 20 23 20 48 6f 6d 65 62 72 65 77 20 64 65 66    # Homebrew def
1160: 61 75 6c 74 29 20 61 68 65 61 64 20 6f 66 20 2f  ault) ahead of /
1170: 75 73 72 2f 62 69 6e 2c 20 65 73 70 65 63 69 61  usr/bin, especia
1180: 6c 6c 79 20 67 69 76 65 6e 20 74 68 61 74 0a 20  lly given that. 
1190: 20 20 20 20 20 20 20 23 20 69 74 27 73 20 75 73         # it's us
11a0: 65 72 2d 77 72 69 74 65 61 62 6c 65 20 62 79 20  er-writeable by 
11b0: 64 65 66 61 75 6c 74 20 77 69 74 68 20 48 6f 6d  default with Hom
11c0: 65 62 72 65 77 2e 20 20 54 68 75 73 2c 20 77 65  ebrew.  Thus, we
11d0: 20 63 61 6e 20 62 65 0a 20 20 20 20 20 20 20 20   can be.        
11e0: 23 20 70 72 65 74 74 79 20 73 75 72 65 20 74 68  # pretty sure th
11f0: 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 63 61  e only way to ca
1200: 6c 6c 20 69 74 20 69 73 20 77 69 74 68 20 61 6e  ll it is with an
1210: 20 61 62 73 6f 6c 75 74 65 20 70 61 74 68 2e 0a   absolute path..
1220: 20 20 20 20 20 20 20 20 73 65 74 20 76 20 5b 65          set v [e
1230: 78 65 63 20 6c 73 20 2d 74 72 20 24 68 62 74 64  xec ls -tr $hbtd
1240: 20 7c 20 74 61 69 6c 20 2d 31 5d 0a 20 20 20 20   | tail -1].    
1250: 20 20 20 20 73 65 74 20 70 61 74 68 20 22 24 68      set path "$h
1260: 62 74 64 2f 24 76 2f 62 69 6e 2f 74 63 6c 73 68  btd/$v/bin/tclsh
1270: 22 0a 20 20 20 20 20 20 20 20 64 65 66 69 6e 65  ".        define
1280: 20 54 43 4c 53 48 20 24 70 61 74 68 0a 20 20 20   TCLSH $path.   
1290: 20 20 20 20 20 6d 73 67 2d 72 65 73 75 6c 74 20       msg-result 
12a0: 22 55 73 69 6e 67 20 48 6f 6d 65 62 72 65 77 20  "Using Homebrew 
12b0: 54 63 6c 2f 54 6b 20 76 65 72 73 69 6f 6e 20 24  Tcl/Tk version $
12c0: 70 61 74 68 2e 22 0a 20 20 20 20 7d 20 65 6c 73  path.".    } els
12d0: 65 20 7b 0a 20 20 20 20 20 20 20 20 6d 73 67 2d  e {.        msg-
12e0: 72 65 73 75 6c 74 20 22 57 41 52 4e 49 4e 47 3a  result "WARNING:
12f0: 20 74 63 6c 73 68 20 24 76 20 66 6f 75 6e 64 3b   tclsh $v found;
1300: 20 6e 65 65 64 20 3e 3d 20 38 2e 36 20 66 6f 72   need >= 8.6 for
1310: 20 27 6d 61 6b 65 20 74 65 73 74 27 2e 22 0a 20   'make test'.". 
1320: 20 20 20 20 20 20 20 64 65 66 69 6e 65 20 54 43         define TC
1330: 4c 53 48 20 66 61 6c 73 65 20 20 20 20 20 3b 23  LSH false     ;#
1340: 20 66 6f 72 63 65 20 22 6d 61 6b 65 20 74 65 73   force "make tes
1350: 74 22 20 66 61 69 6c 75 72 65 20 76 69 61 20 2f  t" failure via /
1360: 75 73 72 2f 62 69 6e 2f 66 61 6c 73 65 0a 20 20  usr/bin/false.  
1370: 20 20 7d 0a 7d 0a 0a 64 65 66 69 6e 65 20 43 46    }.}..define CF
1380: 4c 41 47 53 20 5b 67 65 74 2d 65 6e 76 20 43 46  LAGS [get-env CF
1390: 4c 41 47 53 20 22 2d 67 20 2d 4f 32 22 5d 0a 64  LAGS "-g -O2"].d
13a0: 65 66 69 6e 65 20 45 58 54 52 41 5f 43 46 4c 41  efine EXTRA_CFLA
13b0: 47 53 20 22 2d 57 61 6c 6c 22 0a 64 65 66 69 6e  GS "-Wall".defin
13c0: 65 20 45 58 54 52 41 5f 4c 44 46 4c 41 47 53 20  e EXTRA_LDFLAGS 
13d0: 22 22 0a 64 65 66 69 6e 65 20 55 53 45 5f 53 59  "".define USE_SY
13e0: 53 54 45 4d 5f 53 51 4c 49 54 45 20 30 0a 64 65  STEM_SQLITE 0.de
13f0: 66 69 6e 65 20 55 53 45 5f 4c 49 4e 45 4e 4f 49  fine USE_LINENOI
1400: 53 45 20 30 0a 64 65 66 69 6e 65 20 55 53 45 5f  SE 0.define USE_
1410: 4d 4d 41 4e 5f 48 20 30 0a 64 65 66 69 6e 65 20  MMAN_H 0.define 
1420: 55 53 45 5f 53 45 45 20 30 0a 64 65 66 69 6e 65  USE_SEE 0.define
1430: 20 53 51 4c 49 54 45 33 5f 4f 52 49 47 49 4e 20   SQLITE3_ORIGIN 
1440: 30 0a 23 20 53 51 4c 49 54 45 33 5f 4f 52 49 47  0.# SQLITE3_ORIG
1450: 49 4e 20 30 20 3d 20 73 72 63 2f 73 71 6c 69 74  IN 0 = src/sqlit
1460: 65 33 2c 20 31 3d 73 72 63 2f 73 71 6c 69 74 65  e3, 1=src/sqlite
1470: 33 2d 73 65 65 2e 63 2c 20 32 3d 63 6c 69 65 6e  3-see.c, 2=clien
1480: 74 2d 70 72 6f 76 69 64 65 64 0a 64 65 66 69 6e  t-provided.defin
1490: 65 20 53 51 4c 49 54 45 5f 4f 50 54 49 4f 4e 53  e SQLITE_OPTIONS
14a0: 5f 45 58 54 20 22 22 0a 23 20 53 51 4c 49 54 45  _EXT "".# SQLITE
14b0: 5f 4f 50 54 49 4f 4e 53 5f 45 58 54 20 3d 3e 20  _OPTIONS_EXT => 
14c0: 62 75 69 6c 64 2d 64 65 70 65 6e 64 65 6e 74 20  build-dependent 
14d0: 43 46 4c 41 47 53 20 66 6f 72 20 73 71 6c 69 74  CFLAGS for sqlit
14e0: 65 33 2e 63 20 61 6e 64 20 73 68 65 6c 6c 2e 63  e3.c and shell.c
14f0: 0a 0a 23 20 4d 61 69 6e 74 61 69 6e 20 74 68 65  ..# Maintain the
1500: 20 43 38 39 2f 43 39 30 2d 73 74 79 6c 65 20 6f   C89/C90-style o
1510: 72 64 65 72 20 6f 66 20 76 61 72 69 61 62 6c 65  rder of variable
1520: 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 62 65   declarations be
1530: 66 6f 72 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  fore statements.
1540: 0a 23 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  .# Check if the 
1550: 63 6f 6d 70 69 6c 65 72 20 73 75 70 70 6f 72 74  compiler support
1560: 73 20 74 68 65 20 72 65 73 70 65 63 74 69 76 65  s the respective
1570: 20 77 61 72 6e 69 6e 67 20 66 6c 61 67 2e 0a 69   warning flag..i
1580: 66 20 7b 5b 63 63 74 65 73 74 20 2d 63 66 6c 61  f {[cctest -cfla
1590: 67 73 20 2d 57 64 65 63 6c 61 72 61 74 69 6f 6e  gs -Wdeclaration
15a0: 2d 61 66 74 65 72 2d 73 74 61 74 65 6d 65 6e 74  -after-statement
15b0: 5d 7d 20 7b 0a 20 20 20 20 64 65 66 69 6e 65 2d  ]} {.    define-
15c0: 61 70 70 65 6e 64 20 45 58 54 52 41 5f 43 46 4c  append EXTRA_CFL
15d0: 41 47 53 20 2d 57 64 65 63 6c 61 72 61 74 69 6f  AGS -Wdeclaratio
15e0: 6e 2d 61 66 74 65 72 2d 73 74 61 74 65 6d 65 6e  n-after-statemen
15f0: 74 0a 7d 0a 0a 0a 23 20 54 68 69 73 20 70 72 6f  t.}...# This pro
1600: 63 65 64 75 72 65 20 69 73 20 61 20 63 75 73 74  cedure is a cust
1610: 6f 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f  omized version o
1620: 66 20 22 63 63 2d 63 68 65 63 6b 2d 66 75 6e 63  f "cc-check-func
1630: 74 69 6f 6e 2d 69 6e 2d 6c 69 62 22 2c 0a 23 20  tion-in-lib",.# 
1640: 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 20 6d 6f  that does not mo
1650: 64 69 66 79 20 74 68 65 20 4c 49 42 53 20 76 61  dify the LIBS va
1660: 72 69 61 62 6c 65 2e 20 20 49 74 73 20 75 73 65  riable.  Its use
1670: 20 70 72 65 76 65 6e 74 73 20 70 72 65 6d 61 74   prevents premat
1680: 75 72 65 6c 79 0a 23 20 70 75 6c 6c 69 6e 67 20  urely.# pulling 
1690: 69 6e 20 6c 69 62 72 61 72 69 65 73 20 74 68 61  in libraries tha
16a0: 74 20 77 69 6c 6c 20 62 65 20 61 64 64 65 64 20  t will be added 
16b0: 6c 61 74 65 72 20 61 6e 79 68 6f 77 20 28 65 2e  later anyhow (e.
16c0: 67 2e 20 22 2d 6c 64 6c 22 29 2e 0a 70 72 6f 63  g. "-ldl")..proc
16d0: 20 63 68 65 63 6b 2d 66 75 6e 63 74 69 6f 6e 2d   check-function-
16e0: 69 6e 2d 6c 69 62 20 7b 66 75 6e 63 74 69 6f 6e  in-lib {function
16f0: 20 6c 69 62 73 20 7b 6f 74 68 65 72 6c 69 62 73   libs {otherlibs
1700: 20 7b 7d 7d 7d 20 7b 0a 20 20 20 20 69 66 20 7b   {}}} {.    if {
1710: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
1720: 6f 74 68 65 72 6c 69 62 73 5d 7d 20 7b 0a 20 20  otherlibs]} {.  
1730: 20 20 20 20 20 20 6d 73 67 2d 63 68 65 63 6b 69        msg-checki
1740: 6e 67 20 22 43 68 65 63 6b 69 6e 67 20 66 6f 72  ng "Checking for
1750: 20 24 66 75 6e 63 74 69 6f 6e 20 69 6e 20 24 6c   $function in $l
1760: 69 62 73 20 77 69 74 68 20 24 6f 74 68 65 72 6c  ibs with $otherl
1770: 69 62 73 2e 2e 2e 22 0a 20 20 20 20 7d 20 65 6c  ibs...".    } el
1780: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 6d 73 67  se {.        msg
1790: 2d 63 68 65 63 6b 69 6e 67 20 22 43 68 65 63 6b  -checking "Check
17a0: 69 6e 67 20 66 6f 72 20 24 66 75 6e 63 74 69 6f  ing for $functio
17b0: 6e 20 69 6e 20 24 6c 69 62 73 2e 2e 2e 22 0a 20  n in $libs...". 
17c0: 20 20 20 7d 0a 20 20 20 20 73 65 74 20 66 6f 75     }.    set fou
17d0: 6e 64 20 30 0a 20 20 20 20 63 63 2d 77 69 74 68  nd 0.    cc-with
17e0: 20 5b 6c 69 73 74 20 2d 6c 69 62 73 20 24 6f 74   [list -libs $ot
17f0: 68 65 72 6c 69 62 73 5d 20 7b 0a 20 20 20 20 20  herlibs] {.     
1800: 20 20 20 69 66 20 7b 5b 63 63 74 65 73 74 5f 66     if {[cctest_f
1810: 75 6e 63 74 69 6f 6e 20 24 66 75 6e 63 74 69 6f  unction $functio
1820: 6e 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  n]} {.          
1830: 20 20 6d 73 67 2d 72 65 73 75 6c 74 20 22 6e 6f    msg-result "no
1840: 6e 65 20 6e 65 65 64 65 64 22 0a 20 20 20 20 20  ne needed".     
1850: 20 20 20 20 20 20 20 64 65 66 69 6e 65 20 6c 69         define li
1860: 62 5f 24 66 75 6e 63 74 69 6f 6e 20 22 22 0a 20  b_$function "". 
1870: 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20             incr 
1880: 66 6f 75 6e 64 0a 20 20 20 20 20 20 20 20 7d 20  found.        } 
1890: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20  else {.         
18a0: 20 20 20 66 6f 72 65 61 63 68 20 6c 69 62 20 24     foreach lib $
18b0: 6c 69 62 73 20 7b 0a 20 20 20 20 20 20 20 20 20  libs {.         
18c0: 20 20 20 20 20 20 20 63 63 2d 77 69 74 68 20 5b         cc-with [
18d0: 6c 69 73 74 20 2d 6c 69 62 73 20 2d 6c 24 6c 69  list -libs -l$li
18e0: 62 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  b] {.           
18f0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 63           if {[cc
1900: 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 20 24 66  test_function $f
1910: 75 6e 63 74 69 6f 6e 5d 7d 20 7b 0a 20 20 20 20  unction]} {.    
1920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1930: 20 20 20 20 6d 73 67 2d 72 65 73 75 6c 74 20 2d      msg-result -
1940: 6c 24 6c 69 62 0a 20 20 20 20 20 20 20 20 20 20  l$lib.          
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1960: 66 69 6e 65 20 6c 69 62 5f 24 66 75 6e 63 74 69  fine lib_$functi
1970: 6f 6e 20 2d 6c 24 6c 69 62 0a 20 20 20 20 20 20  on -l$lib.      
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1990: 20 20 69 6e 63 72 20 66 6f 75 6e 64 0a 20 20 20    incr found.   
19a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b0: 20 20 20 20 20 62 72 65 61 6b 0a 20 20 20 20 20       break.     
19c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19e0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d   }.            }
19f0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  .        }.    }
1a00: 0a 20 20 20 20 69 66 20 7b 24 66 6f 75 6e 64 7d  .    if {$found}
1a10: 20 7b 0a 20 20 20 20 20 20 20 20 64 65 66 69 6e   {.        defin
1a20: 65 20 5b 66 65 61 74 75 72 65 2d 64 65 66 69 6e  e [feature-defin
1a30: 65 2d 6e 61 6d 65 20 24 66 75 6e 63 74 69 6f 6e  e-name $function
1a40: 5d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20  ].    } else {. 
1a50: 20 20 20 20 20 20 20 6d 73 67 2d 72 65 73 75 6c         msg-resul
1a60: 74 20 22 6e 6f 22 0a 20 20 20 20 7d 0a 20 20 20  t "no".    }.   
1a70: 20 72 65 74 75 72 6e 20 24 66 6f 75 6e 64 0a 7d   return $found.}
1a80: 0a 0a 69 66 20 7b 21 5b 6f 70 74 2d 62 6f 6f 6c  ..if {![opt-bool
1a90: 20 69 6e 74 65 72 6e 61 6c 2d 73 71 6c 69 74 65   internal-sqlite
1aa0: 5d 7d 20 7b 0a 20 20 70 72 6f 63 20 66 69 6e 64  ]} {.  proc find
1ab0: 5f 73 79 73 74 65 6d 5f 73 71 6c 69 74 65 20 7b  _system_sqlite {
1ac0: 7d 20 7b 0a 0a 20 20 20 20 23 20 4f 6e 20 73 6f  } {..    # On so
1ad0: 6d 65 20 73 79 73 74 65 6d 73 20 28 73 6c 61 63  me systems (slac
1ae0: 6b 77 61 72 65 29 2c 20 6c 69 62 73 71 6c 69 74  kware), libsqlit
1af0: 65 33 20 72 65 71 75 69 72 65 73 20 2d 6c 64 6c  e3 requires -ldl
1b00: 20 74 6f 20 6c 69 6e 6b 2e 20 53 6f 0a 20 20 20   to link. So.   
1b10: 20 23 20 73 65 61 72 63 68 20 66 6f 72 20 74 68   # search for th
1b20: 65 20 73 79 73 74 65 6d 20 53 51 4c 69 74 65 20  e system SQLite 
1b30: 6f 6e 63 65 20 77 69 74 68 20 2d 6c 64 6c 2c 20  once with -ldl, 
1b40: 61 6e 64 20 6f 6e 63 65 20 77 69 74 68 6f 75 74  and once without
1b50: 2e 20 49 66 0a 20 20 20 20 23 20 74 68 65 20 6c  . If.    # the l
1b60: 69 62 72 61 72 79 20 63 61 6e 20 6f 6e 6c 79 20  ibrary can only 
1b70: 62 65 20 66 6f 75 6e 64 20 77 69 74 68 20 24 65  be found with $e
1b80: 78 74 72 61 6c 69 62 73 20 73 65 74 20 74 6f 20  xtralibs set to 
1b90: 2d 6c 64 6c 2c 20 74 68 65 6e 0a 20 20 20 20 23  -ldl, then.    #
1ba0: 20 74 68 65 20 63 6f 64 65 20 62 65 6c 6f 77 20   the code below 
1bb0: 77 69 6c 6c 20 61 70 70 65 6e 64 20 2d 6c 64 6c  will append -ldl
1bc0: 20 74 6f 20 4c 49 42 53 2e 0a 20 20 20 20 23 0a   to LIBS..    #.
1bd0: 20 20 20 20 66 6f 72 65 61 63 68 20 65 78 74 72      foreach extr
1be0: 61 6c 69 62 73 20 7b 7b 7d 20 7b 2d 6c 64 6c 7d  alibs {{} {-ldl}
1bf0: 7d 20 7b 0a 0a 20 20 20 20 20 20 23 20 4c 6f 63  } {..      # Loc
1c00: 61 74 65 20 74 68 65 20 73 79 73 74 65 6d 20 53  ate the system S
1c10: 51 4c 69 74 65 20 62 79 20 73 65 61 72 63 68 69  QLite by searchi
1c20: 6e 67 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 6f  ng for sqlite3_o
1c30: 70 65 6e 28 29 2e 20 54 68 65 6e 20 63 68 65 63  pen(). Then chec
1c40: 6b 0a 20 20 20 20 20 20 23 20 69 66 20 73 71 6c  k.      # if sql
1c50: 69 74 65 33 5f 73 74 6d 74 5f 69 73 65 78 70 6c  ite3_stmt_isexpl
1c60: 61 69 6e 20 63 61 6e 20 62 65 20 66 6f 75 6e 64  ain can be found
1c70: 20 61 73 20 77 65 6c 6c 2e 20 49 66 20 77 65 20   as well. If we 
1c80: 63 61 6e 20 66 69 6e 64 20 6f 70 65 6e 28 29 20  can find open() 
1c90: 62 75 74 0a 20 20 20 20 20 20 23 20 6e 6f 74 20  but.      # not 
1ca0: 73 74 6d 74 5f 69 73 65 78 70 6c 61 69 6e 28 29  stmt_isexplain()
1cb0: 2c 20 74 68 65 6e 20 74 68 65 20 73 79 73 74 65  , then the syste
1cc0: 6d 20 53 51 4c 69 74 65 20 69 73 20 74 6f 6f 20  m SQLite is too 
1cd0: 6f 6c 64 20 74 6f 20 6c 69 6e 6b 20 61 67 61 69  old to link agai
1ce0: 6e 73 74 0a 20 20 20 20 20 20 23 20 66 6f 73 73  nst.      # foss
1cf0: 69 6c 2e 0a 20 20 20 20 20 20 23 0a 20 20 20 20  il..      #.    
1d00: 20 20 69 66 20 7b 5b 63 68 65 63 6b 2d 66 75 6e    if {[check-fun
1d10: 63 74 69 6f 6e 2d 69 6e 2d 6c 69 62 20 73 71 6c  ction-in-lib sql
1d20: 69 74 65 33 5f 6f 70 65 6e 20 73 71 6c 69 74 65  ite3_open sqlite
1d30: 33 20 24 65 78 74 72 61 6c 69 62 73 5d 7d 20 7b  3 $extralibs]} {
1d40: 0a 20 20 20 20 20 20 20 20 23 20 53 75 63 63 65  .        # Succe
1d50: 73 73 2e 20 55 70 64 61 74 65 20 73 79 6d 62 6f  ss. Update symbo
1d60: 6c 73 20 61 6e 64 20 72 65 74 75 72 6e 2e 0a 20  ls and return.. 
1d70: 20 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 20         #.       
1d80: 20 64 65 66 69 6e 65 20 55 53 45 5f 53 59 53 54   define USE_SYST
1d90: 45 4d 5f 53 51 4c 49 54 45 20 31 0a 20 20 20 20  EM_SQLITE 1.    
1da0: 20 20 20 20 64 65 66 69 6e 65 2d 61 70 70 65 6e      define-appen
1db0: 64 20 4c 49 42 53 20 2d 6c 73 71 6c 69 74 65 33  d LIBS -lsqlite3
1dc0: 0a 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 2d  .        define-
1dd0: 61 70 70 65 6e 64 20 4c 49 42 53 20 24 65 78 74  append LIBS $ext
1de0: 72 61 6c 69 62 73 0a 20 20 20 20 20 20 20 20 72  ralibs.        r
1df0: 65 74 75 72 6e 0a 20 20 20 20 20 20 7d 0a 20 20  eturn.      }.  
1e00: 20 20 7d 0a 20 20 20 20 75 73 65 72 2d 65 72 72    }.    user-err
1e10: 6f 72 20 22 73 79 73 74 65 6d 20 73 71 6c 69 74  or "system sqlit
1e20: 65 33 20 6e 6f 74 20 66 6f 75 6e 64 22 0a 20 20  e3 not found".  
1e30: 7d 0a 0a 20 20 66 69 6e 64 5f 73 79 73 74 65 6d  }..  find_system
1e40: 5f 73 71 6c 69 74 65 0a 0a 20 20 70 72 6f 63 20  _sqlite..  proc 
1e50: 74 65 73 74 5f 73 79 73 74 65 6d 5f 73 71 6c 69  test_system_sqli
1e60: 74 65 20 7b 7d 20 7b 0a 20 20 20 20 23 20 43 68  te {} {.    # Ch
1e70: 65 63 6b 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  eck compatibilit
1e80: 79 20 6f 66 20 74 68 65 20 73 79 73 74 65 6d 20  y of the system 
1e90: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 62  SQLite library b
1ea0: 79 20 72 75 6e 6e 69 6e 67 20 74 68 65 0a 20 20  y running the.  
1eb0: 20 20 23 20 73 71 6c 63 6f 6d 70 74 74 65 73 74    # sqlcompttest
1ec0: 2e 63 20 70 72 6f 67 72 61 6d 20 69 6e 20 74 68  .c program in th
1ed0: 65 20 73 6f 75 72 63 65 20 74 72 65 65 20 70 61  e source tree pa
1ee0: 73 73 65 73 0a 20 20 20 20 23 20 4d 49 4e 49 4d  sses.    # MINIM
1ef0: 55 4d 5f 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  UM_SQLITE_VERSIO
1f00: 4e 20 73 65 74 20 61 74 20 74 68 65 20 74 6f 70  N set at the top
1f10: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 74 6f   of this file to
1f20: 0a 20 20 20 20 23 20 73 71 6c 63 6f 6d 70 74 74  .    # sqlcomptt
1f30: 65 73 74 2e 63 0a 20 20 20 20 23 0a 20 20 20 20  est.c.    #.    
1f40: 73 65 74 20 63 6d 64 6c 69 6e 65 20 7b 7d 0a 20  set cmdline {}. 
1f50: 20 20 20 6c 61 70 70 65 6e 64 20 63 6d 64 6c 69     lappend cmdli
1f60: 6e 65 20 7b 2a 7d 5b 67 65 74 2d 64 65 66 69 6e  ne {*}[get-defin
1f70: 65 20 43 43 41 43 48 45 5d 0a 20 20 20 20 6c 61  e CCACHE].    la
1f80: 70 70 65 6e 64 20 63 6d 64 6c 69 6e 65 20 7b 2a  ppend cmdline {*
1f90: 7d 5b 67 65 74 2d 64 65 66 69 6e 65 20 43 43 5d  }[get-define CC]
1fa0: 20 7b 2a 7d 5b 67 65 74 2d 64 65 66 69 6e 65 20   {*}[get-define 
1fb0: 43 46 4c 41 47 53 5d 0a 20 20 20 20 6c 61 70 70  CFLAGS].    lapp
1fc0: 65 6e 64 20 63 6d 64 6c 69 6e 65 20 24 3a 3a 61  end cmdline $::a
1fd0: 75 74 6f 73 65 74 75 70 28 64 69 72 29 2f 2e 2e  utosetup(dir)/..
1fe0: 2f 74 6f 6f 6c 73 2f 73 71 6c 63 6f 6d 70 61 74  /tools/sqlcompat
1ff0: 74 65 73 74 2e 63 20 2d 6f 20 63 6f 6e 66 74 65  test.c -o confte
2000: 73 74 5f 5f 0a 20 20 20 20 6c 61 70 70 65 6e 64  st__.    lappend
2010: 20 63 6d 64 6c 69 6e 65 20 7b 2a 7d 5b 67 65 74   cmdline {*}[get
2020: 2d 64 65 66 69 6e 65 20 4c 44 46 4c 41 47 53 5d  -define LDFLAGS]
2030: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6d 64  .    lappend cmd
2040: 6c 69 6e 65 20 7b 2a 7d 5b 67 65 74 2d 64 65 66  line {*}[get-def
2050: 69 6e 65 20 4c 49 42 53 5d 0a 20 20 20 20 73 65  ine LIBS].    se
2060: 74 20 73 71 6c 69 74 65 2d 76 65 72 73 69 6f 6e  t sqlite-version
2070: 20 5b 73 74 72 69 6e 67 20 63 61 74 20 22 2d 44   [string cat "-D
2080: 20 4d 49 4e 49 4d 55 4d 5f 53 51 4c 49 54 45 5f   MINIMUM_SQLITE_
2090: 56 45 52 53 49 4f 4e 3d 22 20 5b 67 65 74 2d 64  VERSION=" [get-d
20a0: 65 66 69 6e 65 20 4d 49 4e 49 4d 55 4d 5f 53 51  efine MINIMUM_SQ
20b0: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 5d 5d 0a 20  LITE_VERSION]]. 
20c0: 20 20 20 6c 61 70 70 65 6e 64 20 63 6d 64 6c 69     lappend cmdli
20d0: 6e 65 20 7b 2a 7d 5b 73 65 74 20 73 71 6c 69 74  ne {*}[set sqlit
20e0: 65 2d 76 65 72 73 69 6f 6e 5d 0a 20 20 20 20 73  e-version].    s
20f0: 65 74 20 6f 6b 20 31 0a 20 20 20 20 73 65 74 20  et ok 1.    set 
2100: 65 72 72 20 5b 63 61 74 63 68 20 7b 65 78 65 63  err [catch {exec
2110: 2d 77 69 74 68 2d 73 74 64 65 72 72 20 7b 2a 7d  -with-stderr {*}
2120: 24 63 6d 64 6c 69 6e 65 7d 20 72 65 73 75 6c 74  $cmdline} result
2130: 20 65 72 72 69 6e 66 6f 5d 0a 20 20 20 20 69 66   errinfo].    if
2140: 20 7b 24 65 72 72 7d 20 7b 0a 20 20 20 20 20 20   {$err} {.      
2150: 20 63 6f 6e 66 69 67 6c 6f 67 20 22 46 61 69 6c   configlog "Fail
2160: 65 64 3a 20 5b 6a 6f 69 6e 20 24 63 6d 64 6c 69  ed: [join $cmdli
2170: 6e 65 5d 22 0a 20 20 20 20 20 20 20 69 66 20 7b  ne]".       if {
2180: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
2190: 72 65 73 75 6c 74 5d 3e 30 7d 20 7b 63 6f 6e 66  result]>0} {conf
21a0: 69 67 6c 6f 67 20 24 72 65 73 75 6c 74 7d 0a 20  iglog $result}. 
21b0: 20 20 20 20 20 20 63 6f 6e 66 69 67 6c 6f 67 20        configlog 
21c0: 22 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 22 0a 20  "============". 
21d0: 20 20 20 20 20 20 73 65 74 20 6f 6b 20 30 0a 20        set ok 0. 
21e0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 3a 3a     } elseif {$::
21f0: 61 75 74 6f 73 65 74 75 70 28 64 65 62 75 67 29  autosetup(debug)
2200: 7d 20 7b 0a 20 20 20 20 20 20 20 63 6f 6e 66 69  } {.       confi
2210: 67 6c 6f 67 20 22 43 6f 6d 70 69 6c 65 64 20 4f  glog "Compiled O
2220: 4b 3a 20 5b 6a 6f 69 6e 20 24 63 6d 64 6c 69 6e  K: [join $cmdlin
2230: 65 5d 22 0a 20 20 20 20 20 20 20 63 6f 6e 66 69  e]".       confi
2240: 67 6c 6f 67 20 22 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  glog "==========
2250: 3d 3d 22 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ==".    }.    if
2260: 20 7b 21 24 6f 6b 7d 20 7b 0a 20 20 20 20 20 20   {!$ok} {.      
2270: 75 73 65 72 2d 65 72 72 6f 72 20 22 75 6e 61 62  user-error "unab
2280: 6c 65 20 74 6f 20 63 6f 6d 70 69 6c 65 20 53 51  le to compile SQ
2290: 4c 69 74 65 20 63 6f 6d 70 61 74 69 62 69 6c 69  Lite compatibili
22a0: 74 79 20 74 65 73 74 20 70 72 6f 67 72 61 6d 22  ty test program"
22b0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 65  .    }.    set e
22c0: 72 72 20 5b 63 61 74 63 68 20 7b 65 78 65 63 2d  rr [catch {exec-
22d0: 77 69 74 68 2d 73 74 64 65 72 72 20 2e 2f 63 6f  with-stderr ./co
22e0: 6e 66 74 65 73 74 5f 5f 7d 20 72 65 73 75 6c 74  nftest__} result
22f0: 20 65 72 72 69 6e 66 6f 5d 0a 20 20 20 20 69 66   errinfo].    if
2300: 20 7b 5b 67 65 74 2d 64 65 66 69 6e 65 20 62 75   {[get-define bu
2310: 69 6c 64 5d 20 65 71 20 5b 67 65 74 2d 64 65 66  ild] eq [get-def
2320: 69 6e 65 20 68 6f 73 74 5d 7d 20 7b 0a 20 20 20  ine host]} {.   
2330: 20 20 20 73 65 74 20 65 72 72 20 5b 63 61 74 63     set err [catc
2340: 68 20 7b 65 78 65 63 2d 77 69 74 68 2d 73 74 64  h {exec-with-std
2350: 65 72 72 20 2e 2f 63 6f 6e 66 74 65 73 74 5f 5f  err ./conftest__
2360: 7d 20 72 65 73 75 6c 74 20 65 72 72 69 6e 66 6f  } result errinfo
2370: 5d 0a 20 20 20 20 20 20 69 66 20 7b 24 65 72 72  ].      if {$err
2380: 7d 20 7b 0a 20 20 20 20 20 20 20 20 75 73 65 72  } {.        user
2390: 2d 65 72 72 6f 72 20 24 72 65 73 75 6c 74 0a 20  -error $result. 
23a0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
23b0: 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2e 2f 63   file delete ./c
23c0: 6f 6e 66 74 65 73 74 5f 5f 0a 20 20 7d 0a 20 20  onftest__.  }.  
23d0: 74 65 73 74 5f 73 79 73 74 65 6d 5f 73 71 6c 69  test_system_sqli
23e0: 74 65 0a 0a 7d 0a 0a 70 72 6f 63 20 69 73 5f 6d  te..}..proc is_m
23f0: 69 6e 67 77 20 7b 7d 20 7b 0a 20 20 20 20 72 65  ingw {} {.    re
2400: 74 75 72 6e 20 5b 73 74 72 69 6e 67 20 6d 61 74  turn [string mat
2410: 63 68 20 2a 6d 69 6e 67 77 2a 20 5b 67 65 74 2d  ch *mingw* [get-
2420: 64 65 66 69 6e 65 20 68 6f 73 74 5d 5d 0a 7d 0a  define host]].}.
2430: 0a 69 66 20 7b 5b 69 73 5f 6d 69 6e 67 77 5d 7d  .if {[is_mingw]}
2440: 20 7b 0a 20 20 20 20 64 65 66 69 6e 65 2d 61 70   {.    define-ap
2450: 70 65 6e 64 20 45 58 54 52 41 5f 43 46 4c 41 47  pend EXTRA_CFLAG
2460: 53 20 2d 44 42 52 4f 4b 45 4e 5f 4d 49 4e 47 57  S -DBROKEN_MINGW
2470: 5f 43 4d 44 4c 49 4e 45 0a 20 20 20 20 64 65 66  _CMDLINE.    def
2480: 69 6e 65 2d 61 70 70 65 6e 64 20 4c 49 42 53 20  ine-append LIBS 
2490: 2d 6c 6b 65 72 6e 65 6c 33 32 20 2d 6c 77 73 32  -lkernel32 -lws2
24a0: 5f 33 32 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 20  _32.} else {.   
24b0: 20 23 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 41   #.    # NOTE: A
24c0: 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 20 65 78 63  ll platforms exc
24d0: 65 70 74 20 4d 69 6e 47 57 20 73 68 6f 75 6c 64  ept MinGW should
24e0: 20 75 73 65 20 74 68 65 20 6c 69 6e 65 6e 6f 69   use the linenoi
24f0: 73 65 0a 20 20 20 20 23 20 20 20 20 20 20 20 70  se.    #       p
2500: 61 63 6b 61 67 65 2e 20 20 49 74 20 69 73 20 63  ackage.  It is c
2510: 75 72 72 65 6e 74 6c 79 20 75 6e 73 75 70 70 6f  urrently unsuppo
2520: 72 74 65 64 20 6f 6e 20 57 69 6e 33 32 2e 0a 20  rted on Win32.. 
2530: 20 20 20 23 0a 20 20 20 20 64 65 66 69 6e 65 20     #.    define 
2540: 55 53 45 5f 4c 49 4e 45 4e 4f 49 53 45 20 31 0a  USE_LINENOISE 1.
2550: 7d 0a 0a 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d  }..if {[string m
2560: 61 74 63 68 20 2a 2d 73 6f 6c 61 72 69 73 2a 20  atch *-solaris* 
2570: 5b 67 65 74 2d 64 65 66 69 6e 65 20 68 6f 73 74  [get-define host
2580: 5d 5d 7d 20 7b 0a 20 20 20 20 64 65 66 69 6e 65  ]]} {.    define
2590: 2d 61 70 70 65 6e 64 20 45 58 54 52 41 5f 43 46  -append EXTRA_CF
25a0: 4c 41 47 53 20 7b 2d 44 5f 5f 45 58 54 45 4e 53  LAGS {-D__EXTENS
25b0: 49 4f 4e 53 5f 5f 7d 0a 7d 0a 0a 69 66 20 7b 5b  IONS__}.}..if {[
25c0: 6f 70 74 2d 62 6f 6f 6c 20 66 6f 73 73 69 6c 2d  opt-bool fossil-
25d0: 64 65 62 75 67 5d 7d 20 7b 0a 20 20 20 20 64 65  debug]} {.    de
25e0: 66 69 6e 65 20 43 46 4c 41 47 53 20 7b 2d 67 20  fine CFLAGS {-g 
25f0: 2d 4f 30 20 2d 57 61 6c 6c 7d 0a 20 20 20 20 64  -O0 -Wall}.    d
2600: 65 66 69 6e 65 2d 61 70 70 65 6e 64 20 43 46 4c  efine-append CFL
2610: 41 47 53 20 2d 44 46 4f 53 53 49 4c 5f 44 45 42  AGS -DFOSSIL_DEB
2620: 55 47 0a 20 20 20 20 6d 73 67 2d 72 65 73 75 6c  UG.    msg-resul
2630: 74 20 22 44 65 62 75 67 67 69 6e 67 20 73 75 70  t "Debugging sup
2640: 70 6f 72 74 20 65 6e 61 62 6c 65 64 22 0a 7d 0a  port enabled".}.
2650: 0a 69 66 20 7b 5b 6f 70 74 2d 62 6f 6f 6c 20 6e  .if {[opt-bool n
2660: 6f 2d 6f 70 74 5d 7d 20 7b 0a 20 20 20 20 64 65  o-opt]} {.    de
2670: 66 69 6e 65 20 43 46 4c 41 47 53 20 7b 2d 67 20  fine CFLAGS {-g 
2680: 2d 4f 30 20 2d 57 61 6c 6c 7d 0a 20 20 20 20 6d  -O0 -Wall}.    m
2690: 73 67 2d 72 65 73 75 6c 74 20 22 42 75 69 6c 74  sg-result "Built
26a0: 69 6e 67 20 77 69 74 68 6f 75 74 20 63 6f 6d 70  ing without comp
26b0: 69 6c 65 72 20 6f 70 74 69 6d 69 7a 61 74 69 6f  iler optimizatio
26c0: 6e 22 0a 20 20 20 20 69 66 20 7b 5b 6f 70 74 2d  n".    if {[opt-
26d0: 62 6f 6f 6c 20 66 6f 73 73 69 6c 2d 64 65 62 75  bool fossil-debu
26e0: 67 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 64 65  g]} {.        de
26f0: 66 69 6e 65 2d 61 70 70 65 6e 64 20 43 46 4c 41  fine-append CFLA
2700: 47 53 20 2d 44 46 4f 53 53 49 4c 5f 44 45 42 55  GS -DFOSSIL_DEBU
2710: 47 0a 20 20 20 20 7d 0a 7d 0a 0a 69 66 20 7b 5b  G.    }.}..if {[
2720: 6f 70 74 2d 62 6f 6f 6c 20 77 69 74 68 2d 6d 6d  opt-bool with-mm
2730: 61 6e 5d 7d 20 7b 0a 20 20 20 20 64 65 66 69 6e  an]} {.    defin
2740: 65 2d 61 70 70 65 6e 64 20 45 58 54 52 41 5f 43  e-append EXTRA_C
2750: 46 4c 41 47 53 20 2d 44 55 53 45 5f 4d 4d 41 4e  FLAGS -DUSE_MMAN
2760: 5f 48 0a 20 20 20 20 64 65 66 69 6e 65 20 55 53  _H.    define US
2770: 45 5f 4d 4d 41 4e 5f 48 20 31 0a 20 20 20 20 6d  E_MMAN_H 1.    m
2780: 73 67 2d 72 65 73 75 6c 74 20 22 45 6e 61 62 6c  sg-result "Enabl
2790: 69 6e 67 20 5c 22 73 79 73 2f 6d 6d 61 6e 2e 68  ing \"sys/mman.h
27a0: 5c 22 20 73 75 70 70 6f 72 74 22 0a 7d 0a 0a 69  \" support".}..i
27b0: 66 20 7b 5b 6f 70 74 2d 62 6f 6f 6c 20 77 69 74  f {[opt-bool wit
27c0: 68 2d 73 65 65 5d 7d 20 7b 0a 20 20 20 20 64 65  h-see]} {.    de
27d0: 66 69 6e 65 2d 61 70 70 65 6e 64 20 45 58 54 52  fine-append EXTR
27e0: 41 5f 43 46 4c 41 47 53 20 2d 44 55 53 45 5f 53  A_CFLAGS -DUSE_S
27f0: 45 45 0a 20 20 20 20 64 65 66 69 6e 65 20 55 53  EE.    define US
2800: 45 5f 53 45 45 20 31 0a 20 20 20 20 64 65 66 69  E_SEE 1.    defi
2810: 6e 65 20 53 51 4c 49 54 45 33 5f 4f 52 49 47 49  ne SQLITE3_ORIGI
2820: 4e 20 31 0a 20 20 20 20 6d 73 67 2d 72 65 73 75  N 1.    msg-resu
2830: 6c 74 20 22 45 6e 61 62 6c 69 6e 67 20 65 6e 63  lt "Enabling enc
2840: 72 79 70 74 69 6f 6e 20 73 75 70 70 6f 72 74 22  ryption support"
2850: 0a 7d 0a 0a 69 66 20 7b 5b 6f 70 74 2d 62 6f 6f  .}..if {[opt-boo
2860: 6c 20 6a 73 6f 6e 5d 7d 20 7b 0a 20 20 20 20 23  l json]} {.    #
2870: 20 52 65 6d 69 6e 64 65 72 2f 46 49 58 4d 45 20   Reminder/FIXME 
2880: 28 73 74 65 70 68 61 6e 29 3a 20 46 4f 53 53 49  (stephan): FOSSI
2890: 4c 5f 45 4e 41 42 4c 45 5f 4a 53 4f 4e 0a 20 20  L_ENABLE_JSON.  
28a0: 20 20 23 20 69 73 20 72 65 71 75 69 72 65 64 20    # is required 
28b0: 69 6e 20 74 68 65 20 43 46 4c 41 47 53 20 62 65  in the CFLAGS be
28c0: 63 61 75 73 65 20 6a 73 6f 6e 2a 2e 63 0a 20 20  cause json*.c.  
28d0: 20 20 23 20 68 61 76 65 20 23 69 66 64 65 66 20    # have #ifdef 
28e0: 67 75 61 72 64 73 20 61 72 6f 75 6e 64 20 74 68  guards around th
28f0: 65 20 77 68 6f 6c 65 20 66 69 6c 65 20 77 69 74  e whole file wit
2900: 68 6f 75 74 0a 20 20 20 20 23 20 72 65 61 64 69  hout.    # readi
2910: 6e 67 20 63 6f 6e 66 69 67 2e 68 20 66 69 72 73  ng config.h firs
2920: 74 2e 0a 20 20 20 20 64 65 66 69 6e 65 2d 61 70  t..    define-ap
2930: 70 65 6e 64 20 45 58 54 52 41 5f 43 46 4c 41 47  pend EXTRA_CFLAG
2940: 53 20 2d 44 46 4f 53 53 49 4c 5f 45 4e 41 42 4c  S -DFOSSIL_ENABL
2950: 45 5f 4a 53 4f 4e 0a 20 20 20 20 64 65 66 69 6e  E_JSON.    defin
2960: 65 20 46 4f 53 53 49 4c 5f 45 4e 41 42 4c 45 5f  e FOSSIL_ENABLE_
2970: 4a 53 4f 4e 0a 20 20 20 20 6d 73 67 2d 72 65 73  JSON.    msg-res
2980: 75 6c 74 20 22 4a 53 4f 4e 20 73 75 70 70 6f 72  ult "JSON suppor
2990: 74 20 65 6e 61 62 6c 65 64 22 0a 7d 0a 0a 69 66  t enabled".}..if
29a0: 20 7b 5b 6f 70 74 2d 62 6f 6f 6c 20 77 69 74 68   {[opt-bool with
29b0: 2d 65 78 65 63 2d 72 65 6c 2d 70 61 74 68 73 5d  -exec-rel-paths]
29c0: 7d 20 7b 0a 20 20 20 20 64 65 66 69 6e 65 2d 61  } {.    define-a
29d0: 70 70 65 6e 64 20 45 58 54 52 41 5f 43 46 4c 41  ppend EXTRA_CFLA
29e0: 47 53 20 2d 44 46 4f 53 53 49 4c 5f 45 4e 41 42  GS -DFOSSIL_ENAB
29f0: 4c 45 5f 45 58 45 43 5f 52 45 4c 5f 50 41 54 48  LE_EXEC_REL_PATH
2a00: 53 0a 20 20 20 20 64 65 66 69 6e 65 20 46 4f 53  S.    define FOS
2a10: 53 49 4c 5f 45 4e 41 42 4c 45 5f 45 58 45 43 5f  SIL_ENABLE_EXEC_
2a20: 52 45 4c 5f 50 41 54 48 53 0a 20 20 20 20 6d 73  REL_PATHS.    ms
2a30: 67 2d 72 65 73 75 6c 74 20 22 52 65 6c 61 74 69  g-result "Relati
2a40: 76 65 20 70 61 74 68 73 20 69 6e 20 65 78 74 65  ve paths in exte
2a50: 72 6e 61 6c 20 64 69 66 66 2f 67 64 69 66 66 20  rnal diff/gdiff 
2a60: 65 6e 61 62 6c 65 64 22 0a 7d 0a 0a 69 66 20 7b  enabled".}..if {
2a70: 5b 6f 70 74 2d 62 6f 6f 6c 20 77 69 74 68 2d 74  [opt-bool with-t
2a80: 68 31 2d 64 6f 63 73 5d 7d 20 7b 0a 20 20 20 20  h1-docs]} {.    
2a90: 64 65 66 69 6e 65 2d 61 70 70 65 6e 64 20 45 58  define-append EX
2aa0: 54 52 41 5f 43 46 4c 41 47 53 20 2d 44 46 4f 53  TRA_CFLAGS -DFOS
2ab0: 53 49 4c 5f 45 4e 41 42 4c 45 5f 54 48 31 5f 44  SIL_ENABLE_TH1_D
2ac0: 4f 43 53 0a 20 20 20 20 64 65 66 69 6e 65 20 46  OCS.    define F
2ad0: 4f 53 53 49 4c 5f 45 4e 41 42 4c 45 5f 54 48 31  OSSIL_ENABLE_TH1
2ae0: 5f 44 4f 43 53 0a 20 20 20 20 6d 73 67 2d 72 65  _DOCS.    msg-re
2af0: 73 75 6c 74 20 22 54 48 31 20 65 6d 62 65 64 64  sult "TH1 embedd
2b00: 65 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ed documentation
2b10: 20 73 75 70 70 6f 72 74 20 65 6e 61 62 6c 65 64   support enabled
2b20: 22 0a 7d 0a 0a 69 66 20 7b 5b 6f 70 74 2d 62 6f  ".}..if {[opt-bo
2b30: 6f 6c 20 77 69 74 68 2d 74 68 31 2d 68 6f 6f 6b  ol with-th1-hook
2b40: 73 5d 7d 20 7b 0a 20 20 20 20 64 65 66 69 6e 65  s]} {.    define
2b50: 2d 61 70 70 65 6e 64 20 45 58 54 52 41 5f 43 46  -append EXTRA_CF
2b60: 4c 41 47 53 20 2d 44 46 4f 53 53 49 4c 5f 45 4e  LAGS -DFOSSIL_EN
2b70: 41 42 4c 45 5f 54 48 31 5f 48 4f 4f 4b 53 0a 20  ABLE_TH1_HOOKS. 
2b80: 20 20 20 64 65 66 69 6e 65 20 46 4f 53 53 49 4c     define FOSSIL
2b90: 5f 45 4e 41 42 4c 45 5f 54 48 31 5f 48 4f 4f 4b  _ENABLE_TH1_HOOK
2ba0: 53 0a 20 20 20 20 6d 73 67 2d 72 65 73 75 6c 74  S.    msg-result
2bb0: 20 22 54 48 31 20 68 6f 6f 6b 73 20 73 75 70 70   "TH1 hooks supp
2bc0: 6f 72 74 20 65 6e 61 62 6c 65 64 22 0a 7d 0a 0a  ort enabled".}..
2bd0: 23 69 66 20 7b 5b 6f 70 74 2d 62 6f 6f 6c 20 6d  #if {[opt-bool m
2be0: 61 72 6b 64 6f 77 6e 5d 7d 20 7b 0a 23 20 20 20  arkdown]} {.#   
2bf0: 20 23 20 6e 6f 2d 6f 70 2e 20 20 4d 61 72 6b 64   # no-op.  Markd
2c00: 6f 77 6e 20 69 73 20 6e 6f 77 20 65 6e 61 62 6c  own is now enabl
2c10: 65 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 23  ed by default..#
2c20: 20 20 20 20 6d 73 67 2d 72 65 73 75 6c 74 20 22      msg-result "
2c30: 4d 61 72 6b 64 6f 77 6e 20 73 75 70 70 6f 72 74  Markdown support
2c40: 20 65 6e 61 62 6c 65 64 22 0a 23 7d 0a 0a 69 66   enabled".#}..if
2c50: 20 7b 5b 6f 70 74 2d 62 6f 6f 6c 20 73 74 61 74   {[opt-bool stat
2c60: 69 63 5d 7d 20 7b 0a 20 20 20 20 23 20 58 58 58  ic]} {.    # XXX
2c70: 3a 20 54 68 69 73 20 77 69 6c 6c 20 6e 6f 74 20  : This will not 
2c80: 77 6f 72 6b 20 6f 6e 20 61 6c 6c 20 73 79 73 74  work on all syst
2c90: 65 6d 73 2e 0a 20 20 20 20 64 65 66 69 6e 65 2d  ems..    define-
2ca0: 61 70 70 65 6e 64 20 45 58 54 52 41 5f 4c 44 46  append EXTRA_LDF
2cb0: 4c 41 47 53 20 2d 73 74 61 74 69 63 0a 20 20 20  LAGS -static.   
2cc0: 20 6d 73 67 2d 72 65 73 75 6c 74 20 22 54 72 79   msg-result "Try
2cd0: 69 6e 67 20 74 6f 20 6c 69 6e 6b 20 73 74 61 74  ing to link stat
2ce0: 69 63 61 6c 6c 79 22 0a 7d 20 65 6c 73 65 20 7b  ically".} else {
2cf0: 0a 20 20 20 20 64 65 66 69 6e 65 2d 61 70 70 65  .    define-appe
2d00: 6e 64 20 45 58 54 52 41 5f 43 46 4c 41 47 53 20  nd EXTRA_CFLAGS 
2d10: 2d 44 46 4f 53 53 49 4c 5f 44 59 4e 41 4d 49 43  -DFOSSIL_DYNAMIC
2d20: 5f 42 55 49 4c 44 3d 31 0a 20 20 20 20 64 65 66  _BUILD=1.    def
2d30: 69 6e 65 20 46 4f 53 53 49 4c 5f 44 59 4e 41 4d  ine FOSSIL_DYNAM
2d40: 49 43 5f 42 55 49 4c 44 0a 7d 0a 0a 23 20 43 68  IC_BUILD.}..# Ch
2d50: 65 63 6b 20 66 6f 72 20 6c 69 62 72 61 72 69 65  eck for librarie
2d60: 73 20 74 68 61 74 20 6e 65 65 64 20 74 6f 20 62  s that need to b
2d70: 65 20 73 6f 72 74 65 64 20 6f 75 74 20 65 61 72  e sorted out ear
2d80: 6c 79 0a 63 63 2d 63 68 65 63 6b 2d 66 75 6e 63  ly.cc-check-func
2d90: 74 69 6f 6e 2d 69 6e 2d 6c 69 62 20 69 63 6f 6e  tion-in-lib icon
2da0: 76 20 69 63 6f 6e 76 0a 0a 23 20 48 65 6c 70 65  v iconv..# Helpe
2db0: 72 20 66 6f 72 20 4f 70 65 6e 53 53 4c 20 63 68  r for OpenSSL ch
2dc0: 65 63 6b 69 6e 67 0a 70 72 6f 63 20 63 68 65 63  ecking.proc chec
2dd0: 6b 2d 66 6f 72 2d 6f 70 65 6e 73 73 6c 20 7b 6d  k-for-openssl {m
2de0: 73 67 20 7b 63 66 6c 61 67 73 20 7b 7d 7d 20 7b  sg {cflags {}} {
2df0: 6c 69 62 73 20 7b 2d 6c 73 73 6c 20 2d 6c 63 72  libs {-lssl -lcr
2e00: 79 70 74 6f 20 2d 6c 70 74 68 72 65 61 64 7d 7d  ypto -lpthread}}
2e10: 7d 20 7b 0a 20 20 20 20 6d 73 67 2d 63 68 65 63  } {.    msg-chec
2e20: 6b 69 6e 67 20 22 43 68 65 63 6b 69 6e 67 20 66  king "Checking f
2e30: 6f 72 20 24 6d 73 67 2e 2e 2e 22 0a 20 20 20 20  or $msg...".    
2e40: 73 65 74 20 72 63 20 30 0a 20 20 20 20 69 66 20  set rc 0.    if 
2e50: 7b 5b 69 73 5f 6d 69 6e 67 77 5d 7d 20 7b 0a 20  {[is_mingw]} {. 
2e60: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6c         lappend l
2e70: 69 62 73 20 2d 6c 67 64 69 33 32 20 2d 6c 77 73  ibs -lgdi32 -lws
2e80: 6f 63 6b 33 32 20 2d 6c 63 72 79 70 74 33 32 0a  ock32 -lcrypt32.
2e90: 20 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 5b 69      }.    if {[i
2ea0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 7a 6c 69  nfo exists ::zli
2eb0: 62 5f 6c 69 62 5d 7d 20 7b 0a 20 20 20 20 20 20  b_lib]} {.      
2ec0: 20 20 6c 61 70 70 65 6e 64 20 6c 69 62 73 20 24    lappend libs $
2ed0: 3a 3a 7a 6c 69 62 5f 6c 69 62 0a 20 20 20 20 7d  ::zlib_lib.    }
2ee0: 0a 20 20 20 20 6d 73 67 2d 71 75 69 65 74 20 63  .    msg-quiet c
2ef0: 63 2d 77 69 74 68 20 5b 6c 69 73 74 20 2d 63 66  c-with [list -cf
2f00: 6c 61 67 73 20 24 63 66 6c 61 67 73 20 2d 6c 69  lags $cflags -li
2f10: 62 73 20 24 6c 69 62 73 5d 20 7b 0a 20 20 20 20  bs $libs] {.    
2f20: 20 20 20 20 69 66 20 7b 5b 63 63 2d 63 68 65 63      if {[cc-chec
2f30: 6b 2d 69 6e 63 6c 75 64 65 73 20 6f 70 65 6e 73  k-includes opens
2f40: 73 6c 2f 73 73 6c 2e 68 5d 20 26 26 20 5c 0a 20  sl/ssl.h] && \. 
2f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
2f60: 63 63 2d 63 68 65 63 6b 2d 66 75 6e 63 74 69 6f  cc-check-functio
2f70: 6e 73 20 53 53 4c 5f 6e 65 77 5d 7d 20 7b 0a 20  ns SSL_new]} {. 
2f80: 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20             incr 
2f90: 72 63 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  rc.        }.   
2fa0: 20 7d 0a 20 20 20 20 69 66 20 7b 21 24 72 63 20   }.    if {!$rc 
2fb0: 26 26 20 21 5b 69 73 5f 6d 69 6e 67 77 5d 7d 20  && ![is_mingw]} 
2fc0: 7b 0a 20 20 20 20 20 20 20 20 23 20 4f 6e 20 73  {.        # On s
2fd0: 6f 6d 65 20 73 79 73 74 65 6d 73 2c 20 4f 70 65  ome systems, Ope
2fe0: 6e 53 53 4c 20 61 70 70 65 61 72 73 20 74 6f 20  nSSL appears to 
2ff0: 72 65 71 75 69 72 65 20 2d 6c 64 6c 20 74 6f 20  require -ldl to 
3000: 6c 69 6e 6b 2e 0a 20 20 20 20 20 20 20 20 6c 61  link..        la
3010: 70 70 65 6e 64 20 6c 69 62 73 20 2d 6c 64 6c 0a  ppend libs -ldl.
3020: 20 20 20 20 20 20 20 20 6d 73 67 2d 71 75 69 65          msg-quie
3030: 74 20 63 63 2d 77 69 74 68 20 5b 6c 69 73 74 20  t cc-with [list 
3040: 2d 63 66 6c 61 67 73 20 24 63 66 6c 61 67 73 20  -cflags $cflags 
3050: 2d 6c 69 62 73 20 24 6c 69 62 73 5d 20 7b 0a 20  -libs $libs] {. 
3060: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
3070: 63 63 2d 63 68 65 63 6b 2d 69 6e 63 6c 75 64 65  cc-check-include
3080: 73 20 6f 70 65 6e 73 73 6c 2f 73 73 6c 2e 68 5d  s openssl/ssl.h]
3090: 20 26 26 20 5c 0a 20 20 20 20 20 20 20 20 20 20   && \.          
30a0: 20 20 20 20 20 20 20 20 20 20 5b 63 63 2d 63 68            [cc-ch
30b0: 65 63 6b 2d 66 75 6e 63 74 69 6f 6e 73 20 53 53  eck-functions SS
30c0: 4c 5f 6e 65 77 5d 7d 20 7b 0a 20 20 20 20 20 20  L_new]} {.      
30d0: 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 72            incr r
30e0: 63 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  c.            }.
30f0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a          }.    }.
3100: 20 20 20 20 69 66 20 7b 24 72 63 7d 20 7b 0a 20      if {$rc} {. 
3110: 20 20 20 20 20 20 20 6d 73 67 2d 72 65 73 75 6c         msg-resul
3120: 74 20 22 6f 6b 22 0a 20 20 20 20 20 20 20 20 72  t "ok".        r
3130: 65 74 75 72 6e 20 31 0a 20 20 20 20 7d 20 65 6c  eturn 1.    } el
3140: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 6d 73 67  se {.        msg
3150: 2d 72 65 73 75 6c 74 20 22 6e 6f 22 0a 20 20 20  -result "no".   
3160: 20 20 20 20 20 72 65 74 75 72 6e 20 30 0a 20 20       return 0.  
3170: 20 20 7d 0a 7d 0a 0a 23 20 43 68 65 63 6b 20 66    }.}..# Check f
3180: 6f 72 20 7a 6c 69 62 2c 20 75 73 69 6e 67 20 74  or zlib, using t
3190: 68 65 20 67 69 76 65 6e 20 6c 6f 63 61 74 69 6f  he given locatio
31a0: 6e 20 69 66 20 73 70 65 63 69 66 69 65 64 0a 73  n if specified.s
31b0: 65 74 20 7a 6c 69 62 70 61 74 68 20 5b 6f 70 74  et zlibpath [opt
31c0: 2d 76 61 6c 20 77 69 74 68 2d 7a 6c 69 62 5d 0a  -val with-zlib].
31d0: 69 66 20 7b 24 7a 6c 69 62 70 61 74 68 20 65 71  if {$zlibpath eq
31e0: 20 22 74 72 65 65 22 7d 20 7b 0a 20 20 73 65 74   "tree"} {.  set
31f0: 20 7a 6c 69 62 64 69 72 20 5b 66 69 6c 65 20 64   zlibdir [file d
3200: 69 72 6e 61 6d 65 20 24 61 75 74 6f 73 65 74 75  irname $autosetu
3210: 70 28 64 69 72 29 5d 2f 63 6f 6d 70 61 74 2f 7a  p(dir)]/compat/z
3220: 6c 69 62 0a 20 20 69 66 20 7b 21 5b 66 69 6c 65  lib.  if {![file
3230: 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 7a 6c   isdirectory $zl
3240: 69 62 64 69 72 5d 7d 20 7b 0a 20 20 20 20 75 73  ibdir]} {.    us
3250: 65 72 2d 65 72 72 6f 72 20 22 54 68 65 20 7a 6c  er-error "The zl
3260: 69 62 20 69 6e 20 73 6f 75 72 63 65 20 74 72 65  ib in source tre
3270: 65 20 64 69 72 65 63 74 6f 72 79 20 64 6f 65 73  e directory does
3280: 20 6e 6f 74 20 65 78 69 73 74 22 0a 20 20 7d 20   not exist".  } 
3290: 65 6c 73 65 69 66 20 7b 20 28 5b 6c 6c 65 6e 67  elseif { ([lleng
32a0: 74 68 20 5b 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70  th [glob -nocomp
32b0: 6c 61 69 6e 20 2d 64 69 72 65 63 74 6f 72 79 20  lain -directory 
32c0: 24 7a 6c 69 62 64 69 72 20 6c 69 62 7a 2a 5d 5d  $zlibdir libz*]]
32d0: 20 3d 3d 20 30 29 20 7d 20 7b 0a 20 20 20 20 75   == 0) } {.    u
32e0: 73 65 72 2d 65 72 72 6f 72 20 22 57 69 74 68 20  ser-error "With 
32f0: 2d 2d 77 69 74 68 2d 7a 6c 69 62 3d 74 72 65 65  --with-zlib=tree
3300: 2c 20 24 7a 6c 69 62 64 69 72 20 6d 75 73 74 20  , $zlibdir must 
3310: 62 65 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e  be configured an
3320: 64 20 62 75 69 6c 74 20 66 69 72 73 74 2e 22 0a  d built first.".
3330: 20 20 7d 0a 20 20 63 63 2d 77 69 74 68 20 5b 6c    }.  cc-with [l
3340: 69 73 74 20 2d 63 66 6c 61 67 73 20 22 2d 49 24  ist -cflags "-I$
3350: 7a 6c 69 62 64 69 72 20 2d 4c 24 7a 6c 69 62 64  zlibdir -L$zlibd
3360: 69 72 22 5d 0a 20 20 64 65 66 69 6e 65 2d 61 70  ir"].  define-ap
3370: 70 65 6e 64 20 45 58 54 52 41 5f 43 46 4c 41 47  pend EXTRA_CFLAG
3380: 53 20 2d 49 24 7a 6c 69 62 64 69 72 0a 20 20 64  S -I$zlibdir.  d
3390: 65 66 69 6e 65 2d 61 70 70 65 6e 64 20 4c 49 42  efine-append LIB
33a0: 53 20 24 7a 6c 69 62 64 69 72 2f 6c 69 62 7a 2e  S $zlibdir/libz.
33b0: 61 0a 20 20 73 65 74 20 3a 3a 7a 6c 69 62 5f 6c  a.  set ::zlib_l
33c0: 69 62 20 24 7a 6c 69 62 64 69 72 2f 6c 69 62 7a  ib $zlibdir/libz
33d0: 2e 61 0a 20 20 6d 73 67 2d 72 65 73 75 6c 74 20  .a.  msg-result 
33e0: 22 55 73 69 6e 67 20 7a 6c 69 62 20 69 6e 20 73  "Using zlib in s
33f0: 6f 75 72 63 65 20 74 72 65 65 22 0a 7d 20 65 6c  ource tree".} el
3400: 73 65 20 7b 0a 20 20 73 65 74 20 63 66 74 72 79  se {.  set cftry
3410: 20 7b 22 22 7d 0a 20 20 73 65 74 20 6c 64 74 72   {""}.  set ldtr
3420: 79 20 7b 22 22 7d 0a 20 20 69 66 20 7b 24 7a 6c  y {""}.  if {$zl
3430: 69 62 70 61 74 68 20 6e 69 20 7b 61 75 74 6f 20  ibpath ni {auto 
3440: 22 22 7d 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65  ""}} {.    lappe
3450: 6e 64 20 63 66 74 72 79 20 22 2d 49 24 7a 6c 69  nd cftry "-I$zli
3460: 62 70 61 74 68 22 0a 20 20 20 20 6c 61 70 70 65  bpath".    lappe
3470: 6e 64 20 63 66 74 72 79 20 22 2d 49 24 7a 6c 69  nd cftry "-I$zli
3480: 62 70 61 74 68 2f 69 6e 63 6c 75 64 65 22 0a 20  bpath/include". 
3490: 20 20 20 6c 61 70 70 65 6e 64 20 6c 64 74 72 79     lappend ldtry
34a0: 20 22 2d 4c 24 7a 6c 69 62 70 61 74 68 22 0a 20   "-L$zlibpath". 
34b0: 20 20 20 6c 61 70 70 65 6e 64 20 6c 64 74 72 79     lappend ldtry
34c0: 20 22 2d 4c 24 7a 6c 69 62 70 61 74 68 2f 6c 69   "-L$zlibpath/li
34d0: 62 22 0a 20 20 7d 0a 0a 20 20 23 20 52 65 76 65  b".  }..  # Reve
34e0: 72 73 65 20 74 68 65 20 6c 69 73 74 20 6f 66 20  rse the list of 
34f0: 74 65 73 74 73 20 73 6f 20 77 65 20 63 68 65 63  tests so we chec
3500: 6b 20 6d 6f 73 74 2d 73 70 65 63 69 66 69 63 20  k most-specific 
3510: 74 6f 20 6c 65 61 73 74 2c 20 65 6c 73 65 0a 20  to least, else. 
3520: 20 23 20 70 6c 61 74 66 6f 72 6d 20 64 65 76 65   # platform deve
3530: 6c 20 66 69 6c 65 73 20 77 69 6c 6c 20 73 68 61  l files will sha
3540: 64 6f 77 20 6c 6f 63 61 6c 20 2d 2d 77 69 74 68  dow local --with
3550: 2d 7a 6c 69 62 20 6f 76 65 72 72 69 64 65 73 2e  -zlib overrides.
3560: 0a 20 20 66 6f 72 65 61 63 68 20 63 20 5b 6c 72  .  foreach c [lr
3570: 65 76 65 72 73 65 20 24 63 66 74 72 79 5d 20 7b  everse $cftry] {
3580: 0a 20 20 20 20 69 66 20 7b 5b 63 63 2d 77 69 74  .    if {[cc-wit
3590: 68 20 5b 6c 69 73 74 20 2d 63 66 6c 61 67 73 20  h [list -cflags 
35a0: 24 63 5d 20 7b 63 63 2d 63 68 65 63 6b 2d 69 6e  $c] {cc-check-in
35b0: 63 6c 75 64 65 73 20 7a 6c 69 62 2e 68 7d 5d 7d  cludes zlib.h}]}
35c0: 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 63 20   {.      if {$c 
35d0: 65 71 20 22 22 7d 20 7b 0a 20 20 20 20 20 20 20  eq ""} {.       
35e0: 20 6d 73 67 2d 72 65 73 75 6c 74 20 22 46 6f 75   msg-result "Fou
35f0: 6e 64 20 7a 6c 69 62 2e 68 20 69 6e 20 64 65 66  nd zlib.h in def
3600: 61 75 6c 74 20 69 6e 63 6c 75 64 65 20 70 61 74  ault include pat
3610: 68 22 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  h".      } else 
3620: 7b 0a 20 20 20 20 20 20 20 20 64 65 66 69 6e 65  {.        define
3630: 2d 61 70 70 65 6e 64 20 45 58 54 52 41 5f 43 46  -append EXTRA_CF
3640: 4c 41 47 53 20 22 24 63 22 0a 20 20 20 20 20 20  LAGS "$c".      
3650: 20 20 6d 73 67 2d 72 65 73 75 6c 74 20 22 46 6f    msg-result "Fo
3660: 75 6e 64 20 7a 6c 69 62 2e 68 20 76 69 61 20 24  und zlib.h via $
3670: 63 22 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  c".      }.     
3680: 20 73 65 74 20 63 66 6f 75 6e 64 20 24 63 0a 20   set cfound $c. 
3690: 20 20 20 20 20 62 72 65 61 6b 0a 20 20 20 20 7d       break.    }
36a0: 0a 20 20 7d 0a 20 20 69 66 20 7b 21 5b 69 6e 66  .  }.  if {![inf
36b0: 6f 20 65 78 69 73 74 73 20 63 66 6f 75 6e 64 5d  o exists cfound]
36c0: 7d 20 7b 0a 20 20 20 20 75 73 65 72 2d 65 72 72  } {.    user-err
36d0: 6f 72 20 22 7a 6c 69 62 2e 68 20 6e 6f 74 20 66  or "zlib.h not f
36e0: 6f 75 6e 64 3b 20 65 69 74 68 65 72 20 69 6e 73  ound; either ins
36f0: 74 61 6c 6c 20 69 74 20 6f 72 20 73 70 65 63 69  tall it or speci
3700: 66 79 20 69 74 73 20 6c 6f 63 61 74 69 6f 6e 20  fy its location 
3710: 76 69 61 20 2d 2d 77 69 74 68 2d 7a 6c 69 62 22  via --with-zlib"
3720: 0a 20 20 7d 0a 20 20 66 6f 72 65 61 63 68 20 6c  .  }.  foreach l
3730: 63 68 65 63 6b 20 5b 6c 72 65 76 65 72 73 65 20  check [lreverse 
3740: 24 6c 64 74 72 79 5d 20 7b 0a 20 20 20 20 69 66  $ldtry] {.    if
3750: 20 7b 5b 63 63 2d 77 69 74 68 20 5b 6c 69 73 74   {[cc-with [list
3760: 20 2d 63 66 6c 61 67 73 20 22 24 63 66 6f 75 6e   -cflags "$cfoun
3770: 64 20 24 6c 63 68 65 63 6b 22 5d 20 7b 63 68 65  d $lcheck"] {che
3780: 63 6b 2d 66 75 6e 63 74 69 6f 6e 2d 69 6e 2d 6c  ck-function-in-l
3790: 69 62 20 69 6e 66 6c 61 74 65 45 6e 64 20 7a 7d  ib inflateEnd z}
37a0: 5d 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  ]} {.      if {$
37b0: 6c 63 68 65 63 6b 20 65 71 20 22 22 7d 20 7b 0a  lcheck eq ""} {.
37c0: 20 20 20 20 20 20 20 20 6d 73 67 2d 72 65 73 75          msg-resu
37d0: 6c 74 20 22 4c 69 6e 6b 65 64 20 74 6f 20 7a 6c  lt "Linked to zl
37e0: 69 62 20 76 69 61 20 64 65 66 61 75 6c 74 20 6c  ib via default l
37f0: 69 62 72 61 72 79 20 70 61 74 68 22 0a 20 20 20  ibrary path".   
3800: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
3810: 20 20 20 20 64 65 66 69 6e 65 2d 61 70 70 65 6e      define-appen
3820: 64 20 45 58 54 52 41 5f 4c 44 46 4c 41 47 53 20  d EXTRA_LDFLAGS 
3830: 22 24 6c 63 68 65 63 6b 22 0a 20 20 20 20 20 20  "$lcheck".      
3840: 20 20 6d 73 67 2d 72 65 73 75 6c 74 20 22 4c 69    msg-result "Li
3850: 6e 6b 65 64 20 74 6f 20 7a 6c 69 62 20 76 69 61  nked to zlib via
3860: 20 24 6c 63 68 65 63 6b 22 0a 20 20 20 20 20 20   $lcheck".      
3870: 7d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 63 68  }.      if {![ch
3880: 65 63 6b 2d 66 75 6e 63 74 69 6f 6e 2d 69 6e 2d  eck-function-in-
3890: 6c 69 62 20 63 6f 6d 70 72 65 73 73 42 6f 75 6e  lib compressBoun
38a0: 64 20 7a 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20  d z]} {.        
38b0: 70 75 74 73 20 22 4e 6f 74 69 63 65 3a 20 64 69  puts "Notice: di
38c0: 73 61 62 6c 69 6e 67 20 7a 6c 69 62 20 63 6f 6d  sabling zlib com
38d0: 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
38e0: 53 51 4c 20 73 68 65 6c 6c 22 0a 20 20 20 20 20  SQL shell".     
38f0: 20 20 20 64 65 66 69 6e 65 2d 61 70 70 65 6e 64     define-append
3900: 20 53 51 4c 49 54 45 5f 4f 50 54 49 4f 4e 53 5f   SQLITE_OPTIONS_
3910: 45 58 54 20 7b 2d 55 53 51 4c 49 54 45 5f 48 41  EXT {-USQLITE_HA
3920: 56 45 5f 5a 4c 49 42 7d 0a 20 20 20 20 20 20 7d  VE_ZLIB}.      }
3930: 0a 20 20 20 20 20 20 62 72 65 61 6b 0a 20 20 20  .      break.   
3940: 20 7d 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 7a   }.  }.  set ::z
3950: 6c 69 62 5f 6c 69 62 20 2d 6c 7a 0a 7d 0a 0a 73  lib_lib -lz.}..s
3960: 65 74 20 73 73 6c 64 69 72 73 20 5b 6f 70 74 2d  et ssldirs [opt-
3970: 76 61 6c 20 77 69 74 68 2d 6f 70 65 6e 73 73 6c  val with-openssl
3980: 5d 0a 69 66 20 7b 24 73 73 6c 64 69 72 73 20 6e  ].if {$ssldirs n
3990: 65 20 22 6e 6f 6e 65 22 7d 20 7b 0a 20 20 20 20  e "none"} {.    
39a0: 73 65 74 20 66 6f 75 6e 64 20 30 0a 20 20 20 20  set found 0.    
39b0: 69 66 20 7b 24 73 73 6c 64 69 72 73 20 65 71 20  if {$ssldirs eq 
39c0: 22 74 72 65 65 22 7d 20 7b 0a 20 20 20 20 20 20  "tree"} {.      
39d0: 20 20 73 65 74 20 73 73 6c 64 69 72 20 5b 66 69    set ssldir [fi
39e0: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 75 74 6f  le dirname $auto
39f0: 73 65 74 75 70 28 64 69 72 29 5d 2f 63 6f 6d 70  setup(dir)]/comp
3a00: 61 74 2f 6f 70 65 6e 73 73 6c 0a 20 20 20 20 20  at/openssl.     
3a10: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 69 73     if {![file is
3a20: 64 69 72 65 63 74 6f 72 79 20 24 73 73 6c 64 69  directory $ssldi
3a30: 72 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  r]} {.          
3a40: 20 20 75 73 65 72 2d 65 72 72 6f 72 20 22 54 68    user-error "Th
3a50: 65 20 4f 70 65 6e 53 53 4c 20 69 6e 20 73 6f 75  e OpenSSL in sou
3a60: 72 63 65 20 74 72 65 65 20 64 69 72 65 63 74 6f  rce tree directo
3a70: 72 79 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  ry does not exis
3a80: 74 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t".        }.   
3a90: 20 20 20 20 20 73 65 74 20 6d 73 67 20 22 73 73       set msg "ss
3aa0: 6c 20 69 6e 20 24 73 73 6c 64 69 72 22 0a 20 20  l in $ssldir".  
3ab0: 20 20 20 20 20 20 73 65 74 20 63 66 6c 61 67 73        set cflags
3ac0: 20 22 2d 49 24 73 73 6c 64 69 72 2f 69 6e 63 6c   "-I$ssldir/incl
3ad0: 75 64 65 22 0a 20 20 20 20 20 20 20 20 73 65 74  ude".        set
3ae0: 20 6c 64 66 6c 61 67 73 20 22 2d 4c 24 73 73 6c   ldflags "-L$ssl
3af0: 64 69 72 22 0a 20 20 20 20 20 20 20 20 73 65 74  dir".        set
3b00: 20 73 73 6c 6c 69 62 73 20 22 24 73 73 6c 64 69   ssllibs "$ssldi
3b10: 72 2f 6c 69 62 73 73 6c 2e 61 20 24 73 73 6c 64  r/libssl.a $ssld
3b20: 69 72 2f 6c 69 62 63 72 79 70 74 6f 2e 61 20 2d  ir/libcrypto.a -
3b30: 6c 70 74 68 72 65 61 64 22 0a 20 20 20 20 20 20  lpthread".      
3b40: 20 20 73 65 74 20 66 6f 75 6e 64 20 5b 63 68 65    set found [che
3b50: 63 6b 2d 66 6f 72 2d 6f 70 65 6e 73 73 6c 20 22  ck-for-openssl "
3b60: 73 73 6c 20 69 6e 20 73 6f 75 72 63 65 20 74 72  ssl in source tr
3b70: 65 65 22 20 22 24 63 66 6c 61 67 73 20 24 6c 64  ee" "$cflags $ld
3b80: 66 6c 61 67 73 22 20 24 73 73 6c 6c 69 62 73 5d  flags" $ssllibs]
3b90: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  .    } else {.  
3ba0: 20 20 20 20 20 20 69 66 20 7b 24 73 73 6c 64 69        if {$ssldi
3bb0: 72 73 20 69 6e 20 7b 61 75 74 6f 20 22 22 7d 7d  rs in {auto ""}}
3bc0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63   {.            c
3bd0: 61 74 63 68 20 7b 0a 20 20 20 20 20 20 20 20 20  atch {.         
3be0: 20 20 20 20 20 20 20 73 65 74 20 63 66 6c 61 67         set cflag
3bf0: 73 20 5b 65 78 65 63 20 70 6b 67 2d 63 6f 6e 66  s [exec pkg-conf
3c00: 69 67 20 6f 70 65 6e 73 73 6c 20 2d 2d 63 66 6c  ig openssl --cfl
3c10: 61 67 73 2d 6f 6e 6c 79 2d 49 5d 0a 20 20 20 20  ags-only-I].    
3c20: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
3c30: 6c 64 66 6c 61 67 73 20 5b 65 78 65 63 20 70 6b  ldflags [exec pk
3c40: 67 2d 63 6f 6e 66 69 67 20 6f 70 65 6e 73 73 6c  g-config openssl
3c50: 20 2d 2d 6c 69 62 73 2d 6f 6e 6c 79 2d 4c 5d 0a   --libs-only-L].
3c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c70: 73 65 74 20 66 6f 75 6e 64 20 5b 63 68 65 63 6b  set found [check
3c80: 2d 66 6f 72 2d 6f 70 65 6e 73 73 6c 20 22 73 73  -for-openssl "ss
3c90: 6c 20 76 69 61 20 70 6b 67 2d 63 6f 6e 66 69 67  l via pkg-config
3ca0: 22 20 22 24 63 66 6c 61 67 73 20 24 6c 64 66 6c  " "$cflags $ldfl
3cb0: 61 67 73 22 5d 0a 20 20 20 20 20 20 20 20 20 20  ags"].          
3cc0: 20 20 7d 20 6d 73 67 0a 20 20 20 20 20 20 20 20    } msg.        
3cd0: 20 20 20 20 69 66 20 7b 21 24 66 6f 75 6e 64 7d      if {!$found}
3ce0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
3cf0: 20 20 20 73 65 74 20 73 73 6c 64 69 72 73 20 22     set ssldirs "
3d00: 7b 7d 20 2f 75 73 72 2f 73 66 77 20 2f 75 73 72  {} /usr/sfw /usr
3d10: 2f 6c 6f 63 61 6c 2f 73 73 6c 20 2f 75 73 72 2f  /local/ssl /usr/
3d20: 6c 69 62 2f 73 73 6c 20 2f 75 73 72 2f 73 73 6c  lib/ssl /usr/ssl
3d30: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
3d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d50: 2f 75 73 72 2f 70 6b 67 20 2f 75 73 72 2f 6c 6f  /usr/pkg /usr/lo
3d60: 63 61 6c 20 2f 75 73 72 20 2f 75 73 72 2f 6c 6f  cal /usr /usr/lo
3d70: 63 61 6c 2f 6f 70 74 2f 6f 70 65 6e 73 73 6c 20  cal/opt/openssl 
3d80: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3da0: 6f 70 74 2f 68 6f 6d 65 62 72 65 77 2f 6f 70 74  opt/homebrew/opt
3db0: 2f 6f 70 65 6e 73 73 6c 22 0a 20 20 20 20 20 20  /openssl".      
3dc0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
3dd0: 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24  }.        if {!$
3de0: 66 6f 75 6e 64 7d 20 7b 0a 20 20 20 20 20 20 20  found} {.       
3df0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72       foreach dir
3e00: 20 24 73 73 6c 64 69 72 73 20 7b 0a 20 20 20 20   $ssldirs {.    
3e10: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
3e20: 24 64 69 72 20 65 71 20 22 22 7d 20 7b 0a 20 20  $dir eq ""} {.  
3e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e40: 20 20 73 65 74 20 6d 73 67 20 22 73 79 73 74 65    set msg "syste
3e50: 6d 20 73 73 6c 22 0a 20 20 20 20 20 20 20 20 20  m ssl".         
3e60: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63             set c
3e70: 66 6c 61 67 73 20 22 22 0a 20 20 20 20 20 20 20  flags "".       
3e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
3e90: 20 6c 64 66 6c 61 67 73 20 22 22 0a 20 20 20 20   ldflags "".    
3ea0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
3eb0: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  se {.           
3ec0: 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 73 67           set msg
3ed0: 20 22 73 73 6c 20 69 6e 20 24 64 69 72 22 0a 20   "ssl in $dir". 
3ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ef0: 20 20 20 73 65 74 20 63 66 6c 61 67 73 20 22 2d     set cflags "-
3f00: 49 24 64 69 72 2f 69 6e 63 6c 75 64 65 22 0a 20  I$dir/include". 
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f20: 20 20 20 73 65 74 20 6c 64 66 6c 61 67 73 20 22     set ldflags "
3f30: 2d 4c 24 64 69 72 2f 6c 69 62 22 0a 20 20 20 20  -L$dir/lib".    
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
3f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
3f60: 20 7b 5b 63 68 65 63 6b 2d 66 6f 72 2d 6f 70 65   {[check-for-ope
3f70: 6e 73 73 6c 20 24 6d 73 67 20 22 24 63 66 6c 61  nssl $msg "$cfla
3f80: 67 73 20 24 6c 64 66 6c 61 67 73 22 5d 7d 20 7b  gs $ldflags"]} {
3f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3fa0: 20 20 20 20 20 69 6e 63 72 20 66 6f 75 6e 64 0a       incr found.
3fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fc0: 20 20 20 20 62 72 65 61 6b 0a 20 20 20 20 20 20      break.      
3fd0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
3fe0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
3ff0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
4000: 20 7b 24 66 6f 75 6e 64 7d 20 7b 0a 20 20 20 20   {$found} {.    
4010: 20 20 20 20 64 65 66 69 6e 65 20 46 4f 53 53 49      define FOSSI
4020: 4c 5f 45 4e 41 42 4c 45 5f 53 53 4c 0a 20 20 20  L_ENABLE_SSL.   
4030: 20 20 20 20 20 64 65 66 69 6e 65 2d 61 70 70 65       define-appe
4040: 6e 64 20 45 58 54 52 41 5f 43 46 4c 41 47 53 20  nd EXTRA_CFLAGS 
4050: 24 63 66 6c 61 67 73 0a 20 20 20 20 20 20 20 20  $cflags.        
4060: 64 65 66 69 6e 65 2d 61 70 70 65 6e 64 20 45 58  define-append EX
4070: 54 52 41 5f 4c 44 46 4c 41 47 53 20 24 6c 64 66  TRA_LDFLAGS $ldf
4080: 6c 61 67 73 0a 20 20 20 20 20 20 20 20 64 65 66  lags.        def
4090: 69 6e 65 2d 61 70 70 65 6e 64 20 43 46 4c 41 47  ine-append CFLAG
40a0: 53 20 24 63 66 6c 61 67 73 0a 20 20 20 20 20 20  S $cflags.      
40b0: 20 20 64 65 66 69 6e 65 2d 61 70 70 65 6e 64 20    define-append 
40c0: 4c 44 46 4c 41 47 53 20 24 6c 64 66 6c 61 67 73  LDFLAGS $ldflags
40d0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  .        if {[in
40e0: 66 6f 20 65 78 69 73 74 73 20 73 73 6c 6c 69 62  fo exists ssllib
40f0: 73 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  s]} {.          
4100: 20 20 64 65 66 69 6e 65 2d 61 70 70 65 6e 64 20    define-append 
4110: 4c 49 42 53 20 24 73 73 6c 6c 69 62 73 0a 20 20  LIBS $ssllibs.  
4120: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
4130: 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e             defin
4140: 65 2d 61 70 70 65 6e 64 20 4c 49 42 53 20 2d 6c  e-append LIBS -l
4150: 73 73 6c 20 2d 6c 63 72 79 70 74 6f 0a 20 20 20  ssl -lcrypto.   
4160: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
4170: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists 
4180: 3a 3a 7a 6c 69 62 5f 6c 69 62 5d 7d 20 7b 0a 20  ::zlib_lib]} {. 
4190: 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e             defin
41a0: 65 2d 61 70 70 65 6e 64 20 4c 49 42 53 20 24 3a  e-append LIBS $:
41b0: 3a 7a 6c 69 62 5f 6c 69 62 0a 20 20 20 20 20 20  :zlib_lib.      
41c0: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b    }.        if {
41d0: 5b 69 73 5f 6d 69 6e 67 77 5d 7d 20 7b 0a 20 20  [is_mingw]} {.  
41e0: 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65            define
41f0: 2d 61 70 70 65 6e 64 20 4c 49 42 53 20 2d 6c 67  -append LIBS -lg
4200: 64 69 33 32 20 2d 6c 77 73 6f 63 6b 33 32 20 2d  di32 -lwsock32 -
4210: 6c 63 72 79 70 74 33 32 0a 20 20 20 20 20 20 20  lcrypt32.       
4220: 20 7d 0a 20 20 20 20 20 20 20 20 6d 73 67 2d 72   }.        msg-r
4230: 65 73 75 6c 74 20 22 48 54 54 50 53 20 73 75 70  esult "HTTPS sup
4240: 70 6f 72 74 20 65 6e 61 62 6c 65 64 22 0a 0a 20  port enabled".. 
4250: 20 20 20 20 20 20 20 23 20 53 69 6c 65 6e 63 65         # Silence
4260: 20 4f 70 65 6e 53 53 4c 20 64 65 70 72 65 63 61   OpenSSL depreca
4270: 74 69 6f 6e 20 77 61 72 6e 69 6e 67 73 20 6f 6e  tion warnings on
4280: 20 4d 61 63 20 4f 53 20 58 20 31 30 2e 37 2e 0a   Mac OS X 10.7..
4290: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
42a0: 69 6e 67 20 6d 61 74 63 68 20 2a 2d 64 61 72 77  ing match *-darw
42b0: 69 6e 2a 20 5b 67 65 74 2d 64 65 66 69 6e 65 20  in* [get-define 
42c0: 68 6f 73 74 5d 5d 7d 20 7b 0a 20 20 20 20 20 20  host]]} {.      
42d0: 20 20 20 20 20 20 69 66 20 7b 5b 63 63 74 65 73        if {[cctes
42e0: 74 20 2d 63 66 6c 61 67 73 20 7b 2d 57 64 65 70  t -cflags {-Wdep
42f0: 72 65 63 61 74 65 64 2d 64 65 63 6c 61 72 61 74  recated-declarat
4300: 69 6f 6e 73 7d 5d 7d 20 7b 0a 20 20 20 20 20 20  ions}]} {.      
4310: 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65            define
4320: 2d 61 70 70 65 6e 64 20 45 58 54 52 41 5f 43 46  -append EXTRA_CF
4330: 4c 41 47 53 20 2d 57 64 65 70 72 65 63 61 74 65  LAGS -Wdeprecate
4340: 64 2d 64 65 63 6c 61 72 61 74 69 6f 6e 73 0a 20  d-declarations. 
4350: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
4360: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 65 6c 73       }.    } els
4370: 65 20 7b 0a 20 20 20 20 20 20 20 20 75 73 65 72  e {.        user
4380: 2d 65 72 72 6f 72 20 22 4f 70 65 6e 53 53 4c 20  -error "OpenSSL 
4390: 6e 6f 74 20 66 6f 75 6e 64 2e 20 43 6f 6e 73 69  not found. Consi
43a0: 64 65 72 20 2d 2d 77 69 74 68 2d 6f 70 65 6e 73  der --with-opens
43b0: 73 6c 3d 6e 6f 6e 65 20 74 6f 20 64 69 73 61 62  sl=none to disab
43c0: 6c 65 20 48 54 54 50 53 20 73 75 70 70 6f 72 74  le HTTPS support
43d0: 22 0a 20 20 20 20 7d 0a 7d 20 65 6c 73 65 20 7b  ".    }.} else {
43e0: 0a 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65  .    if {[info e
43f0: 78 69 73 74 73 20 3a 3a 7a 6c 69 62 5f 6c 69 62  xists ::zlib_lib
4400: 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 64 65 66  ]} {.        def
4410: 69 6e 65 2d 61 70 70 65 6e 64 20 4c 49 42 53 20  ine-append LIBS 
4420: 24 3a 3a 7a 6c 69 62 5f 6c 69 62 0a 20 20 20 20  $::zlib_lib.    
4430: 7d 0a 7d 0a 0a 0a 0a 23 23 23 23 23 23 23 23 23  }.}....#########
4440: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4450: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4460: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
4470: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
4480: 23 20 2d 2d 77 69 74 68 2d 73 71 6c 69 74 65 3d  # --with-sqlite=
4490: 50 41 54 48 20 63 68 65 63 6b 73 20 66 6f 72 20  PATH checks for 
44a0: 74 68 65 20 66 69 72 73 74 20 69 74 20 66 69 6e  the first it fin
44b0: 64 73 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ds of the follow
44c0: 69 6e 67 2e 2e 2e 0a 23 20 2d 20 50 41 54 48 2f  ing....# - PATH/
44d0: 73 71 6c 69 74 65 33 2e 63 20 61 6e 64 20 50 41  sqlite3.c and PA
44e0: 54 48 2f 73 71 6c 69 74 65 33 2e 68 0a 23 20 2d  TH/sqlite3.h.# -
44f0: 20 50 41 54 48 2f 73 71 6c 69 74 65 33 2e 6f 20   PATH/sqlite3.o 
4500: 28 61 6e 64 20 61 73 73 75 6d 65 73 20 73 71 6c  (and assumes sql
4510: 69 74 65 33 2e 68 20 69 73 20 77 69 74 68 20 69  ite3.h is with i
4520: 74 29 0a 23 20 2d 20 50 41 54 48 2f 6c 69 62 2f  t).# - PATH/lib/
4530: 6c 69 62 73 71 6c 69 74 65 33 2a 20 61 6e 64 20  libsqlite3* and 
4540: 50 41 54 48 2f 69 6e 63 6c 75 64 65 2f 73 71 6c  PATH/include/sql
4550: 69 74 65 33 2e 68 0a 64 65 66 69 6e 65 20 43 46  ite3.h.define CF
4560: 4c 41 47 53 5f 49 4e 43 4c 55 44 45 20 7b 7d 0a  LAGS_INCLUDE {}.
4570: 23 20 5e 5e 5e 20 43 46 4c 41 47 53 5f 49 4e 43  # ^^^ CFLAGS_INC
4580: 4c 55 44 45 20 69 73 20 4f 4e 4c 59 20 66 6f 72  LUDE is ONLY for
4590: 20 2d 49 2e 2e 2e 20 66 6c 61 67 73 20 61 6e 64   -I... flags and
45a0: 20 74 68 65 69 72 20 6f 72 64 65 72 20 69 73 0a   their order is.
45b0: 23 20 73 69 67 6e 69 66 69 63 61 6e 74 20 73 6f  # significant so
45c0: 20 74 68 61 74 20 2d 2d 77 69 74 68 2d 73 71 6c   that --with-sql
45d0: 69 74 65 3d 50 41 54 48 27 73 20 68 65 61 64 65  ite=PATH's heade
45e0: 72 20 63 61 6e 20 73 68 61 64 6f 77 20 6f 75 72  r can shadow our
45f0: 0a 23 20 6f 77 6e 2e 20 4f 6e 65 20 63 61 76 65  .# own. One cave
4600: 61 74 20 77 69 74 68 20 74 68 69 73 20 69 73 20  at with this is 
4610: 74 68 61 74 20 77 65 20 63 61 6e 6e 6f 74 20 70  that we cannot p
4620: 6f 69 6e 74 20 2d 2d 77 69 74 68 2d 73 71 6c 69  oint --with-sqli
4630: 74 65 3d 50 41 54 48 0a 23 20 74 6f 20 74 68 65  te=PATH.# to the
4640: 20 72 6f 6f 74 20 6f 66 20 73 71 6c 69 74 65 33   root of sqlite3
4650: 27 73 20 6f 77 6e 20 62 75 69 6c 64 20 74 72 65  's own build tre
4660: 65 20 62 65 63 61 75 73 65 20 74 68 61 74 20 64  e because that d
4670: 69 72 20 68 61 73 20 61 0a 23 20 63 6f 6e 66 69  ir has a.# confi
4680: 67 2e 68 20 77 68 69 63 68 20 65 6e 64 73 20 75  g.h which ends u
4690: 70 20 73 68 61 64 6f 77 69 6e 67 20 73 72 63 2f  p shadowing src/
46a0: 63 6f 6e 66 69 67 2e 68 2c 20 62 72 65 61 6b 69  config.h, breaki
46b0: 6e 67 20 6f 75 72 20 62 75 69 6c 64 2e 0a 73 65  ng our build..se
46c0: 74 20 73 71 33 70 61 74 68 20 5b 6f 70 74 2d 76  t sq3path [opt-v
46d0: 61 6c 20 77 69 74 68 2d 73 71 6c 69 74 65 5d 0a  al with-sqlite].
46e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 33 5f 53  define SQLITE3_S
46f0: 52 43 2e 32 20 7b 7d 0a 64 65 66 69 6e 65 20 53  RC.2 {}.define S
4700: 51 4c 49 54 45 33 5f 4f 42 4a 2e 32 20 7b 7d 0a  QLITE3_OBJ.2 {}.
4710: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 33 5f 53  define SQLITE3_S
4720: 48 45 4c 4c 5f 53 52 43 2e 32 20 7b 24 28 53 51  HELL_SRC.2 {$(SQ
4730: 4c 49 54 45 33 5f 53 48 45 4c 4c 5f 53 52 43 2e  LITE3_SHELL_SRC.
4740: 30 29 7d 0a 69 66 20 7b 24 73 71 33 70 61 74 68  0)}.if {$sq3path
4750: 20 69 6e 20 7b 74 72 65 65 20 22 22 7d 7d 20 7b   in {tree ""}} {
4760: 0a 20 20 6d 73 67 2d 72 65 73 75 6c 74 20 22 55  .  msg-result "U
4770: 73 69 6e 67 20 73 71 6c 69 74 65 33 2e 63 20 66  sing sqlite3.c f
4780: 72 6f 6d 20 74 68 69 73 20 73 6f 75 72 63 65 20  rom this source 
4790: 74 72 65 65 2e 22 0a 7d 20 65 6c 73 65 20 7b 0a  tree.".} else {.
47a0: 20 20 23 20 53 51 4c 49 54 45 33 5f 4f 52 49 47    # SQLITE3_ORIG
47b0: 49 4e 3a 0a 20 20 23 20 20 20 30 20 3d 20 6c 6f  IN:.  #   0 = lo
47c0: 63 61 6c 20 73 6f 75 72 63 65 20 74 72 65 65 0a  cal source tree.
47d0: 20 20 23 20 20 20 31 20 3d 20 75 73 65 20 65 78    #   1 = use ex
47e0: 74 65 72 6e 61 6c 20 6c 69 62 20 6f 72 20 73 71  ternal lib or sq
47f0: 6c 69 74 65 33 2e 6f 0a 20 20 23 20 20 20 32 20  lite3.o.  #   2 
4800: 3d 20 75 73 65 20 65 78 74 65 72 6e 61 6c 20 73  = use external s
4810: 71 6c 69 74 65 33 2e 63 20 61 6e 64 20 28 69 66  qlite3.c and (if
4820: 20 66 6f 75 6e 64 29 20 73 68 65 6c 6c 2e 63 0a   found) shell.c.
4830: 20 20 64 65 66 69 6e 65 20 55 53 45 5f 53 59 53    define USE_SYS
4840: 54 45 4d 5f 53 51 4c 49 54 45 20 31 0a 20 20 64  TEM_SQLITE 1.  d
4850: 65 66 69 6e 65 20 53 51 4c 49 54 45 33 5f 4f 52  efine SQLITE3_OR
4860: 49 47 49 4e 20 32 0a 20 20 69 66 20 7b 24 73 71  IGIN 2.  if {$sq
4870: 33 70 61 74 68 20 21 3d 20 22 61 75 74 6f 22 7d  3path != "auto"}
4880: 20 7b 0a 20 20 20 20 69 66 20 7b 28 5b 66 69 6c   {.    if {([fil
4890: 65 20 65 78 69 73 74 73 20 24 73 71 33 70 61 74  e exists $sq3pat
48a0: 68 2f 73 71 6c 69 74 65 33 2e 63 5d 29 20 26 26  h/sqlite3.c]) &&
48b0: 20 5c 0a 20 20 20 20 20 20 20 20 28 5b 66 69 6c   \.        ([fil
48c0: 65 20 65 78 69 73 74 73 20 24 73 71 33 70 61 74  e exists $sq3pat
48d0: 68 2f 73 71 6c 69 74 65 33 2e 68 5d 29 20 7d 20  h/sqlite3.h]) } 
48e0: 7b 0a 20 20 20 20 20 20 23 20 50 72 65 66 65 72  {.      # Prefer
48f0: 20 73 71 6c 69 74 65 33 2e 5b 63 68 5d 20 69 66   sqlite3.[ch] if
4900: 20 66 6f 75 6e 64 2e 0a 20 20 20 20 20 20 64 65   found..      de
4910: 66 69 6e 65 20 53 51 4c 49 54 45 33 5f 53 52 43  fine SQLITE3_SRC
4920: 2e 32 20 24 73 71 33 70 61 74 68 2f 73 71 6c 69  .2 $sq3path/sqli
4930: 74 65 33 2e 63 0a 20 20 20 20 20 20 64 65 66 69  te3.c.      defi
4940: 6e 65 20 53 51 4c 49 54 45 33 5f 4f 42 4a 2e 32  ne SQLITE3_OBJ.2
4950: 20 7b 24 28 53 51 4c 49 54 45 33 5f 4f 42 4a 2e   {$(SQLITE3_OBJ.
4960: 30 29 7d 0a 20 20 20 20 20 20 64 65 66 69 6e 65  0)}.      define
4970: 20 55 53 45 5f 53 59 53 54 45 4d 5f 53 51 4c 49   USE_SYSTEM_SQLI
4980: 54 45 20 32 0a 20 20 20 20 20 20 64 65 66 69 6e  TE 2.      defin
4990: 65 20 53 51 4c 49 54 45 33 5f 4f 52 49 47 49 4e  e SQLITE3_ORIGIN
49a0: 20 32 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69   2.      if {[fi
49b0: 6c 65 20 65 78 69 73 74 73 20 24 73 71 33 70 61  le exists $sq3pa
49c0: 74 68 2f 73 68 65 6c 6c 2e 63 5d 7d 20 7b 0a 20  th/shell.c]} {. 
49d0: 20 20 20 20 20 20 20 64 65 66 69 6e 65 20 53 51         define SQ
49e0: 4c 49 54 45 33 5f 53 48 45 4c 4c 5f 53 52 43 2e  LITE3_SHELL_SRC.
49f0: 32 20 24 73 71 33 70 61 74 68 2f 73 68 65 6c 6c  2 $sq3path/shell
4a00: 2e 63 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .c.      }.     
4a10: 20 64 65 66 69 6e 65 2d 61 70 70 65 6e 64 20 43   define-append C
4a20: 46 4c 41 47 53 5f 49 4e 43 4c 55 44 45 20 2d 49  FLAGS_INCLUDE -I
4a30: 24 73 71 33 70 61 74 68 0a 20 20 20 20 20 20 64  $sq3path.      d
4a40: 65 66 69 6e 65 2d 61 70 70 65 6e 64 20 45 58 54  efine-append EXT
4a50: 52 41 5f 4c 44 46 4c 41 47 53 20 2d 6c 70 74 68  RA_LDFLAGS -lpth
4a60: 72 65 61 64 0a 20 20 20 20 20 20 23 20 5e 5e 5e  read.      # ^^^
4a70: 20 61 64 64 69 74 69 6f 6e 61 6c 20 2d 6c 58 58   additional -lXX
4a80: 58 20 66 6c 61 67 73 20 61 72 65 20 63 6f 6e 73  X flags are cons
4a90: 65 72 76 61 74 69 76 65 20 65 73 74 69 6d 61 74  ervative estimat
4aa0: 65 73 0a 20 20 20 20 20 20 6d 73 67 2d 72 65 73  es.      msg-res
4ab0: 75 6c 74 20 22 55 73 69 6e 67 20 73 71 6c 69 74  ult "Using sqlit
4ac0: 65 33 2e 63 20 61 6e 64 20 73 71 6c 69 74 65 33  e3.c and sqlite3
4ad0: 2e 68 20 66 72 6f 6d 20 24 73 71 33 70 61 74 68  .h from $sq3path
4ae0: 22 0a 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b  ".    } elseif {
4af0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 71  [file exists $sq
4b00: 33 70 61 74 68 2f 73 71 6c 69 74 65 33 2e 6f 5d  3path/sqlite3.o]
4b10: 7d 20 7b 0a 20 20 20 20 20 20 23 20 55 73 65 20  } {.      # Use 
4b20: 73 71 6c 69 74 65 33 2e 6f 20 69 66 20 66 6f 75  sqlite3.o if fou
4b30: 6e 64 2e 0a 20 20 20 20 20 20 64 65 66 69 6e 65  nd..      define
4b40: 20 53 51 4c 49 54 45 33 5f 4f 42 4a 2e 32 20 24   SQLITE3_OBJ.2 $
4b50: 73 71 33 70 61 74 68 2f 73 71 6c 69 74 65 33 2e  sq3path/sqlite3.
4b60: 6f 0a 20 20 20 20 20 20 64 65 66 69 6e 65 2d 61  o.      define-a
4b70: 70 70 65 6e 64 20 43 46 4c 41 47 53 5f 49 4e 43  ppend CFLAGS_INC
4b80: 4c 55 44 45 20 2d 49 24 73 71 33 70 61 74 68 0a  LUDE -I$sq3path.
4b90: 20 20 20 20 20 20 64 65 66 69 6e 65 2d 61 70 70        define-app
4ba0: 65 6e 64 20 45 58 54 52 41 5f 4c 44 46 4c 41 47  end EXTRA_LDFLAG
4bb0: 53 20 24 73 71 33 70 61 74 68 2f 73 71 6c 69 74  S $sq3path/sqlit
4bc0: 65 33 2e 6f 20 2d 6c 70 74 68 72 65 61 64 0a 20  e3.o -lpthread. 
4bd0: 20 20 20 20 20 23 20 5e 5e 5e 20 61 64 64 69 74       # ^^^ addit
4be0: 69 6f 6e 61 6c 20 2d 6c 58 58 58 20 66 6c 61 67  ional -lXXX flag
4bf0: 73 20 61 72 65 20 63 6f 6e 73 65 72 76 61 74 69  s are conservati
4c00: 76 65 20 65 73 74 69 6d 61 74 65 73 0a 20 20 20  ve estimates.   
4c10: 20 20 20 6d 73 67 2d 72 65 73 75 6c 74 20 22 55     msg-result "U
4c20: 73 69 6e 67 20 73 71 6c 69 74 65 33 2e 6f 20 66  sing sqlite3.o f
4c30: 72 6f 6d 20 24 73 71 33 70 61 74 68 22 0a 20 20  rom $sq3path".  
4c40: 20 20 7d 20 65 6c 73 65 69 66 20 7b 20 28 5b 6c    } elseif { ([l
4c50: 6c 65 6e 67 74 68 20 5b 67 6c 6f 62 20 2d 6e 6f  length [glob -no
4c60: 63 6f 6d 70 6c 61 69 6e 20 2d 64 69 72 65 63 74  complain -direct
4c70: 6f 72 79 20 24 73 71 33 70 61 74 68 2f 6c 69 62  ory $sq3path/lib
4c80: 20 6c 69 62 73 71 6c 69 74 65 33 2a 5d 5d 20 21   libsqlite3*]] !
4c90: 3d 20 30 29 20 5c 0a 20 20 20 20 20 20 20 20 20  = 0) \.         
4ca0: 20 20 20 20 20 20 20 20 26 26 20 28 5b 66 69 6c          && ([fil
4cb0: 65 20 65 78 69 73 74 73 20 24 73 71 33 70 61 74  e exists $sq3pat
4cc0: 68 2f 69 6e 63 6c 75 64 65 2f 73 71 6c 69 74 65  h/include/sqlite
4cd0: 33 2e 68 5d 29 20 7d 20 7b 0a 20 20 20 20 20 20  3.h]) } {.      
4ce0: 23 20 65 2e 67 2e 20 2d 2d 77 69 74 68 2d 73 71  # e.g. --with-sq
4cf0: 6c 69 74 65 3d 2f 75 73 72 2f 6c 6f 63 61 6c 2e  lite=/usr/local.
4d00: 20 54 72 79 20 24 73 71 33 70 61 74 68 2f 6c 69   Try $sq3path/li
4d10: 62 2f 6c 69 62 73 71 6c 69 74 65 33 2a 0a 20 20  b/libsqlite3*.  
4d20: 20 20 20 20 23 20 61 6e 64 20 24 73 71 33 70 61      # and $sq3pa
4d30: 74 68 2f 69 6e 63 6c 75 64 65 2f 73 71 6c 69 74  th/include/sqlit
4d40: 65 33 2e 68 0a 20 20 20 20 20 20 64 65 66 69 6e  e3.h.      defin
4d50: 65 2d 61 70 70 65 6e 64 20 43 46 4c 41 47 53 5f  e-append CFLAGS_
4d60: 49 4e 43 4c 55 44 45 20 2d 49 24 73 71 33 70 61  INCLUDE -I$sq3pa
4d70: 74 68 2f 69 6e 63 6c 75 64 65 0a 20 20 20 20 20  th/include.     
4d80: 20 64 65 66 69 6e 65 2d 61 70 70 65 6e 64 20 45   define-append E
4d90: 58 54 52 41 5f 4c 44 46 4c 41 47 53 20 2d 4c 24  XTRA_LDFLAGS -L$
4da0: 73 71 33 70 61 74 68 2f 6c 69 62 20 2d 6c 73 71  sq3path/lib -lsq
4db0: 6c 69 74 65 33 20 2d 6c 70 74 68 72 65 61 64 0a  lite3 -lpthread.
4dc0: 20 20 20 20 20 20 23 20 5e 5e 5e 20 61 64 64 69        # ^^^ addi
4dd0: 74 69 6f 6e 61 6c 20 2d 6c 58 58 58 20 66 6c 61  tional -lXXX fla
4de0: 67 73 20 61 72 65 20 63 6f 6e 73 65 72 76 61 74  gs are conservat
4df0: 69 76 65 20 65 73 74 69 6d 61 74 65 73 0a 20 20  ive estimates.  
4e00: 20 20 20 20 6d 73 67 2d 72 65 73 75 6c 74 20 22      msg-result "
4e10: 55 73 69 6e 67 20 2d 6c 73 71 6c 69 74 65 33 20  Using -lsqlite3 
4e20: 66 72 6f 6d 20 24 73 71 33 70 61 74 68 22 0a 20  from $sq3path". 
4e30: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
4e40: 20 20 23 20 41 73 73 75 6d 65 20 24 73 71 33 70    # Assume $sq3p
4e50: 61 74 68 20 68 6f 6c 64 73 20 62 6f 74 68 20 74  ath holds both t
4e60: 68 65 20 6c 69 62 20 61 6e 64 20 68 65 61 64 65  he lib and heade
4e70: 72 0a 20 20 20 20 20 20 63 63 2d 77 69 74 68 20  r.      cc-with 
4e80: 5b 6c 69 73 74 20 2d 63 66 6c 61 67 73 20 22 2d  [list -cflags "-
4e90: 49 24 73 71 33 70 61 74 68 20 2d 4c 24 73 71 33  I$sq3path -L$sq3
4ea0: 70 61 74 68 22 5d 0a 20 20 20 20 20 20 64 65 66  path"].      def
4eb0: 69 6e 65 2d 61 70 70 65 6e 64 20 43 46 4c 41 47  ine-append CFLAG
4ec0: 53 5f 49 4e 43 4c 55 44 45 20 2d 49 24 73 71 33  S_INCLUDE -I$sq3
4ed0: 70 61 74 68 0a 20 20 20 20 20 20 64 65 66 69 6e  path.      defin
4ee0: 65 2d 61 70 70 65 6e 64 20 45 58 54 52 41 5f 4c  e-append EXTRA_L
4ef0: 44 46 4c 41 47 53 20 2d 4c 24 73 71 33 70 61 74  DFLAGS -L$sq3pat
4f00: 68 20 2d 6c 73 71 6c 69 74 65 33 20 2d 6c 70 74  h -lsqlite3 -lpt
4f10: 68 72 65 61 64 0a 20 20 20 20 20 20 23 20 5e 5e  hread.      # ^^
4f20: 5e 20 61 64 64 69 74 69 6f 6e 61 6c 20 2d 6c 58  ^ additional -lX
4f30: 58 58 20 66 6c 61 67 73 20 61 72 65 20 63 6f 6e  XX flags are con
4f40: 73 65 72 76 61 74 69 76 65 20 65 73 74 69 6d 61  servative estima
4f50: 74 65 73 0a 20 20 20 20 20 20 6d 73 67 2d 72 65  tes.      msg-re
4f60: 73 75 6c 74 20 22 55 73 69 6e 67 20 2d 6c 73 71  sult "Using -lsq
4f70: 6c 69 74 65 33 20 66 72 6f 6d 20 24 73 71 33 70  lite3 from $sq3p
4f80: 61 74 68 22 0a 20 20 20 20 7d 0a 20 20 7d 20 65  ath".    }.  } e
4f90: 6c 73 65 69 66 20 7b 21 5b 63 63 2d 63 68 65 63  lseif {![cc-chec
4fa0: 6b 2d 69 6e 63 6c 75 64 65 73 20 73 71 6c 69 74  k-includes sqlit
4fb0: 65 33 2e 68 5d 20 7c 7c 20 21 5b 63 68 65 63 6b  e3.h] || ![check
4fc0: 2d 66 75 6e 63 74 69 6f 6e 2d 69 6e 2d 6c 69 62  -function-in-lib
4fd0: 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 5f 76 32   sqlite3_open_v2
4fe0: 20 73 71 6c 69 74 65 33 5d 7d 20 7b 0a 20 20 20   sqlite3]} {.   
4ff0: 20 75 73 65 72 2d 65 72 72 6f 72 20 22 6c 69 62   user-error "lib
5000: 73 71 6c 69 74 65 33 20 6e 6f 74 20 66 6f 75 6e  sqlite3 not foun
5010: 64 20 70 6c 65 61 73 65 20 69 6e 73 74 61 6c 6c  d please install
5020: 20 69 74 20 6f 72 20 73 70 65 63 69 66 79 20 74   it or specify t
5030: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 77 69 74 68  he location with
5040: 20 2d 2d 77 69 74 68 2d 73 71 6c 69 74 65 22 0a   --with-sqlite".
5050: 20 20 7d 0a 7d 0a 64 65 66 69 6e 65 2d 61 70 70    }.}.define-app
5060: 65 6e 64 20 43 46 4c 41 47 53 5f 49 4e 43 4c 55  end CFLAGS_INCLU
5070: 44 45 20 7b 2d 49 2e 20 2d 49 24 28 53 52 43 44  DE {-I. -I$(SRCD
5080: 49 52 29 20 2d 49 24 28 53 52 43 44 49 52 5f 65  IR) -I$(SRCDIR_e
5090: 78 74 73 72 63 29 7d 0a 0a 73 65 74 20 74 63 6c  xtsrc)}..set tcl
50a0: 70 61 74 68 20 5b 6f 70 74 2d 76 61 6c 20 77 69  path [opt-val wi
50b0: 74 68 2d 74 63 6c 5d 0a 69 66 20 7b 24 74 63 6c  th-tcl].if {$tcl
50c0: 70 61 74 68 20 6e 65 20 22 22 7d 20 7b 0a 20 20  path ne ""} {.  
50d0: 20 20 73 65 74 20 74 63 6c 70 72 69 76 61 74 65    set tclprivate
50e0: 73 74 75 62 73 20 5b 6f 70 74 2d 62 6f 6f 6c 20  stubs [opt-bool 
50f0: 77 69 74 68 2d 74 63 6c 2d 70 72 69 76 61 74 65  with-tcl-private
5100: 2d 73 74 75 62 73 5d 0a 20 20 20 20 23 20 4e 6f  -stubs].    # No
5110: 74 65 20 70 61 72 73 65 2d 74 63 6c 63 6f 6e 66  te parse-tclconf
5120: 69 67 2d 73 68 20 69 73 20 69 6e 20 61 75 74 6f  ig-sh is in auto
5130: 73 65 74 75 70 2f 6c 6f 63 61 6c 2e 74 63 6c 0a  setup/local.tcl.
5140: 20 20 20 20 69 66 20 7b 24 74 63 6c 70 61 74 68      if {$tclpath
5150: 20 65 71 20 22 31 22 7d 20 7b 0a 20 20 20 20 20   eq "1"} {.     
5160: 20 20 20 73 65 74 20 74 63 6c 64 69 72 20 5b 66     set tcldir [f
5170: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 75 74  ile dirname $aut
5180: 6f 73 65 74 75 70 28 64 69 72 29 5d 2f 63 6f 6d  osetup(dir)]/com
5190: 70 61 74 2f 74 63 6c 2d 38 2e 36 0a 20 20 20 20  pat/tcl-8.6.    
51a0: 20 20 20 20 69 66 20 7b 24 74 63 6c 70 72 69 76      if {$tclpriv
51b0: 61 74 65 73 74 75 62 73 7d 20 7b 0a 20 20 20 20  atestubs} {.    
51c0: 20 20 20 20 20 20 20 20 73 65 74 20 74 63 6c 63          set tclc
51d0: 6f 6e 66 69 67 28 54 43 4c 5f 49 4e 43 4c 55 44  onfig(TCL_INCLUD
51e0: 45 5f 53 50 45 43 29 20 2d 49 24 74 63 6c 64 69  E_SPEC) -I$tcldi
51f0: 72 2f 67 65 6e 65 72 69 63 0a 20 20 20 20 20 20  r/generic.      
5200: 20 20 20 20 20 20 73 65 74 20 74 63 6c 63 6f 6e        set tclcon
5210: 66 69 67 28 54 43 4c 5f 56 45 52 53 49 4f 4e 29  fig(TCL_VERSION)
5220: 20 7b 50 72 69 76 61 74 65 20 53 74 75 62 73 7d   {Private Stubs}
5230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
5240: 20 74 63 6c 63 6f 6e 66 69 67 28 54 43 4c 5f 50   tclconfig(TCL_P
5250: 41 54 43 48 5f 4c 45 56 45 4c 29 20 7b 7d 0a 20  ATCH_LEVEL) {}. 
5260: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74             set t
5270: 63 6c 63 6f 6e 66 69 67 28 54 43 4c 5f 50 52 45  clconfig(TCL_PRE
5280: 46 49 58 29 20 24 74 63 6c 64 69 72 0a 20 20 20  FIX) $tcldir.   
5290: 20 20 20 20 20 20 20 20 20 73 65 74 20 74 63 6c           set tcl
52a0: 63 6f 6e 66 69 67 28 54 43 4c 5f 4c 44 5f 46 4c  config(TCL_LD_FL
52b0: 41 47 53 29 20 7b 20 7d 0a 20 20 20 20 20 20 20  AGS) { }.       
52c0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
52d0: 20 20 20 20 20 20 23 20 55 73 65 20 74 68 65 20        # Use the 
52e0: 73 79 73 74 65 6d 20 54 63 6c 2e 20 4c 6f 6f 6b  system Tcl. Look
52f0: 20 69 6e 20 73 6f 6d 65 20 6c 69 6b 65 6c 79 20   in some likely 
5300: 70 6c 61 63 65 73 2e 0a 20 20 20 20 20 20 20 20  places..        
5310: 20 20 20 20 61 72 72 61 79 20 73 65 74 20 74 63      array set tc
5320: 6c 63 6f 6e 66 69 67 20 5b 70 61 72 73 65 2d 74  lconfig [parse-t
5330: 63 6c 63 6f 6e 66 69 67 2d 73 68 20 5c 0a 20 20  clconfig-sh \.  
5340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 74                $t
5350: 63 6c 64 69 72 2f 75 6e 69 78 20 24 74 63 6c 64  cldir/unix $tcld
5360: 69 72 2f 77 69 6e 20 5c 0a 20 20 20 20 20 20 20  ir/win \.       
5370: 20 20 20 20 20 20 20 20 20 2f 75 73 72 20 2f 75           /usr /u
5380: 73 72 2f 6c 6f 63 61 6c 20 2f 75 73 72 2f 73 68  sr/local /usr/sh
5390: 61 72 65 20 2f 6f 70 74 2f 6c 6f 63 61 6c 5d 0a  are /opt/local].
53a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
53b0: 6d 73 67 20 22 6f 6e 20 79 6f 75 72 20 73 79 73  msg "on your sys
53c0: 74 65 6d 22 0a 20 20 20 20 20 20 20 20 7d 0a 20  tem".        }. 
53d0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
53e0: 20 20 20 20 61 72 72 61 79 20 73 65 74 20 74 63      array set tc
53f0: 6c 63 6f 6e 66 69 67 20 5b 70 61 72 73 65 2d 74  lconfig [parse-t
5400: 63 6c 63 6f 6e 66 69 67 2d 73 68 20 24 74 63 6c  clconfig-sh $tcl
5410: 70 61 74 68 5d 0a 20 20 20 20 20 20 20 20 73 65  path].        se
5420: 74 20 6d 73 67 20 22 61 74 20 24 74 63 6c 70 61  t msg "at $tclpa
5430: 74 68 22 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  th".    }.    if
5440: 20 7b 5b 6f 70 74 2d 62 6f 6f 6c 20 73 74 61 74   {[opt-bool stat
5450: 69 63 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  ic]} {.        s
5460: 65 74 20 74 63 6c 63 6f 6e 66 69 67 28 54 43 4c  et tclconfig(TCL
5470: 5f 4c 44 5f 46 4c 41 47 53 29 20 7b 20 7d 0a 20  _LD_FLAGS) { }. 
5480: 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 21 5b 69     }.    if {![i
5490: 6e 66 6f 20 65 78 69 73 74 73 20 74 63 6c 63 6f  nfo exists tclco
54a0: 6e 66 69 67 28 54 43 4c 5f 49 4e 43 4c 55 44 45  nfig(TCL_INCLUDE
54b0: 5f 53 50 45 43 29 5d 7d 20 7b 0a 20 20 20 20 20  _SPEC)]} {.     
54c0: 20 20 20 75 73 65 72 2d 65 72 72 6f 72 20 22 43     user-error "C
54d0: 61 6e 6e 6f 74 20 66 69 6e 64 20 54 63 6c 20 24  annot find Tcl $
54e0: 6d 73 67 22 0a 20 20 20 20 7d 0a 20 20 20 20 73  msg".    }.    s
54f0: 65 74 20 74 63 6c 73 74 75 62 73 20 5b 6f 70 74  et tclstubs [opt
5500: 2d 62 6f 6f 6c 20 77 69 74 68 2d 74 63 6c 2d 73  -bool with-tcl-s
5510: 74 75 62 73 5d 0a 20 20 20 20 69 66 20 7b 24 74  tubs].    if {$t
5520: 63 6c 70 72 69 76 61 74 65 73 74 75 62 73 7d 20  clprivatestubs} 
5530: 7b 0a 20 20 20 20 20 20 20 20 64 65 66 69 6e 65  {.        define
5540: 20 46 4f 53 53 49 4c 5f 45 4e 41 42 4c 45 5f 54   FOSSIL_ENABLE_T
5550: 43 4c 5f 50 52 49 56 41 54 45 5f 53 54 55 42 53  CL_PRIVATE_STUBS
5560: 0a 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 20  .        define 
5570: 55 53 45 5f 54 43 4c 5f 53 54 55 42 53 0a 20 20  USE_TCL_STUBS.  
5580: 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 74 63 6c    } elseif {$tcl
5590: 73 74 75 62 73 20 26 26 20 24 74 63 6c 63 6f 6e  stubs && $tclcon
55a0: 66 69 67 28 54 43 4c 5f 53 55 50 50 4f 52 54 53  fig(TCL_SUPPORTS
55b0: 5f 53 54 55 42 53 29 7d 20 7b 0a 20 20 20 20 20  _STUBS)} {.     
55c0: 20 20 20 73 65 74 20 6c 69 62 73 20 22 24 74 63     set libs "$tc
55d0: 6c 63 6f 6e 66 69 67 28 54 43 4c 5f 53 54 55 42  lconfig(TCL_STUB
55e0: 5f 4c 49 42 5f 53 50 45 43 29 22 0a 20 20 20 20  _LIB_SPEC)".    
55f0: 20 20 20 20 64 65 66 69 6e 65 20 46 4f 53 53 49      define FOSSI
5600: 4c 5f 45 4e 41 42 4c 45 5f 54 43 4c 5f 53 54 55  L_ENABLE_TCL_STU
5610: 42 53 0a 20 20 20 20 20 20 20 20 64 65 66 69 6e  BS.        defin
5620: 65 20 55 53 45 5f 54 43 4c 5f 53 54 55 42 53 0a  e USE_TCL_STUBS.
5630: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
5640: 20 20 20 20 20 73 65 74 20 6c 69 62 73 20 22 24       set libs "$
5650: 74 63 6c 63 6f 6e 66 69 67 28 54 43 4c 5f 4c 49  tclconfig(TCL_LI
5660: 42 5f 53 50 45 43 29 20 24 74 63 6c 63 6f 6e 66  B_SPEC) $tclconf
5670: 69 67 28 54 43 4c 5f 4c 49 42 53 29 22 0a 20 20  ig(TCL_LIBS)".  
5680: 20 20 7d 0a 20 20 20 20 73 65 74 20 63 66 6c 61    }.    set cfla
5690: 67 73 20 24 74 63 6c 63 6f 6e 66 69 67 28 54 43  gs $tclconfig(TC
56a0: 4c 5f 49 4e 43 4c 55 44 45 5f 53 50 45 43 29 0a  L_INCLUDE_SPEC).
56b0: 20 20 20 20 69 66 20 7b 21 24 74 63 6c 70 72 69      if {!$tclpri
56c0: 76 61 74 65 73 74 75 62 73 7d 20 7b 0a 20 20 20  vatestubs} {.   
56d0: 20 20 20 20 20 73 65 74 20 66 6f 75 6e 64 74 63       set foundtc
56e0: 6c 20 30 3b 20 23 20 44 69 64 20 77 65 20 66 69  l 0; # Did we fi
56f0: 6e 64 20 61 20 77 6f 72 6b 69 6e 67 20 54 63 6c  nd a working Tcl
5700: 20 6c 69 62 72 61 72 79 3f 0a 20 20 20 20 20 20   library?.      
5710: 20 20 63 63 2d 77 69 74 68 20 5b 6c 69 73 74 20    cc-with [list 
5720: 2d 63 66 6c 61 67 73 20 24 63 66 6c 61 67 73 20  -cflags $cflags 
5730: 2d 6c 69 62 73 20 24 6c 69 62 73 5d 20 7b 0a 20  -libs $libs] {. 
5740: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24             if {$
5750: 74 63 6c 73 74 75 62 73 7d 20 7b 0a 20 20 20 20  tclstubs} {.    
5760: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
5770: 5b 63 63 2d 63 68 65 63 6b 2d 66 75 6e 63 74 69  [cc-check-functi
5780: 6f 6e 73 20 54 63 6c 5f 49 6e 69 74 53 74 75 62  ons Tcl_InitStub
5790: 73 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  s]} {.          
57a0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 66 6f            set fo
57b0: 75 6e 64 74 63 6c 20 31 0a 20 20 20 20 20 20 20  undtcl 1.       
57c0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
57d0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
57e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57f0: 69 66 20 7b 5b 63 63 2d 63 68 65 63 6b 2d 66 75  if {[cc-check-fu
5800: 6e 63 74 69 6f 6e 73 20 54 63 6c 5f 43 72 65 61  nctions Tcl_Crea
5810: 74 65 49 6e 74 65 72 70 5d 7d 20 7b 0a 20 20 20  teInterp]} {.   
5820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5830: 20 73 65 74 20 66 6f 75 6e 64 74 63 6c 20 31 0a   set foundtcl 1.
5840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5850: 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
5860: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5870: 20 20 69 66 20 7b 21 24 66 6f 75 6e 64 74 63 6c    if {!$foundtcl
5880: 20 26 26 20 5b 73 74 72 69 6e 67 20 6d 61 74 63   && [string matc
5890: 68 20 2a 2d 6c 69 65 65 65 2a 20 24 6c 69 62 73  h *-lieee* $libs
58a0: 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ]} {.           
58b0: 20 23 20 4f 6e 20 73 6f 6d 65 20 73 79 73 74 65   # On some syste
58c0: 6d 73 2c 20 75 73 69 6e 67 20 22 2d 6c 69 65 65  ms, using "-liee
58d0: 65 22 20 66 72 6f 6d 20 54 43 4c 5f 4c 49 42 5f  e" from TCL_LIB_
58e0: 53 50 45 43 20 61 70 70 65 61 72 73 0a 20 20 20  SPEC appears.   
58f0: 20 20 20 20 20 20 20 20 20 23 20 74 6f 20 63 61           # to ca
5900: 75 73 65 20 69 73 73 75 65 73 2e 0a 20 20 20 20  use issues..    
5910: 20 20 20 20 20 20 20 20 6d 73 67 2d 72 65 73 75          msg-resu
5920: 6c 74 20 22 52 65 6d 6f 76 69 6e 67 20 5c 22 2d  lt "Removing \"-
5930: 6c 69 65 65 65 5c 22 20 61 6e 64 20 72 65 74 72  lieee\" and retr
5940: 79 69 6e 67 20 66 6f 72 20 54 63 6c 2e 2e 2e 22  ying for Tcl..."
5950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
5960: 20 6c 69 62 73 20 5b 73 74 72 69 6e 67 20 6d 61   libs [string ma
5970: 70 20 5b 6c 69 73 74 20 2d 6c 69 65 65 65 20 22  p [list -lieee "
5980: 22 5d 20 24 6c 69 62 73 5d 0a 20 20 20 20 20 20  "] $libs].      
5990: 20 20 20 20 20 20 63 63 2d 77 69 74 68 20 5b 6c        cc-with [l
59a0: 69 73 74 20 2d 63 66 6c 61 67 73 20 24 63 66 6c  ist -cflags $cfl
59b0: 61 67 73 20 2d 6c 69 62 73 20 24 6c 69 62 73 5d  ags -libs $libs]
59c0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
59d0: 20 20 20 69 66 20 7b 24 74 63 6c 73 74 75 62 73     if {$tclstubs
59e0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  } {.            
59f0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 63 2d          if {[cc-
5a00: 63 68 65 63 6b 2d 66 75 6e 63 74 69 6f 6e 73 20  check-functions 
5a10: 54 63 6c 5f 49 6e 69 74 53 74 75 62 73 5d 7d 20  Tcl_InitStubs]} 
5a20: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
5a30: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 66 6f            set fo
5a40: 75 6e 64 74 63 6c 20 31 0a 20 20 20 20 20 20 20  undtcl 1.       
5a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20               }. 
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5a70: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
5a80: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
5a90: 5b 63 63 2d 63 68 65 63 6b 2d 66 75 6e 63 74 69  [cc-check-functi
5aa0: 6f 6e 73 20 54 63 6c 5f 43 72 65 61 74 65 49 6e  ons Tcl_CreateIn
5ab0: 74 65 72 70 5d 7d 20 7b 0a 20 20 20 20 20 20 20  terp]} {.       
5ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ad0: 20 73 65 74 20 66 6f 75 6e 64 74 63 6c 20 31 0a   set foundtcl 1.
5ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5af0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
5b00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5b10: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
5b20: 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 66 6f          if {!$fo
5b30: 75 6e 64 74 63 6c 20 26 26 20 21 5b 73 74 72 69  undtcl && ![stri
5b40: 6e 67 20 6d 61 74 63 68 20 2a 2d 6c 70 74 68 72  ng match *-lpthr
5b50: 65 61 64 2a 20 24 6c 69 62 73 5d 7d 20 7b 0a 20  ead* $libs]} {. 
5b60: 20 20 20 20 20 20 20 20 20 20 20 23 20 4f 6e 20             # On 
5b70: 73 6f 6d 65 20 73 79 73 74 65 6d 73 2c 20 54 43  some systems, TC
5b80: 4c 5f 4c 49 42 5f 53 50 45 43 20 61 70 70 65 61  L_LIB_SPEC appea
5b90: 72 73 20 74 6f 20 62 65 20 6d 69 73 73 69 6e 67  rs to be missing
5ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 22  .            # "
5bb0: 2d 6c 70 74 68 72 65 61 64 22 2e 20 20 54 72 79  -lpthread".  Try
5bc0: 20 61 64 64 69 6e 67 20 69 74 2e 0a 20 20 20 20   adding it..    
5bd0: 20 20 20 20 20 20 20 20 6d 73 67 2d 72 65 73 75          msg-resu
5be0: 6c 74 20 22 41 64 64 69 6e 67 20 5c 22 2d 6c 70  lt "Adding \"-lp
5bf0: 74 68 72 65 61 64 5c 22 20 61 6e 64 20 72 65 74  thread\" and ret
5c00: 72 79 69 6e 67 20 66 6f 72 20 54 63 6c 2e 2e 2e  rying for Tcl...
5c10: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ".            se
5c20: 74 20 6c 69 62 73 20 22 24 6c 69 62 73 20 2d 6c  t libs "$libs -l
5c30: 70 74 68 72 65 61 64 22 0a 20 20 20 20 20 20 20  pthread".       
5c40: 20 20 20 20 20 63 63 2d 77 69 74 68 20 5b 6c 69       cc-with [li
5c50: 73 74 20 2d 63 66 6c 61 67 73 20 24 63 66 6c 61  st -cflags $cfla
5c60: 67 73 20 2d 6c 69 62 73 20 24 6c 69 62 73 5d 20  gs -libs $libs] 
5c70: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
5c80: 20 20 69 66 20 7b 24 74 63 6c 73 74 75 62 73 7d    if {$tclstubs}
5c90: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
5ca0: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 63 2d 63         if {[cc-c
5cb0: 68 65 63 6b 2d 66 75 6e 63 74 69 6f 6e 73 20 54  heck-functions T
5cc0: 63 6c 5f 49 6e 69 74 53 74 75 62 73 5d 7d 20 7b  cl_InitStubs]} {
5cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5ce0: 20 20 20 20 20 20 20 20 20 73 65 74 20 66 6f 75           set fou
5cf0: 6e 64 74 63 6c 20 31 0a 20 20 20 20 20 20 20 20  ndtcl 1.        
5d00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
5d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20                } 
5d20: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20  else {.         
5d30: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
5d40: 63 63 2d 63 68 65 63 6b 2d 66 75 6e 63 74 69 6f  cc-check-functio
5d50: 6e 73 20 54 63 6c 5f 43 72 65 61 74 65 49 6e 74  ns Tcl_CreateInt
5d60: 65 72 70 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20  erp]} {.        
5d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d80: 73 65 74 20 66 6f 75 6e 64 74 63 6c 20 31 0a 20  set foundtcl 1. 
5d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5da0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
5db0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
5dc0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
5dd0: 20 20 20 20 20 20 20 69 66 20 7b 21 24 66 6f 75         if {!$fou
5de0: 6e 64 74 63 6c 7d 20 7b 0a 20 20 20 20 20 20 20  ndtcl} {.       
5df0: 20 20 20 20 20 69 66 20 7b 24 74 63 6c 73 74 75       if {$tclstu
5e00: 62 73 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  bs} {.          
5e10: 20 20 20 20 20 20 75 73 65 72 2d 65 72 72 6f 72        user-error
5e20: 20 22 43 61 6e 6e 6f 74 20 66 69 6e 64 20 61 20   "Cannot find a 
5e30: 75 73 61 62 6c 65 20 54 63 6c 20 73 74 75 62 73  usable Tcl stubs
5e40: 20 6c 69 62 72 61 72 79 20 24 6d 73 67 22 0a 20   library $msg". 
5e50: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
5e60: 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  e {.            
5e70: 20 20 20 20 75 73 65 72 2d 65 72 72 6f 72 20 22      user-error "
5e80: 43 61 6e 6e 6f 74 20 66 69 6e 64 20 61 20 75 73  Cannot find a us
5e90: 61 62 6c 65 20 54 63 6c 20 6c 69 62 72 61 72 79  able Tcl library
5ea0: 20 24 6d 73 67 22 0a 20 20 20 20 20 20 20 20 20   $msg".         
5eb0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
5ec0: 20 20 20 7d 0a 20 20 20 20 73 65 74 20 76 65 72     }.    set ver
5ed0: 73 69 6f 6e 20 24 74 63 6c 63 6f 6e 66 69 67 28  sion $tclconfig(
5ee0: 54 43 4c 5f 56 45 52 53 49 4f 4e 29 24 74 63 6c  TCL_VERSION)$tcl
5ef0: 63 6f 6e 66 69 67 28 54 43 4c 5f 50 41 54 43 48  config(TCL_PATCH
5f00: 5f 4c 45 56 45 4c 29 0a 20 20 20 20 6d 73 67 2d  _LEVEL).    msg-
5f10: 72 65 73 75 6c 74 20 22 46 6f 75 6e 64 20 54 63  result "Found Tc
5f20: 6c 20 24 76 65 72 73 69 6f 6e 20 61 74 20 24 74  l $version at $t
5f30: 63 6c 63 6f 6e 66 69 67 28 54 43 4c 5f 50 52 45  clconfig(TCL_PRE
5f40: 46 49 58 29 22 0a 20 20 20 20 69 66 20 7b 21 24  FIX)".    if {!$
5f50: 74 63 6c 70 72 69 76 61 74 65 73 74 75 62 73 7d  tclprivatestubs}
5f60: 20 7b 0a 20 20 20 20 20 20 20 20 64 65 66 69 6e   {.        defin
5f70: 65 2d 61 70 70 65 6e 64 20 4c 49 42 53 20 24 6c  e-append LIBS $l
5f80: 69 62 73 0a 20 20 20 20 7d 0a 20 20 20 20 64 65  ibs.    }.    de
5f90: 66 69 6e 65 2d 61 70 70 65 6e 64 20 45 58 54 52  fine-append EXTR
5fa0: 41 5f 43 46 4c 41 47 53 20 24 63 66 6c 61 67 73  A_CFLAGS $cflags
5fb0: 0a 20 20 20 20 64 65 66 69 6e 65 2d 61 70 70 65  .    define-appe
5fc0: 6e 64 20 43 46 4c 41 47 53 20 24 63 66 6c 61 67  nd CFLAGS $cflag
5fd0: 73 0a 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20  s.    if {[info 
5fe0: 65 78 69 73 74 73 20 7a 6c 69 62 70 61 74 68 5d  exists zlibpath]
5ff0: 20 26 26 20 24 7a 6c 69 62 70 61 74 68 20 65 71   && $zlibpath eq
6000: 20 22 74 72 65 65 22 7d 20 7b 0a 20 20 20 20 20   "tree"} {.     
6010: 20 23 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a   #.      # NOTE:
6020: 20 57 68 65 6e 20 75 73 69 6e 67 20 7a 6c 69 62   When using zlib
6030: 20 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74   in the source t
6040: 72 65 65 2c 20 70 72 65 76 65 6e 74 20 54 63 6c  ree, prevent Tcl
6050: 20 66 72 6f 6d 0a 20 20 20 20 20 20 23 20 20 20   from.      #   
6060: 20 20 20 20 70 75 6c 6c 69 6e 67 20 69 6e 20 74      pulling in t
6070: 68 65 20 73 79 73 74 65 6d 20 6f 6e 65 2e 0a 20  he system one.. 
6080: 20 20 20 20 20 23 0a 20 20 20 20 20 20 73 65 74       #.      set
6090: 20 74 63 6c 63 6f 6e 66 69 67 28 54 43 4c 5f 4c   tclconfig(TCL_L
60a0: 44 5f 46 4c 41 47 53 29 20 5b 73 74 72 69 6e 67  D_FLAGS) [string
60b0: 20 6d 61 70 20 5b 6c 69 73 74 20 2d 6c 7a 20 22   map [list -lz "
60c0: 22 5d 20 5c 0a 20 20 20 20 20 20 20 20 20 20 24  "] \.          $
60d0: 74 63 6c 63 6f 6e 66 69 67 28 54 43 4c 5f 4c 44  tclconfig(TCL_LD
60e0: 5f 46 4c 41 47 53 29 5d 0a 20 20 20 20 7d 0a 20  _FLAGS)].    }. 
60f0: 20 20 20 23 0a 20 20 20 20 23 20 4e 4f 54 45 3a     #.    # NOTE:
6100: 20 52 65 6d 6f 76 65 20 22 2d 6c 64 6c 22 20 66   Remove "-ldl" f
6110: 72 6f 6d 20 74 68 65 20 54 43 4c 5f 4c 44 5f 46  rom the TCL_LD_F
6120: 4c 41 47 53 20 62 65 63 61 75 73 65 20 69 74 20  LAGS because it 
6130: 77 69 6c 6c 20 62 65 0a 20 20 20 20 23 20 20 20  will be.    #   
6140: 20 20 20 20 62 65 20 63 68 65 63 6b 65 64 20 66      be checked f
6150: 6f 72 20 6e 65 61 72 20 74 68 65 20 62 6f 74 74  or near the bott
6160: 6f 6d 20 6f 66 20 74 68 69 73 20 66 69 6c 65 2e  om of this file.
6170: 0a 20 20 20 20 23 0a 20 20 20 20 73 65 74 20 74  .    #.    set t
6180: 63 6c 63 6f 6e 66 69 67 28 54 43 4c 5f 4c 44 5f  clconfig(TCL_LD_
6190: 46 4c 41 47 53 29 20 5b 73 74 72 69 6e 67 20 6d  FLAGS) [string m
61a0: 61 70 20 5b 6c 69 73 74 20 2d 6c 64 6c 20 22 22  ap [list -ldl ""
61b0: 5d 20 5c 0a 20 20 20 20 20 20 20 20 24 74 63 6c  ] \.        $tcl
61c0: 63 6f 6e 66 69 67 28 54 43 4c 5f 4c 44 5f 46 4c  config(TCL_LD_FL
61d0: 41 47 53 29 5d 0a 20 20 20 20 64 65 66 69 6e 65  AGS)].    define
61e0: 2d 61 70 70 65 6e 64 20 45 58 54 52 41 5f 4c 44  -append EXTRA_LD
61f0: 46 4c 41 47 53 20 24 74 63 6c 63 6f 6e 66 69 67  FLAGS $tclconfig
6200: 28 54 43 4c 5f 4c 44 5f 46 4c 41 47 53 29 0a 20  (TCL_LD_FLAGS). 
6210: 20 20 20 64 65 66 69 6e 65 20 46 4f 53 53 49 4c     define FOSSIL
6220: 5f 45 4e 41 42 4c 45 5f 54 43 4c 0a 7d 0a 0a 23  _ENABLE_TCL.}..#
6230: 20 45 6d 73 63 72 69 70 74 65 6e 20 69 73 20 61   Emscripten is a
6240: 20 70 75 72 65 6c 79 20 6f 70 74 69 6f 6e 61 6c   purely optional
6250: 20 63 6f 6d 70 6f 6e 65 6e 74 20 75 73 65 64 20   component used 
6260: 6f 6e 6c 79 20 66 6f 72 20 64 6f 69 6e 67 0a 23  only for doing.#
6270: 20 69 6e 2d 74 72 65 65 20 62 75 69 6c 64 73 20   in-tree builds 
6280: 6f 66 20 57 41 53 4d 20 73 74 75 66 66 2c 20 61  of WASM stuff, a
6290: 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 57 41 53  s opposed to WAS
62a0: 4d 20 62 69 6e 61 72 69 65 73 20 77 65 20 69 6d  M binaries we im
62b0: 70 6f 72 74 0a 23 20 66 72 6f 6d 20 6f 74 68 65  port.# from othe
62c0: 72 20 70 6c 61 63 65 73 2e 20 54 68 69 73 20 69  r places. This i
62d0: 73 20 6f 6e 6c 79 20 73 65 74 20 75 70 20 66 6f  s only set up fo
62e0: 72 20 55 6e 69 78 2d 73 74 79 6c 65 20 4f 53 65  r Unix-style OSe
62f0: 73 20 61 6e 64 20 69 73 0a 23 20 75 6e 74 65 73  s and is.# untes
6300: 74 65 64 20 61 6e 79 77 68 65 72 65 20 62 75 74  ted anywhere but
6310: 20 4c 69 6e 75 78 2e 0a 73 65 74 20 65 6d 73 64   Linux..set emsd
6320: 6b 48 6f 6d 65 20 5b 6f 70 74 2d 76 61 6c 20 77  kHome [opt-val w
6330: 69 74 68 2d 65 6d 73 64 6b 5d 0a 64 65 66 69 6e  ith-emsdk].defin
6340: 65 20 45 4d 53 44 4b 5f 48 4f 4d 45 20 22 22 0a  e EMSDK_HOME "".
6350: 64 65 66 69 6e 65 20 45 4d 53 44 4b 5f 45 4e 56  define EMSDK_ENV
6360: 20 22 22 0a 64 65 66 69 6e 65 20 45 4d 43 43 5f   "".define EMCC_
6370: 4f 50 54 20 22 2d 4f 7a 22 0a 69 66 20 7b 24 65  OPT "-Oz".if {$e
6380: 6d 73 64 6b 48 6f 6d 65 20 65 71 20 22 22 20 26  msdkHome eq "" &
6390: 26 20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  & [info exists :
63a0: 3a 65 6e 76 28 45 4d 53 44 4b 29 5d 7d 20 7b 0a  :env(EMSDK)]} {.
63b0: 20 20 23 20 46 61 6c 6c 20 62 61 63 6b 20 74 6f    # Fall back to
63c0: 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 65 6e   checking the en
63d0: 76 69 72 6f 6e 6d 65 6e 74 2e 20 24 45 4d 53 44  vironment. $EMSD
63e0: 4b 20 67 65 74 73 20 73 65 74 0a 20 20 23 20 62  K gets set.  # b
63f0: 79 20 73 6f 75 72 63 69 6e 67 20 65 6d 73 64 6b  y sourcing emsdk
6400: 5f 65 6e 76 2e 73 68 2e 0a 20 20 73 65 74 20 65  _env.sh..  set e
6410: 6d 73 64 6b 48 6f 6d 65 20 24 3a 3a 65 6e 76 28  msdkHome $::env(
6420: 45 4d 53 44 4b 29 0a 7d 0a 69 66 20 7b 24 65 6d  EMSDK).}.if {$em
6430: 73 64 6b 48 6f 6d 65 20 6e 65 20 22 22 7d 20 7b  sdkHome ne ""} {
6440: 0a 20 20 64 65 66 69 6e 65 20 45 4d 53 44 4b 5f  .  define EMSDK_
6450: 48 4f 4d 45 20 24 65 6d 73 64 6b 48 6f 6d 65 0a  HOME $emsdkHome.
6460: 20 20 73 65 74 20 65 6d 73 64 6b 45 6e 76 20 22    set emsdkEnv "
6470: 24 65 6d 73 64 6b 48 6f 6d 65 2f 65 6d 73 64 6b  $emsdkHome/emsdk
6480: 5f 65 6e 76 2e 73 68 22 0a 20 20 69 66 20 7b 5b  _env.sh".  if {[
6490: 66 69 6c 65 20 65 78 69 73 74 73 20 24 65 6d 73  file exists $ems
64a0: 64 6b 45 6e 76 5d 7d 20 7b 0a 20 20 20 20 70 75  dkEnv]} {.    pu
64b0: 74 73 20 22 55 73 69 6e 67 20 45 6d 73 63 72 69  ts "Using Emscri
64c0: 70 74 65 6e 20 53 44 4b 20 65 6e 76 69 72 6f 6e  pten SDK environ
64d0: 6d 65 6e 74 20 66 72 6f 6d 20 24 65 6d 73 64 6b  ment from $emsdk
64e0: 45 6e 76 2e 22 0a 20 20 20 20 64 65 66 69 6e 65  Env.".    define
64f0: 20 45 4d 53 44 4b 5f 45 4e 56 20 24 65 6d 73 64   EMSDK_ENV $emsd
6500: 6b 45 6e 76 0a 20 20 20 20 69 66 20 7b 5b 69 6e  kEnv.    if {[in
6510: 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28  fo exists ::env(
6520: 45 4d 43 43 5f 4f 50 54 29 5d 7d 20 7b 0a 20 20  EMCC_OPT)]} {.  
6530: 20 20 20 20 64 65 66 69 6e 65 20 45 4d 43 43 5f      define EMCC_
6540: 4f 50 54 20 24 3a 3a 65 6e 76 28 45 4d 43 43 5f  OPT $::env(EMCC_
6550: 4f 50 54 29 0a 20 20 20 20 7d 0a 20 20 7d 20 65  OPT).    }.  } e
6560: 6c 73 65 20 7b 0a 20 20 20 20 70 75 74 73 20 22  lse {.    puts "
6570: 65 6d 73 64 6b 5f 65 6e 76 2e 73 68 20 6e 6f 74  emsdk_env.sh not
6580: 20 66 6f 75 6e 64 2e 20 41 73 73 75 6d 69 6e 67   found. Assuming
6590: 20 65 6d 63 63 20 69 73 20 69 6e 20 74 68 65 20   emcc is in the 
65a0: 50 41 54 48 2e 22 0a 20 20 7d 0a 7d 0a 0a 23 20  PATH.".  }.}..# 
65b0: 4e 65 74 77 6f 72 6b 20 66 75 6e 63 74 69 6f 6e  Network function
65c0: 73 20 72 65 71 75 69 72 65 20 6c 69 62 72 61 72  s require librar
65d0: 69 65 73 20 6f 6e 20 73 6f 6d 65 20 73 79 73 74  ies on some syst
65e0: 65 6d 73 0a 63 63 2d 63 68 65 63 6b 2d 66 75 6e  ems.cc-check-fun
65f0: 63 74 69 6f 6e 2d 69 6e 2d 6c 69 62 20 67 65 74  ction-in-lib get
6600: 68 6f 73 74 62 79 6e 61 6d 65 20 6e 73 6c 0a 69  hostbyname nsl.i
6610: 66 20 7b 21 5b 63 63 2d 63 68 65 63 6b 2d 66 75  f {![cc-check-fu
6620: 6e 63 74 69 6f 6e 2d 69 6e 2d 6c 69 62 20 73 6f  nction-in-lib so
6630: 63 6b 65 74 20 7b 73 6f 63 6b 65 74 20 6e 65 74  cket {socket net
6640: 77 6f 72 6b 7d 5d 7d 20 7b 0a 20 20 20 20 23 20  work}]} {.    # 
6650: 4c 61 73 74 20 72 65 73 6f 72 74 2c 20 6d 61 79  Last resort, may
6660: 20 62 65 20 57 69 6e 64 6f 77 73 0a 20 20 20 20   be Windows.    
6670: 69 66 20 7b 5b 69 73 5f 6d 69 6e 67 77 5d 7d 20  if {[is_mingw]} 
6680: 7b 0a 20 20 20 20 20 20 20 20 64 65 66 69 6e 65  {.        define
6690: 2d 61 70 70 65 6e 64 20 4c 49 42 53 20 2d 6c 77  -append LIBS -lw
66a0: 73 6f 63 6b 33 32 0a 20 20 20 20 7d 0a 7d 0a 0a  sock32.    }.}..
66b0: 23 20 54 68 65 20 53 4d 54 50 20 6d 6f 64 75 6c  # The SMTP modul
66c0: 65 20 72 65 71 75 69 72 65 73 20 73 70 65 63 69  e requires speci
66d0: 61 6c 20 6c 69 62 72 61 72 69 65 73 20 61 6e 64  al libraries and
66e0: 20 68 65 61 64 65 72 73 20 66 6f 72 20 4d 58 20   headers for MX 
66f0: 44 4e 53 0a 23 20 72 65 63 6f 72 64 20 6c 6f 6f  DNS.# record loo
6700: 6b 75 70 73 20 61 6e 64 20 73 75 63 68 2e 0a 63  kups and such..c
6710: 63 2d 63 68 65 63 6b 2d 69 6e 63 6c 75 64 65 73  c-check-includes
6720: 20 61 72 70 61 2f 6e 61 6d 65 73 65 72 2e 68 0a   arpa/nameser.h.
6730: 63 63 2d 69 6e 63 6c 75 64 65 2d 6e 65 65 64 73  cc-include-needs
6740: 20 62 69 6e 64 2f 72 65 73 6f 6c 76 2e 68 20 6e   bind/resolv.h n
6750: 65 74 69 6e 65 74 2f 69 6e 2e 68 0a 63 63 2d 63  etinet/in.h.cc-c
6760: 68 65 63 6b 2d 69 6e 63 6c 75 64 65 73 20 62 69  heck-includes bi
6770: 6e 64 2f 72 65 73 6f 6c 76 2e 68 0a 63 63 2d 63  nd/resolv.h.cc-c
6780: 68 65 63 6b 2d 69 6e 63 6c 75 64 65 73 20 72 65  heck-includes re
6790: 73 6f 6c 76 2e 68 0a 69 66 20 7b 20 20 20 20 21  solv.h.if {    !
67a0: 28 28 5b 63 63 2d 63 68 65 63 6b 2d 66 75 6e 63  (([cc-check-func
67b0: 74 69 6f 6e 2d 69 6e 2d 6c 69 62 20 64 6e 5f 65  tion-in-lib dn_e
67c0: 78 70 61 6e 64 20 72 65 73 6f 6c 76 5d 20 7c 7c  xpand resolv] ||
67d0: 0a 20 20 20 20 20 20 20 20 20 20 20 5b 63 63 2d  .           [cc-
67e0: 63 68 65 63 6b 2d 66 75 6e 63 74 69 6f 6e 2d 69  check-function-i
67f0: 6e 2d 6c 69 62 20 20 20 6e 73 5f 6e 61 6d 65 5f  n-lib   ns_name_
6800: 75 6e 63 6f 6d 70 72 65 73 73 20 7b 62 69 6e 64  uncompress {bind
6810: 20 72 65 73 6f 6c 76 7d 5d 20 7c 7c 0a 20 20 20   resolv}] ||.   
6820: 20 20 20 20 20 20 20 20 5b 63 63 2d 63 68 65 63          [cc-chec
6830: 6b 2d 66 75 6e 63 74 69 6f 6e 2d 69 6e 2d 6c 69  k-function-in-li
6840: 62 20 5f 5f 6e 73 5f 6e 61 6d 65 5f 75 6e 63 6f  b __ns_name_unco
6850: 6d 70 72 65 73 73 20 7b 62 69 6e 64 20 72 65 73  mpress {bind res
6860: 6f 6c 76 7d 5d 29 20 26 26 0a 20 20 20 20 20 20  olv}]) &&.      
6870: 20 20 20 20 28 5b 63 63 2d 63 68 65 63 6b 2d 66      ([cc-check-f
6880: 75 6e 63 74 69 6f 6e 2d 69 6e 2d 6c 69 62 20 20  unction-in-lib  
6890: 20 6e 73 5f 70 61 72 73 65 72 72 20 7b 62 69 6e   ns_parserr {bin
68a0: 64 20 72 65 73 6f 6c 76 7d 5d 20 7c 7c 0a 20 20  d resolv}] ||.  
68b0: 20 20 20 20 20 20 20 20 20 5b 63 63 2d 63 68 65           [cc-che
68c0: 63 6b 2d 66 75 6e 63 74 69 6f 6e 2d 69 6e 2d 6c  ck-function-in-l
68d0: 69 62 20 5f 5f 6e 73 5f 70 61 72 73 65 72 72 20  ib __ns_parserr 
68e0: 7b 62 69 6e 64 20 72 65 73 6f 6c 76 7d 5d 29 20  {bind resolv}]) 
68f0: 26 26 0a 20 20 20 20 20 20 20 20 20 20 28 5b 63  &&.          ([c
6900: 63 2d 63 68 65 63 6b 2d 66 75 6e 63 74 69 6f 6e  c-check-function
6910: 2d 69 6e 2d 6c 69 62 20 20 20 72 65 73 5f 71 75  -in-lib   res_qu
6920: 65 72 79 20 7b 62 69 6e 64 20 72 65 73 6f 6c 76  ery {bind resolv
6930: 7d 5d 20 7c 7c 0a 20 20 20 20 20 20 20 20 20 20  }] ||.          
6940: 20 5b 63 63 2d 63 68 65 63 6b 2d 66 75 6e 63 74   [cc-check-funct
6950: 69 6f 6e 2d 69 6e 2d 6c 69 62 20 5f 5f 72 65 73  ion-in-lib __res
6960: 5f 71 75 65 72 79 20 7b 62 69 6e 64 20 72 65 73  _query {bind res
6970: 6f 6c 76 7d 5d 29 29 7d 20 7b 0a 20 20 20 20 6d  olv}]))} {.    m
6980: 73 67 2d 72 65 73 75 6c 74 20 22 57 41 52 4e 49  sg-result "WARNI
6990: 4e 47 3a 20 53 4d 54 50 20 66 65 61 74 75 72 65  NG: SMTP feature
69a0: 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 61 62 6c   will not be abl
69b0: 65 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 6c 6f 63  e to look up loc
69c0: 61 6c 20 4d 58 2e 22 0a 7d 0a 63 63 2d 63 68 65  al MX.".}.cc-che
69d0: 63 6b 2d 66 75 6e 63 74 69 6f 6e 2d 69 6e 2d 6c  ck-function-in-l
69e0: 69 62 20 72 65 73 5f 39 5f 6e 73 5f 69 6e 69 74  ib res_9_ns_init
69f0: 70 61 72 73 65 20 72 65 73 6f 6c 76 0a 0a 23 20  parse resolv..# 
6a00: 4f 74 68 65 72 20 6e 6f 6e 73 74 61 6e 64 61 72  Other nonstandar
6a10: 64 20 66 75 6e 63 74 69 6f 6e 20 63 68 65 63 6b  d function check
6a20: 73 0a 63 63 2d 63 68 65 63 6b 2d 66 75 6e 63 74  s.cc-check-funct
6a30: 69 6f 6e 73 20 75 74 69 6d 65 0a 63 63 2d 63 68  ions utime.cc-ch
6a40: 65 63 6b 2d 66 75 6e 63 74 69 6f 6e 73 20 75 73  eck-functions us
6a50: 6c 65 65 70 0a 63 63 2d 63 68 65 63 6b 2d 66 75  leep.cc-check-fu
6a60: 6e 63 74 69 6f 6e 73 20 73 74 72 63 68 72 6e 75  nctions strchrnu
6a70: 6c 0a 63 63 2d 63 68 65 63 6b 2d 66 75 6e 63 74  l.cc-check-funct
6a80: 69 6f 6e 73 20 70 6c 65 64 67 65 0a 63 63 2d 63  ions pledge.cc-c
6a90: 68 65 63 6b 2d 66 75 6e 63 74 69 6f 6e 73 20 62  heck-functions b
6aa0: 61 63 6b 74 72 61 63 65 0a 0a 23 20 54 65 72 6d  acktrace..# Term
6ab0: 75 78 20 6f 6e 20 41 6e 64 72 6f 69 64 20 61 64  ux on Android ad
6ac0: 64 73 20 22 67 65 74 70 61 73 73 28 63 68 61 72  ds "getpass(char
6ad0: 20 2a 29 22 20 74 6f 20 75 6e 69 73 74 64 2e 68   *)" to unistd.h
6ae0: 2c 20 73 6f 20 63 68 65 63 6b 20 74 68 69 73 20  , so check this 
6af0: 73 6f 20 77 65 0a 23 20 67 75 61 72 64 20 61 67  so we.# guard ag
6b00: 61 69 6e 73 74 20 69 6e 63 6c 75 64 69 6e 67 20  ainst including 
6b10: 69 74 20 61 67 61 69 6e 3b 20 75 73 65 20 63 63  it again; use cc
6b20: 74 65 73 74 20 61 73 20 63 63 2d 63 68 65 63 6b  test as cc-check
6b30: 2d 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 20 0a  -functions and .
6b40: 23 20 63 63 74 65 73 74 5f 66 75 6e 63 74 69 6f  # cctest_functio
6b50: 6e 20 63 68 65 63 6b 20 66 6f 72 20 22 67 65 74  n check for "get
6b60: 70 61 73 73 28 29 22 20 77 69 74 68 20 6e 6f 20  pass()" with no 
6b70: 61 72 67 73 20 61 6e 64 20 66 61 69 6c 0a 69 66  args and fail.if
6b80: 20 7b 5b 63 63 74 65 73 74 20 2d 6c 69 6e 6b 20   {[cctest -link 
6b90: 31 20 2d 69 6e 63 6c 75 64 65 73 20 7b 75 6e 69  1 -includes {uni
6ba0: 73 74 64 2e 68 7d 20 2d 63 6f 64 65 20 22 67 65  std.h} -code "ge
6bb0: 74 70 61 73 73 28 30 29 3b 22 5d 7d 20 7b 0a 20  tpass(0);"]} {. 
6bc0: 20 20 20 64 65 66 69 6e 65 20 46 4f 53 53 49 4c     define FOSSIL
6bd0: 5f 48 41 56 45 5f 47 45 54 50 41 53 53 20 31 0a  _HAVE_GETPASS 1.
6be0: 20 20 20 20 6d 73 67 2d 72 65 73 75 6c 74 20 22      msg-result "
6bf0: 46 6f 75 6e 64 20 67 65 74 70 61 73 73 28 29 20  Found getpass() 
6c00: 77 69 74 68 20 75 6e 69 73 74 64 2e 68 22 0a 7d  with unistd.h".}
6c10: 0a 0a 23 20 43 68 65 63 6b 20 66 6f 72 20 67 65  ..# Check for ge
6c20: 74 6c 6f 61 64 61 76 67 28 29 2c 20 61 6e 64 20  tloadavg(), and 
6c30: 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 65 78  if it doesn't ex
6c40: 69 73 74 2c 20 64 65 66 69 6e 65 20 46 4f 53 53  ist, define FOSS
6c50: 49 4c 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 41 56 45  IL_OMIT_LOAD_AVE
6c60: 52 41 47 45 0a 69 66 20 7b 21 5b 63 63 2d 63 68  RAGE.if {![cc-ch
6c70: 65 63 6b 2d 66 75 6e 63 74 69 6f 6e 73 20 67 65  eck-functions ge
6c80: 74 6c 6f 61 64 61 76 67 5d 20 7c 7c 0a 20 20 20  tloadavg] ||.   
6c90: 20 21 5b 63 63 74 65 73 74 20 2d 6c 69 6e 6b 20   ![cctest -link 
6ca0: 31 20 2d 69 6e 63 6c 75 64 65 73 20 7b 75 6e 69  1 -includes {uni
6cb0: 73 74 64 2e 68 7d 20 2d 63 6f 64 65 20 22 64 6f  std.h} -code "do
6cc0: 75 62 6c 65 20 61 5c 5b 33 5c 5d 3b 20 67 65 74  uble a\[3\]; get
6cd0: 6c 6f 61 64 61 76 67 28 61 2c 33 29 3b 22 5d 7d  loadavg(a,3);"]}
6ce0: 20 7b 0a 20 20 64 65 66 69 6e 65 20 46 4f 53 53   {.  define FOSS
6cf0: 49 4c 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 41 56 45  IL_OMIT_LOAD_AVE
6d00: 52 41 47 45 20 31 0a 20 20 6d 73 67 2d 72 65 73  RAGE 1.  msg-res
6d10: 75 6c 74 20 22 4c 6f 61 64 20 61 76 65 72 61 67  ult "Load averag
6d20: 65 20 73 75 70 70 6f 72 74 20 75 6e 61 76 61 69  e support unavai
6d30: 6c 61 62 6c 65 22 0a 7d 0a 0a 23 20 43 68 65 63  lable".}..# Chec
6d40: 6b 20 66 6f 72 20 67 65 74 70 61 73 73 70 68 72  k for getpassphr
6d50: 61 73 65 28 29 20 66 6f 72 20 53 6f 6c 61 72 69  ase() for Solari
6d60: 73 20 31 30 20 77 68 65 72 65 20 67 65 74 70 61  s 10 where getpa
6d70: 73 73 28 29 20 74 72 75 6e 63 61 74 65 73 20 74  ss() truncates t
6d80: 6f 20 31 30 20 63 68 61 72 73 0a 69 66 20 7b 21  o 10 chars.if {!
6d90: 5b 63 63 2d 63 68 65 63 6b 2d 66 75 6e 63 74 69  [cc-check-functi
6da0: 6f 6e 73 20 67 65 74 70 61 73 73 70 68 72 61 73  ons getpassphras
6db0: 65 5d 7d 20 7b 0a 20 20 20 20 23 20 48 61 69 6b  e]} {.    # Haik
6dc0: 75 20 6e 65 65 64 73 20 74 68 69 73 0a 20 20 20  u needs this.   
6dd0: 20 63 63 2d 63 68 65 63 6b 2d 66 75 6e 63 74 69   cc-check-functi
6de0: 6f 6e 2d 69 6e 2d 6c 69 62 20 67 65 74 70 61 73  on-in-lib getpas
6df0: 73 20 62 73 64 0a 7d 0a 63 63 2d 63 68 65 63 6b  s bsd.}.cc-check
6e00: 2d 66 75 6e 63 74 69 6f 6e 2d 69 6e 2d 6c 69 62  -function-in-lib
6e10: 20 73 69 6e 20 6d 0a 0a 23 20 43 68 65 63 6b 20   sin m..# Check 
6e20: 66 6f 72 20 74 68 65 20 46 75 73 65 46 53 20 6c  for the FuseFS l
6e30: 69 62 72 61 72 79 0a 69 66 20 7b 5b 6f 70 74 2d  ibrary.if {[opt-
6e40: 62 6f 6f 6c 20 66 75 73 65 66 73 5d 7d 20 7b 0a  bool fusefs]} {.
6e50: 20 20 69 66 20 7b 5b 6f 70 74 2d 62 6f 6f 6c 20    if {[opt-bool 
6e60: 73 74 61 74 69 63 5d 7d 20 7b 0a 20 20 20 20 20  static]} {.     
6e70: 6d 73 67 2d 72 65 73 75 6c 74 20 22 46 75 73 65  msg-result "Fuse
6e80: 46 53 20 73 75 70 70 6f 72 74 20 64 69 73 61 62  FS support disab
6e90: 6c 65 64 20 64 75 65 20 74 6f 20 2d 73 74 61 74  led due to -stat
6ea0: 69 63 22 0a 20 20 7d 20 65 6c 73 65 69 66 20 7b  ic".  } elseif {
6eb0: 5b 63 63 2d 63 68 65 63 6b 2d 66 75 6e 63 74 69  [cc-check-functi
6ec0: 6f 6e 2d 69 6e 2d 6c 69 62 20 66 75 73 65 5f 6d  on-in-lib fuse_m
6ed0: 6f 75 6e 74 20 66 75 73 65 5d 7d 20 7b 0a 20 20  ount fuse]} {.  
6ee0: 20 20 20 64 65 66 69 6e 65 2d 61 70 70 65 6e 64     define-append
6ef0: 20 45 58 54 52 41 5f 43 46 4c 41 47 53 20 2d 44   EXTRA_CFLAGS -D
6f00: 46 4f 53 53 49 4c 5f 48 41 56 45 5f 46 55 53 45  FOSSIL_HAVE_FUSE
6f10: 46 53 0a 20 20 20 20 20 64 65 66 69 6e 65 20 46  FS.     define F
6f20: 4f 53 53 49 4c 5f 48 41 56 45 5f 46 55 53 45 46  OSSIL_HAVE_FUSEF
6f30: 53 20 31 0a 20 20 20 20 20 6d 73 67 2d 72 65 73  S 1.     msg-res
6f40: 75 6c 74 20 22 46 75 73 65 46 53 20 73 75 70 70  ult "FuseFS supp
6f50: 6f 72 74 20 65 6e 61 62 6c 65 64 22 0a 20 20 7d  ort enabled".  }
6f60: 0a 7d 0a 0a 23 23 23 23 23 23 23 23 23 23 23 23  .}..############
6f70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6f80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6fa0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 20 43  ############.# C
6fb0: 68 65 63 6b 73 20 74 68 65 20 63 6f 6d 70 69 6c  hecks the compil
6fc0: 65 72 20 66 6f 72 20 63 6f 6d 70 69 6c 65 5f 63  er for compile_c
6fd0: 6f 6d 6d 61 6e 64 73 2e 6a 73 6f 6e 20 73 75 70  ommands.json sup
6fe0: 70 6f 72 74 2e 0a 23 0a 23 20 52 65 74 75 72 6e  port..#.# Return
6ff0: 73 20 31 20 69 66 20 73 75 70 70 6f 72 74 65 64  s 1 if supported
7000: 2c 20 65 6c 73 65 20 30 2e 20 44 65 66 69 6e 65  , else 0. Define
7010: 73 20 4d 41 4b 45 5f 43 4f 4d 50 49 4c 41 54 49  s MAKE_COMPILATI
7020: 4f 4e 5f 44 42 20 74 6f 20 22 79 65 73 22 0a 23  ON_DB to "yes".#
7030: 20 69 66 20 73 75 70 70 6f 72 74 65 64 2c 20 22   if supported, "
7040: 6e 6f 22 20 69 66 20 6e 6f 74 2e 0a 70 72 6f 63  no" if not..proc
7050: 20 63 68 65 63 6b 2d 63 6f 6d 70 69 6c 65 2d 63   check-compile-c
7060: 6f 6d 6d 61 6e 64 73 20 7b 7d 20 7b 0a 20 20 20  ommands {} {.   
7070: 20 6d 73 67 2d 63 68 65 63 6b 69 6e 67 20 22 63   msg-checking "c
7080: 6f 6d 70 69 6c 65 5f 63 6f 6d 6d 61 6e 64 73 2e  ompile_commands.
7090: 6a 73 6f 6e 20 73 75 70 70 6f 72 74 2e 2e 2e 20  json support... 
70a0: 22 0a 20 20 20 20 69 66 20 7b 5b 63 63 74 65 73  ".    if {[cctes
70b0: 74 20 2d 6c 61 6e 67 20 63 20 2d 63 66 6c 61 67  t -lang c -cflag
70c0: 73 20 7b 2f 64 65 76 2f 6e 75 6c 6c 20 2d 4d 4a  s {/dev/null -MJ
70d0: 7d 20 2d 73 6f 75 72 63 65 20 7b 7d 5d 7d 20 7b  } -source {}]} {
70e0: 0a 20 20 20 20 20 20 20 20 23 20 54 68 69 73 20  .        # This 
70f0: 74 65 73 74 20 72 65 70 6f 72 74 65 64 6c 79 20  test reportedly 
7100: 69 6e 63 6f 72 72 65 63 74 6c 79 20 73 75 63 63  incorrectly succ
7110: 65 65 64 73 20 6f 6e 20 6f 6e 65 20 6f 66 0a 20  eeds on one of. 
7120: 20 20 20 20 20 20 20 23 20 4d 61 72 74 69 6e 20         # Martin 
7130: 47 2e 27 73 20 6f 6c 64 65 72 20 73 79 73 74 65  G.'s older syste
7140: 6d 73 2e 0a 20 20 20 20 20 20 20 20 6d 73 67 2d  ms..        msg-
7150: 72 65 73 75 6c 74 20 22 63 6f 6d 70 69 6c 65 72  result "compiler
7160: 20 73 75 70 70 6f 72 74 73 20 63 6f 6d 70 69 6c   supports compil
7170: 65 5f 63 6f 6d 6d 61 6e 64 73 2e 6a 73 6f 6e 22  e_commands.json"
7180: 0a 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 20  .        define 
7190: 4d 41 4b 45 5f 43 4f 4d 50 49 4c 41 54 49 4f 4e  MAKE_COMPILATION
71a0: 5f 44 42 20 79 65 73 0a 20 20 20 20 20 20 20 20  _DB yes.        
71b0: 72 65 74 75 72 6e 20 31 0a 20 20 20 20 7d 20 65  return 1.    } e
71c0: 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 6d 73  lse {.        ms
71d0: 67 2d 72 65 73 75 6c 74 20 22 63 6f 6d 70 69 6c  g-result "compil
71e0: 65 72 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70  er does not supp
71f0: 6f 72 74 20 63 6f 6d 70 69 6c 65 5f 63 6f 6d 6d  ort compile_comm
7200: 61 6e 64 73 2e 6a 73 6f 6e 22 0a 20 20 20 20 20  ands.json".     
7210: 20 20 20 64 65 66 69 6e 65 20 4d 41 4b 45 5f 43     define MAKE_C
7220: 4f 4d 50 49 4c 41 54 49 4f 4e 5f 44 42 20 6e 6f  OMPILATION_DB no
7230: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
7240: 30 0a 20 20 20 20 7d 0a 7d 0a 0a 64 65 66 69 6e  0.    }.}..defin
7250: 65 20 4d 41 4b 45 5f 43 4f 4d 50 49 4c 41 54 49  e MAKE_COMPILATI
7260: 4f 4e 5f 44 42 20 6e 6f 0a 69 66 20 7b 21 24 6f  ON_DB no.if {!$o
7270: 75 74 4f 66 54 72 65 65 42 75 69 6c 64 7d 20 7b  utOfTreeBuild} {
7280: 0a 20 20 69 66 20 7b 5b 6f 70 74 2d 62 6f 6f 6c  .  if {[opt-bool
7290: 20 63 6f 6d 70 69 6c 65 2d 63 6f 6d 6d 61 6e 64   compile-command
72a0: 73 5d 7d 20 7b 0a 20 20 20 20 63 68 65 63 6b 2d  s]} {.    check-
72b0: 63 6f 6d 70 69 6c 65 2d 63 6f 6d 6d 61 6e 64 73  compile-commands
72c0: 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
72d0: 70 75 74 73 20 22 55 73 65 20 2d 2d 63 6f 6d 70  puts "Use --comp
72e0: 69 6c 65 2d 63 6f 6d 6d 61 6e 64 73 20 74 6f 20  ile-commands to 
72f0: 65 6e 61 62 6c 65 20 63 68 65 63 6b 20 66 6f 72  enable check for
7300: 20 63 6f 6d 70 69 6c 65 2d 63 6f 6d 6d 61 6e 64   compile-command
7310: 73 2d 63 61 70 61 62 6c 65 20 63 6f 6d 70 69 6c  s-capable compil
7320: 65 72 2e 22 0a 20 20 7d 0a 7d 20 65 6c 73 65 20  er.".  }.} else 
7330: 7b 0a 20 20 70 75 74 73 20 22 44 69 73 61 62 6c  {.  puts "Disabl
7340: 69 6e 67 20 63 6f 6d 70 69 6c 65 5f 63 6f 6d 6d  ing compile_comm
7350: 61 6e 64 73 2e 6a 73 6f 6e 20 63 68 65 63 6b 20  ands.json check 
7360: 66 6f 72 20 6f 75 74 2d 6f 66 2d 74 72 65 65 20  for out-of-tree 
7370: 62 75 69 6c 64 2e 22 0a 20 20 23 20 54 68 69 73  build.".  # This
7380: 20 69 73 20 61 6e 20 61 74 74 65 6d 70 74 20 74   is an attempt t
7390: 6f 20 72 65 73 6f 6c 76 65 20 74 68 65 20 70 72  o resolve the pr
73a0: 6f 62 6c 65 6d 20 72 65 70 6f 72 74 65 64 20 61  oblem reported a
73b0: 74 0a 20 20 23 20 68 74 74 70 73 3a 2f 2f 66 6f  t.  # https://fo
73c0: 73 73 69 6c 2d 73 63 6d 2e 6f 72 67 2f 66 6f 72  ssil-scm.org/for
73d0: 75 6d 2f 66 6f 72 75 6d 70 6f 73 74 2f 64 31 39  um/forumpost/d19
73e0: 30 36 31 64 30 39 61 38 31 37 39 64 30 0a 7d 0a  061d09a8179d0.}.
73f0: 0a 23 20 41 64 64 20 2d 66 73 61 6e 69 74 69 7a  .# Add -fsanitiz
7400: 65 20 63 6f 6d 70 69 6c 65 20 61 6e 64 20 6c 69  e compile and li
7410: 6e 6b 20 6f 70 74 69 6f 6e 73 20 6c 61 74 65 3a  nk options late:
7420: 20 77 65 20 64 6f 6e 27 74 20 77 61 6e 74 20 74   we don't want t
7430: 68 65 20 43 0a 23 20 63 68 65 63 6b 73 20 61 62  he C.# checks ab
7440: 6f 76 65 20 74 6f 20 72 75 6e 20 77 69 74 68 20  ove to run with 
7450: 74 68 6f 73 65 20 73 61 6e 69 74 69 7a 65 72 73  those sanitizers
7460: 20 65 6e 61 62 6c 65 64 2e 20 20 49 74 20 63 61   enabled.  It ca
7470: 6e 20 6e 6f 74 20 6f 6e 6c 79 0a 23 20 62 65 20  n not only.# be 
7480: 70 6f 69 6e 74 6c 65 73 73 2c 20 69 74 20 63 61  pointless, it ca
7490: 6e 20 61 63 74 75 61 6c 6c 79 20 62 72 65 61 6b  n actually break
74a0: 20 63 6f 72 72 65 63 74 20 74 65 73 74 73 2e 0a   correct tests..
74b0: 73 65 74 20 66 73 61 6e 20 5b 6f 70 74 2d 76 61  set fsan [opt-va
74c0: 6c 20 77 69 74 68 2d 73 61 6e 69 74 69 7a 65 72  l with-sanitizer
74d0: 5d 0a 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65  ].if {[string le
74e0: 6e 67 74 68 20 24 66 73 61 6e 5d 7d 20 7b 0a 20  ngth $fsan]} {. 
74f0: 20 20 20 64 65 66 69 6e 65 2d 61 70 70 65 6e 64     define-append
7500: 20 20 45 58 54 52 41 5f 43 46 4c 41 47 53 20 2d    EXTRA_CFLAGS -
7510: 66 73 61 6e 69 74 69 7a 65 3d 24 66 73 61 6e 0a  fsanitize=$fsan.
7520: 20 20 20 20 64 65 66 69 6e 65 2d 61 70 70 65 6e      define-appen
7530: 64 20 45 58 54 52 41 5f 4c 44 46 4c 41 47 53 20  d EXTRA_LDFLAGS 
7540: 2d 66 73 61 6e 69 74 69 7a 65 3d 24 66 73 61 6e  -fsanitize=$fsan
7550: 0a 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67  .    if {[string
7560: 20 66 69 72 73 74 20 22 75 6e 64 65 66 69 6e 65   first "undefine
7570: 64 22 20 24 66 73 61 6e 5d 20 21 3d 20 2d 31 7d  d" $fsan] != -1}
7580: 20 7b 0a 20 20 20 20 20 20 20 20 23 20 57 65 20   {.        # We 
7590: 6e 65 65 64 20 74 6f 20 6c 69 6e 6b 20 77 69 74  need to link wit
75a0: 68 20 6c 69 62 75 62 73 61 6e 20 69 66 20 77 65  h libubsan if we
75b0: 27 72 65 20 63 6f 6d 70 69 6c 69 6e 67 20 75 6e  're compiling un
75c0: 64 65 72 0a 20 20 20 20 20 20 20 20 23 20 47 43  der.        # GC
75d0: 43 20 77 69 74 68 20 2d 66 73 61 6e 69 74 69 7a  C with -fsanitiz
75e0: 65 3d 75 6e 64 65 66 69 6e 65 64 2e 0a 20 20 20  e=undefined..   
75f0: 20 20 20 20 20 63 63 2d 63 68 65 63 6b 2d 66 75       cc-check-fu
7600: 6e 63 74 69 6f 6e 2d 69 6e 2d 6c 69 62 20 5f 5f  nction-in-lib __
7610: 75 62 73 61 6e 5f 68 61 6e 64 6c 65 5f 61 64 64  ubsan_handle_add
7620: 5f 6f 76 65 72 66 6c 6f 77 20 75 62 73 61 6e 0a  _overflow ubsan.
7630: 20 20 20 20 7d 0a 7d 0a 0a 23 20 46 69 6e 61 6c      }.}..# Final
7640: 6c 79 2c 20 61 70 70 65 6e 64 20 6c 69 62 72 61  ly, append libra
7650: 72 69 65 73 20 74 68 61 74 20 6d 75 73 74 20 62  ries that must b
7660: 65 20 6c 61 73 74 2e 20 54 68 69 73 20 6d 61 74  e last. This mat
7670: 74 65 72 73 20 6d 6f 72 65 20 6f 6e 20 73 6f 6d  ters more on som
7680: 65 0a 23 20 4f 53 65 73 20 74 68 61 6e 20 6f 74  e.# OSes than ot
7690: 68 65 72 73 2c 20 62 75 74 20 69 73 20 6d 6f 73  hers, but is mos
76a0: 74 20 62 72 6f 61 64 6c 79 20 72 65 71 75 69 72  t broadly requir
76b0: 65 64 20 66 6f 72 20 73 74 61 74 69 63 20 6c 69  ed for static li
76c0: 6e 6b 69 6e 67 2e 0a 69 66 20 7b 5b 63 68 65 63  nking..if {[chec
76d0: 6b 2d 66 75 6e 63 74 69 6f 6e 2d 69 6e 2d 6c 69  k-function-in-li
76e0: 62 20 64 6c 6f 70 65 6e 20 64 6c 5d 7d 20 7b 0a  b dlopen dl]} {.
76f0: 20 20 20 20 23 20 53 6f 6d 65 20 70 6c 61 74 66      # Some platf
7700: 6f 72 6d 73 20 28 2a 42 53 44 29 20 68 61 76 65  orms (*BSD) have
7710: 20 74 68 65 20 64 6c 20 66 75 6e 63 74 69 6f 6e   the dl function
7720: 73 20 61 6c 72 65 61 64 79 20 69 6e 20 6c 69 62  s already in lib
7730: 63 20 61 6e 64 20 6e 6f 20 6c 69 62 64 6c 2e 0a  c and no libdl..
7740: 20 20 20 20 23 20 49 6e 20 73 75 63 68 20 63 61      # In such ca
7750: 73 65 20 77 65 20 63 61 6e 20 6c 69 6e 6b 20 64  se we can link d
7760: 69 72 65 63 74 6c 79 20 77 69 74 68 6f 75 74 20  irectly without 
7770: 2d 6c 64 6c 2e 0a 20 20 20 20 64 65 66 69 6e 65  -ldl..    define
7780: 2d 61 70 70 65 6e 64 20 4c 49 42 53 20 5b 67 65  -append LIBS [ge
7790: 74 2d 64 65 66 69 6e 65 20 6c 69 62 5f 64 6c 6f  t-define lib_dlo
77a0: 70 65 6e 5d 0a 7d 0a 69 66 20 7b 5b 6f 70 74 2d  pen].}.if {[opt-
77b0: 62 6f 6f 6c 20 73 74 61 74 69 63 5d 7d 20 7b 0a  bool static]} {.
77c0: 20 20 20 20 23 20 4c 69 6e 75 78 20 63 61 6e 20      # Linux can 
77d0: 6f 6e 6c 79 20 69 6e 66 65 72 20 74 68 65 20 64  only infer the d
77e0: 65 70 65 6e 64 65 6e 63 79 20 6f 6e 20 70 74 68  ependency on pth
77f0: 72 65 61 64 20 66 72 6f 6d 20 4f 70 65 6e 53 53  read from OpenSS
7800: 4c 20 77 68 65 6e 0a 20 20 20 20 23 20 64 6f 69  L when.    # doi
7810: 6e 67 20 64 79 6e 61 6d 69 63 20 6c 69 6e 6b 61  ng dynamic linka
7820: 67 65 2e 0a 20 20 20 20 64 65 66 69 6e 65 2d 61  ge..    define-a
7830: 70 70 65 6e 64 20 4c 49 42 53 20 2d 6c 70 74 68  ppend LIBS -lpth
7840: 72 65 61 64 0a 7d 0a 0a 69 66 20 7b 5b 67 65 74  read.}..if {[get
7850: 2d 64 65 66 69 6e 65 20 45 4d 53 44 4b 5f 48 4f  -define EMSDK_HO
7860: 4d 45 5d 20 6e 65 20 22 22 7d 20 7b 0a 20 20 64  ME] ne ""} {.  d
7870: 65 66 69 6e 65 20 45 4d 43 43 5f 57 52 41 50 50  efine EMCC_WRAPP
7880: 45 52 20 24 3a 3a 61 75 74 6f 73 65 74 75 70 28  ER $::autosetup(
7890: 64 69 72 29 2f 2e 2e 2f 74 6f 6f 6c 73 2f 65 6d  dir)/../tools/em
78a0: 63 63 2e 73 68 0a 20 20 6d 61 6b 65 2d 74 65 6d  cc.sh.  make-tem
78b0: 70 6c 61 74 65 20 74 6f 6f 6c 73 2f 65 6d 63 63  plate tools/emcc
78c0: 2e 73 68 2e 69 6e 0a 20 20 63 61 74 63 68 20 7b  .sh.in.  catch {
78d0: 65 78 65 63 20 63 68 6d 6f 64 20 75 2b 78 20 74  exec chmod u+x t
78e0: 6f 6f 6c 73 2f 65 6d 63 63 2e 73 68 7d 0a 7d 20  ools/emcc.sh}.} 
78f0: 65 6c 73 65 20 7b 0a 20 20 64 65 66 69 6e 65 20  else {.  define 
7900: 45 4d 43 43 5f 57 52 41 50 50 45 52 20 22 22 0a  EMCC_WRAPPER "".
7910: 20 20 63 61 74 63 68 20 7b 65 78 65 63 20 72 6d    catch {exec rm
7920: 20 2d 66 20 74 6f 6f 6c 73 2f 65 6d 63 63 2e 73   -f tools/emcc.s
7930: 68 7d 0a 7d 0a 0a 23 20 54 61 67 20 63 6f 6e 74  h}.}..# Tag cont
7940: 61 69 6e 65 72 20 62 75 69 6c 64 73 20 77 69 74  ainer builds wit
7950: 68 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  h a prefix of th
7960: 65 20 63 68 65 63 6b 69 6e 20 49 44 20 6f 66 20  e checkin ID of 
7970: 74 68 65 20 76 65 72 73 69 6f 6e 0a 23 20 6f 66  the version.# of
7980: 20 46 6f 73 73 69 6c 20 65 61 63 68 20 6f 6e 65   Fossil each one
7990: 20 63 6f 6e 74 61 69 6e 73 2e 20 20 54 68 69 73   contains.  This
79a0: 20 6e 6f 74 20 6f 6e 6c 79 20 61 6c 6c 6f 77 73   not only allows
79b0: 20 6d 75 6c 74 69 70 6c 65 20 69 6d 61 67 65 73   multiple images
79c0: 0a 23 20 74 6f 20 63 6f 65 78 69 73 74 20 61 6e  .# to coexist an
79d0: 64 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6e 74 61  d multiple conta
79e0: 69 6e 65 72 73 20 74 6f 20 62 65 20 63 72 65 61  iners to be crea
79f0: 74 65 64 20 75 6e 61 6d 67 69 67 75 6f 73 6c 79  ted unamgiguosly
7a00: 20 66 72 6f 6d 0a 23 20 74 68 65 6d 2c 20 69 74   from.# them, it
7a10: 20 61 6c 73 6f 20 63 68 61 6e 67 65 73 20 74 68   also changes th
7a20: 65 20 55 52 4c 20 77 65 20 66 65 74 63 68 20 74  e URL we fetch t
7a30: 68 65 20 73 6f 75 72 63 65 20 74 61 72 62 61 6c  he source tarbal
7a40: 6c 20 66 72 6f 6d 2c 20 73 6f 0a 23 20 72 65 70  l from, so.# rep
7a50: 65 61 74 65 64 20 62 75 69 6c 64 73 20 6f 66 20  eated builds of 
7a60: 61 20 67 69 76 65 6e 20 76 65 72 73 69 6f 6e 20  a given version 
7a70: 67 65 6e 65 72 61 74 65 20 61 6e 64 20 66 65 74  generate and fet
7a80: 63 68 20 74 68 65 20 73 6f 75 72 63 65 0a 23 20  ch the source.# 
7a90: 74 61 72 62 61 6c 6c 20 6f 6e 63 65 20 6f 6e 6c  tarball once onl
7aa0: 79 2c 20 6b 65 65 70 69 6e 67 20 69 74 20 69 6e  y, keeping it in
7ab0: 20 74 68 65 20 6c 6f 63 61 6c 20 44 6f 63 6b 65   the local Docke
7ac0: 72 2f 50 6f 64 6d 61 6e 20 63 61 63 68 65 2e 0a  r/Podman cache..
7ad0: 73 65 74 20 63 69 20 5b 72 65 61 64 66 69 6c 65  set ci [readfile
7ae0: 20 22 24 3a 3a 61 75 74 6f 73 65 74 75 70 28 73   "$::autosetup(s
7af0: 72 63 64 69 72 29 2f 6d 61 6e 69 66 65 73 74 2e  rcdir)/manifest.
7b00: 75 75 69 64 22 5d 0a 64 65 66 69 6e 65 20 46 4f  uuid"].define FO
7b10: 53 53 49 4c 5f 43 49 5f 50 46 58 20 5b 73 74 72  SSIL_CI_PFX [str
7b20: 69 6e 67 20 72 61 6e 67 65 20 24 63 69 20 30 20  ing range $ci 0 
7b30: 31 31 5d 0a 0a 6d 61 6b 65 2d 74 65 6d 70 6c 61  11]..make-templa
7b40: 74 65 20 4d 61 6b 65 66 69 6c 65 2e 69 6e 0a 6d  te Makefile.in.m
7b50: 61 6b 65 2d 63 6f 6e 66 69 67 2d 68 65 61 64 65  ake-config-heade
7b60: 72 20 61 75 74 6f 63 6f 6e 66 69 67 2e 68 20 2d  r autoconfig.h -
7b70: 61 75 74 6f 20 7b 55 53 45 5f 2a 20 46 4f 53 53  auto {USE_* FOSS
7b80: 49 4c 5f 2a 7d 0a                                IL_*}.