blob: 9d59e17b166238a47a74f908bb0e577997184257 [file] [log] [blame]
drh91c58e22007-03-27 12:04:04 +00001#!/usr/bin/tclsh
2#
3# To build a single huge source file holding all of SQLite (or at
mistachkin4ef916e2016-08-24 19:58:46 +00004# least the core components - the test harness, shell, and TCL
drh91c58e22007-03-27 12:04:04 +00005# interface are omitted.) first do
6#
7# make target_source
8#
drh98495b42007-03-31 22:29:05 +00009# The make target above moves all of the source code files into
10# a subdirectory named "tsrc". (This script expects to find the files
11# there and will not work if they are not found.) There are a few
12# generated C code files that are also added to the tsrc directory.
13# For example, the "parse.c" and "parse.h" files to implement the
mistachkin4ef916e2016-08-24 19:58:46 +000014# the parser are derived from "parse.y" using lemon. And the
drh98495b42007-03-31 22:29:05 +000015# "keywordhash.h" files is generated by a program named "mkkeywordhash".
drh91c58e22007-03-27 12:04:04 +000016#
drh98495b42007-03-31 22:29:05 +000017# After the "tsrc" directory has been created and populated, run
18# this script:
drh91c58e22007-03-27 12:04:04 +000019#
larrybr4b1c3eb2021-07-13 01:45:04 +000020# tclsh mksqlite3c.tcl
drh91c58e22007-03-27 12:04:04 +000021#
drh98495b42007-03-31 22:29:05 +000022# The amalgamated SQLite code will be written into sqlite3.c
23#
24
larrybr4b1c3eb2021-07-13 01:45:04 +000025set help {Usage: tclsh mksqlite3c.tcl <options>
26 where <options> is zero or more of the following with these effects:
27 --nostatic => Do not generate with compile-time modifiable linkage.
mistachkin696555d2021-07-13 21:59:22 +000028 --linemacros=? => Emit #line directives into output or not. (? = 1 or 0)
larrybr4b1c3eb2021-07-13 01:45:04 +000029 --useapicall => Prepend functions with SQLITE_APICALL or SQLITE_CDECL.
30 --srcdir $SRC => Specify the directory containing constituent sources.
31 --help => See this.
mistachkin696555d2021-07-13 21:59:22 +000032 The value setting options default to --linemacros=1 and '--srcdir tsrc' .
larrybr4b1c3eb2021-07-13 01:45:04 +000033}
34
drh8de5a172009-07-20 12:25:44 +000035# Begin by reading the "sqlite3.h" header file. Extract the version number
drhe191e2c2013-03-19 15:23:18 +000036# from in this file. The version number is needed to generate the header
drh8de5a172009-07-20 12:25:44 +000037# comment of the amalgamation.
drh98495b42007-03-31 22:29:05 +000038#
larrybr4b1c3eb2021-07-13 01:45:04 +000039
drh84ab9532015-05-04 17:06:39 +000040set addstatic 1
mistachkine13dfe42021-07-15 23:34:14 +000041set linemacros 0
mistachkin4ef916e2016-08-24 19:58:46 +000042set useapicall 0
larrybr4b1c3eb2021-07-13 01:45:04 +000043set srcdir tsrc
44
drh84ab9532015-05-04 17:06:39 +000045for {set i 0} {$i<[llength $argv]} {incr i} {
46 set x [lindex $argv $i]
larrybr4b1c3eb2021-07-13 01:45:04 +000047 if {[regexp {^-?-nostatic$} $x]} {
drh84ab9532015-05-04 17:06:39 +000048 set addstatic 0
mistachkin696555d2021-07-13 21:59:22 +000049 } elseif {[regexp {^-?-linemacros(?:=([01]))?$} $x ma ulm]} {
50 if {$ulm == ""} {set ulm 1}
51 set linemacros $ulm
larrybr4b1c3eb2021-07-13 01:45:04 +000052 } elseif {[regexp {^-?-useapicall$} $x]} {
mistachkin4ef916e2016-08-24 19:58:46 +000053 set useapicall 1
larrybr4b1c3eb2021-07-13 01:45:04 +000054 } elseif {[regexp {^-?-srcdir$} $x]} {
55 incr i
56 if {$i==[llength $argv]} {
57 error "No argument following $x"
58 }
59 set srcdir [lindex $argv $i]
60 } elseif {[regexp {^-?-((help)|\?)$} $x]} {
61 puts $help
62 exit 0
drh84ab9532015-05-04 17:06:39 +000063 } else {
64 error "unknown command-line option: $x"
65 }
drh96e50882011-08-15 15:27:20 +000066}
larrybr4b1c3eb2021-07-13 01:45:04 +000067set in [open $srcdir/sqlite3.h]
drh98495b42007-03-31 22:29:05 +000068set cnt 0
69set VERSION ?????
70while {![eof $in]} {
71 set line [gets $in]
72 if {$line=="" && [eof $in]} break
73 incr cnt
74 regexp {#define\s+SQLITE_VERSION\s+"(.*)"} $line all VERSION
75}
76close $in
drh91c58e22007-03-27 12:04:04 +000077
78# Open the output file and write a header comment at the beginning
79# of the file.
80#
81set out [open sqlite3.c w]
shaneh5e0fb2c2011-06-17 15:54:59 +000082# Force the output to use unix line endings, even on Windows.
drhced174b2011-06-20 15:24:22 +000083fconfigure $out -translation lf
drh98495b42007-03-31 22:29:05 +000084set today [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S UTC" -gmt 1]
85puts $out [subst \
86{/******************************************************************************
drh19df3352007-04-01 01:57:41 +000087** This file is an amalgamation of many separate C source files from SQLite
mistachkin4ef916e2016-08-24 19:58:46 +000088** version $VERSION. By combining all the individual C code files into this
drh1d210212011-04-01 18:12:58 +000089** single large file, the entire code can be compiled as a single translation
drh98495b42007-03-31 22:29:05 +000090** unit. This allows many compilers to do optimizations that would not be
91** possible if the files were compiled separately. Performance improvements
drh0ee68622010-10-31 22:42:27 +000092** of 5% or more are commonly seen when SQLite is compiled as a single
drh98495b42007-03-31 22:29:05 +000093** translation unit.
94**
95** This file is all you need to compile SQLite. To use SQLite in other
96** programs, you need this file and the "sqlite3.h" header file that defines
mistachkin4ef916e2016-08-24 19:58:46 +000097** the programming interface to the SQLite library. (If you do not have
drh8de5a172009-07-20 12:25:44 +000098** the "sqlite3.h" header file at hand, you will find a copy embedded within
99** the text of this file. Search for "Begin file sqlite3.h" to find the start
100** of the embedded sqlite3.h header file.) Additional code files may be needed
101** if you want a wrapper to interface SQLite with your choice of programming
102** language. The code for the "sqlite3" command-line shell is also in a
103** separate file. This file contains only code for the core SQLite library.
drhbd08af42007-04-05 21:58:33 +0000104*/
danielk19777c9aaa72008-01-01 05:49:07 +0000105#define SQLITE_CORE 1
drhbd08af42007-04-05 21:58:33 +0000106#define SQLITE_AMALGAMATION 1}]
drhb6a9ece2007-06-26 00:37:27 +0000107if {$addstatic} {
108 puts $out \
109{#ifndef SQLITE_PRIVATE
110# define SQLITE_PRIVATE static
111#endif}
112}
drh91c58e22007-03-27 12:04:04 +0000113
drh786142a2020-09-10 12:41:46 +0000114# Examine the parse.c file. If it contains lines of the form:
115#
116# "#ifndef SQLITE_ENABLE_UPDATE_LIMIT
117#
118# then set the SQLITE_UDL_CAPABLE_PARSER flag in the amalgamation.
119#
larrybr4b1c3eb2021-07-13 01:45:04 +0000120set in [open $srcdir/parse.c]
drh786142a2020-09-10 12:41:46 +0000121if {[regexp {ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT} [read $in]]} {
122 puts $out "#define SQLITE_UDL_CAPABLE_PARSER 1"
123}
124close $in
125
mistachkin4ef916e2016-08-24 19:58:46 +0000126# These are the header files used by SQLite. The first time any of these
drh91c58e22007-03-27 12:04:04 +0000127# files are seen in a #include statement in the C code, include the complete
128# text of the file in-line. The file only needs to be included once.
129#
130foreach hdr {
131 btree.h
drha3152892007-05-05 11:48:52 +0000132 btreeInt.h
drh820a9062008-01-31 13:35:48 +0000133 fts3.h
drhf7829ad2009-11-25 22:42:22 +0000134 fts3Int.h
drh820a9062008-01-31 13:35:48 +0000135 fts3_hash.h
136 fts3_tokenizer.h
drh748b8fd2018-05-25 19:22:47 +0000137 geopoly.c
drh91c58e22007-03-27 12:04:04 +0000138 hash.h
shane9bcbdad2008-05-29 20:22:37 +0000139 hwtime.h
drh91c58e22007-03-27 12:04:04 +0000140 keywordhash.h
mistachkin2318d332015-01-12 18:02:52 +0000141 msvc.h
drh428e2822007-08-30 16:23:19 +0000142 mutex.h
drh91c58e22007-03-27 12:04:04 +0000143 opcodes.h
144 os_common.h
mistachkinf74b9e02013-11-26 01:00:31 +0000145 os_setup.h
mistachkin8bc52622013-11-25 09:36:07 +0000146 os_win.h
drh91c58e22007-03-27 12:04:04 +0000147 os.h
drh91c58e22007-03-27 12:04:04 +0000148 pager.h
149 parse.h
danielk19778c0a7912008-08-20 14:49:23 +0000150 pcache.h
drh67e65e52015-02-02 21:34:54 +0000151 pragma.h
drh58f1c8b2008-05-26 20:19:25 +0000152 rtree.h
drh498dcae2013-03-13 11:42:00 +0000153 sqlite3session.h
drh91c58e22007-03-27 12:04:04 +0000154 sqlite3.h
dancd732442015-02-10 20:00:38 +0000155 sqlite3ext.h
drhcfb8f8d2015-07-23 20:44:49 +0000156 sqlite3rbu.h
danielk19771c826652008-09-08 08:08:09 +0000157 sqliteicu.h
drh91c58e22007-03-27 12:04:04 +0000158 sqliteInt.h
drhc551dd82007-06-19 15:23:48 +0000159 sqliteLimit.h
drh91c58e22007-03-27 12:04:04 +0000160 vdbe.h
161 vdbeInt.h
drh8cd5b252015-03-02 22:06:43 +0000162 vxworks.h
drhc438efd2010-04-26 00:19:45 +0000163 wal.h
drhe54df422013-11-12 18:37:25 +0000164 whereInt.h
drh91c58e22007-03-27 12:04:04 +0000165} {
166 set available_hdr($hdr) 1
167}
drh71674ce2007-10-23 15:51:26 +0000168set available_hdr(sqliteInt.h) 0
drh15482bc2021-08-06 15:26:01 +0000169set available_hdr(os_common.h) 0
drhe191e2c2013-03-19 15:23:18 +0000170set available_hdr(sqlite3session.h) 0
drh91c58e22007-03-27 12:04:04 +0000171
mistachkin59b9b022015-03-24 21:27:27 +0000172# These headers should be copied into the amalgamation without modifying any
173# of their function declarations or definitions.
174set varonly_hdr(sqlite3.h) 1
175
176# These are the functions that accept a variable number of arguments. They
177# always need to use the "cdecl" calling convention even when another calling
178# convention (e.g. "stcall") is being used for the rest of the library.
179set cdecllist {
180 sqlite3_config
181 sqlite3_db_config
182 sqlite3_log
183 sqlite3_mprintf
184 sqlite3_snprintf
185 sqlite3_test_control
186 sqlite3_vtab_config
187}
188
drh91c58e22007-03-27 12:04:04 +0000189# 78 stars used for comment formatting.
190set s78 \
191{*****************************************************************************}
192
193# Insert a comment into the code
194#
195proc section_comment {text} {
196 global out s78
197 set n [string length $text]
198 set nstar [expr {60 - $n}]
199 set stars [string range $s78 0 $nstar]
200 puts $out "/************** $text $stars/"
201}
202
203# Read the source file named $filename and write it into the
204# sqlite3.c output file. If any #include statements are seen,
mistachkin2a43c282013-08-31 05:46:42 +0000205# process them appropriately.
drh91c58e22007-03-27 12:04:04 +0000206#
207proc copy_file {filename} {
mistachkin4ef916e2016-08-24 19:58:46 +0000208 global seen_hdr available_hdr varonly_hdr cdecllist out
mistachkin696555d2021-07-13 21:59:22 +0000209 global addstatic linemacros useapicall srcdir
drh96e50882011-08-15 15:27:20 +0000210 set ln 0
drh91c58e22007-03-27 12:04:04 +0000211 set tail [file tail $filename]
212 section_comment "Begin file $tail"
mistachkin696555d2021-07-13 21:59:22 +0000213 if {$linemacros} {puts $out "#line 1 \"$filename\""}
drh91c58e22007-03-27 12:04:04 +0000214 set in [open $filename r]
drh73be5012007-08-08 12:11:21 +0000215 set varpattern {^[a-zA-Z][a-zA-Z_0-9 *]+(sqlite3[_a-zA-Z0-9]+)(\[|;| =)}
mistachkin59b9b022015-03-24 21:27:27 +0000216 set declpattern {([a-zA-Z][a-zA-Z_0-9 ]+ \**)(sqlite3[_a-zA-Z0-9]+)(\(.*)}
drhee858132007-05-08 20:37:38 +0000217 if {[file extension $filename]==".h"} {
drhf7083bf2007-08-08 01:04:52 +0000218 set declpattern " *$declpattern"
drhee858132007-05-08 20:37:38 +0000219 }
mistachkin59b9b022015-03-24 21:27:27 +0000220 set declpattern ^$declpattern\$
drh91c58e22007-03-27 12:04:04 +0000221 while {![eof $in]} {
drh24aee8a2020-06-23 17:57:08 +0000222 set line [string trimright [gets $in]]
drh96e50882011-08-15 15:27:20 +0000223 incr ln
drh9965a042008-10-14 18:21:11 +0000224 if {[regexp {^\s*#\s*include\s+["<]([^">]+)[">]} $line all hdr]} {
drh91c58e22007-03-27 12:04:04 +0000225 if {[info exists available_hdr($hdr)]} {
226 if {$available_hdr($hdr)} {
drh15482bc2021-08-06 15:26:01 +0000227 set available_hdr($hdr) 0
drh91c58e22007-03-27 12:04:04 +0000228 section_comment "Include $hdr in the middle of $tail"
larrybr4b1c3eb2021-07-13 01:45:04 +0000229 copy_file $srcdir/$hdr
drh91c58e22007-03-27 12:04:04 +0000230 section_comment "Continuing where we left off in $tail"
mistachkin696555d2021-07-13 21:59:22 +0000231 if {$linemacros} {puts $out "#line [expr {$ln+1}] \"$filename\""}
mistachkin3a2a6862015-07-15 21:00:33 +0000232 } else {
233 # Comment out the entire line, replacing any nested comment
234 # begin/end markers with the harmless substring "**".
235 puts $out "/* [string map [list /* ** */ **] $line] */"
drh91c58e22007-03-27 12:04:04 +0000236 }
237 } elseif {![info exists seen_hdr($hdr)]} {
drh1a8a0d32014-05-05 20:21:52 +0000238 if {![regexp {/\*\s+amalgamator:\s+dontcache\s+\*/} $line]} {
239 set seen_hdr($hdr) 1
240 }
drh91c58e22007-03-27 12:04:04 +0000241 puts $out $line
mistachkin1a88b142013-08-31 18:06:52 +0000242 } elseif {[regexp {/\*\s+amalgamator:\s+keep\s+\*/} $line]} {
243 # This include file must be kept because there was a "keep"
244 # directive inside of a line comment.
245 puts $out $line
drh96e50882011-08-15 15:27:20 +0000246 } else {
mistachkin1a88b142013-08-31 18:06:52 +0000247 # Comment out the entire line, replacing any nested comment
248 # begin/end markers with the harmless substring "**".
249 puts $out "/* [string map [list /* ** */ **] $line] */"
drh91c58e22007-03-27 12:04:04 +0000250 }
251 } elseif {[regexp {^#ifdef __cplusplus} $line]} {
252 puts $out "#if 0"
mistachkin696555d2021-07-13 21:59:22 +0000253 } elseif {!$linemacros && [regexp {^#line} $line]} {
drh91c58e22007-03-27 12:04:04 +0000254 # Skip #line directives.
drh45fac882015-10-09 01:42:49 +0000255 } elseif {$addstatic
256 && ![regexp {^(static|typedef|SQLITE_PRIVATE)} $line]} {
mistachkin59b9b022015-03-24 21:27:27 +0000257 # Skip adding the SQLITE_PRIVATE or SQLITE_API keyword before
258 # functions if this header file does not need it.
259 if {![info exists varonly_hdr($tail)]
260 && [regexp $declpattern $line all rettype funcname rest]} {
261 regsub {^SQLITE_API } $line {} line
danf5f0e432017-08-04 08:23:33 +0000262 regsub {^SQLITE_API } $rettype {} rettype
263
drh0a0e1312007-08-07 17:04:59 +0000264 # Add the SQLITE_PRIVATE or SQLITE_API keyword before functions.
265 # so that linkage can be modified at compile-time.
drh1ffe7c72013-03-19 17:10:10 +0000266 if {[regexp {^sqlite3[a-z]*_} $funcname]} {
mistachkin59b9b022015-03-24 21:27:27 +0000267 set line SQLITE_API
268 append line " " [string trim $rettype]
269 if {[string index $rettype end] ne "*"} {
270 append line " "
271 }
mistachkin4ef916e2016-08-24 19:58:46 +0000272 if {$useapicall} {
273 if {[lsearch -exact $cdecllist $funcname] >= 0} {
mistachkin0e4125a2016-09-08 23:16:02 +0000274 append line SQLITE_CDECL " "
mistachkin4ef916e2016-08-24 19:58:46 +0000275 } else {
mistachkin0e4125a2016-09-08 23:16:02 +0000276 append line SQLITE_APICALL " "
mistachkin4ef916e2016-08-24 19:58:46 +0000277 }
mistachkin59b9b022015-03-24 21:27:27 +0000278 }
mistachkin0e4125a2016-09-08 23:16:02 +0000279 append line $funcname $rest
larrybr4b1c3eb2021-07-13 01:45:04 +0000280 if {$funcname=="sqlite3_sourceid"} {
drh0a02c722017-08-22 21:07:03 +0000281 # The sqlite3_sourceid() routine is synthesized at the end of
282 # the amalgamation
283 puts $out "/* $line */"
284 } else {
285 puts $out $line
286 }
drh0a0e1312007-08-07 17:04:59 +0000287 } else {
288 puts $out "SQLITE_PRIVATE $line"
289 }
290 } elseif {[regexp $varpattern $line all varname]} {
mistachkin59b9b022015-03-24 21:27:27 +0000291 # Add the SQLITE_PRIVATE before variable declarations or
292 # definitions for internal use
293 regsub {^SQLITE_API } $line {} line
294 if {![regexp {^sqlite3_} $varname]} {
295 regsub {^extern } $line {} line
296 puts $out "SQLITE_PRIVATE $line"
297 } else {
298 if {[regexp {const char sqlite3_version\[\];} $line]} {
299 set line {const char sqlite3_version[] = SQLITE_VERSION;}
300 }
301 regsub {^SQLITE_EXTERN } $line {} line
302 puts $out "SQLITE_API $line"
drhb3190c12008-12-08 21:37:14 +0000303 }
mlcreech3a00f902008-03-04 17:45:01 +0000304 } elseif {[regexp {^(SQLITE_EXTERN )?void \(\*sqlite3IoTrace\)} $line]} {
mistachkin59b9b022015-03-24 21:27:27 +0000305 regsub {^SQLITE_API } $line {} line
mlcreech3a00f902008-03-04 17:45:01 +0000306 regsub {^SQLITE_EXTERN } $line {} line
dan80389532014-12-24 17:17:30 +0000307 puts $out $line
drhf1581622009-02-03 13:51:17 +0000308 } elseif {[regexp {^void \(\*sqlite3Os} $line]} {
mistachkin59b9b022015-03-24 21:27:27 +0000309 regsub {^SQLITE_API } $line {} line
drhf1581622009-02-03 13:51:17 +0000310 puts $out "SQLITE_PRIVATE $line"
drh26b0fc02007-06-26 00:52:39 +0000311 } else {
drh0a0e1312007-08-07 17:04:59 +0000312 puts $out $line
drh26b0fc02007-06-26 00:52:39 +0000313 }
drh91c58e22007-03-27 12:04:04 +0000314 } else {
315 puts $out $line
316 }
317 }
318 close $in
319 section_comment "End of $tail"
320}
321
322
323# Process the source files. Process files containing commonly
324# used subroutines first in order to help the compiler find
325# inlining opportunities.
326#
327foreach file {
drh71674ce2007-10-23 15:51:26 +0000328 sqliteInt.h
drh15482bc2021-08-06 15:26:01 +0000329 os_common.h
drha612c1c2021-07-05 18:37:37 +0000330 ctime.c
drh98495b42007-03-31 22:29:05 +0000331
drh40257ff2008-06-13 18:24:27 +0000332 global.c
drhf7141992008-06-19 00:16:08 +0000333 status.c
drha55ca9e2007-04-02 12:22:44 +0000334 date.c
drh970f7242007-03-31 16:29:06 +0000335 os.c
336
drh643167f2008-01-22 21:30:53 +0000337 fault.c
drhd1370b62008-10-28 18:58:20 +0000338 mem0.c
drh97c8ec32007-08-27 21:49:34 +0000339 mem1.c
340 mem2.c
danielk19776b39c2e2008-06-25 14:57:53 +0000341 mem3.c
342 mem5.c
drh97c8ec32007-08-27 21:49:34 +0000343 mutex.c
drh18472fa2008-10-07 15:25:48 +0000344 mutex_noop.c
drh61f6dc62007-08-30 17:15:37 +0000345 mutex_unix.c
346 mutex_w32.c
drha3152892007-05-05 11:48:52 +0000347 malloc.c
drh91c58e22007-03-27 12:04:04 +0000348 printf.c
drh38b41492015-06-08 15:08:15 +0000349 treeview.c
drh91c58e22007-03-27 12:04:04 +0000350 random.c
drhf51446a2012-07-21 19:40:42 +0000351 threads.c
drh91c58e22007-03-27 12:04:04 +0000352 utf.c
353 util.c
354 hash.c
355 opcodes.c
356
drh91c58e22007-03-27 12:04:04 +0000357 os_unix.c
358 os_win.c
drhac442f42018-01-03 01:28:46 +0000359 memdb.c
drh91c58e22007-03-27 12:04:04 +0000360
drhf5e7bb52008-02-18 14:47:33 +0000361 bitvec.c
danielk19778c0a7912008-08-20 14:49:23 +0000362 pcache.c
danielk1977d17e71c2008-11-13 14:42:18 +0000363 pcache1.c
drh3d4501e2008-12-04 20:40:10 +0000364 rowset.c
drh91c58e22007-03-27 12:04:04 +0000365 pager.c
shanehfd068632010-05-06 19:20:29 +0000366 wal.c
drh61f6dc62007-08-30 17:15:37 +0000367
shane9bcbdad2008-05-29 20:22:37 +0000368 btmutex.c
drh91c58e22007-03-27 12:04:04 +0000369 btree.c
danielk197704103022009-02-03 16:51:24 +0000370 backup.c
drh91c58e22007-03-27 12:04:04 +0000371
drh91c58e22007-03-27 12:04:04 +0000372 vdbemem.c
373 vdbeaux.c
374 vdbeapi.c
drhc7bc4fd2009-11-25 18:03:42 +0000375 vdbetrace.c
drh91c58e22007-03-27 12:04:04 +0000376 vdbe.c
drh3f755842007-05-03 16:55:32 +0000377 vdbeblob.c
dan7fe62702011-08-02 10:56:22 +0000378 vdbesort.c
drh691b5c52020-03-23 15:49:22 +0000379 vdbevtab.c
danielk1977b3175382008-10-17 18:51:52 +0000380 memjournal.c
drh91c58e22007-03-27 12:04:04 +0000381
drh7d10d5a2008-08-20 16:35:10 +0000382 walker.c
383 resolve.c
drh91c58e22007-03-27 12:04:04 +0000384 expr.c
385 alter.c
386 analyze.c
387 attach.c
388 auth.c
389 build.c
390 callback.c
drh91c58e22007-03-27 12:04:04 +0000391 delete.c
drh70a8ca32008-08-21 18:49:27 +0000392 func.c
dan3be7d6e2009-09-19 17:59:59 +0000393 fkey.c
drh91c58e22007-03-27 12:04:04 +0000394 insert.c
395 legacy.c
396 loadext.c
397 pragma.c
398 prepare.c
399 select.c
400 table.c
401 trigger.c
402 update.c
drhfcfd7562018-04-12 21:42:51 +0000403 upsert.c
drh91c58e22007-03-27 12:04:04 +0000404 vacuum.c
405 vtab.c
drh6f82e852015-06-06 20:12:09 +0000406 wherecode.c
drh6c1f4ef2015-06-08 14:23:15 +0000407 whereexpr.c
drh91c58e22007-03-27 12:04:04 +0000408 where.c
dand31e7ad2018-06-09 17:58:51 +0000409 window.c
drh91c58e22007-03-27 12:04:04 +0000410
411 parse.c
412
413 tokenize.c
drh46c99e02007-08-27 23:26:59 +0000414 complete.c
drh91c58e22007-03-27 12:04:04 +0000415
416 main.c
danielk1977404ca072009-03-16 13:19:36 +0000417 notify.c
drh820a9062008-01-31 13:35:48 +0000418
419 fts3.c
dan290c9392011-02-01 18:59:34 +0000420 fts3_aux.c
drhaeba0202008-12-31 16:01:04 +0000421 fts3_expr.c
drh820a9062008-01-31 13:35:48 +0000422 fts3_hash.c
423 fts3_porter.c
424 fts3_tokenizer.c
425 fts3_tokenizer1.c
dand7a959c2013-04-22 15:30:37 +0000426 fts3_tokenize_vtab.c
dan16708c42009-11-19 15:25:25 +0000427 fts3_write.c
428 fts3_snippet.c
dan3d403c72012-05-25 17:50:19 +0000429 fts3_unicode.c
430 fts3_unicode2.c
drh58f1c8b2008-05-26 20:19:25 +0000431
drh748b8fd2018-05-25 19:22:47 +0000432 json1.c
drh58f1c8b2008-05-26 20:19:25 +0000433 rtree.c
danielk19770c8a5d02008-08-04 11:49:20 +0000434 icu.c
danielk1977f9449d02008-09-24 09:58:00 +0000435 fts3_icu.c
drhcfb8f8d2015-07-23 20:44:49 +0000436 sqlite3rbu.c
drh1a4a6802015-05-04 18:31:09 +0000437 dbstat.c
drha43c8c82017-10-11 13:48:11 +0000438 dbpage.c
drh498dcae2013-03-13 11:42:00 +0000439 sqlite3session.c
drh50065652015-10-08 19:29:18 +0000440 fts5.c
drhc6603af2017-06-29 14:33:51 +0000441 stmt.c
drh91c58e22007-03-27 12:04:04 +0000442} {
larrybr4b1c3eb2021-07-13 01:45:04 +0000443 copy_file $srcdir/$file
drh91c58e22007-03-27 12:04:04 +0000444}
445
larrybr4b1c3eb2021-07-13 01:45:04 +0000446puts $out \
447"/* Return the source-id for this library */
drh0a02c722017-08-22 21:07:03 +0000448SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }"
larrybr4b1c3eb2021-07-13 01:45:04 +0000449
drh0a02c722017-08-22 21:07:03 +0000450puts $out \
451"/************************** End of sqlite3.c ******************************/"
452
drh91c58e22007-03-27 12:04:04 +0000453close $out