/ Hex Artifact Content
Login

Artifact 574307265b49d813301fba91ccd74e6a26d33f65f74b6891c320a0ffbee07895:


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 68 65 6c 6c 2e 63 22 20 73   the "shell.c" s
0040: 6f 75 72 63 65 20 66 69 6c 65 20 66 72 6f 6d 20  ource file from 
0050: 0a 23 20 63 6f 6e 73 74 69 74 75 65 6e 74 20 70  .# constituent p
0060: 61 72 74 73 2e 0a 23 0a 23 20 4e 6f 20 61 72 67  arts..#.# No arg
0070: 75 6d 65 6e 74 73 20 61 72 65 20 72 65 71 75 69  uments are requi
0080: 72 65 64 2e 20 20 54 68 69 73 20 73 63 72 69 70  red.  This scrip
0090: 74 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  t determines the
00a0: 20 6c 6f 63 61 74 69 6f 6e 0a 23 20 6f 66 20 69   location.# of i
00b0: 74 73 20 69 6e 70 75 74 20 66 69 6c 65 73 20 72  ts input files r
00c0: 65 6c 61 74 69 76 65 20 74 6f 20 74 68 65 20 6c  elative to the l
00d0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ocation of the s
00e0: 63 72 69 70 74 20 69 74 73 65 6c 66 2e 0a 23 20  cript itself..# 
00f0: 54 68 69 73 20 73 63 72 69 70 74 20 73 68 6f 75  This script shou
0100: 6c 64 20 62 65 20 74 6f 6f 6c 2f 6d 6b 73 68 65  ld be tool/mkshe
0110: 6c 6c 63 2e 74 63 6c 2e 20 20 49 66 20 74 68 65  llc.tcl.  If the
0120: 20 64 69 72 65 63 74 6f 72 79 20 68 6f 6c 64 69   directory holdi
0130: 6e 67 0a 23 20 74 68 65 20 73 63 72 69 70 74 20  ng.# the script 
0140: 69 73 20 24 44 49 52 2c 20 74 68 65 6e 20 74 68  is $DIR, then th
0150: 65 20 63 6f 6d 70 6f 6e 65 6e 74 20 70 61 72 74  e component part
0160: 73 20 61 72 65 20 6c 6f 63 61 74 65 64 20 69 6e  s are located in
0170: 20 24 44 49 52 2f 2e 2e 2f 73 72 63 0a 23 20 61   $DIR/../src.# a
0180: 6e 64 20 24 44 49 52 2f 2e 2e 2f 65 78 74 2f 6d  nd $DIR/../ext/m
0190: 69 73 63 2e 0a 23 0a 73 65 74 20 74 6f 70 64 69  isc..#.set topdi
01a0: 72 20 5b 66 69 6c 65 20 64 69 72 20 5b 66 69 6c  r [file dir [fil
01b0: 65 20 64 69 72 20 5b 66 69 6c 65 20 6e 6f 72 6d  e dir [file norm
01c0: 61 6c 20 24 61 72 67 76 30 5d 5d 5d 0a 73 65 74  al $argv0]]].set
01d0: 20 6f 75 74 20 73 74 64 6f 75 74 0a 70 75 74 73   out stdout.puts
01e0: 20 24 6f 75 74 20 7b 2f 2a 20 44 4f 20 4e 4f 54   $out {/* DO NOT
01f0: 20 45 44 49 54 21 0a 2a 2a 20 54 68 69 73 20 66   EDIT!.** This f
0200: 69 6c 65 20 69 73 20 61 75 74 6f 6d 61 74 69 63  ile is automatic
0210: 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20 62  ally generated b
0220: 79 20 74 68 65 20 73 63 72 69 70 74 20 69 6e 20  y the script in 
0230: 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c 0a 2a 2a  the canonical.**
0240: 20 53 51 4c 69 74 65 20 73 6f 75 72 63 65 20 74   SQLite source t
0250: 72 65 65 20 61 74 20 74 6f 6f 6c 2f 6d 6b 73 68  ree at tool/mksh
0260: 65 6c 6c 63 2e 74 63 6c 2e 20 20 54 68 61 74 20  ellc.tcl.  That 
0270: 73 63 72 69 70 74 20 63 6f 6d 62 69 6e 65 73 20  script combines 
0280: 73 6f 75 72 63 65 0a 2a 2a 20 63 6f 64 65 20 66  source.** code f
0290: 72 6f 6d 20 76 61 72 69 6f 75 73 20 63 6f 6e 73  rom various cons
02a0: 74 69 74 75 65 6e 74 20 73 6f 75 72 63 65 20 66  tituent source f
02b0: 69 6c 65 73 20 6f 66 20 53 51 4c 69 74 65 20 69  iles of SQLite i
02c0: 6e 74 6f 20 74 68 69 73 20 73 69 6e 67 6c 65 0a  nto this single.
02d0: 2a 2a 20 22 73 68 65 6c 6c 2e 63 22 20 66 69 6c  ** "shell.c" fil
02e0: 65 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  e used to implem
02f0: 65 6e 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  ent the SQLite c
0300: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c  ommand-line shel
0310: 6c 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 6f 66  l..**.** Most of
0320: 20 74 68 65 20 63 6f 64 65 20 66 6f 75 6e 64 20   the code found 
0330: 62 65 6c 6f 77 20 63 6f 6d 65 73 20 66 72 6f 6d  below comes from
0340: 20 74 68 65 20 22 73 72 63 2f 73 68 65 6c 6c 2e   the "src/shell.
0350: 63 2e 69 6e 22 20 66 69 6c 65 20 69 6e 0a 2a 2a  c.in" file in.**
0360: 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c 20 53   the canonical S
0370: 51 4c 69 74 65 20 73 6f 75 72 63 65 20 74 72 65  QLite source tre
0380: 65 2e 20 20 54 68 61 74 20 6d 61 69 6e 20 66 69  e.  That main fi
0390: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 22 49 4e 43  le contains "INC
03a0: 4c 55 44 45 22 0a 2a 2a 20 6c 69 6e 65 73 20 74  LUDE".** lines t
03b0: 68 61 74 20 73 70 65 63 69 66 79 20 6f 74 68 65  hat specify othe
03c0: 72 20 66 69 6c 65 73 20 69 6e 20 74 68 65 20 63  r files in the c
03d0: 61 6e 6f 6e 69 63 61 6c 20 73 6f 75 72 63 65 20  anonical source 
03e0: 74 72 65 65 20 74 68 61 74 20 61 72 65 0a 2a 2a  tree that are.**
03f0: 20 69 6e 73 65 72 74 65 64 20 74 6f 20 67 65 74   inserted to get
0400: 6e 65 72 61 74 65 20 74 68 69 73 20 63 6f 6d 70  nerate this comp
0410: 6c 65 74 65 20 70 72 6f 67 72 61 6d 20 73 6f 75  lete program sou
0420: 72 63 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  rce file..**.** 
0430: 54 68 65 20 63 6f 64 65 20 66 72 6f 6d 20 6d 75  The code from mu
0440: 6c 74 69 70 6c 65 20 66 69 6c 65 73 20 69 73 20  ltiple files is 
0450: 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68  combined into th
0460: 69 73 20 73 69 6e 67 6c 65 20 22 73 68 65 6c 6c  is single "shell
0470: 2e 63 22 0a 2a 2a 20 73 6f 75 72 63 65 20 66 69  .c".** source fi
0480: 6c 65 20 74 6f 20 68 65 6c 70 20 6d 61 6b 65 20  le to help make 
0490: 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  the command-line
04a0: 20 70 72 6f 67 72 61 6d 20 65 61 73 69 65 72 20   program easier 
04b0: 74 6f 20 63 6f 6d 70 69 6c 65 2e 0a 2a 2a 0a 2a  to compile..**.*
04c0: 2a 20 54 6f 20 6d 6f 64 69 66 79 20 74 68 69 73  * To modify this
04d0: 20 70 72 6f 67 72 61 6d 2c 20 67 65 74 20 61 20   program, get a 
04e0: 63 6f 70 79 20 6f 66 20 74 68 65 20 63 61 6e 6f  copy of the cano
04f0: 6e 69 63 61 6c 20 53 51 4c 69 74 65 20 73 6f 75  nical SQLite sou
0500: 72 63 65 20 74 72 65 65 2c 0a 2a 2a 20 65 64 69  rce tree,.** edi
0510: 74 20 74 68 65 20 73 72 63 2f 73 68 65 6c 6c 2e  t the src/shell.
0520: 63 2e 69 6e 22 20 61 6e 64 2f 6f 72 20 73 6f 6d  c.in" and/or som
0530: 65 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 66  e of the other f
0540: 69 6c 65 73 20 74 68 61 74 20 61 72 65 20 69 6e  iles that are in
0550: 63 6c 75 64 65 64 0a 2a 2a 20 62 79 20 22 73 72  cluded.** by "sr
0560: 63 2f 73 68 65 6c 6c 2e 63 2e 69 6e 22 2c 20 74  c/shell.c.in", t
0570: 68 65 6e 20 72 65 72 75 6e 20 74 68 65 20 74 6f  hen rerun the to
0580: 6f 6c 2f 6d 6b 73 68 65 6c 6c 63 2e 74 63 6c 20  ol/mkshellc.tcl 
0590: 73 63 72 69 70 74 2e 0a 2a 2f 7d 0a 73 65 74 20  script..*/}.set 
05a0: 69 6e 20 5b 6f 70 65 6e 20 24 74 6f 70 64 69 72  in [open $topdir
05b0: 2f 73 72 63 2f 73 68 65 6c 6c 2e 63 2e 69 6e 20  /src/shell.c.in 
05c0: 72 62 5d 0a 77 68 69 6c 65 20 7b 31 7d 20 7b 0a  rb].while {1} {.
05d0: 20 20 73 65 74 20 6c 78 20 5b 67 65 74 73 20 24    set lx [gets $
05e0: 69 6e 5d 0a 20 20 69 66 20 7b 5b 65 6f 66 20 24  in].  if {[eof $
05f0: 69 6e 5d 7d 20 62 72 65 61 6b 3b 0a 20 20 69 66  in]} break;.  if
0600: 20 7b 5b 72 65 67 65 78 70 20 7b 5e 49 4e 43 4c   {[regexp {^INCL
0610: 55 44 45 20 7d 20 24 6c 78 5d 7d 20 7b 0a 20 20  UDE } $lx]} {.  
0620: 20 20 73 65 74 20 63 66 69 6c 65 20 5b 6c 69 6e    set cfile [lin
0630: 64 65 78 20 24 6c 78 20 31 5d 0a 20 20 20 20 70  dex $lx 1].    p
0640: 75 74 73 20 24 6f 75 74 20 22 2f 2a 2a 2a 2a 2a  uts $out "/*****
0650: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0660: 2a 2a 2a 2a 20 42 65 67 69 6e 20 24 63 66 69 6c  **** Begin $cfil
0670: 65 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e **************
0680: 2a 2a 2a 2a 2f 22 0a 20 20 20 20 73 65 74 20 69  ****/".    set i
0690: 6e 32 20 5b 6f 70 65 6e 20 24 74 6f 70 64 69 72  n2 [open $topdir
06a0: 2f 73 72 63 2f 24 63 66 69 6c 65 20 72 62 5d 0a  /src/$cfile rb].
06b0: 20 20 20 20 77 68 69 6c 65 20 7b 21 5b 65 6f 66      while {![eof
06c0: 20 24 69 6e 32 5d 7d 20 7b 0a 20 20 20 20 20 20   $in2]} {.      
06d0: 73 65 74 20 6c 78 20 5b 67 65 74 73 20 24 69 6e  set lx [gets $in
06e0: 32 5d 0a 20 20 20 20 20 20 69 66 20 7b 5b 72 65  2].      if {[re
06f0: 67 65 78 70 20 7b 5e 23 69 6e 63 6c 75 64 65 20  gexp {^#include 
0700: 22 73 71 6c 69 74 65 7d 20 24 6c 78 5d 7d 20 63  "sqlite} $lx]} c
0710: 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20 73 65  ontinue.      se
0720: 74 20 6c 78 20 5b 73 74 72 69 6e 67 20 6d 61 70  t lx [string map
0730: 20 5b 6c 69 73 74 20 5f 5f 64 65 63 6c 73 70 65   [list __declspe
0740: 63 28 64 6c 6c 65 78 70 6f 72 74 29 20 7b 7d 5d  c(dllexport) {}]
0750: 20 24 6c 78 5d 0a 20 20 20 20 20 20 70 75 74 73   $lx].      puts
0760: 20 24 6f 75 74 20 24 6c 78 0a 20 20 20 20 7d 0a   $out $lx.    }.
0770: 20 20 20 20 63 6c 6f 73 65 20 24 69 6e 32 0a 20      close $in2. 
0780: 20 20 20 70 75 74 73 20 24 6f 75 74 20 22 2f 2a     puts $out "/*
0790: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
07a0: 2a 2a 2a 2a 2a 2a 2a 2a 20 45 6e 64 20 24 63 66  ******** End $cf
07b0: 69 6c 65 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ile ************
07c0: 2a 2a 2a 2a 2a 2a 2a 2a 2f 22 0a 20 20 20 20 63  ********/".    c
07d0: 6f 6e 74 69 6e 75 65 0a 20 20 7d 0a 20 20 70 75  ontinue.  }.  pu
07e0: 74 73 20 24 6f 75 74 20 24 6c 78 0a 7d 0a 63 6c  ts $out $lx.}.cl
07f0: 6f 73 65 20 24 69 6e 0a 63 6c 6f 73 65 20 24 6f  ose $in.close $o
0800: 75 74 0a                                         ut.