15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/tclsh
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# To build a single huge source file holding all of SQLite (or at
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# least the core components - the test harness, shell, and TCL
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# interface are omitted.) first do
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#      make target_source
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# The make target above moves all of the source code files into
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# a subdirectory named "tsrc".  (This script expects to find the files
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# there and will not work if they are not found.)  There are a few
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# generated C code files that are also added to the tsrc directory.
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# For example, the "parse.c" and "parse.h" files to implement the
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# the parser are derived from "parse.y" using lemon.  And the
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# "keywordhash.h" files is generated by a program named "mkkeywordhash".
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# After the "tsrc" directory has been created and populated, run
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# this script:
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#      tclsh mksqlite3c.tcl
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# The amalgamated SQLite code will be written into sqlite3.c
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Begin by reading the "sqlite3.h" header file.  Extract the version number
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# from in this file.  The versioon number is needed to generate the header
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# comment of the amalgamation.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if {[lsearch $argv --nostatic]>=0} {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set addstatic 0
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} else {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set addstatic 1
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)set in [open tsrc/sqlite3.h]
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)set cnt 0
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)set VERSION ?????
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)while {![eof $in]} {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set line [gets $in]
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if {$line=="" && [eof $in]} break
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  incr cnt
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  regexp {#define\s+SQLITE_VERSION\s+"(.*)"} $line all VERSION
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)close $in
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Open the output file and write a header comment at the beginning
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# of the file.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)set out [open sqlite3.c w]
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)set today [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S UTC" -gmt 1]
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)puts $out [subst \
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){/******************************************************************************
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** This file is an amalgamation of many separate C source files from SQLite
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** version $VERSION.  By combining all the individual C code files into this
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** single large file, the entire code can be compiled as a single translation
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** unit.  This allows many compilers to do optimizations that would not be
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** possible if the files were compiled separately.  Performance improvements
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** of 5% or more are commonly seen when SQLite is compiled as a single
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** translation unit.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** This file is all you need to compile SQLite.  To use SQLite in other
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** programs, you need this file and the "sqlite3.h" header file that defines
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** the programming interface to the SQLite library.  (If you do not have
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** the "sqlite3.h" header file at hand, you will find a copy embedded within
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** the text of this file.  Search for "Begin file sqlite3.h" to find the start
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** of the embedded sqlite3.h header file.) Additional code files may be needed
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** if you want a wrapper to interface SQLite with your choice of programming
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** language. The code for the "sqlite3" command-line shell is also in a
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** separate file. This file contains only code for the core SQLite library.
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SQLITE_CORE 1
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SQLITE_AMALGAMATION 1}]
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if {$addstatic} {
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  puts $out \
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){#ifndef SQLITE_PRIVATE
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define SQLITE_PRIVATE static
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SQLITE_API
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define SQLITE_API
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif}
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# These are the header files used by SQLite.  The first time any of these
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# files are seen in a #include statement in the C code, include the complete
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# text of the file in-line.  The file only needs to be included once.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)foreach hdr {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   btree.h
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   btreeInt.h
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   fts3.h
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   fts3Int.h
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   fts3_hash.h
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   fts3_tokenizer.h
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   hash.h
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   hwtime.h
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   keywordhash.h
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   mutex.h
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   opcodes.h
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   os_common.h
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   os.h
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   os_os2.h
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pager.h
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   parse.h
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pcache.h
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   rtree.h
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   sqlite3ext.h
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   sqlite3.h
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   sqliteicu.h
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   sqliteInt.h
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   sqliteLimit.h
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   vdbe.h
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   vdbeInt.h
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   wal.h
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set available_hdr($hdr) 1
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)set available_hdr(sqliteInt.h) 0
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 78 stars used for comment formatting.
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)set s78 \
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){*****************************************************************************}
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Insert a comment into the code
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)proc section_comment {text} {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  global out s78
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set n [string length $text]
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set nstar [expr {60 - $n}]
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set stars [string range $s78 0 $nstar]
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  puts $out "/************** $text $stars/"
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Read the source file named $filename and write it into the
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# sqlite3.c output file.  If any #include statements are seen,
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# process them approprately.
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)proc copy_file {filename} {
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  global seen_hdr available_hdr out addstatic
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set tail [file tail $filename]
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  section_comment "Begin file $tail"
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set in [open $filename r]
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set varpattern {^[a-zA-Z][a-zA-Z_0-9 *]+(sqlite3[_a-zA-Z0-9]+)(\[|;| =)}
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set declpattern {[a-zA-Z][a-zA-Z_0-9 ]+ \**(sqlite3[_a-zA-Z0-9]+)\(}
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if {[file extension $filename]==".h"} {
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    set declpattern " *$declpattern"
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  set declpattern ^$declpattern
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while {![eof $in]} {
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    set line [gets $in]
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if {[regexp {^\s*#\s*include\s+["<]([^">]+)[">]} $line all hdr]} {
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if {[info exists available_hdr($hdr)]} {
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if {$available_hdr($hdr)} {
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          if {$hdr!="os_common.h" && $hdr!="hwtime.h"} {
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            set available_hdr($hdr) 0
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          }
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          section_comment "Include $hdr in the middle of $tail"
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          copy_file tsrc/$hdr
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          section_comment "Continuing where we left off in $tail"
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } elseif {![info exists seen_hdr($hdr)]} {
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        set seen_hdr($hdr) 1
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        puts $out $line
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } elseif {[regexp {^#ifdef __cplusplus} $line]} {
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      puts $out "#if 0"
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } elseif {[regexp {^#line} $line]} {
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      # Skip #line directives.
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } elseif {$addstatic && ![regexp {^(static|typedef)} $line]} {
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      regsub {^SQLITE_API } $line {} line
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if {[regexp $declpattern $line all funcname]} {
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        # Add the SQLITE_PRIVATE or SQLITE_API keyword before functions.
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        # so that linkage can be modified at compile-time.
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if {[regexp {^sqlite3_} $funcname]} {
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          puts $out "SQLITE_API $line"
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        } else {
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          puts $out "SQLITE_PRIVATE $line"
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } elseif {[regexp $varpattern $line all varname]} {
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        # Add the SQLITE_PRIVATE before variable declarations or
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        # definitions for internal use
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if {![regexp {^sqlite3_} $varname]} {
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          regsub {^extern } $line {} line
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          puts $out "SQLITE_PRIVATE $line"
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        } else {
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          if {[regexp {const char sqlite3_version\[\];} $line]} {
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            set line {const char sqlite3_version[] = SQLITE_VERSION;}
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          }
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          regsub {^SQLITE_EXTERN } $line {} line
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          puts $out "SQLITE_API $line"
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } elseif {[regexp {^(SQLITE_EXTERN )?void \(\*sqlite3IoTrace\)} $line]} {
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        regsub {^SQLITE_EXTERN } $line {} line
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        puts $out "SQLITE_PRIVATE $line"
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } elseif {[regexp {^void \(\*sqlite3Os} $line]} {
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        puts $out "SQLITE_PRIVATE $line"
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        puts $out $line
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      puts $out $line
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  close $in
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  section_comment "End of $tail"
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Process the source files.  Process files containing commonly
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# used subroutines first in order to help the compiler find
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# inlining opportunities.
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)foreach file {
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   sqliteInt.h
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   global.c
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   ctime.c
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   status.c
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   date.c
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   os.c
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   fault.c
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   mem0.c
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   mem1.c
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   mem2.c
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   mem3.c
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   mem5.c
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   mutex.c
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   mutex_noop.c
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   mutex_os2.c
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   mutex_unix.c
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   mutex_w32.c
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   malloc.c
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   printf.c
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   random.c
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   utf.c
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   util.c
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   hash.c
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   opcodes.c
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   os_os2.c
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   os_unix.c
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   os_win.c
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   bitvec.c
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pcache.c
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pcache1.c
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   rowset.c
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pager.c
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   wal.c
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   btmutex.c
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   btree.c
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   backup.c
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   vdbemem.c
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   vdbeaux.c
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   vdbeapi.c
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   vdbetrace.c
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   vdbe.c
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   vdbeblob.c
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   journal.c
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   memjournal.c
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   walker.c
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   resolve.c
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   expr.c
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   alter.c
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   analyze.c
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   attach.c
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   auth.c
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   build.c
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   callback.c
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   delete.c
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   func.c
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   fkey.c
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   insert.c
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   legacy.c
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   loadext.c
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   pragma.c
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   prepare.c
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   select.c
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   table.c
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   trigger.c
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   update.c
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   vacuum.c
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   vtab.c
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   where.c
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   parse.c
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   tokenize.c
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   complete.c
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   main.c
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   notify.c
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
296ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch   recover.c
297ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   fts3.c
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   fts3_aux.c
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   fts3_expr.c
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   fts3_hash.c
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   fts3_porter.c
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   fts3_tokenizer.c
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   fts3_tokenizer1.c
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   fts3_write.c
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   fts3_snippet.c
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   rtree.c
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   icu.c
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   fts3_icu.c
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} {
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  copy_file tsrc/$file
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)close $out
316