/ Check-in [b31a7d7d]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Add a new script to build an amalgamation that omits FTS3/4 and RTREE.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: b31a7d7db9040d8eedaf1ecd89ea0033f579d0f1
User & Date: drh 2011-09-17 17:29:20
Context
2011-09-19
11:57
Remove a stray merge-sort related change from pager.c and pager.h. check-in: 69823ed1 user: dan tags: trunk
2011-09-17
17:29
Add a new script to build an amalgamation that omits FTS3/4 and RTREE. check-in: b31a7d7d user: drh tags: trunk
15:34
Make sure the file structure is zeroed prior to calling the VFS to open a file. check-in: 29c4d0dd user: mistachkin tags: trunk
Changes
Hide Diffs Side-by-Side Diffs Ignore Whitespace Patch

Added tool/mksqlite3c-noext.tcl.

            1  +#!/usr/bin/tclsh
            2  +#
            3  +# To build a single huge source file holding all of SQLite (or at
            4  +# least the core components - the test harness, shell, and TCL 
            5  +# interface are omitted.) first do
            6  +#
            7  +#      make target_source
            8  +#
            9  +# 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
           14  +# the parser are derived from "parse.y" using lemon.  And the 
           15  +# "keywordhash.h" files is generated by a program named "mkkeywordhash".
           16  +#
           17  +# After the "tsrc" directory has been created and populated, run
           18  +# this script:
           19  +#
           20  +#      tclsh mksqlite3c.tcl
           21  +#
           22  +# The amalgamated SQLite code will be written into sqlite3.c
           23  +#
           24  +
           25  +# Begin by reading the "sqlite3.h" header file.  Extract the version number
           26  +# from in this file.  The versioon number is needed to generate the header
           27  +# comment of the amalgamation.
           28  +#
           29  +if {[lsearch $argv --nostatic]>=0} {
           30  +  set addstatic 0
           31  +} else {
           32  +  set addstatic 1
           33  +}
           34  +if {[lsearch $argv --linemacros]>=0} {
           35  +  set linemacros 1
           36  +} else {
           37  +  set linemacros 0
           38  +}
           39  +set in [open tsrc/sqlite3.h]
           40  +set cnt 0
           41  +set VERSION ?????
           42  +while {![eof $in]} {
           43  +  set line [gets $in]
           44  +  if {$line=="" && [eof $in]} break
           45  +  incr cnt
           46  +  regexp {#define\s+SQLITE_VERSION\s+"(.*)"} $line all VERSION
           47  +}
           48  +close $in
           49  +
           50  +# Open the output file and write a header comment at the beginning
           51  +# of the file.
           52  +#
           53  +set out [open sqlite3.c w]
           54  +# Force the output to use unix line endings, even on Windows.
           55  +fconfigure $out -translation lf
           56  +set today [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S UTC" -gmt 1]
           57  +puts $out [subst \
           58  +{/******************************************************************************
           59  +** This file is an amalgamation of many separate C source files from SQLite
           60  +** version $VERSION.  By combining all the individual C code files into this 
           61  +** single large file, the entire code can be compiled as a single translation
           62  +** unit.  This allows many compilers to do optimizations that would not be
           63  +** possible if the files were compiled separately.  Performance improvements
           64  +** of 5% or more are commonly seen when SQLite is compiled as a single
           65  +** translation unit.
           66  +**
           67  +** This file is all you need to compile SQLite.  To use SQLite in other
           68  +** programs, you need this file and the "sqlite3.h" header file that defines
           69  +** the programming interface to the SQLite library.  (If you do not have 
           70  +** the "sqlite3.h" header file at hand, you will find a copy embedded within
           71  +** the text of this file.  Search for "Begin file sqlite3.h" to find the start
           72  +** of the embedded sqlite3.h header file.) Additional code files may be needed
           73  +** if you want a wrapper to interface SQLite with your choice of programming
           74  +** language. The code for the "sqlite3" command-line shell is also in a
           75  +** separate file. This file contains only code for the core SQLite library.
           76  +*/
           77  +#define SQLITE_CORE 1
           78  +#define SQLITE_AMALGAMATION 1}]
           79  +if {$addstatic} {
           80  +  puts $out \
           81  +{#ifndef SQLITE_PRIVATE
           82  +# define SQLITE_PRIVATE static
           83  +#endif
           84  +#ifndef SQLITE_API
           85  +# define SQLITE_API
           86  +#endif}
           87  +}
           88  +
           89  +# These are the header files used by SQLite.  The first time any of these 
           90  +# files are seen in a #include statement in the C code, include the complete
           91  +# text of the file in-line.  The file only needs to be included once.
           92  +#
           93  +foreach hdr {
           94  +   btree.h
           95  +   btreeInt.h
           96  +   hash.h
           97  +   hwtime.h
           98  +   keywordhash.h
           99  +   mutex.h
          100  +   opcodes.h
          101  +   os_common.h
          102  +   os.h
          103  +   os_os2.h
          104  +   pager.h
          105  +   parse.h
          106  +   pcache.h
          107  +   sqlite3ext.h
          108  +   sqlite3.h
          109  +   sqliteicu.h
          110  +   sqliteInt.h
          111  +   sqliteLimit.h
          112  +   vdbe.h
          113  +   vdbeInt.h
          114  +   wal.h
          115  +} {
          116  +  set available_hdr($hdr) 1
          117  +}
          118  +set available_hdr(sqliteInt.h) 0
          119  +
          120  +# 78 stars used for comment formatting.
          121  +set s78 \
          122  +{*****************************************************************************}
          123  +
          124  +# Insert a comment into the code
          125  +#
          126  +proc section_comment {text} {
          127  +  global out s78
          128  +  set n [string length $text]
          129  +  set nstar [expr {60 - $n}]
          130  +  set stars [string range $s78 0 $nstar]
          131  +  puts $out "/************** $text $stars/"
          132  +}
          133  +
          134  +# Read the source file named $filename and write it into the
          135  +# sqlite3.c output file.  If any #include statements are seen,
          136  +# process them approprately.
          137  +#
          138  +proc copy_file {filename} {
          139  +  global seen_hdr available_hdr out addstatic linemacros
          140  +  set ln 0
          141  +  set tail [file tail $filename]
          142  +  section_comment "Begin file $tail"
          143  +  if {$linemacros} {puts $out "#line 1 \"$filename\""}
          144  +  set in [open $filename r]
          145  +  set varpattern {^[a-zA-Z][a-zA-Z_0-9 *]+(sqlite3[_a-zA-Z0-9]+)(\[|;| =)}
          146  +  set declpattern {[a-zA-Z][a-zA-Z_0-9 ]+ \**(sqlite3[_a-zA-Z0-9]+)\(}
          147  +  if {[file extension $filename]==".h"} {
          148  +    set declpattern " *$declpattern"
          149  +  }
          150  +  set declpattern ^$declpattern
          151  +  while {![eof $in]} {
          152  +    set line [gets $in]
          153  +    incr ln
          154  +    if {[regexp {^\s*#\s*include\s+["<]([^">]+)[">]} $line all hdr]} {
          155  +      if {[info exists available_hdr($hdr)]} {
          156  +        if {$available_hdr($hdr)} {
          157  +          if {$hdr!="os_common.h" && $hdr!="hwtime.h"} {
          158  +            set available_hdr($hdr) 0
          159  +          }
          160  +          section_comment "Include $hdr in the middle of $tail"
          161  +          copy_file tsrc/$hdr
          162  +          section_comment "Continuing where we left off in $tail"
          163  +          if {$linemacros} {puts $out "#line [expr {$ln+1}] \"$filename\""}
          164  +        }
          165  +      } elseif {![info exists seen_hdr($hdr)]} {
          166  +        set seen_hdr($hdr) 1
          167  +        puts $out $line
          168  +      } else {
          169  +        puts $out "/* $line */"
          170  +      }
          171  +    } elseif {[regexp {^#ifdef __cplusplus} $line]} {
          172  +      puts $out "#if 0"
          173  +    } elseif {!$linemacros && [regexp {^#line} $line]} {
          174  +      # Skip #line directives.
          175  +    } elseif {$addstatic && ![regexp {^(static|typedef)} $line]} {
          176  +      regsub {^SQLITE_API } $line {} line
          177  +      if {[regexp $declpattern $line all funcname]} {
          178  +        # Add the SQLITE_PRIVATE or SQLITE_API keyword before functions.
          179  +        # so that linkage can be modified at compile-time.
          180  +        if {[regexp {^sqlite3_} $funcname]} {
          181  +          puts $out "SQLITE_API $line"
          182  +        } else {
          183  +          puts $out "SQLITE_PRIVATE $line"
          184  +        }
          185  +      } elseif {[regexp $varpattern $line all varname]} {
          186  +        # Add the SQLITE_PRIVATE before variable declarations or
          187  +        # definitions for internal use
          188  +        if {![regexp {^sqlite3_} $varname]} {
          189  +          regsub {^extern } $line {} line
          190  +          puts $out "SQLITE_PRIVATE $line"
          191  +        } else {
          192  +          if {[regexp {const char sqlite3_version\[\];} $line]} {
          193  +            set line {const char sqlite3_version[] = SQLITE_VERSION;}
          194  +          }
          195  +          regsub {^SQLITE_EXTERN } $line {} line
          196  +          puts $out "SQLITE_API $line"
          197  +        }
          198  +      } elseif {[regexp {^(SQLITE_EXTERN )?void \(\*sqlite3IoTrace\)} $line]} {
          199  +        regsub {^SQLITE_EXTERN } $line {} line
          200  +        puts $out "SQLITE_PRIVATE $line"
          201  +      } elseif {[regexp {^void \(\*sqlite3Os} $line]} {
          202  +        puts $out "SQLITE_PRIVATE $line"
          203  +      } else {
          204  +        puts $out $line
          205  +      }
          206  +    } else {
          207  +      puts $out $line
          208  +    }
          209  +  }
          210  +  close $in
          211  +  section_comment "End of $tail"
          212  +}
          213  +
          214  +
          215  +# Process the source files.  Process files containing commonly
          216  +# used subroutines first in order to help the compiler find
          217  +# inlining opportunities.
          218  +#
          219  +foreach file {
          220  +   sqliteInt.h
          221  +
          222  +   global.c
          223  +   ctime.c
          224  +   status.c
          225  +   date.c
          226  +   os.c
          227  +
          228  +   fault.c
          229  +   mem0.c
          230  +   mem1.c
          231  +   mem2.c
          232  +   mem3.c
          233  +   mem5.c
          234  +   mutex.c
          235  +   mutex_noop.c
          236  +   mutex_os2.c
          237  +   mutex_unix.c
          238  +   mutex_w32.c
          239  +   malloc.c
          240  +   printf.c
          241  +   random.c
          242  +   utf.c
          243  +   util.c
          244  +   hash.c
          245  +   opcodes.c
          246  +
          247  +   os_os2.c
          248  +   os_unix.c
          249  +   os_win.c
          250  +
          251  +   bitvec.c
          252  +   pcache.c
          253  +   pcache1.c
          254  +   rowset.c
          255  +   pager.c
          256  +   wal.c
          257  +
          258  +   btmutex.c
          259  +   btree.c
          260  +   backup.c
          261  +
          262  +   vdbemem.c
          263  +   vdbeaux.c
          264  +   vdbeapi.c
          265  +   vdbetrace.c
          266  +   vdbe.c
          267  +   vdbeblob.c
          268  +   vdbesort.c
          269  +   journal.c
          270  +   memjournal.c
          271  +
          272  +   walker.c
          273  +   resolve.c
          274  +   expr.c
          275  +   alter.c
          276  +   analyze.c
          277  +   attach.c
          278  +   auth.c
          279  +   build.c
          280  +   callback.c
          281  +   delete.c
          282  +   func.c
          283  +   fkey.c
          284  +   insert.c
          285  +   legacy.c
          286  +   loadext.c
          287  +   pragma.c
          288  +   prepare.c
          289  +   select.c
          290  +   table.c
          291  +   trigger.c
          292  +   update.c
          293  +   vacuum.c
          294  +   vtab.c
          295  +   where.c
          296  +
          297  +   parse.c
          298  +
          299  +   tokenize.c
          300  +   complete.c
          301  +
          302  +   main.c
          303  +   notify.c
          304  +} {
          305  +  copy_file tsrc/$file
          306  +}
          307  +
          308  +close $out