]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Portability tweaks to the code generators so that they produce identical output with... branch-3.48
authorstephan <stephan@noemail.net>
Wed, 5 Feb 2025 12:15:11 +0000 (12:15 +0000)
committerstephan <stephan@noemail.net>
Wed, 5 Feb 2025 12:15:11 +0000 (12:15 +0000)
FossilOrigin-Name: fddcfbcafd1b343ee95960564bb57785b8af18aaae16969d83f1550d6868737e

12 files changed:
Makefile.msc
autoconf/Makefile.msc
autosetup/jimsh0.c
ext/wasm/api/sqlite3-api-glue.c-pp.js
main.mk
manifest
manifest.uuid
tool/mkshellc.tcl
tool/mksqlite3c-noext.tcl
tool/mksqlite3c.tcl
tool/mksqlite3h.tcl
tool/split-sqlite3c.tcl

index 33c5ef107ee1539dfdae1e78c145981537d9d8a7..c1a8f88b6ea125b512cf0809a418df0693ff6f83 100644 (file)
@@ -2334,7 +2334,7 @@ parse.c:  $(TOP)\src\parse.y lemon.exe
        .\lemon.exe $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(EXT_FEATURE_FLAGS) $(OPTS) -S parse.y
 
 $(SQLITE3H):   $(TOP)\src\sqlite.h.in $(TOP)\manifest mksourceid.exe $(TOP)\VERSION $(JIM_TCLSH)
-       $(JIM_TCLSH) $(TOP)\tool\mksqlite3h.tcl "$(TOP:\=/)" > $(SQLITE3H) $(MKSQLITE3H_ARGS)
+       $(JIM_TCLSH) $(TOP)\tool\mksqlite3h.tcl "$(TOP:\=/)" -o $(SQLITE3H) $(MKSQLITE3H_ARGS)
 
 sqlite3ext.h:  .target_source
 !IF $(USE_STDCALL)!=0 || $(FOR_WIN10)!=0
@@ -2398,7 +2398,7 @@ SHELL_DEP = $(SHELL_DEP) $(TOP)\ext\misc\zipfile.c
 !ENDIF
 
 shell.c:       $(SHELL_DEP) $(TOP)\tool\mkshellc.tcl $(JIM_TCLSH)
-       $(JIM_TCLSH) $(TOP)\tool\mkshellc.tcl shell.c
+       $(JIM_TCLSH) $(TOP)\tool\mkshellc.tcl shell.c
 
 zlib:
        pushd $(ZLIBDIR) && $(MAKE) /f win32\Makefile.msc clean $(ZLIBLIB) && popd
@@ -2811,7 +2811,8 @@ moreclean:        clean
 
 clean:
        del /Q *.exp *.lo *.ilk *.lib *.obj *.ncb *.pdb *.sdf *.suo 2>NUL
-       del /Q *.bsc *.def *.cod *.da *.bb *.bbg *.vc gmon.out 2>NUL
+       del /Q *.bsc *.cod *.da *.bb *.bbg *.vc gmon.out 2>NUL
+       del /Q sqlite3.def tclsqlite3.def 2>NUL
        del /Q $(SQLITE3EXE) $(SQLITE3DLL) Replace.exe 2>NUL
 # <<mark>>
        del /Q $(SQLITE3TCLDLL) pkgIndex.tcl 2>NUL
index 1f0e42db4bd64331e00eb30515da29449745f171..47e0a83af83d22cb3502841cc08bf38575fd9ce7 100644 (file)
@@ -1087,5 +1087,6 @@ $(LIBRESOBJS):    $(TOP)\sqlite3.rc rcver.vc $(SQLITE3H)
 
 clean:
        del /Q *.exp *.lo *.ilk *.lib *.obj *.ncb *.pdb *.sdf *.suo 2>NUL
-       del /Q *.bsc *.def *.cod *.da *.bb *.bbg *.vc gmon.out 2>NUL
+       del /Q *.bsc *.cod *.da *.bb *.bbg *.vc gmon.out 2>NUL
+       del /Q sqlite3.def tclsqlite3.def 2>NUL
        del /Q $(SQLITE3EXE) $(SQLITE3DLL) Replace.exe 2>NUL
index 84db85a20734504a784b4afd111c7c4915d62080..4b9cf3eebfebc9dffef9b3a9e39130ad78348ac4 100644 (file)
@@ -75,6 +75,9 @@ extern "C" {
 
 #if defined(_WIN32) || defined(WIN32)
 
+#ifndef STDIN_FILENO
+#define STDIN_FILENO 0
+#endif
 #define HAVE_DLOPEN
 void *dlopen(const char *path, int mode);
 int dlclose(void *handle);
@@ -1864,7 +1867,7 @@ int Jim_tclcompatInit(Jim_Interp *interp)
 "                                      $f buffering $v\n"
 "                              }\n"
 "                              -tr* {\n"
-"\n"
+"                                      $f translation $v\n"
 "                              }\n"
 "                              default {\n"
 "                                      return -code error \"fconfigure: unknown option $n\"\n"
@@ -2936,6 +2939,28 @@ static int aio_cmd_buffering(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
     return JIM_OK;
 }
 
+static int aio_cmd_translation(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
+{
+       enum {OPT_BINARY, OPT_TEXT};
+    static const char * const options[] = {
+        "binary",
+        "text",
+        NULL
+    };
+       int opt;
+
+       if (Jim_GetEnum(interp, argv[0], options, &opt, NULL, JIM_ERRMSG) != JIM_OK) {
+               return JIM_ERR;
+       }
+#if defined(_setmode) && defined(O_BINARY)
+       else {
+               AioFile *af = Jim_CmdPrivData(interp);
+               _setmode(af->fh, opt == OPT_BINARY ? O_BINARY : O_TEXT);
+       }
+#endif
+    return JIM_OK;
+}
+
 static int aio_cmd_readsize(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
 {
     AioFile *af = Jim_CmdPrivData(interp);
@@ -3145,6 +3170,13 @@ static const jim_subcmd_type aio_command_table[] = {
         0,
         2,
 
+    },
+    {   "translation",
+        "binary|text",
+        aio_cmd_translation,
+        1,
+        1,
+
     },
     {   "readsize",
         "?size?",
@@ -24342,6 +24374,10 @@ int Jim_InteractivePrompt(Jim_Interp *interp)
 #include <string.h>
 
 
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
 
 extern int Jim_initjimshInit(Jim_Interp *interp);
 
@@ -24425,6 +24461,10 @@ int main(int argc, char *const argv[])
         }
         if (retcode != JIM_EXIT) {
             JimSetArgv(interp, 0, NULL);
+            if (!isatty(STDIN_FILENO)) {
+
+                goto eval_stdin;
+            }
             retcode = Jim_InteractivePrompt(interp);
         }
     }
@@ -24447,6 +24487,7 @@ int main(int argc, char *const argv[])
             Jim_SetVariableStr(interp, "argv0", Jim_NewStringObj(interp, argv[1], -1));
             JimSetArgv(interp, argc - 2, argv + 2);
             if (strcmp(argv[1], "-") == 0) {
+eval_stdin:
                 retcode = Jim_Eval(interp, "eval [info source [stdin read] stdin 1]");
             } else {
                 retcode = Jim_EvalFile(interp, argv[1]);
index 680218370a850886675e832232660d68fdf02bad..ddcf2535fd14816c797610607a39f6f67c97491c 100644 (file)
@@ -232,7 +232,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
       "sqlite3_context*", "int", "*",
       new wasm.xWrap.FuncPtrAdapter({
         name: 'xDestroyAuxData',
-        signature: 'v(*)',
+        signature: 'v(p)',
         contextKey: (argv, argIndex)=>argv[0/* sqlite3_context* */]
       })
     ]],
diff --git a/main.mk b/main.mk
index 1def7d1d0d02c0322831edf90a53808dec10f205..119a25470ee9a9055379524696983e900f6e9607 100644 (file)
--- a/main.mk
+++ b/main.mk
@@ -1066,7 +1066,7 @@ mksourceid$(B.exe): $(MAKE_SANITY_CHECK) $(TOP)/tool/mksourceid.c
 sqlite3.h: $(MAKE_SANITY_CHECK) $(TOP)/src/sqlite.h.in \
     $(TOP)/manifest mksourceid$(B.exe) \
                $(TOP)/VERSION $(B.tclsh)
-       $(B.tclsh) $(TOP)/tool/mksqlite3h.tcl $(TOP) >sqlite3.h
+       $(B.tclsh) $(TOP)/tool/mksqlite3h.tcl $(TOP) -o sqlite3.h
 
 sqlite3.c:     .target_source sqlite3.h $(TOP)/tool/mksqlite3c.tcl src-verify$(B.exe) \
                $(B.tclsh)
@@ -1075,7 +1075,7 @@ sqlite3.c:        .target_source sqlite3.h $(TOP)/tool/mksqlite3c.tcl src-verify$(B.exe
        cp $(TOP)/ext/session/sqlite3session.h .
 
 sqlite3r.h: sqlite3.h $(B.tclsh)
-       $(B.tclsh) $(TOP)/tool/mksqlite3h.tcl $(TOP) --enable-recover >sqlite3r.h
+       $(B.tclsh) $(TOP)/tool/mksqlite3h.tcl $(TOP) --enable-recover -o sqlite3r.h
 
 sqlite3r.c: sqlite3.c sqlite3r.h $(B.tclsh)
        cp $(TOP)/ext/recover/sqlite3recover.c tsrc/
@@ -2210,7 +2210,7 @@ SHELL_DEP = \
     $(TOP)/src/test_windirent.h
 
 shell.c:       $(SHELL_DEP) $(TOP)/tool/mkshellc.tcl $(B.tclsh)
-       $(B.tclsh) $(TOP)/tool/mkshellc.tcl >shell.c
+       $(B.tclsh) $(TOP)/tool/mkshellc.tcl shell.c
 
 #
 # Rules to build the extension objects.
index 2d908fcb5d82933276f7313cc4e3bb80f4bee715..814fa50d05eadc09dc1750e26d18e0dd578ca36e 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,11 +1,11 @@
-C Remove\san\sassert()\sthat\sis\snot\strue\sif\sa\strace-callback\sis\sderegistered\swhile\sthere\sare\sactive\sstatements.
-D 2025-01-31T18:34:58.799
+C Portability\stweaks\sto\sthe\scode\sgenerators\sso\sthat\sthey\sproduce\sidentical\soutput\swith\sJimTCL\son\sWindows\sand\sUnix\ssystems\s(that\sis:\sno\sWindows-style\sline\sendings).
+D 2025-02-05T12:15:11.975
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
 F Makefile.in 572271a39d7ac1ae228ed911c63fdf374300a6a880ceb851b1f3d357e9a9534e
 F Makefile.linux-generic bd3e3cacd369821a6241d4ea1967395c962dfe3057e38cb0a435cee0e8b789d0
-F Makefile.msc 39785ec45f9ae0311e49094eff2ee079562246fed6be3b9f632a99d4df20056a
+F Makefile.msc a9b95ae9807e17f9b0734ebe97d68032141c3f95286bb64593cb73b206f043cf
 F README.md c3c0f19532ce28f6297a71870f3c7b424729f0e6d9ab889616d3587dd2332159
 F VERSION 7b72397ae71ccb286e26a04081c12ac15e2ef3e13cd96cd9408d7f2e52a6be61
 F art/icon-243x273.gif 9750b734f82fdb3dc43127753d5e6fbf3b62c9f4e136c2fbf573b2f57ea87af5
@@ -18,7 +18,7 @@ F auto.def 8b63374e48c2ddf7a8ec2c31e0116b3cfd8262f357aa00e824d6bea918010a35
 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903
 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347
 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac
-F autoconf/Makefile.msc ffff61fe851443015ddb6600ab69a9df503cfec25459b336be7ba8c9a9e473f8
+F autoconf/Makefile.msc 0a071367537dc395285a5d624ac4f99f3a387b27cc5e89752423c0499e15aec4
 F autoconf/README.first 6c4f34fe115ff55d4e8dbfa3cecf04a0188292f7
 F autoconf/README.txt 5e946ffb6fbdbb114c81e1bdc862df27fce8beab557d7b0421820b0fe8fc048f
 F autoconf/configure.ac ec7fa914c5e74ff212fe879f9bb6918e1234497e05facfb641f30c4d5893b277
@@ -48,7 +48,7 @@ F autosetup/cc-db.tcl 6e0ed90146197a5a05b245e649975c07c548e30926b218ca3e1d4dc034
 F autosetup/cc-lib.tcl 493c5935b5dd3bf9bd4eca89b07c8b1b1a9356d61783035144e21795facf7360
 F autosetup/cc-shared.tcl 4f024e94a47f427ba61de1739f6381ef0080210f9fae89112d5c1de1e5460d78
 F autosetup/cc.tcl c0fcc50ca91deff8741e449ddad05bcd08268bc31177e613a6343bbd1fd3e45f
-F autosetup/jimsh0.c d40e381ea4526a067590e7b91bd4b2efa6d4980d286f908054c647b3df4aee14
+F autosetup/jimsh0.c 5a74bdbf43c52289e3f482f3b9578db4bd657e88e8fe04b16c564d9fb710540a
 F autosetup/pkg-config.tcl 4e635bf39022ff65e0d5434339dd41503ea48fc53822c9c5bde88b02d3d952ba
 F autosetup/proj.tcl 2e817159b997077cb79bd871f6255276b787558f386dfc0830b0f825f6a53767
 F autosetup/system.tcl 51d4be76cd9a9074704b584e5c9cbba616202c8468cf9ba8a4f8294a7ab1dba9
@@ -637,7 +637,7 @@ F ext/wasm/api/post-js-footer.js 6137d9d3dea0f3868d03bca058dc662f01848f81ab6bf94
 F ext/wasm/api/post-js-header.js bd91458bd0763c1bdb382dc4e8ac7b52e2d7337adc3a2f07f454631b64f12e82
 F ext/wasm/api/pre-js.c-pp.js a614a2c82b12c4d96d8e3ba77330329efc53c4d56a8a7e60ade900f341866cfb
 F ext/wasm/api/sqlite3-api-cleanup.js 3ac1786e461ada63033143be8c3b00b26b939540661f3e839515bb92f2e35359
-F ext/wasm/api/sqlite3-api-glue.c-pp.js fb6dbfe692cc23000a65a4cd95a1a47ed5eb592dc9d8b55363b3c2952a787244
+F ext/wasm/api/sqlite3-api-glue.c-pp.js 0fc6a377907a5101ee426fda7e91def6a310785b23b7a39dd8b2c5e47ee36b4b
 F ext/wasm/api/sqlite3-api-oo1.c-pp.js f3a8e2004c6625d17946c11f2fb32008be78bc5207bf746fc77d59848813225f
 F ext/wasm/api/sqlite3-api-prologue.js 6f1257e04885632ed9f44d43aba200b86e0bc16709ffdba29abbbeb1bc8e8b76
 F ext/wasm/api/sqlite3-api-worker1.c-pp.js 5cc22a3c0d52828cb32aad8691488719f47d27567e63e8bc8b832d74371c352d
@@ -700,7 +700,7 @@ F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65a
 F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
 F ext/wasm/wasmfs.make bc8bb227f35d5bd3863a7bd2233437c37472a0d81585979f058f9b9b503bef35
 F magic.txt 5ade0bc977aa135e79e3faaea894d5671b26107cc91e70783aa7dc83f22f3ba0
-F main.mk 18b859068a43818d29172b36d624a9bc8ce8204350ebd18a9f96994970081ab9
+F main.mk a4ca260c3e713e608a2186c0abc79ee7b1437ba7d7b2b74e41255989acbc1c6c
 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
 F mptest/crash01.test 61e61469e257df0850df4293d7d4d6c2af301421
@@ -2149,12 +2149,12 @@ F tool/mkopcodec.tcl 33d20791e191df43209b77d37f0ff0904620b28465cca6990cf8d60da61
 F tool/mkopcodeh.tcl 2b4e6967a670ef21bf53a164964c35c6163277d002a4c6f56fa231d68c88d023
 F tool/mkopts.tcl 680f785fdb09729fd9ac50632413da4eadbdf9071535e3f26d03795828ab07fa
 F tool/mkpragmatab.tcl 32e359ccb21011958a821955254bd7a5fa7915d01a8c16fed91ffc8b40cb4adf
-F tool/mkshellc.tcl 2bc29c201933ae72a16a79070fe80aded80c24ea487ecd2f8df20c2973c87bfc
+F tool/mkshellc.tcl 9ce74de0fa904a2c56a96f8d8b5261246bacb0eaa8d7e184f9e18ff94145ebbc
 F tool/mksourceid.c 36aa8020014aed0836fd13c51d6dc9219b0df1761d6b5f58ff5b616211b079b9
 F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97
-F tool/mksqlite3c-noext.tcl 4f7cfef5152b0c91920355cbfc1d608a4ad242cb819f1aea07f6d0274f584a7f
-F tool/mksqlite3c.tcl 9e88a30981280e33489fe4782f4ab1e5349ba1866603fba7f1a948d5599b9124
-F tool/mksqlite3h.tcl 5a8d23f35462bfcf74324a19465abd0ad6717b92a404d177160963c292df5d04
+F tool/mksqlite3c-noext.tcl 351c55256213154cabb051a3c870ef9f4487de905015141ae50dc7578a901b84
+F tool/mksqlite3c.tcl ba13086555b3cb835eba5e47a9250300ab85304d23fd1081abd3f29d8ab71a2b
+F tool/mksqlite3h.tcl b05b85c32295bad3fe64807729693d1f19faed3c464c5faac6c53bb6b972ac2f
 F tool/mksqlite3internalh.tcl eb994013e833359137eb53a55acdad0b5ae1049b
 F tool/mksrczip.tcl 81efd9974dbb36005383f2cd655520057a2ae5aa85ac2441a80c7c28f803ac52
 F tool/mktoolzip.tcl 34b4e92be544f820e2cc26f143f7d5aec511e826ec394cc82969a5dcf7c7a27c
@@ -2183,7 +2183,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 7ce07da76b5e745783e703a834417d725b7d45fd
 F tool/spellsift.tcl 52b4b04dc4333c7ab024f09d9d66ed6b6f7c6eb00b38497a09f338fa55d40618 x
-F tool/split-sqlite3c.tcl 5aa60643afca558bc732b1444ae81a522326f91e1dc5665b369c54f09e20de60
+F tool/split-sqlite3c.tcl 07e18a1d8cc3f6b3a4a1f3528e63c9b29a5c8a7bca0b8d394b231da464ce1247
 F tool/sqldiff.c 2a0987d183027c795ced13d6749061c1d2f38e24eddb428f56fa64c3a8f51e4b
 F tool/sqlite3_analyzer.c.in fc7735c499d226a49d843d8209b2543e4e5229eeb71a674c331323a2217b65b4
 F tool/sqlite3_rsync.c 9a1cca2ab1271c59b37a6493c15dc1bcd0ab9149197a9125926bc08dd26b83fb
@@ -2205,9 +2205,9 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 9d59f8a5f2b60be4251f6c1a2cfddb835d82b826ec0a7d60b5d9e9af3508ce5e
-Q +0ecfc4d0ebdb272a69f8f98ddb069c7e0735fb899804027eb16f241d83b3d046
-R 05ed63f8136ac7c8251d752b082b43b5
-U dan
-Z 6306cdf78506f576fd121b626f264331
+P d53c58243ddb59a46f9fa6d8d13248fed0a5bb4b2d469b79a214df486dc5a519
+Q +91ef45fc2902e46813366ec6b8317209f39f10e4a23c3808e33aceedab9da6c7
+R d89b134696fc79ee2517ebfc31966530
+U stephan
+Z d56ca7a6012b8c467ab9fdf45293d9c2
 # Remove this line to create a well-formed Fossil manifest.
index 743d5eb7d465d44840d59ff8f4c98ffa3f6887d8..0b0041fc76d34d15246f321643a5921c3c555b21 100644 (file)
@@ -1 +1 @@
-d53c58243ddb59a46f9fa6d8d13248fed0a5bb4b2d469b79a214df486dc5a519
+fddcfbcafd1b343ee95960564bb57785b8af18aaae16969d83f1550d6868737e
index af9804e4faac594def10e2a9816f5886e154fc1f..85e14f84983d4f0458e6518e0a3765823b93587c 100644 (file)
@@ -12,6 +12,9 @@
 set topdir [file dir [file dir [file normal $argv0]]]
 set out stdout
 fconfigure stdout -translation binary
+if {[lindex $argv 0]!=""} {
+  set out [open [lindex $argv 0] wb]
+}
 puts $out {/* DO NOT EDIT!
 ** This file is automatically generated by the script in the canonical
 ** SQLite source tree at tool/mkshellc.tcl.  That script combines source
index 84520725646ec187e7cd77bf2ac3f1165ee7871c..1148b1c0d54b53fdbd55fb5eb2e2f85675128bbb 100644 (file)
@@ -57,7 +57,7 @@ close $in
 #
 set out [open sqlite3.c w]
 # Force the output to use unix line endings, even on Windows.
-fconfigure $out -translation lf
+fconfigure $out -translation binary
 set today [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S UTC" -gmt 1]
 puts $out [subst \
 {/******************************************************************************
index 1b3958f4608abafb921fcfc90d4aab684ace7268..1d0f892363e8575347004358eeac0f1edb3523d8 100644 (file)
@@ -88,7 +88,7 @@ set fname sqlite3.c
 if {$enable_recover} { set fname sqlite3r.c }
 set out [open $fname wb]
 # Force the output to use unix line endings, even on Windows.
-fconfigure $out -translation lf
+fconfigure $out -translation binary
 set today [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S UTC" -gmt 1]
 puts $out [subst \
 {/******************************************************************************
@@ -130,7 +130,7 @@ if {[file executable $vsrcprog] && [file readable $srcroot/manifest]} {
   } else {
     puts $out " with changes in files:\n**"
     foreach f [lrange $res 1 end] {
-       puts $out "**    $f"
+       puts $out "**    [string trim $f]"
     }
   }
 } else {
index b409d306b24071af2ba46ec5a509775a8a97f4be..b1d5ecdcd3e2cc63caaf6cab0180b6cd33054207 100644 (file)
 #   6) Adds the SQLITE_CALLBACK calling convention macro in front of all
 #      callback declarations.
 #
-# This script outputs to stdout.
+# This script outputs to stdout unless the -o FILENAME option is used.
 #
 # Example usage:
 #
-#   tclsh mksqlite3h.tcl ../sqlite >sqlite3.h
+#   tclsh mksqlite3h.tcl ../sqlite [OPTIONS]
+#                        ^^^^^^^^^
+#                        Root of source tree
+#
+# Where options are:
+#
+#   --enable-recover          Include the sqlite3recover extension
+#   -o FILENAME               Write results to FILENAME instead of stdout
+#   --useapicall              SQLITE_APICALL instead of SQLITE_CDECL
 #
 
+# Default output stream
+set out stdout
 
 # Get the source tree root directory from the command-line
 #
 set TOP [lindex $argv 0]
 
+# If the -o FILENAME option is present, use FILENAME for output.
+#
+set x [lsearch $argv -o]
+if {$x>0} {
+  incr x
+  set out [open [lindex $argv $x] wb]
+}
+
 # Enable use of SQLITE_APICALL macros at the right points?
 #
 set useapicall 0
@@ -44,6 +62,7 @@ set useapicall 0
 #
 set enable_recover 0
 
+# Process command-line arguments
 if {[lsearch -regexp [lrange $argv 1 end] {^-+useapicall}] != -1} {
   set useapicall 1
 }
@@ -88,7 +107,7 @@ set declpattern5 \
     {^ *([a-zA-Z][a-zA-Z_0-9 ]+ \**)(sqlite3rebaser_[_a-zA-Z0-9]+)(\(.*)$}
 
 # Force the output to use unix line endings, even on Windows.
-fconfigure stdout -translation lf
+fconfigure stdout -translation binary
 
 set filelist [subst {
   $TOP/src/sqlite.h.in
@@ -118,7 +137,7 @@ set cdecllist {
 foreach file $filelist {
   set in [open $file rb]
   if {![regexp {sqlite\.h\.in} $file]} {
-    puts "/******** Begin file [file tail $file] *********/"
+    puts $out "/******** Begin file [file tail $file] *********/"
   }
   while {![eof $in]} {
 
@@ -161,11 +180,11 @@ foreach file $filelist {
           "(SQLITE_SYSAPI *sqlite3_syscall_ptr)"] $line]
       regsub {\(\*} $line {(SQLITE_CALLBACK *} line
     }
-    puts $line
+    puts $out $line
   }
   close $in
   if {![regexp {sqlite\.h\.in} $file]} {
-    puts "/******** End of [file tail $file] *********/"
+    puts $out "/******** End of [file tail $file] *********/"
   }
 }
-puts "#endif /* SQLITE3_H */"
+puts $out "#endif /* SQLITE3_H */"
index 0308431dab2eef83f7d80f9b2ddcc97bd1a53ad9..de4db55a1b40958968609d318b9b50557e5928cd 100644 (file)
@@ -15,7 +15,7 @@ set END   {^/\*+ End of %s \*+/}
 
 set in [open sqlite3.c]
 set out1 [open sqlite3-all.c w]
-fconfigure $out1 -translation lf
+fconfigure $out1 -translation binary
 
 # Copy the header from sqlite3.c into sqlite3-all.c
 #