@@ -24,6 +24,20 @@ USE_AMALGAMATION = 1
24
24
USE_FULLWARN = 0
25
25
!ENDIF
26
26
27
+ # Set this non-0 to enable full runtime error checks (-RTC1, etc). This
28
+ # has no effect if (any) optimizations are enabled.
29
+ #
30
+ !IFNDEF USE_RUNTIME_CHECKS
31
+ USE_RUNTIME_CHECKS = 0
32
+ !ENDIF
33
+
34
+ # Set this non-0 to create a SQLite amalgamation file that excludes the
35
+ # various built-in extensions.
36
+ #
37
+ !IFNDEF MINIMAL_AMALGAMATION
38
+ MINIMAL_AMALGAMATION = 0
39
+ !ENDIF
40
+
27
41
# Set this non-0 to use "stdcall" calling convention for the core library
28
42
# and shell executable.
29
43
#
@@ -263,12 +277,39 @@ SQLITE3EXEPDB = /pdb:sqlite3sh.pdb
263
277
!ENDIF
264
278
!ENDIF
265
279
280
+ # <<mark>>
281
+ # These are the names of the customized Tcl header files used by various parts
282
+ # of this makefile when the stdcall calling convention is in use. It is not
283
+ # used for any other purpose.
284
+ #
285
+ !IFNDEF SQLITETCLH
286
+ SQLITETCLH = sqlite_tcl.h
287
+ !ENDIF
288
+
289
+ !IFNDEF SQLITETCLDECLSH
290
+ SQLITETCLDECLSH = sqlite_tclDecls.h
291
+ !ENDIF
292
+
293
+ # These are the additional targets that the targets that integrate with the
294
+ # Tcl library should depend on when compiling, etc.
295
+ #
296
+ !IFNDEF SQLITE_TCL_DEP
297
+ !IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
298
+ SQLITE_TCL_DEP = $(SQLITETCLDECLSH) $(SQLITETCLH)
299
+ !ELSE
300
+ SQLITE_TCL_DEP =
301
+ !ENDIF
302
+ !ENDIF
303
+ # <</mark>>
304
+
266
305
# These are the "standard" SQLite compilation options used when compiling for
267
306
# the Windows platform.
268
307
#
269
308
!IFNDEF OPT_FEATURE_FLAGS
309
+ !IF $(MINIMAL_AMALGAMATION)==0
270
310
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_FTS3=1
271
311
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_RTREE=1
312
+ !ENDIF
272
313
OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_COLUMN_METADATA=1
273
314
!ENDIF
274
315
@@ -464,20 +505,32 @@ RCC = $(RC) -DSQLITE_OS_WIN=1 -I. -I$(TOP) -I$(TOP)\src $(RCOPTS) $(RCCOPTS)
464
505
#
465
506
!IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
466
507
!IF "$(PLATFORM)"=="x86"
467
- CORE_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_STDCALL=__stdcall
468
- SHELL_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_STDCALL=__stdcall
508
+ CORE_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall
509
+ SHELL_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall
510
+ # <<mark>>
511
+ TEST_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall -DINCLUDE_SQLITE_TCL_H=1 -DSQLITE_TCLAPI=__cdecl
512
+ # <</mark>>
469
513
!ELSE
470
514
!IFNDEF PLATFORM
471
- CORE_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_STDCALL=__stdcall
472
- SHELL_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_STDCALL=__stdcall
515
+ CORE_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall
516
+ SHELL_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall
517
+ # <<mark>>
518
+ TEST_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_APICALL=__stdcall -DSQLITE_CALLBACK=__stdcall -DSQLITE_SYSAPI=__stdcall -DINCLUDE_SQLITE_TCL_H=1 -DSQLITE_TCLAPI=__cdecl
519
+ # <</mark>>
473
520
!ELSE
474
521
CORE_CCONV_OPTS =
475
522
SHELL_CCONV_OPTS =
523
+ # <<mark>>
524
+ TEST_CCONV_OPTS =
525
+ # <</mark>>
476
526
!ENDIF
477
527
!ENDIF
478
528
!ELSE
479
529
CORE_CCONV_OPTS =
480
530
SHELL_CCONV_OPTS =
531
+ # <<mark>>
532
+ TEST_CCONV_OPTS =
533
+ # <</mark>>
481
534
!ENDIF
482
535
483
536
# These are additional compiler options used for the core library.
@@ -630,12 +683,35 @@ RCC = $(RCC) -I$(TOP)\ext\session
630
683
# options are necessary in order to allow debugging symbols to
631
684
# work correctly with Visual Studio when using the amalgamation.
632
685
#
686
+ !IFNDEF MKSQLITE3C_TOOL
687
+ !IF $(MINIMAL_AMALGAMATION)!=0
688
+ MKSQLITE3C_TOOL = $(TOP)\tool\mksqlite3c-noext.tcl
689
+ !ELSE
690
+ MKSQLITE3C_TOOL = $(TOP)\tool\mksqlite3c.tcl
691
+ !ENDIF
692
+ !ENDIF
693
+
633
694
!IFNDEF MKSQLITE3C_ARGS
634
695
!IF $(DEBUG)>1
635
696
MKSQLITE3C_ARGS = --linemacros
636
697
!ELSE
637
698
MKSQLITE3C_ARGS =
638
699
!ENDIF
700
+ !IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
701
+ MKSQLITE3C_ARGS = $(MKSQLITE3C_ARGS) --useapicall
702
+ !ENDIF
703
+ !ENDIF
704
+
705
+ # The mksqlite3h.tcl script accepts some options on the command line.
706
+ # When compiling with stdcall support, some of these options are
707
+ # necessary.
708
+ #
709
+ !IFNDEF MKSQLITE3H_ARGS
710
+ !IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
711
+ MKSQLITE3H_ARGS = --useapicall
712
+ !ELSE
713
+ MKSQLITE3H_ARGS =
714
+ !ENDIF
639
715
!ENDIF
640
716
# <</mark>>
641
717
@@ -835,6 +911,10 @@ RCC = $(RCC) -D_DEBUG
835
911
!IF $(DEBUG)>1 || $(OPTIMIZATIONS)==0
836
912
TCC = $(TCC) -Od
837
913
BCC = $(BCC) -Od
914
+ !IF $(USE_RUNTIME_CHECKS)!=0
915
+ TCC = $(TCC) -RTC1
916
+ BCC = $(BCC) -RTC1
917
+ !ENDIF
838
918
!ELSEIF $(OPTIMIZATIONS)>=3
839
919
TCC = $(TCC) -Ox
840
920
BCC = $(BCC) -Ox
@@ -1235,6 +1315,16 @@ SRC11 = \
1235
1315
parse.h \
1236
1316
$(SQLITE3H)
1237
1317
1318
+ # Generated Tcl header files
1319
+ #
1320
+ !IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
1321
+ SRC12 = \
1322
+ $(SQLITETCLH) \
1323
+ $(SQLITETCLDECLSH)
1324
+ !ELSE
1325
+ SRC12 =
1326
+ !ENDIF
1327
+
1238
1328
# All source code files.
1239
1329
#
1240
1330
SRC = $(SRC00) $(SRC01) $(SRC02) $(SRC03) $(SRC04) $(SRC05) $(SRC06) $(SRC07) $(SRC08) $(SRC09) $(SRC10) $(SRC11)
@@ -1341,7 +1431,7 @@ HDR = \
1341
1431
parse.h \
1342
1432
$(TOP)\src\pragma.h \
1343
1433
$(SQLITE3H) \
1344
- $(TOP)\src\ sqlite3ext.h \
1434
+ sqlite3ext.h \
1345
1435
$(TOP)\src\sqliteInt.h \
1346
1436
$(TOP)\src\sqliteLimit.h \
1347
1437
$(TOP)\src\vdbe.h \
@@ -1499,7 +1589,7 @@ mptest: mptester.exe
1499
1589
# files are automatically generated. This target takes care of
1500
1590
# all that automatic generation.
1501
1591
#
1502
- .target_source: $(SRC) $(TOP)\tool\vdbe-compress.tcl fts5.c
1592
+ .target_source: $(SRC) $(TOP)\tool\vdbe-compress.tcl fts5.c $(SQLITE_TCL_DEP)
1503
1593
-rmdir /Q/S tsrc 2>NUL
1504
1594
-mkdir tsrc
1505
1595
for %i in ($(SRC00)) do copy /Y %i tsrc
@@ -1514,15 +1604,16 @@ mptest: mptester.exe
1514
1604
for %i in ($(SRC09)) do copy /Y %i tsrc
1515
1605
for %i in ($(SRC10)) do copy /Y %i tsrc
1516
1606
for %i in ($(SRC11)) do copy /Y %i tsrc
1607
+ for %i in ($(SRC12)) do copy /Y %i tsrc
1517
1608
copy /Y fts5.c tsrc
1518
1609
copy /Y fts5.h tsrc
1519
1610
del /Q tsrc\sqlite.h.in tsrc\parse.y 2>NUL
1520
1611
$(TCLSH_CMD) $(TOP)\tool\vdbe-compress.tcl $(OPTS) < tsrc\vdbe.c > vdbe.new
1521
1612
move vdbe.new tsrc\vdbe.c
1522
1613
echo > .target_source
1523
1614
1524
- sqlite3.c: .target_source sqlite3ext.h $(TOP)\tool\mksqlite3c.tcl
1525
- $(TCLSH_CMD) $(TOP)\tool\mksqlite3c.tcl $(MKSQLITE3C_ARGS)
1615
+ sqlite3.c: .target_source sqlite3ext.h $(MKSQLITE3C_TOOL)
1616
+ $(TCLSH_CMD) $(MKSQLITE3C_TOOL) $(MKSQLITE3C_ARGS)
1526
1617
copy tsrc\shell.c .
1527
1618
copy $(TOP)\ext\session\sqlite3session.h .
1528
1619
@@ -1795,10 +1886,10 @@ wherecode.lo: $(TOP)\src\wherecode.c $(HDR)
1795
1886
whereexpr.lo: $(TOP)\src\whereexpr.c $(HDR)
1796
1887
$(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\whereexpr.c
1797
1888
1798
- tclsqlite.lo: $(TOP)\src\tclsqlite.c $(HDR)
1889
+ tclsqlite.lo: $(TOP)\src\tclsqlite.c $(HDR) $(SQLITE_TCL_DEP)
1799
1890
$(LTCOMPILE) $(NO_WARN) -DUSE_TCL_STUBS=1 -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c
1800
1891
1801
- tclsqlite-shell.lo: $(TOP)\src\tclsqlite.c $(HDR)
1892
+ tclsqlite-shell.lo: $(TOP)\src\tclsqlite.c $(HDR) $(SQLITE_TCL_DEP)
1802
1893
$(LTCOMPILE) $(NO_WARN) -DTCLSH=1 -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c
1803
1894
1804
1895
tclsqlite3.exe: tclsqlite-shell.lo $(SQLITE3C) $(SQLITE3H) $(LIBRESOBJS)
@@ -1824,10 +1915,16 @@ parse.c: $(TOP)\src\parse.y lemon.exe $(TOP)\tool\addopcodes.tcl
1824
1915
$(TCLSH_CMD) $(TOP)\tool\addopcodes.tcl parse.h.temp > parse.h
1825
1916
1826
1917
$(SQLITE3H): $(TOP)\src\sqlite.h.in $(TOP)\manifest.uuid $(TOP)\VERSION
1827
- $(TCLSH_CMD) $(TOP)\tool\mksqlite3h.tcl $(TOP:\=/) > $(SQLITE3H)
1918
+ $(TCLSH_CMD) $(TOP)\tool\mksqlite3h.tcl $(TOP:\=/) > $(SQLITE3H) $(MKSQLITE3H_ARGS)
1828
1919
1829
1920
sqlite3ext.h: .target_source
1830
- copy tsrc\sqlite3ext.h .
1921
+ !IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
1922
+ type tsrc\sqlite3ext.h | $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*\)" "(SQLITE_CALLBACK *)" \
1923
+ | $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*" "(SQLITE_APICALL *" > sqlite3ext.h
1924
+ copy /Y sqlite3ext.h tsrc\sqlite3ext.h
1925
+ !ELSE
1926
+ copy /Y tsrc\sqlite3ext.h sqlite3ext.h
1927
+ !ENDIF
1831
1928
1832
1929
mkkeywordhash.exe: $(TOP)\tool\mkkeywordhash.c
1833
1930
$(BCC) $(NO_WARN) -Fe$@ $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS) $(OPTS) \
@@ -1960,6 +2057,7 @@ TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_SERVER=1 -DSQLITE_PRIVATE=""
1960
2057
TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_CORE $(NO_WARN)
1961
2058
TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_SERIES_CONSTRAINT_VERIFY=1
1962
2059
TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_DEFAULT_PAGE_SIZE=1024
2060
+ TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) $(TEST_CCONV_OPTS)
1963
2061
1964
2062
TESTFIXTURE_SRC0 = $(TESTEXT) $(TESTSRC2)
1965
2063
TESTFIXTURE_SRC1 = $(TESTEXT) $(SQLITE3C)
@@ -1969,7 +2067,27 @@ TESTFIXTURE_SRC = $(TESTSRC) $(TOP)\src\tclsqlite.c $(TESTFIXTURE_SRC0)
1969
2067
TESTFIXTURE_SRC = $(TESTSRC) $(TOP)\src\tclsqlite.c $(TESTFIXTURE_SRC1)
1970
2068
!ENDIF
1971
2069
1972
- testfixture.exe: $(TESTFIXTURE_SRC) $(SQLITE3H) $(LIBRESOBJS) $(HDR)
2070
+ !IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
2071
+ sqlite_tclDecls.h:
2072
+ echo #ifndef SQLITE_TCLAPI > $(SQLITETCLDECLSH)
2073
+ echo # define SQLITE_TCLAPI >> $(SQLITETCLDECLSH)
2074
+ echo #endif >> $(SQLITETCLDECLSH)
2075
+ type "$(TCLINCDIR)\tclDecls.h" \
2076
+ | $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "^(EXTERN(?: CONST\d+?)?\s+?[^\(]*?\s+?)Tcl_" "\1 SQLITE_TCLAPI Tcl_" \
2077
+ | $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "^(EXTERN\s+?(?:void|VOID)\s+?)TclFreeObj" "\1 SQLITE_TCLAPI TclFreeObj" \
2078
+ | $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*tcl_" "(SQLITE_TCLAPI *tcl_" \
2079
+ | $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*tclFreeObj" "(SQLITE_TCLAPI *tclFreeObj" \
2080
+ | $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "\(\*" "(SQLITE_TCLAPI *" >> $(SQLITETCLDECLSH)
2081
+
2082
+ sqlite_tcl.h:
2083
+ type "$(TCLINCDIR)\tcl.h" | $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact tclDecls.h sqlite_tclDecls.h \
2084
+ | $(TCLSH_CMD) $(TOP)\tool\replace.tcl regsub "typedef (.*?)\(Tcl_" "typedef \1 (SQLITE_TCLAPI Tcl_" \
2085
+ | $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact "void (*freeProc)" "void (SQLITE_TCLAPI *freeProc)" \
2086
+ | $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact "Tcl_HashEntry *(*findProc)" "Tcl_HashEntry *(SQLITE_TCLAPI *findProc)" \
2087
+ | $(TCLSH_CMD) $(TOP)\tool\replace.tcl exact "Tcl_HashEntry *(*createProc)" "Tcl_HashEntry *(SQLITE_TCLAPI *createProc)" >> $(SQLITETCLH)
2088
+ !ENDIF
2089
+
2090
+ testfixture.exe: $(TESTFIXTURE_SRC) $(SQLITE3H) $(LIBRESOBJS) $(HDR) $(SQLITE_TCL_DEP)
1973
2091
$(LTLINK) -DSQLITE_NO_SYNC=1 $(TESTFIXTURE_FLAGS) \
1974
2092
-DBUILD_sqlite -I$(TCLINCDIR) \
1975
2093
$(TESTFIXTURE_SRC) \
@@ -2018,7 +2136,7 @@ smoketest: $(TESTPROGS)
2018
2136
@set PATH=$(LIBTCLPATH);$(PATH)
2019
2137
.\testfixture.exe $(TOP)\test\main.test $(TESTOPTS)
2020
2138
2021
- sqlite3_analyzer.c: $(SQLITE3C) $(SQLITE3H) $(TOP)\src\tclsqlite.c $(TOP)\tool\spaceanal.tcl
2139
+ sqlite3_analyzer.c: $(SQLITE3C) $(SQLITE3H) $(TOP)\src\tclsqlite.c $(TOP)\tool\spaceanal.tcl $(SQLITE_TCL_DEP)
2022
2140
echo #define TCLSH 2 > $@
2023
2141
echo #define SQLITE_ENABLE_DBSTAT_VTAB 1 >> $@
2024
2142
copy $@ + $(SQLITE3C) + $(TOP)\src\tclsqlite.c $@
@@ -2098,7 +2216,7 @@ clean:
2098
2216
-rmdir /Q/S .libs 2>NUL
2099
2217
-rmdir /Q/S tsrc 2>NUL
2100
2218
del /Q .target_source 2>NUL
2101
- del /Q tclsqlite3.exe 2>NUL
2219
+ del /Q tclsqlite3.exe $(SQLITETCLH) $(SQLITETCLDECLSH) 2>NUL
2102
2220
del /Q testloadext.dll 2>NUL
2103
2221
del /Q testfixture.exe test.db 2>NUL
2104
2222
del /Q LogEst.exe fts3view.exe rollback-test.exe showdb.exe 2>NUL
0 commit comments