Fix the amalgamation so that it works with -DSQLITE_ENABLE_REDEF_IO. Change

tclsqlite.c so that it can be appended to the amalgamation.  Create a new
amalgamation of header files for use by projects that want to redefine their
own I/O interface using -DSQLITE_ENABLE_REDEF_IO. (CVS 3817)

FossilOrigin-Name: f2caff870c81c08ec85aae72986c231ee986b251
This commit is contained in:
drh 2007-04-05 21:58:33 +00:00
parent 93d57531f7
commit bd08af4871
8 changed files with 181 additions and 25 deletions

View File

@ -254,6 +254,9 @@ target_source: $(SRC)
sqlite3.c: target_source $(TOP)/tool/mksqlite3c.tcl
tclsh $(TOP)/tool/mksqlite3c.tcl
cp sqlite3.c tclsqlite3.c
cat $(TOP)/src/tclsqlite.c >>tclsqlite3.c
tclsh $(TOP)/tool/mksqlite3internalh.tcl
# Rules to build the LEMON compiler generator
#

View File

@ -1,5 +1,5 @@
C Add\sa\starget\sto\sthe\sautoconf-generated\smakefile\sfor\samalgamation.\s(CVS\s3816)
D 2007-04-05T18:34:58
C Fix\sthe\samalgamation\sso\sthat\sit\sworks\swith\s-DSQLITE_ENABLE_REDEF_IO.\s\sChange\ntclsqlite.c\sso\sthat\sit\scan\sbe\sappended\sto\sthe\samalgamation.\s\sCreate\sa\snew\namalgamation\sof\sheader\sfiles\sfor\suse\sby\sprojects\sthat\swant\sto\sredefine\stheir\nown\sI/O\sinterface\susing\s-DSQLITE_ENABLE_REDEF_IO.\s(CVS\s3817)
D 2007-04-05T21:58:33
F Makefile.in a9bd493360a2b17e5214b69d8c32dd6cdaceaf55
F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@ -43,7 +43,7 @@ F ext/fts2/fts2_tokenizer.h 4c5ffe31d63622869eb6eec1503df7f6996fd1bd
F ext/fts2/fts2_tokenizer1.c 6067f2f710bc7e91c0688b7b11be1027777553e0
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895
F ltmain.sh 56abb507100ed2d4261f6dd1653dec3cf4066387
F main.mk 49c1b97b57d2a0091fbecee6feb9a992661ff05a
F main.mk 2c20b3501860b36115c477a95a7f9355c755cf3b
F mkdll.sh ed62756baf44babf562a7843588790c02fee2106
F mkopcodec.awk bd46ad001c98dfbab07b1713cb8e692fa0e5415d
F mkopcodeh.awk cde995d269aa06c94adbf6455bea0acedb913fa5
@ -75,8 +75,8 @@ F src/legacy.c 2631df6a861f830d6b1c0fe92b9fdd745b2c0cd6
F src/loadext.c 146fb9b9dc6133e763888d710205c32ebf8eeca2
F src/main.c c8915777ae8e50823d01eefe2b674ef68c32bf61
F src/md5.c c5fdfa5c2593eaee2e32a5ce6c6927c986eaf217
F src/os.c 5a194b9b9a10dc66543d4ca22bc0db40c5cc5ef1
F src/os.h 21db538bb674d53baa960ea8ec2332f1af799ed6
F src/os.c 4650e98aadd27abfe1698ff58edf6893c58d4881
F src/os.h 9240adf088fd55732f8926f9017601ba3430ead8
F src/os_common.h 0969285cc1e0b1ccc7a2cd7ce8eb144176ce3369
F src/os_os2.c 2ce97909b926a598823f97338027dbec1dcf4165
F src/os_os2.h e5f17dd69333632bbc3112881ea407c37d245eb3
@ -100,7 +100,7 @@ F src/sqlite.h.in e429f66f9245c7f8675db24b230c950b8672ad1c
F src/sqlite3ext.h 7d0d363ea7327e817ef0dfe1b7eee1f171b72890
F src/sqliteInt.h f09f449f266f71b236844e540bfce10e455ba6ab
F src/table.c 6d0da66dde26ee75614ed8f584a1996467088d06
F src/tclsqlite.c a8d1166319db5d505b25ac6a9820162afe63fc8a
F src/tclsqlite.c 58fd67ba2c5a6ca816ad110029b6cb2a44a3c707
F src/test1.c 6021cbcede9bfab986ade678efa7226180f3edff
F src/test2.c 24458b17ab2f3c90cbc1c8446bd7ffe69be62f88
F src/test3.c 65f92247cf8592854e9bf5115b3fb711f8b33280
@ -385,7 +385,8 @@ F tool/memleak2.awk 9cc20c8e8f3c675efac71ea0721ee6874a1566e8
F tool/memleak3.tcl 7707006ee908cffff210c98158788d85bb3fcdbf
F tool/mkkeywordhash.c 520d0016eaac0d783ea8ffb7f91d150d0bf06e81
F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e x
F tool/mksqlite3c.tcl ea7a08c3a87e47031bcefccde4e641914d013a99
F tool/mksqlite3c.tcl 2d204fc271b2e2a2139e360527dd845385c4dffa
F tool/mksqlite3internalh.tcl a85bb0c812db1a060e6e6dfab4e4c817f53d194b
F tool/omittest.tcl e6b3d6a1285f9813bc1dea53bb522b4b72774710
F tool/opcodeDoc.awk b3a2a3d5d3075b8bd90b7afe24283efdd586659c
F tool/report1.txt 9eae07f26a8fc53889b45fc833a66a33daa22816
@ -450,7 +451,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
P 7338e68e0fd9263236f12f8911cb8293747dd1a4
R 2236cb31ece453878263b0b9238a99b5
P 204e7d38aeb40d126b80a869958ca79cd0902d83
R 33250e136d9f0af3693e864db67d12e7
U drh
Z a8b4f2b06486c0a181a8a4d0cf0b24c8
Z d3104f68e1b1c0abe9a9e14724db1ec1

View File

@ -1 +1 @@
204e7d38aeb40d126b80a869958ca79cd0902d83
f2caff870c81c08ec85aae72986c231ee986b251

View File

@ -16,6 +16,7 @@
#define _SQLITE_OS_C_ 1
#include "sqliteInt.h"
#include "os.h"
#undef _SQLITE_OS_C_
/*
** The following routines are convenience wrappers around methods

View File

@ -447,9 +447,12 @@ struct sqlite3OsVtbl {
#endif
#ifdef _SQLITE_OS_C_
#if defined(_SQLITE_OS_C_) || defined(SQLITE_AMALGAMATION)
/*
** The os.c file implements the global virtual function table.
** We have to put this file here because the initializers
** (ex: sqlite3OsRandomSeed) are macros that are about to be
** redefined.
*/
struct sqlite3OsVtbl sqlite3Os = {
IF_DISKIO( sqlite3OsOpenReadWrite ),

View File

@ -9,19 +9,25 @@
** May you share freely, never taking more than you give.
**
*************************************************************************
** A TCL Interface to SQLite
** A TCL Interface to SQLite. Append this file to sqlite3.c and
** compile the whole thing to build a TCL-enabled version of SQLite.
**
** $Id: tclsqlite.c,v 1.177 2007/03/29 12:19:12 danielk1977 Exp $
** $Id: tclsqlite.c,v 1.178 2007/04/05 21:58:33 drh Exp $
*/
#ifndef NO_TCL /* Omit this whole file if TCL is unavailable */
#include "sqliteInt.h"
#include "hash.h"
#include "tcl.h"
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <ctype.h>
/*
** Some additional include files are needed if this file is not
** appended to the amalgamation.
*/
#ifndef SQLITE_AMALGAMATION
# include "sqliteInt.h"
# include "hash.h"
# include <stdlib.h>
# include <string.h>
# include <assert.h>
# include <ctype.h>
#endif
/*
* Windows needs to know which symbols to export. Unix does not.
@ -2256,5 +2262,3 @@ int TCLSH_MAIN(int argc, char **argv){
return 0;
}
#endif /* TCLSH */
#endif /* !defined(NO_TCL) */

View File

@ -63,7 +63,8 @@ puts $out [subst \
** SQLite library.
**
** This amalgamation was generated on $today.
*/}]
*/
#define SQLITE_AMALGAMATION 1}]
# These are the header files used by SQLite. The first time any of these
# files are seen in a #include statement in the C code, include the complete

143
tool/mksqlite3internalh.tcl Normal file
View File

@ -0,0 +1,143 @@
#!/usr/bin/tclsh
#
# To build a single huge source file holding all of SQLite (or at
# least the core components - the test harness, shell, and TCL
# interface are omitted.) first do
#
# make target_source
#
# The make target above moves all of the source code files into
# a subdirectory named "tsrc". (This script expects to find the files
# there and will not work if they are not found.) There are a few
# generated C code files that are also added to the tsrc directory.
# For example, the "parse.c" and "parse.h" files to implement the
# the parser are derived from "parse.y" using lemon. And the
# "keywordhash.h" files is generated by a program named "mkkeywordhash".
#
# After the "tsrc" directory has been created and populated, run
# this script:
#
# tclsh mksqlite3c.tcl
#
# The amalgamated SQLite code will be written into sqlite3.c
#
# Begin by reading the "sqlite3.h" header file. Count the number of lines
# in this file and extract the version number. That information will be
# needed in order to generate the header of the amalgamation.
#
set in [open tsrc/sqlite3.h]
set cnt 0
set VERSION ?????
while {![eof $in]} {
set line [gets $in]
if {$line=="" && [eof $in]} break
incr cnt
regexp {#define\s+SQLITE_VERSION\s+"(.*)"} $line all VERSION
}
close $in
# Open the output file and write a header comment at the beginning
# of the file.
#
set out [open sqlite3internal.h w]
set today [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S UTC" -gmt 1]
puts $out [subst \
{/******************************************************************************
** This file is an amalgamation of many private header files from SQLite
** version $VERSION.
*/}]
# These are the header files used by SQLite. The first time any of these
# files are seen in a #include statement in the C code, include the complete
# text of the file in-line. The file only needs to be included once.
#
foreach hdr {
btree.h
hash.h
keywordhash.h
opcodes.h
os_common.h
os.h
os_os2.h
pager.h
parse.h
sqlite3ext.h
sqlite3.h
sqliteInt.h
vdbe.h
vdbeInt.h
} {
set available_hdr($hdr) 1
}
# 78 stars used for comment formatting.
set s78 \
{*****************************************************************************}
# Insert a comment into the code
#
proc section_comment {text} {
global out s78
set n [string length $text]
set nstar [expr {60 - $n}]
set stars [string range $s78 0 $nstar]
puts $out "/************** $text $stars/"
}
# Read the source file named $filename and write it into the
# sqlite3.c output file. If any #include statements are seen,
# process them approprately.
#
proc copy_file {filename} {
global seen_hdr available_hdr out
set tail [file tail $filename]
section_comment "Begin file $tail"
set in [open $filename r]
while {![eof $in]} {
set line [gets $in]
if {[regexp {^#\s*include\s+["<]([^">]+)[">]} $line all hdr]} {
if {[info exists available_hdr($hdr)]} {
if {$available_hdr($hdr)} {
section_comment "Include $hdr in the middle of $tail"
copy_file tsrc/$hdr
section_comment "Continuing where we left off in $tail"
}
} elseif {![info exists seen_hdr($hdr)]} {
set seen_hdr($hdr) 1
puts $out $line
}
} elseif {[regexp {^#ifdef __cplusplus} $line]} {
puts $out "#if 0"
} elseif {[regexp {^#line} $line]} {
# Skip #line directives.
} else {
puts $out $line
}
}
close $in
section_comment "End of $tail"
}
# Process the source files. Process files containing commonly
# used subroutines first in order to help the compiler find
# inlining opportunities.
#
foreach file {
sqliteInt.h
sqlite3.h
btree.h
hash.h
os.h
pager.h
parse.h
sqlite3ext.h
vdbe.h
} {
if {$available_hdr($file)} {
copy_file tsrc/$file
}
}
close $out