/ Hex Artifact Content
Login

Artifact 950c36f45941c12140e346a907fb66198bc2770ff7a17c749201e78d34bb3b0b:


0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 74 63 6c 73 68  #!/usr/bin/tclsh
0010: 0a 23 0a 23 20 52 75 6e 20 74 68 69 73 20 73 63  .#.# Run this sc
0020: 72 69 70 74 20 74 6f 20 67 65 6e 65 72 61 74 65  ript to generate
0030: 20 74 68 65 20 22 73 72 63 2f 73 68 65 6c 6c 2e   the "src/shell.
0040: 63 22 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66  c" source file f
0050: 72 6f 6d 20 0a 23 20 63 6f 6e 73 74 69 74 75 65  rom .# constitue
0060: 6e 74 20 70 61 72 74 73 2e 0a 23 0a 73 65 74 20  nt parts..#.set 
0070: 74 6f 70 64 69 72 20 5b 66 69 6c 65 20 64 69 72  topdir [file dir
0080: 20 5b 66 69 6c 65 20 64 69 72 20 5b 66 69 6c 65   [file dir [file
0090: 20 6e 6f 72 6d 61 6c 20 24 61 72 67 76 30 5d 5d   normal $argv0]]
00a0: 5d 0a 70 75 74 73 20 22 4f 76 65 72 77 72 69 74  ].puts "Overwrit
00b0: 69 6e 67 20 24 74 6f 70 64 69 72 2f 73 72 63 2f  ing $topdir/src/
00c0: 73 68 65 6c 6c 2e 63 20 77 69 74 68 20 6e 65 77  shell.c with new
00d0: 20 73 68 65 6c 6c 20 73 6f 75 72 63 65 20 63 6f   shell source co
00e0: 64 65 2e 2e 2e 22 0a 73 65 74 20 6f 75 74 20 5b  de...".set out [
00f0: 6f 70 65 6e 20 24 74 6f 70 64 69 72 2f 73 72 63  open $topdir/src
0100: 2f 73 68 65 6c 6c 2e 63 20 77 62 5d 0a 70 75 74  /shell.c wb].put
0110: 73 20 24 6f 75 74 20 7b 2f 2a 20 44 4f 20 4e 4f  s $out {/* DO NO
0120: 54 20 45 44 49 54 21 0a 2a 2a 20 54 68 69 73 20  T EDIT!.** This 
0130: 66 69 6c 65 20 69 73 20 61 75 74 6f 6d 61 74 69  file is automati
0140: 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20  cally generated 
0150: 62 79 20 74 68 65 20 73 63 72 69 70 74 20 69 6e  by the script in
0160: 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c 0a 2a   the canonical.*
0170: 2a 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65 20  * SQLite source 
0180: 74 72 65 65 20 61 74 20 74 6f 6f 6c 2f 6d 6b 73  tree at tool/mks
0190: 68 65 6c 6c 63 2e 74 63 6c 2e 20 20 54 68 61 74  hellc.tcl.  That
01a0: 20 73 63 72 69 70 74 20 63 6f 6d 62 69 6e 65 73   script combines
01b0: 20 73 6f 75 72 63 65 0a 2a 2a 20 63 6f 64 65 20   source.** code 
01c0: 66 72 6f 6d 20 76 61 72 69 6f 75 73 20 63 6f 6e  from various con
01d0: 73 74 69 74 75 65 6e 74 20 73 6f 75 72 63 65 20  stituent source 
01e0: 66 69 6c 65 73 20 6f 66 20 53 51 4c 69 74 65 20  files of SQLite 
01f0: 69 6e 74 6f 20 74 68 69 73 20 73 69 6e 67 6c 65  into this single
0200: 0a 2a 2a 20 22 73 68 65 6c 6c 2e 63 22 20 66 69  .** "shell.c" fi
0210: 6c 65 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  le used to imple
0220: 6d 65 6e 74 20 74 68 65 20 53 51 4c 69 74 65 20  ment the SQLite 
0230: 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65  command-line she
0240: 6c 6c 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 6f  ll..**.** Most o
0250: 66 20 74 68 65 20 63 6f 64 65 20 66 6f 75 6e 64  f the code found
0260: 20 62 65 6c 6f 77 20 63 6f 6d 65 73 20 66 72 6f   below comes fro
0270: 6d 20 74 68 65 20 22 73 72 63 2f 73 68 65 6c 6c  m the "src/shell
0280: 2e 63 2e 69 6e 22 20 66 69 6c 65 20 69 6e 0a 2a  .c.in" file in.*
0290: 2a 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c 20  * the canonical 
02a0: 53 51 4c 69 74 65 20 73 6f 75 72 63 65 20 74 72  SQLite source tr
02b0: 65 65 2e 20 20 54 68 61 74 20 6d 61 69 6e 20 66  ee.  That main f
02c0: 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 22 49 4e  ile contains "IN
02d0: 43 4c 55 44 45 22 0a 2a 2a 20 6c 69 6e 65 73 20  CLUDE".** lines 
02e0: 74 68 61 74 20 73 70 65 63 69 66 79 20 6f 74 68  that specify oth
02f0: 65 72 20 66 69 6c 65 73 20 69 6e 20 74 68 65 20  er files in the 
0300: 63 61 6e 6f 6e 69 63 61 6c 20 73 6f 75 72 63 65  canonical source
0310: 20 74 72 65 65 20 74 68 61 74 20 61 72 65 0a 2a   tree that are.*
0320: 2a 20 69 6e 73 65 72 74 65 64 20 74 6f 20 67 65  * inserted to ge
0330: 74 6e 65 72 61 74 65 20 74 68 69 73 20 63 6f 6d  tnerate this com
0340: 70 6c 65 74 65 20 70 72 6f 67 72 61 6d 20 73 6f  plete program so
0350: 75 72 63 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  urce file..**.**
0360: 20 54 68 65 20 63 6f 64 65 20 66 72 6f 6d 20 6d   The code from m
0370: 75 6c 74 69 70 6c 65 20 66 69 6c 65 73 20 69 73  ultiple files is
0380: 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74   combined into t
0390: 68 69 73 20 73 69 6e 67 6c 65 20 22 73 68 65 6c  his single "shel
03a0: 6c 2e 63 22 0a 2a 2a 20 73 6f 75 72 63 65 20 66  l.c".** source f
03b0: 69 6c 65 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65  ile to help make
03c0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e   the command-lin
03d0: 65 20 70 72 6f 67 72 61 6d 20 65 61 73 69 65 72  e program easier
03e0: 20 74 6f 20 63 6f 6d 70 69 6c 65 2e 0a 2a 2a 0a   to compile..**.
03f0: 2a 2a 20 54 6f 20 6d 6f 64 69 66 79 20 74 68 69  ** To modify thi
0400: 73 20 70 72 6f 67 72 61 6d 2c 20 67 65 74 20 61  s program, get a
0410: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 63 61 6e   copy of the can
0420: 6f 6e 69 63 61 6c 20 53 51 4c 69 74 65 20 73 6f  onical SQLite so
0430: 75 72 63 65 20 74 72 65 65 2c 0a 2a 2a 20 65 64  urce tree,.** ed
0440: 69 74 20 74 68 65 20 73 72 63 2f 73 68 65 6c 6c  it the src/shell
0450: 2e 63 2e 69 6e 22 20 61 6e 64 2f 6f 72 20 73 6f  .c.in" and/or so
0460: 6d 65 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20  me of the other 
0470: 66 69 6c 65 73 20 74 68 61 74 20 61 72 65 20 69  files that are i
0480: 6e 63 6c 75 64 65 64 0a 2a 2a 20 62 79 20 22 73  ncluded.** by "s
0490: 72 63 2f 73 68 65 6c 6c 2e 63 2e 69 6e 22 2c 20  rc/shell.c.in", 
04a0: 74 68 65 6e 20 72 65 72 75 6e 20 74 68 65 20 74  then rerun the t
04b0: 6f 6f 6c 2f 6d 6b 73 68 65 6c 6c 63 2e 74 63 6c  ool/mkshellc.tcl
04c0: 20 73 63 72 69 70 74 2e 0a 2a 2f 7d 0a 73 65 74   script..*/}.set
04d0: 20 69 6e 20 5b 6f 70 65 6e 20 24 74 6f 70 64 69   in [open $topdi
04e0: 72 2f 73 72 63 2f 73 68 65 6c 6c 2e 63 2e 69 6e  r/src/shell.c.in
04f0: 20 72 62 5d 0a 77 68 69 6c 65 20 7b 31 7d 20 7b   rb].while {1} {
0500: 0a 20 20 73 65 74 20 6c 78 20 5b 67 65 74 73 20  .  set lx [gets 
0510: 24 69 6e 5d 0a 20 20 69 66 20 7b 5b 65 6f 66 20  $in].  if {[eof 
0520: 24 69 6e 5d 7d 20 62 72 65 61 6b 3b 0a 20 20 69  $in]} break;.  i
0530: 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 49 4e 43  f {[regexp {^INC
0540: 4c 55 44 45 20 7d 20 24 6c 78 5d 7d 20 7b 0a 20  LUDE } $lx]} {. 
0550: 20 20 20 73 65 74 20 63 66 69 6c 65 20 5b 6c 69     set cfile [li
0560: 6e 64 65 78 20 24 6c 78 20 31 5d 0a 20 20 20 20  ndex $lx 1].    
0570: 70 75 74 73 20 24 6f 75 74 20 22 2f 2a 2a 2a 2a  puts $out "/****
0580: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0590: 2a 2a 2a 2a 2a 20 42 65 67 69 6e 20 24 63 66 69  ***** Begin $cfi
05a0: 6c 65 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  le *************
05b0: 2a 2a 2a 2a 2a 2f 22 0a 20 20 20 20 73 65 74 20  *****/".    set 
05c0: 69 6e 32 20 5b 6f 70 65 6e 20 24 74 6f 70 64 69  in2 [open $topdi
05d0: 72 2f 73 72 63 2f 24 63 66 69 6c 65 20 72 62 5d  r/src/$cfile rb]
05e0: 0a 20 20 20 20 77 68 69 6c 65 20 7b 21 5b 65 6f  .    while {![eo
05f0: 66 20 24 69 6e 32 5d 7d 20 7b 0a 20 20 20 20 20  f $in2]} {.     
0600: 20 73 65 74 20 6c 78 20 5b 67 65 74 73 20 24 69   set lx [gets $i
0610: 6e 32 5d 0a 20 20 20 20 20 20 69 66 20 7b 5b 72  n2].      if {[r
0620: 65 67 65 78 70 20 7b 5e 23 69 6e 63 6c 75 64 65  egexp {^#include
0630: 20 22 73 71 6c 69 74 65 7d 20 24 6c 78 5d 7d 20   "sqlite} $lx]} 
0640: 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20 73  continue.      s
0650: 65 74 20 6c 78 20 5b 73 74 72 69 6e 67 20 6d 61  et lx [string ma
0660: 70 20 5b 6c 69 73 74 20 5f 5f 64 65 63 6c 73 70  p [list __declsp
0670: 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 7b 7d  ec(dllexport) {}
0680: 5d 20 24 6c 78 5d 0a 20 20 20 20 20 20 70 75 74  ] $lx].      put
0690: 73 20 24 6f 75 74 20 24 6c 78 0a 20 20 20 20 7d  s $out $lx.    }
06a0: 0a 20 20 20 20 63 6c 6f 73 65 20 24 69 6e 32 0a  .    close $in2.
06b0: 20 20 20 20 70 75 74 73 20 24 6f 75 74 20 22 2f      puts $out "/
06c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
06d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 20 45 6e 64 20 24 63  ********* End $c
06e0: 66 69 6c 65 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  file ***********
06f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 22 0a 20 20 20 20  *********/".    
0700: 63 6f 6e 74 69 6e 75 65 0a 20 20 7d 0a 20 20 70  continue.  }.  p
0710: 75 74 73 20 24 6f 75 74 20 24 6c 78 0a 7d 0a 63  uts $out $lx.}.c
0720: 6c 6f 73 65 20 24 69 6e 0a 63 6c 6f 73 65 20 24  lose $in.close $
0730: 6f 75 74 0a                                      out.