/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact ed62756baf44babf562a7843588790c02fee2106:


0000: 23 21 2f 62 69 6e 2f 73 68 0a 23 0a 23 20 54 68  #!/bin/sh.#.# Th
0010: 69 73 20 73 63 72 69 70 74 20 69 73 20 75 73 65  is script is use
0020: 64 20 74 6f 20 63 6f 6d 70 69 6c 65 20 53 51 4c  d to compile SQL
0030: 69 74 65 20 69 6e 74 6f 20 61 20 44 4c 4c 2e 0a  ite into a DLL..
0040: 23 0a 23 20 54 77 6f 20 73 65 70 61 72 61 74 65  #.# Two separate
0050: 20 44 4c 4c 73 20 61 72 65 20 67 65 6e 65 72 61   DLLs are genera
0060: 74 65 64 2e 20 20 22 73 71 6c 69 74 65 33 2e 64  ted.  "sqlite3.d
0070: 6c 6c 22 20 69 73 20 74 68 65 20 63 6f 72 65 0a  ll" is the core.
0080: 23 20 6c 69 62 72 61 72 79 2e 20 20 22 74 63 6c  # library.  "tcl
0090: 73 71 6c 69 74 65 33 2e 64 6c 6c 22 20 63 6f 6e  sqlite3.dll" con
00a0: 74 61 69 6e 73 20 74 68 65 20 54 43 4c 20 62 69  tains the TCL bi
00b0: 6e 64 69 6e 67 73 20 61 6e 64 20 69 73 20 74 68  ndings and is th
00c0: 65 0a 23 20 6c 69 62 72 61 72 79 20 74 68 61 74  e.# library that
00d0: 20 69 73 20 6c 6f 61 64 65 64 20 69 6e 74 6f 20   is loaded into 
00e0: 54 43 4c 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  TCL in order to 
00f0: 72 75 6e 20 53 51 4c 69 74 65 2e 0a 23 0a 6d 61  run SQLite..#.ma
0100: 6b 65 20 73 71 6c 69 74 65 33 2e 63 0a 50 41 54  ke sqlite3.c.PAT
0110: 48 3d 24 50 41 54 48 3a 2f 6f 70 74 2f 6d 69 6e  H=$PATH:/opt/min
0120: 67 77 2f 62 69 6e 0a 54 43 4c 44 49 52 3d 2f 68  gw/bin.TCLDIR=/h
0130: 6f 6d 65 2f 64 72 68 2f 74 63 6c 74 6b 2f 38 34  ome/drh/tcltk/84
0140: 36 2f 77 69 6e 2f 38 34 36 77 69 6e 0a 54 43 4c  6/win/846win.TCL
0150: 53 54 55 42 4c 49 42 3d 24 54 43 4c 44 49 52 2f  STUBLIB=$TCLDIR/
0160: 6c 69 62 74 63 6c 38 34 73 74 75 62 2e 61 0a 4f  libtcl84stub.a.O
0170: 50 54 53 3d 27 2d 44 55 53 45 5f 54 43 4c 5f 53  PTS='-DUSE_TCL_S
0180: 54 55 42 53 3d 31 20 2d 44 54 48 52 45 41 44 53  TUBS=1 -DTHREADS
0190: 41 46 45 3d 31 20 2d 44 42 55 49 4c 44 5f 73 71  AFE=1 -DBUILD_sq
01a0: 6c 69 74 65 3d 31 20 2d 44 4f 53 5f 57 49 4e 3d  lite=1 -DOS_WIN=
01b0: 31 27 0a 43 43 3d 22 69 33 38 36 2d 6d 69 6e 67  1'.CC="i386-ming
01c0: 77 33 32 6d 73 76 63 2d 67 63 63 20 2d 4f 32 20  w32msvc-gcc -O2 
01d0: 24 4f 50 54 53 20 2d 49 74 73 72 63 20 2d 49 24  $OPTS -Itsrc -I$
01e0: 54 43 4c 44 49 52 22 0a 4e 4d 3d 22 69 33 38 36  TCLDIR".NM="i386
01f0: 2d 6d 69 6e 67 77 33 32 6d 73 76 63 2d 6e 6d 22  -mingw32msvc-nm"
0200: 0a 43 4d 44 3d 22 24 43 43 20 2d 63 20 73 71 6c  .CMD="$CC -c sql
0210: 69 74 65 33 2e 63 22 0a 65 63 68 6f 20 24 43 4d  ite3.c".echo $CM
0220: 44 0a 24 43 4d 44 0a 43 4d 44 3d 22 24 43 43 20  D.$CMD.CMD="$CC 
0230: 2d 63 20 74 73 72 63 2f 74 63 6c 73 71 6c 69 74  -c tsrc/tclsqlit
0240: 65 2e 63 20 2d 6f 20 74 63 6c 73 71 6c 69 74 65  e.c -o tclsqlite
0250: 2e 6f 22 0a 65 63 68 6f 20 24 43 4d 44 0a 24 43  .o".echo $CMD.$C
0260: 4d 44 0a 65 63 68 6f 20 27 45 58 50 4f 52 54 53  MD.echo 'EXPORTS
0270: 27 20 3e 74 63 6c 73 71 6c 69 74 65 33 2e 64 65  ' >tclsqlite3.de
0280: 66 0a 24 4e 4d 20 73 71 6c 69 74 65 33 2e 6f 20  f.$NM sqlite3.o 
0290: 74 63 6c 73 71 6c 69 74 65 2e 6f 20 7c 20 67 72  tclsqlite.o | gr
02a0: 65 70 20 27 20 54 20 27 20 3e 74 65 6d 70 31 0a  ep ' T ' >temp1.
02b0: 67 72 65 70 20 27 5f 49 6e 69 74 24 27 20 74 65  grep '_Init$' te
02c0: 6d 70 31 20 3e 74 65 6d 70 32 0a 67 72 65 70 20  mp1 >temp2.grep 
02d0: 27 5f 53 61 66 65 49 6e 69 74 24 27 20 74 65 6d  '_SafeInit$' tem
02e0: 70 31 20 3e 3e 74 65 6d 70 32 0a 67 72 65 70 20  p1 >>temp2.grep 
02f0: 27 20 54 20 5f 73 71 6c 69 74 65 33 5f 27 20 74  ' T _sqlite3_' t
0300: 65 6d 70 31 20 3e 3e 74 65 6d 70 32 0a 65 63 68  emp1 >>temp2.ech
0310: 6f 20 27 45 58 50 4f 52 54 53 27 20 3e 74 63 6c  o 'EXPORTS' >tcl
0320: 73 71 6c 69 74 65 33 2e 64 65 66 0a 73 65 64 20  sqlite3.def.sed 
0330: 27 73 2f 5e 2e 2a 20 54 20 5f 2f 2f 27 20 74 65  's/^.* T _//' te
0340: 6d 70 32 20 7c 20 73 6f 72 74 20 7c 20 75 6e 69  mp2 | sort | uni
0350: 71 20 3e 3e 74 63 6c 73 71 6c 69 74 65 33 2e 64  q >>tclsqlite3.d
0360: 65 66 0a 69 33 38 36 2d 6d 69 6e 67 77 33 32 6d  ef.i386-mingw32m
0370: 73 76 63 2d 64 6c 6c 77 72 61 70 20 5c 0a 20 20  svc-dllwrap \.  
0380: 20 20 20 2d 2d 64 65 66 20 74 63 6c 73 71 6c 69     --def tclsqli
0390: 74 65 33 2e 64 65 66 20 2d 76 20 2d 2d 65 78 70  te3.def -v --exp
03a0: 6f 72 74 2d 61 6c 6c 20 5c 0a 20 20 20 20 20 2d  ort-all \.     -
03b0: 2d 64 72 69 76 65 72 2d 6e 61 6d 65 20 69 33 38  -driver-name i38
03c0: 36 2d 6d 69 6e 67 77 33 32 6d 73 76 63 2d 67 63  6-mingw32msvc-gc
03d0: 63 20 5c 0a 20 20 20 20 20 2d 2d 64 6c 6c 74 6f  c \.     --dllto
03e0: 6f 6c 2d 6e 61 6d 65 20 69 33 38 36 2d 6d 69 6e  ol-name i386-min
03f0: 67 77 33 32 6d 73 76 63 2d 64 6c 6c 74 6f 6f 6c  gw32msvc-dlltool
0400: 20 5c 0a 20 20 20 20 20 2d 2d 61 73 20 69 33 38   \.     --as i38
0410: 36 2d 6d 69 6e 67 77 33 32 6d 73 76 63 2d 61 73  6-mingw32msvc-as
0420: 20 5c 0a 20 20 20 20 20 2d 2d 74 61 72 67 65 74   \.     --target
0430: 20 69 33 38 36 2d 6d 69 6e 67 77 33 32 20 5c 0a   i386-mingw32 \.
0440: 20 20 20 20 20 2d 64 6c 6c 6e 61 6d 65 20 74 63       -dllname tc
0450: 6c 73 71 6c 69 74 65 33 2e 64 6c 6c 20 2d 6c 6d  lsqlite3.dll -lm
0460: 73 76 63 72 74 20 74 63 6c 73 71 6c 69 74 65 2e  svcrt tclsqlite.
0470: 6f 20 73 71 6c 69 74 65 33 2e 6f 20 24 54 43 4c  o sqlite3.o $TCL
0480: 53 54 55 42 4c 49 42 0a 24 4e 4d 20 73 71 6c 69  STUBLIB.$NM sqli
0490: 74 65 33 2e 6f 20 7c 20 67 72 65 70 20 27 20 54  te3.o | grep ' T
04a0: 20 27 20 3e 74 65 6d 70 31 0a 65 63 68 6f 20 27   ' >temp1.echo '
04b0: 45 58 50 4f 52 54 53 27 20 3e 73 71 6c 69 74 65  EXPORTS' >sqlite
04c0: 33 2e 64 65 66 0a 67 72 65 70 20 27 20 5f 73 71  3.def.grep ' _sq
04d0: 6c 69 74 65 33 5f 27 20 74 65 6d 70 31 20 7c 20  lite3_' temp1 | 
04e0: 73 65 64 20 27 73 2f 5e 2e 2a 20 5f 2f 2f 27 20  sed 's/^.* _//' 
04f0: 3e 3e 73 71 6c 69 74 65 33 2e 64 65 66 0a 69 33  >>sqlite3.def.i3
0500: 38 36 2d 6d 69 6e 67 77 33 32 6d 73 76 63 2d 64  86-mingw32msvc-d
0510: 6c 6c 77 72 61 70 20 5c 0a 20 20 20 20 20 2d 2d  llwrap \.     --
0520: 64 65 66 20 73 71 6c 69 74 65 33 2e 64 65 66 20  def sqlite3.def 
0530: 2d 76 20 2d 2d 65 78 70 6f 72 74 2d 61 6c 6c 20  -v --export-all 
0540: 5c 0a 20 20 20 20 20 2d 2d 64 72 69 76 65 72 2d  \.     --driver-
0550: 6e 61 6d 65 20 69 33 38 36 2d 6d 69 6e 67 77 33  name i386-mingw3
0560: 32 6d 73 76 63 2d 67 63 63 20 5c 0a 20 20 20 20  2msvc-gcc \.    
0570: 20 2d 2d 64 6c 6c 74 6f 6f 6c 2d 6e 61 6d 65 20   --dlltool-name 
0580: 69 33 38 36 2d 6d 69 6e 67 77 33 32 6d 73 76 63  i386-mingw32msvc
0590: 2d 64 6c 6c 74 6f 6f 6c 20 5c 0a 20 20 20 20 20  -dlltool \.     
05a0: 2d 2d 61 73 20 69 33 38 36 2d 6d 69 6e 67 77 33  --as i386-mingw3
05b0: 32 6d 73 76 63 2d 61 73 20 5c 0a 20 20 20 20 20  2msvc-as \.     
05c0: 2d 2d 74 61 72 67 65 74 20 69 33 38 36 2d 6d 69  --target i386-mi
05d0: 6e 67 77 33 32 20 5c 0a 20 20 20 20 20 2d 64 6c  ngw32 \.     -dl
05e0: 6c 6e 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 6c  lname sqlite3.dl
05f0: 6c 20 2d 6c 6d 73 76 63 72 74 20 73 71 6c 69 74  l -lmsvcrt sqlit
0600: 65 33 2e 6f 0a                                   e3.o.