Documentation Source Text

Hex Artifact Content
Login

Artifact 5eb26ece8be54a3827ee20ea49e0edf78675f701:


0000: 20 20 20 20 20 20 20 20 20 20 3c 74 69 74 6c 65            <title
0010: 3e 48 6f 77 20 54 6f 20 43 6f 6d 70 69 6c 65 20  >How To Compile 
0020: 53 51 4c 69 74 65 3c 2f 74 69 74 6c 65 3e 0a 3c  SQLite</title>.<
0030: 74 63 6c 3e 68 64 5f 6b 65 79 77 6f 72 64 73 20  tcl>hd_keywords 
0040: 7b 68 6f 77 20 74 6f 20 63 6f 6d 70 69 6c 65 7d  {how to compile}
0050: 3c 2f 74 63 6c 3e 0a 0a 3c 68 31 20 61 6c 69 67  </tcl>..<h1 alig
0060: 6e 3d 63 65 6e 74 65 72 3e 48 6f 77 20 54 6f 20  n=center>How To 
0070: 43 6f 6d 70 69 6c 65 20 53 51 4c 69 74 65 3c 2f  Compile SQLite</
0080: 68 31 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20  h1>..<p>.SQLite 
0090: 69 73 20 41 4e 53 49 2d 43 20 73 6f 75 72 63 65  is ANSI-C source
00a0: 20 63 6f 64 65 2e 0a 49 74 20 6d 75 73 74 20 62   code..It must b
00b0: 65 20 63 6f 6d 70 69 6c 65 64 20 69 6e 74 6f 20  e compiled into 
00c0: 6d 61 63 68 69 6e 65 20 63 6f 64 65 20 62 65 66  machine code bef
00d0: 6f 72 65 20 69 74 20 69 73 20 75 73 65 66 75 6c  ore it is useful
00e0: 2e 0a 54 68 69 73 20 61 72 74 69 63 6c 65 20 69  ..This article i
00f0: 73 20 61 20 67 75 69 64 65 20 74 6f 20 74 68 65  s a guide to the
0100: 20 76 61 72 69 6f 75 73 20 77 61 79 73 20 6f 66   various ways of
0110: 20 63 6f 6d 70 69 6c 69 6e 67 20 53 51 4c 69 74   compiling SQLit
0120: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 69 73  e..</p>..<p>This
0130: 20 61 72 74 69 63 6c 65 20 64 6f 65 73 20 6e 6f   article does no
0140: 74 20 63 6f 6e 74 61 69 6e 20 61 20 73 74 65 70  t contain a step
0150: 2d 62 79 2d 73 74 65 70 20 72 65 63 69 70 65 20  -by-step recipe 
0160: 66 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 0a 53 51  for compiling.SQ
0170: 4c 69 74 65 2e 20 20 54 68 61 74 20 77 6f 75 6c  Lite.  That woul
0180: 64 20 62 65 20 64 69 66 66 69 63 75 6c 74 20 73  d be difficult s
0190: 69 6e 63 65 20 65 61 63 68 20 64 65 76 65 6c 6f  ince each develo
01a0: 70 6d 65 6e 74 20 73 69 74 75 61 74 69 6f 6e 0a  pment situation.
01b0: 69 73 20 64 69 66 66 65 72 65 6e 74 2e 0a 52 61  is different..Ra
01c0: 74 68 65 72 2c 20 74 68 69 73 20 61 72 74 69 63  ther, this artic
01d0: 6c 65 20 64 65 73 63 72 69 62 65 73 20 61 6e 64  le describes and
01e0: 20 69 6c 6c 75 73 74 72 61 74 65 73 20 74 68 65   illustrates the
01f0: 20 70 72 69 6e 63 69 70 61 6c 73 20 62 65 68 69   principals behi
0200: 6e 64 20 74 68 65 0a 63 6f 6d 70 69 6c 61 74 69  nd the.compilati
0210: 6f 6e 20 6f 66 20 53 51 4c 69 74 65 2e 20 20 54  on of SQLite.  T
0220: 79 70 69 63 61 6c 20 63 6f 6d 70 69 6c 61 74 69  ypical compilati
0230: 6f 6e 20 63 6f 6d 6d 61 6e 64 73 20 61 72 65 20  on commands are 
0240: 70 72 6f 76 69 64 65 64 20 61 73 20 65 78 61 6d  provided as exam
0250: 70 6c 65 73 0a 77 69 74 68 20 74 68 65 20 65 78  ples.with the ex
0260: 70 65 63 74 61 74 69 6f 6e 20 74 68 61 74 20 61  pectation that a
0270: 70 70 6c 69 63 61 74 69 6f 6e 20 64 65 76 65 6c  pplication devel
0280: 6f 70 65 72 73 20 63 61 6e 20 75 73 65 20 74 68  opers can use th
0290: 65 73 65 20 65 78 61 6d 70 6c 65 73 0a 61 73 20  ese examples.as 
02a0: 67 75 69 64 61 6e 63 65 20 66 6f 72 20 64 65 76  guidance for dev
02b0: 65 6c 6f 70 69 6e 67 20 74 68 65 69 72 20 6f 77  eloping their ow
02c0: 6e 20 63 75 73 74 6f 6d 20 63 6f 6d 70 69 6c 61  n custom compila
02d0: 74 69 6f 6e 20 70 72 6f 63 65 64 75 72 65 73 2e  tion procedures.
02e0: 0a 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c  .In other words,
02f0: 20 74 68 69 73 20 61 72 74 69 63 6c 65 20 70 72   this article pr
0300: 6f 76 69 64 65 73 20 69 64 65 61 73 20 61 6e 64  ovides ideas and
0310: 20 69 6e 73 69 67 68 74 73 2c 20 6e 6f 74 20 74   insights, not t
0320: 75 72 6e 6b 65 79 0a 73 6f 6c 75 74 69 6f 6e 73  urnkey.solutions
0330: 2e 3c 2f 70 3e 0a 0a 3c 68 32 3e 41 6d 61 6c 67  .</p>..<h2>Amalg
0340: 61 6d 61 74 69 6f 6e 20 56 65 72 73 75 73 20 49  amation Versus I
0350: 6e 64 69 76 69 64 75 61 6c 20 53 6f 75 72 63 65  ndividual Source
0360: 20 46 69 6c 65 73 3c 2f 68 32 3e 20 0a 0a 3c 70   Files</h2> ..<p
0370: 3e 53 51 4c 69 74 65 20 69 73 20 62 75 69 6c 74  >SQLite is built
0380: 20 66 72 6f 6d 20 6c 69 74 65 72 61 6c 6c 79 20   from literally 
0390: 68 75 6e 64 72 65 64 73 20 6f 66 20 66 69 6c 65  hundreds of file
03a0: 73 20 6f 66 20 43 20 63 6f 64 65 20 61 6e 64 20  s of C code and 
03b0: 73 63 72 69 70 74 0a 73 70 72 65 61 64 20 61 63  script.spread ac
03c0: 72 6f 73 73 20 6d 75 6c 74 69 70 6c 65 20 64 69  ross multiple di
03d0: 72 65 63 74 6f 72 69 65 73 2e 20 20 54 68 65 20  rectories.  The 
03e0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
03f0: 66 20 53 51 4c 69 74 65 20 69 73 20 70 75 72 65  f SQLite is pure
0400: 0a 41 4e 53 49 2d 43 2c 20 62 75 74 20 6d 61 6e  .ANSI-C, but man
0410: 79 20 6f 66 20 74 68 65 20 43 2d 6c 61 6e 67 75  y of the C-langu
0420: 61 67 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20  age source code 
0430: 66 69 6c 65 73 20 61 72 65 20 65 69 74 68 65 72  files are either
0440: 20 65 69 74 68 65 72 0a 67 65 6e 65 72 61 74 65   either.generate
0450: 64 20 6f 72 20 74 72 61 6e 73 66 6f 72 6d 65 64  d or transformed
0460: 20 62 79 20 61 75 78 69 6c 69 61 72 79 20 43 20   by auxiliary C 
0470: 70 72 6f 67 72 61 6d 73 20 61 6e 64 20 41 57 4b  programs and AWK
0480: 2c 20 53 45 44 2c 20 61 6e 64 20 54 43 4c 20 0a  , SED, and TCL .
0490: 73 63 72 69 70 74 73 20 70 72 69 6f 72 20 74 6f  scripts prior to
04a0: 20 62 65 69 6e 67 20 69 6e 63 6f 72 70 6f 72 61   being incorpora
04b0: 74 65 64 20 69 6e 74 6f 20 74 68 65 20 66 69 6e  ted into the fin
04c0: 69 73 68 65 64 20 53 51 4c 69 74 65 20 6c 69 62  ished SQLite lib
04d0: 72 61 72 79 2e 0a 42 75 69 6c 64 69 6e 67 20 74  rary..Building t
04e0: 68 65 20 6e 65 63 65 73 73 61 72 79 20 43 20 70  he necessary C p
04f0: 72 6f 67 72 61 6d 73 20 61 6e 64 20 74 72 61 6e  rograms and tran
0500: 73 66 6f 72 6d 69 6e 67 20 61 6e 64 2f 6f 72 20  sforming and/or 
0510: 63 72 65 61 74 69 6e 67 20 74 68 65 0a 43 2d 6c  creating the.C-l
0520: 61 6e 67 75 61 67 65 20 73 6f 75 72 63 65 20 63  anguage source c
0530: 6f 64 65 20 66 6f 72 20 53 51 4c 69 74 65 20 69  ode for SQLite i
0540: 73 20 61 20 63 6f 6d 70 6c 65 78 20 70 72 6f 63  s a complex proc
0550: 65 73 73 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 6f 20  ess.</p>..<p>To 
0560: 73 69 6d 70 6c 69 66 79 20 6d 61 74 74 65 72 73  simplify matters
0570: 2c 20 53 51 4c 69 74 65 20 69 73 20 61 6c 73 6f  , SQLite is also
0580: 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 61 20   available as a 
0590: 70 72 65 2d 70 61 63 6b 61 67 65 64 0a 5b 61 6d  pre-packaged.[am
05a0: 61 6c 67 61 6d 61 74 69 6f 6e 5d 20 73 6f 75 72  algamation] sour
05b0: 63 65 20 63 6f 64 65 20 66 69 6c 65 3a 20 3c 62  ce code file: <b
05c0: 3e 73 71 6c 69 74 65 33 2e 63 3c 2f 62 3e 2e 20  >sqlite3.c</b>. 
05d0: 20 54 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f   The amalgamatio
05e0: 6e 20 69 73 0a 61 20 73 69 6e 67 6c 65 20 66 69  n is.a single fi
05f0: 6c 65 20 6f 66 20 41 4e 53 49 2d 43 20 63 6f 64  le of ANSI-C cod
0600: 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  e that implement
0610: 73 20 74 68 65 20 65 6e 74 69 72 65 20 53 51 4c  s the entire SQL
0620: 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 54 68 65  ite library..The
0630: 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 69 73   amalgamation is
0640: 20 6d 75 63 68 20 65 61 73 69 65 72 20 74 6f 20   much easier to 
0650: 64 65 61 6c 20 77 69 74 68 2e 20 20 45 76 65 72  deal with.  Ever
0660: 79 74 68 69 6e 67 20 69 73 20 63 6f 6e 74 61 69  ything is contai
0670: 6e 65 64 0a 77 69 74 68 69 6e 20 61 20 73 69 6e  ned.within a sin
0680: 67 6c 65 20 63 6f 64 65 20 66 69 6c 65 73 2c 20  gle code files, 
0690: 73 6f 20 69 74 20 69 73 20 65 61 73 79 20 74 6f  so it is easy to
06a0: 20 64 72 6f 70 20 69 6e 74 6f 20 74 68 65 20 73   drop into the s
06b0: 6f 75 72 63 65 20 74 72 65 65 0a 6f 66 20 61 20  ource tree.of a 
06c0: 6c 61 72 67 65 72 20 43 20 6f 72 20 43 2b 2b 20  larger C or C++ 
06d0: 70 72 6f 67 72 61 6d 2e 20 20 41 6c 6c 20 74 68  program.  All th
06e0: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  e code generatio
06f0: 6e 20 61 6e 64 20 74 72 61 6e 73 66 6f 72 6d 61  n and transforma
0700: 74 69 6f 6e 0a 73 74 65 70 73 20 68 61 76 65 20  tion.steps have 
0710: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 63 61 72  already been car
0720: 72 69 65 64 20 6f 75 74 20 73 6f 20 74 68 65 72  ried out so ther
0730: 65 20 61 72 65 20 6e 6f 20 61 75 78 69 6c 69 61  e are no auxilia
0740: 72 79 20 43 20 70 72 6f 67 72 61 6d 73 0a 74 6f  ry C programs.to
0750: 20 63 6f 6e 66 69 67 75 72 65 20 61 6e 64 20 63   configure and c
0760: 6f 6d 70 69 6c 65 20 61 6e 64 20 6e 6f 20 73 63  ompile and no sc
0770: 72 69 70 74 73 20 74 6f 20 72 75 6e 2e 20 20 41  ripts to run.  A
0780: 6e 64 2c 20 62 65 63 61 75 73 65 20 74 68 65 20  nd, because the 
0790: 65 6e 74 69 72 65 0a 6c 69 62 72 61 72 79 20 69  entire.library i
07a0: 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 61  s contained in a
07b0: 20 73 69 6e 67 6c 65 20 74 72 61 6e 73 6c 61 74   single translat
07c0: 69 6f 6e 20 75 6e 69 74 2c 20 63 6f 6d 70 69 6c  ion unit, compil
07d0: 65 72 73 20 61 72 65 20 61 62 6c 65 20 74 6f 0a  ers are able to.
07e0: 64 6f 20 6d 6f 72 65 20 61 64 76 61 6e 63 65 64  do more advanced
07f0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 72   optimizations r
0800: 65 73 75 6c 74 69 6e 67 20 69 6e 20 61 20 35 25  esulting in a 5%
0810: 20 74 6f 20 31 30 25 20 70 65 72 66 6f 72 6d 61   to 10% performa
0820: 6e 63 65 20 0a 69 6d 70 72 6f 76 65 6d 65 6e 74  nce .improvement
0830: 2e 20 20 46 6f 72 20 74 68 65 73 65 20 72 65 61  .  For these rea
0840: 73 6f 6e 73 2c 20 74 68 65 20 61 6d 61 6c 67 61  sons, the amalga
0850: 6d 61 74 69 6f 6e 20 73 6f 75 72 63 65 20 66 69  mation source fi
0860: 6c 65 20 0a 28 22 3c 62 3e 73 71 6c 69 74 65 33  le .("<b>sqlite3
0870: 2e 63 3c 2f 62 3e 22 29 20 69 73 20 72 65 63 6f  .c</b>") is reco
0880: 6d 6d 65 6e 64 65 64 20 66 6f 72 20 61 6c 6c 20  mmended for all 
0890: 61 70 70 6c 69 63 61 74 69 6f 6e 73 2e 3c 2f 70  applications.</p
08a0: 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c  >..<blockquote><
08b0: 69 3e 0a 54 68 65 20 75 73 65 20 6f 66 20 74 68  i>.The use of th
08c0: 65 20 5b 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 5d  e [amalgamation]
08d0: 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20   is recommended 
08e0: 66 6f 72 20 61 6c 6c 20 61 70 70 6c 69 63 61 74  for all applicat
08f0: 69 6f 6e 73 2e 0a 3c 2f 69 3e 3c 2f 62 6c 6f 63  ions..</i></bloc
0900: 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e 42 75 69 6c  kquote>..<p>Buil
0910: 64 69 6e 67 20 53 51 4c 69 74 65 20 64 69 72 65  ding SQLite dire
0920: 63 74 6c 79 20 66 72 6f 6d 20 69 6e 64 69 76 69  ctly from indivi
0930: 64 75 61 6c 20 73 6f 75 72 63 65 20 63 6f 64 65  dual source code
0940: 20 66 69 6c 65 73 20 69 73 20 63 65 72 74 61 69   files is certai
0950: 6e 6c 79 0a 70 6f 73 73 69 62 6c 65 2c 20 62 75  nly.possible, bu
0960: 74 20 69 74 20 69 73 20 6e 6f 74 20 72 65 63 6f  t it is not reco
0970: 6d 6d 65 6e 64 65 64 2e 20 20 46 6f 72 20 73 6f  mmended.  For so
0980: 6d 65 20 73 70 65 63 69 61 6c 69 7a 65 64 20 61  me specialized a
0990: 70 70 6c 69 63 61 74 69 6f 6e 73 2c 20 69 74 0a  pplications, it.
09a0: 6d 69 67 68 74 20 62 65 20 6e 65 63 65 73 73 61  might be necessa
09b0: 72 79 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  ry to modify the
09c0: 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 69   build process i
09d0: 6e 20 77 61 79 73 20 74 68 61 74 20 63 61 6e 6e  n ways that cann
09e0: 6f 74 20 62 65 20 64 6f 6e 65 0a 75 73 69 6e 67  ot be done.using
09f0: 20 6a 75 73 74 20 74 68 65 20 70 72 65 62 75 69   just the prebui
0a00: 6c 74 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20  lt amalgamation 
0a10: 73 6f 75 72 63 65 20 66 69 6c 65 20 64 6f 77 6e  source file down
0a20: 6c 6f 61 64 65 64 20 66 72 6f 6d 20 74 68 65 20  loaded from the 
0a30: 77 65 62 73 69 74 65 2e 0a 46 6f 72 20 74 68 6f  website..For tho
0a40: 73 65 20 73 69 74 75 61 74 69 6f 6e 73 2c 20 69  se situations, i
0a50: 74 20 69 73 20 72 65 63 6f 6d 6d 65 6e 64 65 64  t is recommended
0a60: 20 74 68 61 74 20 61 20 63 75 73 74 6f 6d 69 7a   that a customiz
0a70: 65 64 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20  ed amalgamation 
0a80: 62 65 0a 62 75 69 6c 74 20 28 61 73 20 64 65 73  be.built (as des
0a90: 63 72 69 62 65 64 20 5b 62 75 69 6c 64 69 6e 67  cribed [building
0aa0: 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f   the amalgamatio
0ab0: 6e 20 7c 20 62 65 6c 6f 77 5d 29 0a 61 6e 64 20  n | below]).and 
0ac0: 75 73 65 64 2e 20 20 49 6e 20 6f 74 68 65 72 20  used.  In other 
0ad0: 77 6f 72 64 73 2c 20 65 76 65 6e 20 69 66 20 61  words, even if a
0ae0: 20 70 72 6f 6a 65 63 74 20 72 65 71 75 69 72 65   project require
0af0: 73 20 62 75 69 6c 64 69 6e 67 20 53 51 4c 69 74  s building SQLit
0b00: 65 20 0a 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  e .beginning wit
0b10: 68 20 69 6e 64 69 76 69 64 75 61 6c 20 73 6f 75  h individual sou
0b20: 72 63 65 20 66 69 6c 65 73 2c 20 69 74 20 69 73  rce files, it is
0b30: 20 73 74 69 6c 6c 20 72 65 63 6f 6d 6d 65 6e 64   still recommend
0b40: 65 64 20 74 68 61 74 20 61 6e 0a 61 6d 61 6c 67  ed that an.amalg
0b50: 61 6d 61 74 69 6f 6e 20 73 6f 75 72 63 65 20 66  amation source f
0b60: 69 6c 65 20 62 65 20 75 73 65 64 20 61 73 20 61  ile be used as a
0b70: 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 73  n intermediate s
0b80: 74 65 70 2e 3c 2f 70 3e 0a 0a 3c 74 63 6c 3e 68  tep.</p>..<tcl>h
0b90: 64 5f 66 72 61 67 6d 65 6e 74 20 7b 63 6c 69 7d  d_fragment {cli}
0ba0: 20 7b 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20   {compiling the 
0bb0: 43 4c 49 7d 3c 2f 74 63 6c 3e 0a 3c 68 32 3e 43  CLI}</tcl>.<h2>C
0bc0: 6f 6d 70 69 6c 69 6e 67 20 54 68 65 20 43 6f 6d  ompiling The Com
0bd0: 6d 61 6e 64 2d 4c 69 6e 65 20 49 6e 74 65 72 66  mand-Line Interf
0be0: 61 63 65 3c 2f 68 32 3e 0a 0a 3c 70 3e 41 20 62  ace</h2>..<p>A b
0bf0: 75 69 6c 64 20 6f 66 20 74 68 65 20 5b 43 4c 49  uild of the [CLI
0c00: 20 7c 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20   | command-line 
0c10: 69 6e 74 65 72 66 61 63 65 5d 20 72 65 71 75 69  interface] requi
0c20: 72 65 73 20 74 68 72 65 65 20 73 6f 75 72 63 65  res three source
0c30: 0a 66 69 6c 65 73 3a 3c 2f 70 3e 0a 0a 3c 75 6c  .files:</p>..<ul
0c40: 3e 0a 3c 6c 69 3e 3c 62 3e 73 71 6c 69 74 65 33  >.<li><b>sqlite3
0c50: 2e 63 3c 2f 62 3e 3a 20 54 68 65 20 53 51 4c 69  .c</b>: The SQLi
0c60: 74 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20  te amalgamation 
0c70: 73 6f 75 72 63 65 20 66 69 6c 65 0a 3c 6c 69 3e  source file.<li>
0c80: 3c 62 3e 73 71 6c 69 74 65 33 2e 68 3c 2f 62 3e  <b>sqlite3.h</b>
0c90: 3a 20 54 68 65 20 68 65 61 64 65 72 20 66 69 6c  : The header fil
0ca0: 65 73 20 74 68 61 74 20 61 63 63 6f 6d 70 61 6e  es that accompan
0cb0: 69 65 73 20 73 71 6c 69 74 65 33 2e 63 20 61 6e  ies sqlite3.c an
0cc0: 64 20 0a 64 65 66 69 6e 65 73 20 74 68 65 20 43  d .defines the C
0cd0: 2d 6c 61 6e 67 75 61 67 65 20 69 6e 74 65 72 66  -language interf
0ce0: 61 63 65 73 20 74 6f 20 53 51 4c 69 74 65 2e 0a  aces to SQLite..
0cf0: 3c 6c 69 3e 3c 62 3e 73 68 65 6c 6c 2e 63 3c 2f  <li><b>shell.c</
0d00: 62 3e 3a 20 54 68 65 20 63 6f 6d 6d 61 6e 64 2d  b>: The command-
0d10: 6c 69 6e 65 20 69 6e 74 65 72 66 61 63 65 20 70  line interface p
0d20: 72 6f 67 72 61 6d 20 69 74 73 65 6c 66 2e 0a 54  rogram itself..T
0d30: 68 69 73 20 69 73 20 74 68 65 20 43 20 73 6f 75  his is the C sou
0d40: 72 63 65 20 63 6f 64 65 20 66 69 6c 65 20 74 68  rce code file th
0d50: 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
0d60: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 0a 74 68  definition of.th
0d70: 65 20 3c 62 3e 6d 61 69 6e 28 29 3c 2f 62 3e 20  e <b>main()</b> 
0d80: 72 6f 75 74 69 6e 65 20 61 6e 64 20 74 68 65 20  routine and the 
0d90: 6c 6f 6f 70 20 74 68 61 74 20 70 72 6f 6d 70 74  loop that prompt
0da0: 73 20 66 6f 72 20 75 73 65 72 20 69 6e 70 75 74  s for user input
0db0: 0a 61 6e 64 20 70 61 73 73 65 73 20 74 68 61 74  .and passes that
0dc0: 20 69 6e 70 75 74 20 69 6e 74 6f 20 74 68 65 20   input into the 
0dd0: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database 
0de0: 65 6e 67 69 6e 65 20 66 6f 72 20 70 72 6f 63 65  engine for proce
0df0: 73 73 69 6e 67 2e 0a 3c 2f 75 6c 3e 0a 0a 3c 70  ssing..</ul>..<p
0e00: 3e 41 6c 6c 20 74 68 72 65 65 20 6f 66 20 74 68  >All three of th
0e10: 65 20 61 62 6f 76 65 20 73 6f 75 72 63 65 20 66  e above source f
0e20: 69 6c 65 73 20 61 72 65 20 63 6f 6e 74 61 69 6e  iles are contain
0e30: 65 64 20 69 6e 20 74 68 65 0a 5b 61 6d 61 6c 67  ed in the.[amalg
0e40: 61 6d 61 74 69 6f 6e 20 74 61 72 62 61 6c 6c 5d  amation tarball]
0e50: 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20 74 68   available on th
0e60: 65 20 5b 64 6f 77 6e 6c 6f 61 64 20 70 61 67 65  e [download page
0e70: 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 6f 20 62 75  ].</p>..<p>To bu
0e80: 69 6c 64 20 74 68 65 20 43 4c 49 2c 20 73 69 6d  ild the CLI, sim
0e90: 70 6c 79 20 70 75 74 20 74 68 65 73 65 20 74 68  ply put these th
0ea0: 72 65 65 20 66 69 6c 65 73 20 69 6e 20 74 68 65  ree files in the
0eb0: 20 73 61 6d 65 20 64 69 72 65 63 74 6f 72 79 0a   same directory.
0ec0: 61 6e 64 20 63 6f 6d 70 69 6c 65 20 74 68 65 6d  and compile them
0ed0: 20 74 6f 67 65 74 68 65 72 2e 20 20 54 68 65 20   together.  The 
0ee0: 63 6f 6d 6d 61 6e 64 20 74 6f 20 63 6f 6d 70 69  command to compi
0ef0: 6c 65 20 43 20 70 72 6f 67 72 61 6d 73 20 76 61  le C programs va
0f00: 72 69 65 73 20 66 72 6f 6d 0a 6f 6e 65 20 6d 61  ries from.one ma
0f10: 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78  chine to the nex
0f20: 74 20 62 75 74 20 6f 6e 20 75 6e 69 78 20 73 79  t but on unix sy
0f30: 73 74 65 6d 73 20 74 79 70 69 63 61 6c 6c 79 20  stems typically 
0f40: 6c 6f 6f 6b 73 20 0a 73 6f 6d 65 74 68 69 6e 67  looks .something
0f50: 20 6c 69 6b 65 20 74 68 69 73 3a 3c 2f 70 3e 0a   like this:</p>.
0f60: 0a 3c 62 6c 6f 63 6b 71 75 6f 74 65 3e 3c 70 72  .<blockquote><pr
0f70: 65 3e 0a 67 63 63 20 73 68 65 6c 6c 2e 63 20 73  e>.gcc shell.c s
0f80: 71 6c 69 74 65 33 2e 63 20 2d 6c 70 74 68 72 65  qlite3.c -lpthre
0f90: 61 64 20 2d 6c 64 6c 0a 3c 2f 70 72 65 3e 3c 2f  ad -ldl.</pre></
0fa0: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
0fb0: 54 68 65 20 70 74 68 72 65 61 64 73 20 6c 69 62  The pthreads lib
0fc0: 72 61 72 79 20 69 73 20 6e 65 65 64 65 64 20 74  rary is needed t
0fd0: 6f 20 6d 61 6b 65 20 53 51 4c 69 74 65 20 74 68  o make SQLite th
0fe0: 72 65 61 64 73 61 66 65 2e 20 20 42 75 74 0a 73  readsafe.  But.s
0ff0: 69 6e 63 65 20 74 68 65 20 43 4c 49 20 69 73 20  ince the CLI is 
1000: 73 69 6e 67 6c 65 20 74 68 72 65 61 64 65 64 2c  single threaded,
1010: 20 20 77 65 20 63 6f 75 6c 64 20 69 6e 73 74 72    we could instr
1020: 75 63 74 20 53 51 4c 69 74 65 20 74 6f 20 62 75  uct SQLite to bu
1030: 69 6c 64 0a 69 6e 20 61 20 6e 6f 6e 2d 74 68 72  ild.in a non-thr
1040: 65 61 64 73 61 66 65 20 6d 6f 64 65 20 61 6e 64  eadsafe mode and
1050: 20 74 68 65 72 65 62 79 20 6f 6d 69 74 20 74 68   thereby omit th
1060: 65 20 70 74 68 72 65 61 64 73 20 6c 69 62 72 61  e pthreads libra
1070: 72 79 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71  ry:</p>..<blockq
1080: 75 6f 74 65 3e 3c 70 72 65 3e 0a 67 63 63 20 2d  uote><pre>.gcc -
1090: 44 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41  DSQLITE_THREADSA
10a0: 46 45 3d 30 20 73 68 65 6c 6c 2e 63 20 73 71 6c  FE=0 shell.c sql
10b0: 69 74 65 33 2e 63 20 2d 6c 64 6c 0a 3c 2f 70 72  ite3.c -ldl.</pr
10c0: 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a  e></blockquote>.
10d0: 0a 3c 70 3e 54 68 65 20 2d 6c 64 6c 20 6c 69 62  .<p>The -ldl lib
10e0: 72 61 72 79 20 69 73 20 6e 65 65 64 65 64 20 74  rary is needed t
10f0: 6f 20 73 75 70 70 6f 72 74 20 64 79 6e 61 6d 69  o support dynami
1100: 63 20 6c 6f 61 64 69 6e 67 2c 20 74 68 65 0a 5b  c loading, the.[
1110: 73 71 6c 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74  sqlite3_load_ext
1120: 65 6e 73 69 6f 6e 28 29 5d 20 69 6e 74 65 72 66  ension()] interf
1130: 61 63 65 20 61 6e 64 20 74 68 65 0a 5b 6c 6f 61  ace and the.[loa
1140: 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 53 51  d_extension() SQ
1150: 4c 20 66 75 6e 63 74 69 6f 6e 5d 2e 20 20 49 66  L function].  If
1160: 20 74 68 65 73 65 20 66 65 61 74 75 72 65 73 20   these features 
1170: 61 72 65 20 6e 6f 74 20 72 65 71 75 69 72 65 64  are not required
1180: 2c 0a 74 68 65 6e 20 74 68 65 79 20 63 61 6e 20  ,.then they can 
1190: 62 65 20 6f 6d 69 74 74 65 64 20 75 73 69 6e 67  be omitted using
11a0: 20 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f   [SQLITE_OMIT_LO
11b0: 41 44 5f 45 58 54 45 4e 53 49 4f 4e 5d 20 63 6f  AD_EXTENSION] co
11c0: 6d 70 69 6c 65 2d 74 69 6d 65 0a 6f 70 74 69 6f  mpile-time.optio
11d0: 6e 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75  n:</p>..<blockqu
11e0: 6f 74 65 3e 3c 70 72 65 3e 0a 67 63 63 20 2d 44  ote><pre>.gcc -D
11f0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
1200: 45 3d 30 20 2d 44 53 51 4c 49 54 45 5f 4f 4d 49  E=0 -DSQLITE_OMI
1210: 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e  T_LOAD_EXTENSION
1220: 20 73 68 65 6c 6c 2e 63 20 73 71 6c 69 74 65 33   shell.c sqlite3
1230: 2e 63 0a 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b  .c.</pre></block
1240: 71 75 6f 74 65 3e 0a 0a 3c 70 3e 4f 6e 65 20 6d  quote>..<p>One m
1250: 69 67 68 74 20 77 61 6e 74 20 74 6f 20 70 72 6f  ight want to pro
1260: 76 69 64 65 20 6f 74 68 65 72 20 5b 63 6f 6d 70  vide other [comp
1270: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
1280: 5d 20 73 75 63 68 20 61 73 0a 5b 53 51 4c 49 54  ] such as.[SQLIT
1290: 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 5d 20 66  E_ENABLE_FTS3] f
12a0: 6f 72 20 66 75 6c 6c 2d 74 65 78 74 20 73 65 61  or full-text sea
12b0: 72 63 68 20 6f 72 20 5b 53 51 4c 49 54 45 5f 45  rch or [SQLITE_E
12c0: 4e 41 42 4c 45 5f 52 54 52 45 45 5d 0a 66 6f 72  NABLE_RTREE].for
12d0: 20 74 68 65 20 52 2a 54 72 65 65 20 73 65 61 72   the R*Tree sear
12e0: 63 68 20 65 6e 67 69 6e 65 20 65 78 74 65 6e 73  ch engine extens
12f0: 69 6f 6e 2e 20 20 41 6e 64 20 6f 6e 65 20 77 6f  ion.  And one wo
1300: 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 20 74 6f 0a  uld normally to.
1310: 73 70 65 63 69 66 79 20 73 6f 6d 65 20 63 6f 6d  specify some com
1320: 70 69 6c 65 72 20 6f 70 74 69 6d 69 7a 61 74 69  piler optimizati
1330: 6f 6e 20 73 77 69 74 63 68 65 73 20 74 6f 6f 2e  on switches too.
1340: 20 20 28 54 68 65 20 70 72 65 63 6f 6d 70 69 6c    (The precompil
1350: 65 64 0a 43 4c 49 20 61 76 61 69 6c 61 62 6c 65  ed.CLI available
1360: 20 66 6f 72 20 64 6f 77 6e 6c 6f 61 64 20 66 72   for download fr
1370: 6f 6d 20 74 68 65 20 53 51 4c 69 74 65 20 77 65  om the SQLite we
1380: 62 73 69 74 65 20 75 73 65 73 20 22 2d 4f 73 22  bsite uses "-Os"
1390: 2e 29 0a 54 68 65 72 65 20 61 72 65 20 63 6f 75  .).There are cou
13a0: 6e 74 6c 65 73 73 20 70 6f 73 73 69 62 6c 65 20  ntless possible 
13b0: 76 61 72 69 61 74 69 6f 6e 73 20 68 65 72 65 2e  variations here.
13c0: 3c 2f 70 3e 0a 0a 3c 70 3e 54 68 65 20 6b 65 79  </p>..<p>The key
13d0: 20 70 6f 69 6e 74 20 69 73 20 74 68 69 73 3a 20   point is this: 
13e0: 20 42 75 69 6c 64 69 6e 67 20 74 68 65 20 43 4c   Building the CL
13f0: 49 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 63 6f  I consists of co
1400: 6d 70 69 6c 69 6e 67 20 0a 74 6f 67 65 74 68 65  mpiling .togethe
1410: 72 20 74 77 6f 20 43 2d 6c 61 6e 67 75 61 67 65  r two C-language
1420: 20 66 69 6c 65 73 2e 20 20 20 54 68 65 20 3c 62   files.   The <b
1430: 3e 73 68 65 6c 6c 2e 63 3c 2f 62 3e 20 66 69 6c  >shell.c</b> fil
1440: 65 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 64  e contains the.d
1450: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 65  efinition of the
1460: 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 61 6e 64   entry point and
1470: 20 74 68 65 20 75 73 65 72 20 69 6e 70 75 74 20   the user input 
1480: 6c 6f 6f 70 20 61 6e 64 20 74 68 65 0a 53 51 4c  loop and the.SQL
1490: 69 74 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  ite amalgamation
14a0: 20 3c 62 3e 73 71 6c 69 74 65 33 2e 63 3c 2f 62   <b>sqlite3.c</b
14b0: 3e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 63  > contains the c
14c0: 6f 6d 70 6c 65 74 65 20 69 6d 70 6c 65 6d 65 6e  omplete implemen
14d0: 74 61 74 69 6f 6e 0a 6f 66 20 74 68 65 20 53 51  tation.of the SQ
14e0: 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 3c 2f 70  Lite library.</p
14f0: 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61 67 6d  >..<tcl>hd_fragm
1500: 65 6e 74 20 7b 74 63 6c 7d 20 7b 63 6f 6d 70 69  ent {tcl} {compi
1510: 6c 69 6e 67 20 74 68 65 20 54 43 4c 20 69 6e 74  ling the TCL int
1520: 65 72 66 61 63 65 7d 3c 2f 74 63 6c 3e 0a 3c 68  erface}</tcl>.<h
1530: 32 3e 43 6f 6d 70 69 6c 69 6e 67 20 54 68 65 20  2>Compiling The 
1540: 54 43 4c 20 49 6e 74 65 72 66 61 63 65 3c 2f 68  TCL Interface</h
1550: 32 3e 0a 0a 3c 70 3e 54 68 65 20 54 43 4c 20 69  2>..<p>The TCL i
1560: 6e 74 65 72 66 61 63 65 20 66 6f 72 20 53 51 4c  nterface for SQL
1570: 69 74 65 20 69 73 20 61 20 73 6d 61 6c 6c 20 6d  ite is a small m
1580: 6f 64 75 6c 65 20 74 68 61 74 20 69 73 20 61 64  odule that is ad
1590: 64 65 64 20 69 6e 74 6f 0a 74 68 65 20 72 65 67  ded into.the reg
15a0: 75 6c 61 72 20 61 6d 61 6c 67 61 6d 61 74 69 6f  ular amalgamatio
15b0: 6e 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20 69  n.  The result i
15c0: 73 20 61 20 6e 65 77 20 61 6d 61 6c 67 61 6d 61  s a new amalgama
15d0: 74 65 64 20 73 6f 75 72 63 65 0a 66 69 6c 65 20  ted source.file 
15e0: 63 61 6c 6c 65 64 20 22 3c 62 3e 74 63 6c 73 71  called "<b>tclsq
15f0: 6c 69 74 65 33 2e 63 3c 2f 62 3e 22 2e 20 20 54  lite3.c</b>".  T
1600: 68 69 73 20 73 69 6e 67 6c 65 20 73 6f 75 72 63  his single sourc
1610: 65 20 66 69 6c 65 20 69 73 20 61 6c 6c 20 74 68  e file is all th
1620: 61 74 0a 69 73 20 6e 65 65 64 65 64 20 74 6f 20  at.is needed to 
1630: 67 65 6e 65 72 61 74 65 20 61 20 73 68 61 72 65  generate a share
1640: 64 20 6c 69 62 72 61 72 79 20 74 68 61 74 20 63  d library that c
1650: 61 6e 20 62 65 20 6c 6f 61 64 65 64 20 69 6e 74  an be loaded int
1660: 6f 20 61 0a 73 74 61 6e 64 61 72 64 20 0a 5b 68  o a.standard .[h
1670: 74 74 70 3a 2f 2f 77 69 6b 69 2e 74 63 6c 2e 74  ttp://wiki.tcl.t
1680: 6b 2f 32 35 34 31 20 7c 20 74 63 6c 73 68 5d 20  k/2541 | tclsh] 
1690: 6f 72 20 0a 5b 68 74 74 70 3a 2f 2f 77 69 6b 69  or .[http://wiki
16a0: 2e 74 63 6c 2e 74 6b 2f 32 33 36 34 20 7c 20 77  .tcl.tk/2364 | w
16b0: 69 73 68 5d 20 75 73 69 6e 67 20 74 68 65 20 0a  ish] using the .
16c0: 5b 68 74 74 70 3a 2f 2f 77 69 6b 69 2e 74 63 6c  [http://wiki.tcl
16d0: 2e 74 6b 2f 39 38 33 30 20 7c 20 54 43 4c 20 6c  .tk/9830 | TCL l
16e0: 6f 61 64 20 63 6f 6d 6d 61 6e 64 5d 2c 20 6f 72  oad command], or
16f0: 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 0a 73   to generate a.s
1700: 74 61 6e 64 61 6c 6f 6e 65 20 74 63 6c 73 68 20  tandalone tclsh 
1710: 74 68 61 74 20 63 6f 6d 65 73 20 77 69 74 68 20  that comes with 
1720: 53 51 4c 69 74 65 20 62 75 69 6c 74 20 69 6e 2e  SQLite built in.
1730: 0a 41 20 63 6f 70 79 20 6f 66 20 74 68 65 20 74  .A copy of the t
1740: 63 6c 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 0a  cl amalgamation.
1750: 69 73 20 69 6e 63 6c 75 64 65 64 20 6f 6e 20 74  is included on t
1760: 68 65 20 5b 64 6f 77 6e 6c 6f 61 64 20 70 61 67  he [download pag
1770: 65 5d 20 61 73 20 61 20 66 69 6c 65 20 69 6e 20  e] as a file in 
1780: 74 68 65 20 5b 54 45 41 20 74 61 72 62 61 6c 6c  the [TEA tarball
1790: 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 6f 20 67 65  ].</p>..<p>To ge
17a0: 6e 65 72 61 74 65 20 61 20 54 43 4c 2d 6c 6f 61  nerate a TCL-loa
17b0: 64 61 62 6c 65 20 6c 69 62 72 61 72 79 20 66 6f  dable library fo
17c0: 72 20 53 51 4c 69 74 65 20 6f 6e 20 4c 69 6e 75  r SQLite on Linu
17d0: 78 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  x, the following
17e0: 0a 63 6f 6d 6d 61 6e 64 20 77 69 6c 6c 20 73 75  .command will su
17f0: 66 66 69 63 65 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f  ffice:</p>..<blo
1800: 63 6b 71 75 6f 74 65 3e 3c 70 72 65 3e 0a 67 63  ckquote><pre>.gc
1810: 63 20 2d 6f 20 6c 69 62 74 63 6c 73 71 6c 69 74  c -o libtclsqlit
1820: 65 33 2e 73 6f 20 2d 73 68 61 72 65 64 20 74 63  e3.so -shared tc
1830: 6c 73 71 6c 69 74 65 33 2e 63 20 2d 6c 70 74 68  lsqlite3.c -lpth
1840: 72 65 61 64 20 2d 6c 64 6c 20 2d 6c 74 63 6c 0a  read -ldl -ltcl.
1850: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
1860: 74 65 3e 0a 0a 3c 70 3e 42 75 69 6c 64 69 6e 67  te>..<p>Building
1870: 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 69 65   shared librarie
1880: 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58 20 61  s for Mac OS X a
1890: 6e 64 20 57 69 6e 64 6f 77 73 20 69 73 20 6e 6f  nd Windows is no
18a0: 74 20 6e 65 61 72 6c 79 20 73 6f 20 73 69 6d 70  t nearly so simp
18b0: 6c 65 2c 0a 75 6e 66 6f 72 74 75 6e 61 74 65 6c  le,.unfortunatel
18c0: 79 2e 20 20 46 6f 72 20 74 68 6f 73 65 20 70 6c  y.  For those pl
18d0: 61 74 66 6f 72 6d 73 20 69 74 20 69 73 20 62 65  atforms it is be
18e0: 73 74 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f  st to use the co
18f0: 6e 66 69 67 75 72 65 20 73 63 72 69 70 74 0a 61  nfigure script.a
1900: 6e 64 20 6d 61 6b 65 66 69 6c 65 20 74 68 61 74  nd makefile that
1910: 20 69 73 20 69 6e 63 6c 75 64 65 64 20 77 69 74   is included wit
1920: 68 20 74 68 65 20 5b 54 45 41 20 74 61 72 62 61  h the [TEA tarba
1930: 6c 6c 5d 2e 3c 2f 70 3e 0a 0a 3c 70 3e 54 6f 20  ll].</p>..<p>To 
1940: 67 65 6e 65 72 61 74 65 20 61 20 73 74 61 6e 64  generate a stand
1950: 61 6c 6f 6e 65 20 74 63 6c 73 68 20 74 68 61 74  alone tclsh that
1960: 20 69 73 20 73 74 61 74 69 63 61 6c 6c 79 20 6c   is statically l
1970: 69 6e 6b 65 64 20 77 69 74 68 20 53 51 4c 69 74  inked with SQLit
1980: 65 2c 0a 75 73 65 20 74 68 69 73 20 63 6f 6d 70  e,.use this comp
1990: 69 6c 65 72 20 69 6e 76 6f 63 61 74 69 6f 6e 3a  iler invocation:
19a0: 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f 74  </p>..<blockquot
19b0: 65 3e 3c 70 72 65 3e 0a 67 63 63 20 2d 44 54 43  e><pre>.gcc -DTC
19c0: 4c 53 48 3d 31 20 74 63 6c 73 71 6c 69 74 65 33  LSH=1 tclsqlite3
19d0: 2e 63 20 2d 6c 74 63 6c 20 2d 6c 70 74 68 72 65  .c -ltcl -lpthre
19e0: 61 64 20 2d 6c 64 6c 20 2d 6c 7a 20 2d 6c 6d 0a  ad -ldl -lz -lm.
19f0: 3c 2f 70 72 65 3e 3c 2f 62 6c 6f 63 6b 71 75 6f  </pre></blockquo
1a00: 74 65 3e 0a 0a 3c 70 3e 54 68 65 20 74 72 69 63  te>..<p>The tric
1a10: 6b 20 68 65 72 65 20 69 73 20 74 68 65 20 2d 44  k here is the -D
1a20: 54 43 4c 53 48 3d 31 20 6f 70 74 69 6f 6e 2e 20  TCLSH=1 option. 
1a30: 20 54 68 65 20 54 43 4c 20 69 6e 74 65 72 66 61   The TCL interfa
1a40: 63 65 20 6d 6f 64 75 6c 65 20 66 6f 72 0a 53 51  ce module for.SQ
1a50: 4c 69 74 65 20 69 6e 63 6c 75 64 65 73 20 61 20  Lite includes a 
1a60: 3c 62 3e 6d 61 69 6e 28 29 3c 2f 62 3e 20 70 72  <b>main()</b> pr
1a70: 6f 63 65 64 75 72 65 20 74 68 61 74 20 69 6e 69  ocedure that ini
1a80: 74 69 61 6c 69 7a 65 73 20 61 20 54 43 4c 20 69  tializes a TCL i
1a90: 6e 74 65 72 70 72 65 74 65 72 0a 61 6e 64 20 65  nterpreter.and e
1aa0: 6e 74 65 72 73 20 61 20 63 6f 6d 6d 61 6e 64 2d  nters a command-
1ab0: 6c 69 6e 65 20 6c 6f 6f 70 20 77 68 65 6e 20 69  line loop when i
1ac0: 74 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69  t is compiled wi
1ad0: 74 68 20 2d 44 54 43 4c 53 48 3d 31 2e 20 20 54  th -DTCLSH=1.  T
1ae0: 68 65 0a 63 6f 6d 6d 61 6e 64 20 61 62 6f 76 65  he.command above
1af0: 20 77 6f 72 6b 73 20 6f 6e 20 62 6f 74 68 20 4c   works on both L
1b00: 69 6e 75 78 20 61 6e 64 20 4d 61 63 20 4f 53 20  inux and Mac OS 
1b10: 58 2c 20 74 68 6f 75 67 68 20 6f 6e 65 20 6d 61  X, though one ma
1b20: 79 20 6e 65 65 64 20 74 6f 20 61 64 6a 75 73 74  y need to adjust
1b30: 0a 74 68 65 20 6c 69 62 72 61 72 79 20 6f 70 74  .the library opt
1b40: 69 6f 6e 73 20 64 65 70 65 6e 64 69 6e 67 20 6f  ions depending o
1b50: 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 61  n the platform a
1b60: 6e 64 20 77 68 69 63 68 20 76 65 72 73 69 6f 6e  nd which version
1b70: 20 6f 66 20 54 43 4c 20 6f 6e 65 0a 69 73 20 6c   of TCL one.is l
1b80: 69 6e 6b 69 6e 67 20 61 67 61 69 6e 73 74 2e 3c  inking against.<
1b90: 2f 70 3e 0a 0a 3c 74 63 6c 3e 68 64 5f 66 72 61  /p>..<tcl>hd_fra
1ba0: 67 6d 65 6e 74 20 7b 61 6d 61 6c 7d 20 7b 62 75  gment {amal} {bu
1bb0: 69 6c 64 69 6e 67 20 74 68 65 20 61 6d 61 6c 67  ilding the amalg
1bc0: 61 6d 61 74 69 6f 6e 7d 3c 2f 74 63 6c 3e 0a 3c  amation}</tcl>.<
1bd0: 68 32 3e 42 75 69 6c 64 69 6e 67 20 54 68 65 20  h2>Building The 
1be0: 41 6d 61 6c 67 61 6d 61 74 69 6f 6e 3c 2f 68 32  Amalgamation</h2
1bf0: 3e 0a 0a 3c 70 3e 54 68 65 20 76 65 72 73 69 6f  >..<p>The versio
1c00: 6e 73 20 6f 66 20 74 68 65 20 53 51 4c 69 74 65  ns of the SQLite
1c10: 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 74 68   amalgamation th
1c20: 61 74 20 61 72 65 20 73 75 70 70 6c 69 65 64 20  at are supplied 
1c30: 6f 6e 20 74 68 65 0a 5b 64 6f 77 6e 6c 6f 61 64  on the.[download
1c40: 20 70 61 67 65 5d 20 61 72 65 20 6e 6f 72 6d 61   page] are norma
1c50: 6c 6c 79 20 61 64 65 71 75 61 74 65 20 66 6f 72  lly adequate for
1c60: 20 6d 6f 73 74 20 75 73 65 72 73 2e 20 20 48 6f   most users.  Ho
1c70: 77 65 76 65 72 2c 20 73 6f 6d 65 0a 70 72 6f 6a  wever, some.proj
1c80: 65 63 74 73 20 6d 61 79 20 77 61 6e 74 20 6f 72  ects may want or
1c90: 20 6e 65 65 64 20 74 6f 20 62 75 69 6c 64 20 74   need to build t
1ca0: 68 65 69 72 20 6f 77 6e 20 61 6d 61 6c 67 61 6d  heir own amalgam
1cb0: 61 74 69 6f 6e 73 2e 20 20 41 20 63 6f 6d 6d 6f  ations.  A commo
1cc0: 6e 0a 72 65 61 73 6f 6e 20 66 6f 72 20 62 75 69  n.reason for bui
1cd0: 6c 64 69 6e 67 20 61 20 63 75 73 74 6f 6d 20 61  lding a custom a
1ce0: 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 69 73 20 69  malgamation is i
1cf0: 6e 20 6f 72 64 65 72 20 74 6f 20 75 73 65 20 63  n order to use c
1d00: 65 72 74 61 69 6e 0a 5b 63 6f 6d 70 69 6c 65 2d  ertain.[compile-
1d10: 74 69 6d 65 20 6f 70 74 69 6f 6e 73 5d 20 74 6f  time options] to
1d20: 20 63 75 73 74 6f 6d 69 7a 65 20 74 68 65 20 53   customize the S
1d30: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 20 20  QLite library.  
1d40: 52 65 63 61 6c 6c 20 74 68 61 74 0a 74 68 65 20  Recall that.the 
1d50: 53 51 4c 69 74 65 20 61 6d 61 6c 67 61 6d 61 74  SQLite amalgamat
1d60: 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 61 20 6c  ion contains a l
1d70: 6f 74 20 6f 66 20 43 2d 63 6f 64 65 20 74 68 61  ot of C-code tha
1d80: 74 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62  t is generated b
1d90: 79 0a 61 75 78 69 6c 69 61 72 79 20 70 72 6f 67  y.auxiliary prog
1da0: 72 61 6d 73 20 61 6e 64 20 73 63 72 69 70 74 73  rams and scripts
1db0: 2e 20 20 4d 61 6e 79 20 6f 66 20 74 68 65 20 63  .  Many of the c
1dc0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 0a 6f 70 74 69  ompile-time.opti
1dd0: 6f 6e 73 20 65 66 66 65 63 74 20 74 68 69 73 20  ons effect this 
1de0: 67 65 6e 65 72 61 74 65 64 20 63 6f 64 65 20 61  generated code a
1df0: 6e 64 20 6d 75 73 74 20 62 65 20 73 75 70 70 6c  nd must be suppl
1e00: 69 65 64 20 74 6f 20 74 68 65 20 63 6f 64 65 0a  ied to the code.
1e10: 67 65 6e 65 72 61 74 6f 72 73 20 62 65 66 6f 72  generators befor
1e20: 65 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69  e the amalgamati
1e30: 6f 6e 20 69 73 20 61 73 73 65 6d 62 6c 65 64 2e  on is assembled.
1e40: 20 20 54 68 65 20 73 65 74 20 6f 66 20 0a 63 6f    The set of .co
1e50: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
1e60: 6e 73 20 74 68 61 74 20 6d 75 73 74 20 62 65 20  ns that must be 
1e70: 70 61 73 73 65 64 20 69 6e 74 6f 20 74 68 65 20  passed into the 
1e80: 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 73 20  code generators 
1e90: 63 61 6e 0a 76 61 72 79 20 66 72 6f 6d 20 6f 6e  can.vary from on
1ea0: 65 20 72 65 6c 65 61 73 65 20 6f 66 20 53 51 4c  e release of SQL
1eb0: 69 74 65 20 74 6f 20 74 68 65 20 6e 65 78 74 2c  ite to the next,
1ec0: 20 62 75 74 20 61 74 20 74 68 65 20 74 69 6d 65   but at the time
1ed0: 20 6f 66 20 74 68 69 73 0a 77 72 69 74 69 6e 67   of this.writing
1ee0: 20 28 63 69 72 63 61 20 53 51 4c 69 74 65 20 33   (circa SQLite 3
1ef0: 2e 36 2e 32 30 2c 20 32 30 30 39 2d 31 31 2d 30  .6.20, 2009-11-0
1f00: 34 29 20 74 68 65 20 73 65 74 20 6f 66 20 6f 70  4) the set of op
1f10: 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 74 0a  tions that must.
1f20: 62 65 20 6b 6e 6f 77 6e 20 62 79 20 74 68 65 20  be known by the 
1f30: 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 73 20  code generators 
1f40: 69 6e 63 6c 75 64 65 73 3a 3c 2f 70 3e 0a 0a 3c  includes:</p>..<
1f50: 75 6c 3e 0a 3c 6c 69 3e 5b 53 51 4c 49 54 45 5f  ul>.<li>[SQLITE_
1f60: 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
1f70: 4c 45 54 45 5f 4c 49 4d 49 54 5d 0a 3c 6c 69 3e  LETE_LIMIT].<li>
1f80: 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54  [SQLITE_OMIT_ALT
1f90: 45 52 54 41 42 4c 45 5d 0a 3c 6c 69 3e 5b 53 51  ERTABLE].<li>[SQ
1fa0: 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
1fb0: 45 5d 0a 3c 6c 69 3e 5b 53 51 4c 49 54 45 5f 4f  E].<li>[SQLITE_O
1fc0: 4d 49 54 5f 41 54 54 41 43 48 5d 0a 3c 6c 69 3e  MIT_ATTACH].<li>
1fd0: 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54  [SQLITE_OMIT_AUT
1fe0: 4f 49 4e 43 52 45 4d 45 4e 54 5d 0a 3c 6c 69 3e  OINCREMENT].<li>
1ff0: 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53  [SQLITE_OMIT_CAS
2000: 54 5d 0a 3c 6c 69 3e 5b 53 51 4c 49 54 45 5f 4f  T].<li>[SQLITE_O
2010: 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c  MIT_COMPOUND_SEL
2020: 45 43 54 5d 0a 3c 6c 69 3e 5b 53 51 4c 49 54 45  ECT].<li>[SQLITE
2030: 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 5d 0a 3c  _OMIT_EXPLAIN].<
2040: 6c 69 3e 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  li>[SQLITE_OMIT_
2050: 46 4f 52 45 49 47 4e 5f 4b 45 59 5d 0a 3c 6c 69  FOREIGN_KEY].<li
2060: 3e 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  >[SQLITE_OMIT_PR
2070: 41 47 4d 41 5d 0a 3c 6c 69 3e 5b 53 51 4c 49 54  AGMA].<li>[SQLIT
2080: 45 5f 4f 4d 49 54 5f 52 45 49 4e 44 45 58 5d 0a  E_OMIT_REINDEX].
2090: 3c 6c 69 3e 5b 53 51 4c 49 54 45 5f 4f 4d 49 54  <li>[SQLITE_OMIT
20a0: 5f 53 55 42 51 55 45 52 59 5d 0a 3c 6c 69 3e 5b  _SUBQUERY].<li>[
20b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50  SQLITE_OMIT_TEMP
20c0: 44 42 5d 0a 3c 6c 69 3e 5b 53 51 4c 49 54 45 5f  DB].<li>[SQLITE_
20d0: 4f 4d 49 54 5f 54 52 49 47 47 45 52 5d 0a 3c 6c  OMIT_TRIGGER].<l
20e0: 69 3e 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  i>[SQLITE_OMIT_V
20f0: 41 43 55 55 4d 5d 0a 3c 6c 69 3e 5b 53 51 4c 49  ACUUM].<li>[SQLI
2100: 54 45 5f 4f 4d 49 54 5f 56 49 45 57 5d 0a 3c 6c  TE_OMIT_VIEW].<l
2110: 69 3e 5b 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  i>[SQLITE_OMIT_V
2120: 49 52 54 55 41 4c 54 41 42 4c 45 5d 0a 3c 2f 75  IRTUALTABLE].</u
2130: 6c 3e 0a 0a 3c 70 3e 54 6f 20 62 75 69 6c 64 20  l>..<p>To build 
2140: 61 20 63 75 73 74 6f 6d 20 61 6d 61 6c 67 61 6d  a custom amalgam
2150: 61 74 69 6f 6e 2c 20 66 69 72 73 74 20 64 6f 77  ation, first dow
2160: 6e 6c 6f 61 64 20 74 68 65 20 6f 72 69 67 69 6e  nload the origin
2170: 61 6c 20 69 6e 64 69 76 69 64 75 61 6c 0a 73 6f  al individual.so
2180: 75 72 63 65 20 66 69 6c 65 73 20 6f 6e 74 6f 20  urce files onto 
2190: 61 20 75 6e 69 78 20 6f 72 20 75 6e 69 78 2d 6c  a unix or unix-l
21a0: 69 6b 65 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20  ike development 
21b0: 70 6c 61 74 66 6f 72 6d 2e 20 20 28 41 6e 79 20  platform.  (Any 
21c0: 4c 69 6e 75 78 20 6f 72 0a 4d 61 63 20 4f 53 20  Linux or.Mac OS 
21d0: 58 20 6d 61 63 68 69 6e 65 20 77 69 6c 6c 20 73  X machine will s
21e0: 75 66 66 69 63 65 2e 20 20 57 69 6e 64 6f 77 73  uffice.  Windows
21f0: 20 77 69 6c 6c 20 77 6f 72 6b 20 69 66 20 6c 6f   will work if lo
2200: 61 64 65 64 20 77 69 74 68 0a 5b 68 74 74 70 3a  aded with.[http:
2210: 2f 2f 77 77 77 2e 63 79 67 77 69 6e 2e 63 6f 6d  //www.cygwin.com
2220: 2f 20 7c 20 43 79 67 77 69 6e 5d 2e 29 20 20 42  / | Cygwin].)  B
2230: 65 20 73 75 72 65 20 74 6f 20 67 65 74 20 74 68  e sure to get th
2240: 65 20 6f 72 69 67 69 6e 61 6c 20 73 6f 75 72 63  e original sourc
2250: 65 0a 66 69 6c 65 73 20 6e 6f 74 20 74 68 65 20  e.files not the 
2260: 22 70 72 65 70 72 6f 63 65 73 73 65 64 20 73 6f  "preprocessed so
2270: 75 72 63 65 20 66 69 6c 65 73 22 2e 20 20 4f 6e  urce files".  On
2280: 65 20 63 61 6e 20 6f 62 74 61 69 6e 20 74 68 65  e can obtain the
2290: 20 63 6f 6d 70 6c 65 74 65 0a 73 65 74 20 6f 66   complete.set of
22a0: 20 6f 72 69 67 69 6e 61 6c 20 73 6f 75 72 63 65   original source
22b0: 20 66 69 6c 65 73 20 65 69 74 68 65 72 20 66 72   files either fr
22c0: 6f 6d 20 74 68 65 20 5b 64 6f 77 6e 6c 6f 61 64  om the [download
22d0: 20 70 61 67 65 5d 20 6f 72 20 64 69 72 65 63 74   page] or direct
22e0: 6c 79 0a 66 72 6f 6d 20 74 68 65 20 5b 68 74 74  ly.from the [htt
22f0: 70 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f  p://www.sqlite.o
2300: 72 67 2f 73 72 63 20 7c 20 63 6f 6e 66 69 67 75  rg/src | configu
2310: 72 61 74 69 6f 6e 20 6d 61 6e 61 67 65 6d 65 6e  ration managemen
2320: 74 20 73 79 73 74 65 6d 5d 2e 3c 2f 70 3e 0a 0a  t system].</p>..
2330: 3c 70 3e 53 75 70 70 6f 73 65 20 74 68 65 20 53  <p>Suppose the S
2340: 51 4c 69 74 65 20 73 6f 75 72 63 65 20 74 72 65  QLite source tre
2350: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  e is stored in a
2360: 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 64   directory named
2370: 20 22 73 71 6c 69 74 65 22 2e 0a 50 6c 61 6e 20   "sqlite"..Plan 
2380: 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  to construct the
2390: 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 69 6e   amalgamation in
23a0: 20 61 20 70 61 72 61 6c 6c 65 6c 20 64 69 72 65   a parallel dire
23b0: 63 74 6f 72 79 20 6e 61 6d 65 64 20 28 66 6f 72  ctory named (for
23c0: 0a 65 78 61 6d 70 6c 65 29 20 22 62 6c 64 22 2e  .example) "bld".
23d0: 20 20 46 69 72 73 74 20 63 6f 6e 73 74 72 75 63    First construc
23e0: 74 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65  t an appropriate
23f0: 20 4d 61 6b 65 66 69 6c 65 20 62 79 20 65 69 74   Makefile by eit
2400: 68 65 72 0a 72 75 6e 6e 69 6e 67 20 74 68 65 20  her.running the 
2410: 63 6f 6e 66 69 67 75 72 65 20 73 63 72 69 70 74  configure script
2420: 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74   at the top of t
2430: 68 65 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65  he SQLite source
2440: 20 74 72 65 65 2c 20 6f 72 20 62 79 0a 6d 61 6b   tree, or by.mak
2450: 69 6e 67 20 61 20 63 6f 70 79 20 6f 66 20 6f 6e  ing a copy of on
2460: 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6c 61 74  e of the templat
2470: 65 20 4d 61 6b 65 66 69 6c 65 73 20 61 74 20 74  e Makefiles at t
2480: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 73 6f  he top of the so
2490: 75 72 63 65 20 74 72 65 65 2e 0a 54 68 65 6e 20  urce tree..Then 
24a0: 68 61 6e 64 20 65 64 69 74 20 74 68 69 73 20 4d  hand edit this M
24b0: 61 6b 65 66 69 6c 65 20 74 6f 20 69 6e 63 6c 75  akefile to inclu
24c0: 64 65 20 74 68 65 20 64 65 73 69 72 65 64 20 63  de the desired c
24d0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
24e0: 6f 6e 73 2e 0a 46 69 6e 61 6c 6c 79 20 72 75 6e  ons..Finally run
24f0: 3a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b 71 75 6f  :</p>..<blockquo
2500: 74 65 3e 3c 70 72 65 3e 0a 6d 61 6b 65 20 73 71  te><pre>.make sq
2510: 6c 69 74 65 33 2e 63 0a 3c 2f 70 72 65 3e 3c 2f  lite3.c.</pre></
2520: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 3c 70 3e  blockquote>..<p>
2530: 54 68 65 20 22 73 71 6c 69 74 65 33 2e 63 22 20  The "sqlite3.c" 
2540: 6d 61 6b 65 20 74 61 72 67 65 74 20 77 69 6c 6c  make target will
2550: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
2560: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 72 65 67  onstruct the reg
2570: 75 6c 61 72 0a 22 3c 62 3e 73 71 6c 69 74 65 33  ular."<b>sqlite3
2580: 2e 63 3c 2f 62 3e 22 20 61 6d 61 6c 67 61 6d 61  .c</b>" amalgama
2590: 74 69 6f 6e 20 73 6f 75 72 63 65 20 66 69 6c 65  tion source file
25a0: 2c 20 69 74 73 20 68 65 61 64 65 72 20 66 69 6c  , its header fil
25b0: 65 0a 22 3c 62 3e 73 71 6c 69 74 65 33 2e 68 3c  e."<b>sqlite3.h<
25c0: 2f 62 3e 22 2c 20 61 6e 64 20 74 68 65 20 22 3c  /b>", and the "<
25d0: 62 3e 74 63 6c 73 71 6c 69 74 65 33 2e 63 3c 2f  b>tclsqlite3.c</
25e0: 62 3e 22 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  b>" amalgamation
25f0: 20 73 6f 75 72 63 65 0a 66 69 6c 65 20 74 68 61   source.file tha
2600: 74 20 69 6e 63 6c 75 64 65 73 20 74 68 65 20 54  t includes the T
2610: 43 4c 20 69 6e 74 65 72 66 61 63 65 2e 0a 41 66  CL interface..Af
2620: 74 65 72 77 61 72 64 73 2c 20 74 68 65 20 6e 65  terwards, the ne
2630: 65 64 65 64 20 66 69 6c 65 73 20 63 61 6e 20 62  eded files can b
2640: 65 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 70 72  e copied into pr
2650: 6f 6a 65 63 74 20 64 69 72 65 63 74 6f 72 69 65  oject directorie
2660: 73 20 61 6e 64 0a 63 6f 6d 70 69 6c 65 64 20 61  s and.compiled a
2670: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 65 20  ccording to the 
2680: 70 72 6f 63 65 64 75 72 65 73 20 6f 75 74 6c 69  procedures outli
2690: 6e 65 64 20 61 62 6f 76 65 2e 3c 2f 70 3e 0a     ned above.</p>.