$(CC) -o $@ $<
DISTCLEAN_FILES += $(bin.stripccomments)
+#
+# If $(WASM_CUSTOM_INSTANTIATE) is 1 then mkwasmbuilds will add
+# -Dcustom-Module.instantiateWasm to some of the builds. This is
+# experimental.
+#
+# Changing this may require a clean rebuild.
+#
+WASM_CUSTOM_INSTANTIATE = 0
+
########################################################################
# SQLITE.CALL.C-PP.FILTER: a $(call)able to transform $(1) to $(2) via:
#
$(dir.dout)/sqlite3-node.mjs: $(sqlite3.mjs)
#CLEAN_FILES += $(sqlite3.wasm)
-ifneq (1,$(MAKING_CLEAN))
# This block MUST come between the above definitions of
# sqlite3-...js/mjs and the $(eval) calls below this block which use
# SQLITE.CALL.C-PP.FILTER.
# Maintenance note: the various $(c-pp.D.XYZ) vars are defined via
# $(bin.mkwb).
bin.mkwb = ./mkwasmbuilds
+ifneq (1,$(MAKING_CLEAN))
$(bin.mkwb): $(bin.mkwb).c $(MAKEFILE)
- $(CC) -o $@ $<
-DISTCLEAN_FILES += $(bin.mkwb)
+ $(CC) -o $@ $< -DWASM_CUSTOM_INSTANTIATE=$(WASM_CUSTOM_INSTANTIATE)
+
.wasmbuilds.make: $(bin.mkwb)
@rm -f $@
$(bin.mkwb) > $@
@chmod -w $@
-include .wasmbuilds.make
endif
-DISTCLEAN_FILES += .wasmbuilds.make
+CLEAN_FILES += .wasmbuilds.make $(bin.mkwb)
########################################################################
# We need separate copies of certain supplementary JS files for the
into the global scope and delete it when sqlite3InitModule()
is called.
*/
- const initModuleState = globalThis.sqlite3InitModuleState = Object.assign(Object.create(null),{
+ const sIMS = globalThis.sqlite3InitModuleState = Object.assign(Object.create(null),{
moduleScript: globalThis?.document?.currentScript,
isWorker: ('undefined' !== typeof WorkerGlobalScope),
location: globalThis.location,
? new URL(globalThis.location.href).searchParams
: new URLSearchParams()
});
- initModuleState.debugModule =
- initModuleState.urlParams.has('sqlite3.debugModule')
+ sIMS.debugModule =
+ sIMS.urlParams.has('sqlite3.debugModule')
? (...args)=>console.warn('sqlite3.debugModule:',...args)
: ()=>{};
- if(initModuleState.urlParams.has('sqlite3.dir')){
- initModuleState.sqlite3Dir = initModuleState.urlParams.get('sqlite3.dir') +'/';
- }else if(initModuleState.moduleScript){
- const li = initModuleState.moduleScript.src.split('/');
+ if(sIMS.urlParams.has('sqlite3.dir')){
+ sIMS.sqlite3Dir = sIMS.urlParams.get('sqlite3.dir') +'/';
+ }else if(sIMS.moduleScript){
+ const li = sIMS.moduleScript.src.split('/');
li.pop();
- initModuleState.sqlite3Dir = li.join('/') + '/';
+ sIMS.sqlite3Dir = li.join('/') + '/';
}
globalThis.sqlite3InitModule = function ff(...args){
//console.warn("Using replaced sqlite3InitModule()",globalThis.location);
return originalInit(...args).then((EmscriptenModule)=>{
//console.warn("originalInit() then() arg =",EmscriptenModule);
- //console.warn("initModuleState =",initModuleState);
+ //console.warn("sqlite3InitModule(): sIMS =",sIMS);
EmscriptenModule.runSQLite3PostLoadInit(EmscriptenModule);
const s = EmscriptenModule.sqlite3;
- s.scriptInfo = initModuleState;
+ s.scriptInfo = sIMS;
//console.warn("sqlite3.scriptInfo =",s.scriptInfo);
if(ff.__isUnderTest){
s.__isUnderTest = true;
};
globalThis.sqlite3InitModule.ready = originalInit.ready;
- if(globalThis.sqlite3InitModuleState.moduleScript){
- const sim = globalThis.sqlite3InitModuleState;
- let src = sim.moduleScript.src.split('/');
+ if(sIMS.moduleScript){
+ let src = sIMS.moduleScript.src.split('/');
src.pop();
- sim.scriptDir = src.join('/') + '/';
+ sIMS.scriptDir = src.join('/') + '/';
}
- initModuleState.debugModule('sqlite3InitModuleState =',initModuleState);
+ sIMS.debugModule('extern-post-js.c-pp.js sqlite3InitModuleState =',sIMS);
if(0){
console.warn("Replaced sqlite3InitModule()");
console.warn("globalThis.location.href =",globalThis.location.href);
-/* The current function scope was opened via post-js-header.js, which
- gets prepended to this at build-time. This file closes that
- scope. */
//console.warn("This is the end of the Module.runSQLite3PostLoadInit handler.");
-}/*Module.runSQLite3PostLoadInit()*/;
+}/*Module.runSQLite3PostLoadInit(EmscriptenModule)*/;
//console.warn("This is the end of the setup of the (pending) Module.runSQLite3PostLoadInit");
//console.warn("This is the start of Module.runSQLite3PostLoadInit()");
/* This function will contain at least the following:
+ - extern-pre-js.js => out-of-Emscripten prologue
- post-js-header.js => this file
- sqlite3-api-prologue.js => Bootstrapping bits to attach the rest to
- common/whwasmutil.js => Replacements for much of Emscripten's glue
- sqlite3-vfs-opfs.c-pp.js => OPFS VFS
- sqlite3-vfs-opfs-sahpool.c-pp.js => OPFS SAHPool VFS
- sqlite3-api-cleanup.js => final API cleanup
- - post-js-footer.js => closes this function
+ - post-js-footer.js => this file's epilogue
+ - extern-post-js.js => out-of-Emscripten epilogue
*/
This file is intended to be prepended to the sqlite3.js build using
Emscripten's --pre-js=THIS_FILE flag (or equivalent).
*/
-
// See notes in extern-post-js.js
-const sqlite3InitModuleState = globalThis.sqlite3InitModuleState
+const sIMS =
+ globalThis.sqlite3InitModuleState/*from extern-post-js.c-pp.js*/
|| Object.assign(Object.create(null),{
debugModule: ()=>{}
});
delete globalThis.sqlite3InitModuleState;
-sqlite3InitModuleState.debugModule('globalThis.location =',globalThis.location);
+sIMS.debugModule('pre-js.js sqlite3InitModuleState =',sIMS);
//#ifnot target=es6-bundler-friendly
/**
1) If URL param named the same as `path` is set, it is returned.
2) If sqlite3InitModuleState.sqlite3Dir is set, then (thatName + path)
- is returned (it's assumed to end with '/').
+ is returned (it's assumed to end with '/').
3) If this code is running in the main UI thread AND it was loaded
- from a SCRIPT tag, the directory part of that URL is used
- as the prefix. (This form of resolution unfortunately does not
- function for scripts loaded via importScripts().)
+ from a SCRIPT tag, the directory part of that URL is used
+ as the prefix. (This form of resolution unfortunately does not
+ function for scripts loaded via importScripts().)
4) If none of the above apply, (prefix+path) is returned.
+
+ None of the above apply in ES6 builds.
*/
Module['locateFile'] = function(path, prefix) {
//#if target=es6-module
);
return theFile;
//#endif target=es6-module
-}.bind(sqlite3InitModuleState);
+}.bind(sIMS);
//#endif ifnot target=es6-bundler-friendly
-//#if custom-Module.instantiateModule
+//#if custom-Module.instantiateWasm
/**
Bug warning: a custom Module.instantiateWasm() does not work
in WASMFS builds:
*/
const xNameOfInstantiateWasm =
//#if wasmfs
- false
+ false
//#else
- true /* This works, but it does not have the testing coverage in the
- wild which Emscripten's default impl does, so we'll save
- this option until we really need a custom
- Module.instantiateWasm() */
+ true /* This works, but it does not have the testing coverage in
+ the wild which Emscripten's default impl does, so we'll
+ save this option until we really need a custom
+ Module.instantiateWasm(). */
//#endif
- ? 'instantiateWasm'
- : 'emscripten-bug-17951';
+ ? 'instantiateWasm'
+ : 'emscripten-bug-17951';
Module[xNameOfInstantiateWasm] = function callee(imports,onSuccess){
- imports.env.foo = function(){};
+ const sims = this;
const uri = Module.locateFile(
- callee.uri, (
+ sims.wasmFilename, (
('undefined'===typeof scriptDirectory/*var defined by Emscripten glue*/)
? "" : scriptDirectory)
);
- sqlite3InitModuleState.debugModule(
- "instantiateWasm() uri =", uri
- );
- //console.warn("Custom instantiateModule",uri);
+ sims.debugModule("instantiateWasm() uri =", uri, "sIMS =",this);
const wfetch = ()=>fetch(uri, {credentials: 'same-origin'});
const loadWasm = WebAssembly.instantiateStreaming
- ? async ()=>{
- return WebAssembly.instantiateStreaming(wfetch(), imports)
- .then((arg)=>onSuccess(arg.instance, arg.module));
- }
- : async ()=>{ // Safari < v15
- return wfetch()
- .then(response => response.arrayBuffer())
- .then(bytes => WebAssembly.instantiate(bytes, imports))
- .then((arg)=>onSuccess(arg.instance, arg.module));
- };
- loadWasm();
- return {};
-};
+ ? async ()=>
+ WebAssembly
+ .instantiateStreaming(wfetch(), imports)
+ .then((arg)=>{
+ arg.imports = imports;
+ sims.intantiateWasm = arg;
+ onSuccess(arg.instance, arg.module);
+ })
+ : async ()=>// Safari < v15
+ wfetch()
+ .then(response => response.arrayBuffer())
+ .then(bytes => WebAssembly.instantiate(bytes, imports))
+ .then((arg)=>{
+ arg.imports = imports;
+ sims.intantiateWasm = arg;
+ onSuccess(arg.instance, arg.module);
+ })
+ ;
+ return loadWasm();
+ //return {};
+}.bind(sIMS);
/*
- It is literally impossible to reliably get the name of _this_ script
- at runtime, so impossible to derive X.wasm from script name
+ It is literally impossible to reliably get the name of _this_
+ script at runtime, so impossible to derive X.wasm from script name
X.js. Thus we need, at build-time, to redefine
- Module[xNameOfInstantiateWasm].uri by appending it to a build-specific
- copy of this file with the name of the wasm file. This is apparently
- why Emscripten hard-codes the name of the wasm file into their glue
- scripts.
+ sIMS.uri by appending it to a build-specific
+ copy of this file with the name of the wasm file. This is
+ apparently why Emscripten hard-codes the name of the wasm file
+ into their glue scripts.
*/
-Module[xNameOfInstantiateWasm].uri = 'sqlite3.wasm';
-//#endif custom-Module.instantiateModule
-/* END FILE: api/pre-js.js, noting that the build process may add a
+sIMS.wasmFilename = 'sqlite3.wasm';
+//#endif custom-Module.instantiateWasm
+/* Automation may append ".x = y" to this file, for some value of x and y.
+
+ END FILE: api/pre-js.js, noting that the build process may add a
line after this one to change the above .uri to a build-specific
one. */
yetAnotherWasmLoader()'s return value */;
};
const loadWasm = WebAssembly.instantiateStreaming
- ? function loadWasmStreaming(){
- return WebAssembly.instantiateStreaming(wfetch(), config.imports||{})
- .then(finalThen);
- }
- : function loadWasmOldSchool(){ // Safari < v15
- return wfetch()
- .then(response => response.arrayBuffer())
- .then(bytes => WebAssembly.instantiate(bytes, config.imports||{}))
- .then(finalThen);
- };
+ ? ()=>WebAssembly
+ .instantiateStreaming(wfetch(), config.imports||{})
+ .then(finalThen)
+ : ()=> wfetch()// Safari < v15
+ .then(response => response.arrayBuffer())
+ .then(bytes => WebAssembly.instantiate(bytes, config.imports||{}))
+ .then(finalThen)
+ ;
return loadWasm;
}.bind(globalThis.WhWasmUtilInstaller)/*yawl()*/;
const char *zJsOut; /* Name of generated sqlite3.js/.mjs */
/* TODO: dynamically determine zJsOut based on zName, zMode, and
flags. */
+ const char *zWasmOut; /* zJsOut w/ .wasm extension if it needs to be renamed */
const char *zCmppD; /* Extra -D... flags for c-pp */
const char *zEmcc; /* Extra flags for emcc */
};
typedef struct BuildDef BuildDef;
+#if !defined(WASM_CUSTOM_INSTANTIATE)
+# define WASM_CUSTOM_INSTANTIATE 0
+#elif (WASM_CUSTOM_INSTANTIATE+0)==0
+# undef WASM_CUSTOM_INSTANTIATE
+# define WASM_CUSTOM_INSTANTIATE 0
+#endif
/*
** The set of WASM builds for the library (as opposed to the apps
** (fiddle, speedtest1)). This array must end with an empty sentinel
*/
const BuildDef aBuildDefs[] = {
{/* Core build */
- "sqlite3", "vanilla", 0, "$(sqlite3.js)", 0, 0},
+ "sqlite3", "vanilla", 0, "$(sqlite3.js)", 0, 0, 0},
{/* Core ESM */
- "sqlite3", "esm", LIBMODE_ESM, "$(sqlite3.mjs)",
- "-Dtarget=es6-module", 0},
+ "sqlite3", "esm", LIBMODE_ESM, "$(sqlite3.mjs)", 0,
+ "-Dtarget=es6-module", 0},
{/* Core bundler-friendly build. Untested and "not really"
** supported, but required by the downstream npm subproject.
** subproject and they spot failures pretty quickly ;). */
"sqlite3", "bundler-friendly",
LIBMODE_BUNDLER_FRIENDLY | LIBMODE_ESM,
- "$(dir.dout)/sqlite3-bundler-friendly.mjs",
+ "$(dir.dout)/sqlite3-bundler-friendly.mjs", 0,
"$(c-pp.D.sqlite3-esm) -Dtarget=es6-bundler-friendly", 0},
{/* node.js mode. Untested and unsupported. */
"sqlite3", "node", LIBMODE_UNSUPPORTED | LIBMODE_NODEJS,
- "$(dir.dout)/sqlite3-node.mjs",
+ "$(dir.dout)/sqlite3-node.mjs", "sqlite3-node.wasm",
"$(c-pp.D.sqlite3-bundler-friendly) -Dtarget=node", 0},
{/* Wasmfs build. Fully unsupported and largely untested. */
"sqlite3-wasmfs", "esm" ,
LIBMODE_UNSUPPORTED | LIBMODE_WASMFS | LIBMODE_ESM,
- "$(dir.wasmfs)/sqlite3-wasmfs.mjs",
+ "$(dir.wasmfs)/sqlite3-wasmfs.mjs", "sqlite3-wasmfs.wasm",
"$(c-pp.D.sqlite3-bundler-friendly) -Dwasmfs",
"-sEXPORT_ES6 -sUSE_ES6_IMPORT_META"},
-
- {/*End-of-list sentinel*/0,0,0,0,0,0}
+ {/*End-of-list sentinel*/0,0,0,0,0,0,0}
};
/*
static void mk_pre_post(const char *zName /* build name */,
const char *zMode /* build mode */,
const char *zCmppD /* optional -D flags for c-pp for the
- ** --pre/--post-js files. */){
+ ** --pre/--post-js files. */,
+ const char *zWasmOut){
/* Very common printf() args combo. */
#define zNM zName, zMode
pf("pre-js.js.%s-%s = $(dir.tmp)/pre-js.%s-%s.js\n",
zNM, zNM);
pf("$(pre-js.js.%s-%s): $(MAKEFILE_LIST) $(sqlite3-license-version.js)\n", zNM);
-#if 1
+#if !WASM_CUSTOM_INSTANTIATE
+ (void)zWasmOut;
pf("$(eval $(call SQLITE.CALL.C-PP.FILTER,$(pre-js.js.in),$(pre-js.js.%s-%s),"
"$(c-pp.D.%s-%s)))\n", zNM, zNM);
#else
pf("pre-js.js.%s-%s.intermediary = $(dir.tmp)/pre-js.%s-%s.intermediary.js\n",
zNM, zNM);
pf("$(eval $(call SQLITE.CALL.C-PP.FILTER,$(pre-js.js.in),$(pre-js.js.%s-%s.intermediary),"
- "$(c-pp.D.%s-%s) -Dcustom-Module.instantiateModule))\n", zNM, zNM);
+ "$(c-pp.D.%s-%s) -Dcustom-Module.instantiateWasm))\n", zNM, zNM);
pf("$(pre-js.js.%s-%s): $(pre-js.js.%s-%s.intermediary)\n", zNM, zNM);
pf("\tcp $(pre-js.js.%s-%s.intermediary) $@\n", zNM);
/* Amend $(pre-js.js.zName-zMode) for all targets except the plain
** "sqlite3" and the "sqlite3-wasmfs" builds... */
- if( 0!=strcmp("sqlite3-wasmfs", zName)
- && 0!=strcmp("sqlite3", zName) ){
-#error "This part ^^^ is needs adapting for use with the LIBMODE_... flags"
- pf("\t@echo 'Module[xNameOfInstantiateWasm].uri = "
- "\"%s.wasm\";' >> $@\n", zName);
+ if( zWasmOut ){
+ pf("\t@echo 'sIMS.wasmFilename = \"%s\";' >> $@\n", zWasmOut);
}
#endif
static void mk_fiddle(void){
int i = 0;
- mk_pre_post("fiddle-module","vanilla", 0);
+ mk_pre_post("fiddle-module","vanilla", 0, "fiddle-module.wasm");
for( ; i < 2; ++i ){
/* 0==normal, 1==debug */
const char *zTail = i ? ".debug" : "";
pf("# zJsOut=%s\n# zCmppD=%s\n", pB->zJsOut,
pB->zCmppD ? pB->zCmppD : "<none>");
pf("$(info Setting up build [%s-%s]: %s)\n", zNM, pB->zJsOut);
- mk_pre_post(zNM, pB->zCmppD);
+ mk_pre_post(zNM, pB->zCmppD, pB->zWasmOut);
pf("\nemcc.flags.%s.%s ?=\n", zNM);
if( pB->zEmcc && pB->zEmcc[0] ){
pf("emcc.flags.%s.%s += %s\n", zNM, pB->zEmcc);
/* target pB->zJsOut */
pf("%s: $(MAKEFILE_LIST) $(sqlite3-wasm.cfiles) $(EXPORTED_FUNCTIONS.api) "
+ "$(bin.mkwb) "
"$(pre-post-%s-%s.deps) "
"$(sqlite3-api.ext.jses)"
/* ^^^ maintenance reminder: we set these as deps so that they
mk_lib_mode( pB );
}
mk_fiddle();
- mk_pre_post("speedtest1","vanilla", 0);
+ mk_pre_post("speedtest1","vanilla", 0, "speedtest1.wasm");
mk_pre_post("speedtest1-wasmfs","esm",
- "$(c-pp.D.sqlite3-bundler-friendly) -Dwasmfs");
+ "$(c-pp.D.sqlite3-bundler-friendly) -Dwasmfs",
+ "speetest1-wasmfs.wasm");
return rc;
}
-C Minor\sinternal\soptimizations\sin\sthe\swasm\sglue.
-D 2025-09-21T23:15:12.210
+C Experimenting\swith\sa\scustom\swasm\sloader,\sbut\sdon't\senable\sit\swithout\san\sexplicit\sbuild\sflag.\sThe\sgoal\shere\sis\sto\smake\sthe\sWebAssembly.Module\sobject\savailable\sinternally\s(the\sdefault\sloader\shides\sit\sfrom\sus).
+D 2025-09-22T02:40:06.033
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F ext/session/sqlite3session.h 7404723606074fcb2afdc6b72c206072cdb2b7d8ba097ca1559174a80bc26f7a
F ext/session/test_session.c 8766b5973a6323934cb51248f621c3dc87ad2a98f023c3cc280d79e7d78d36fb
F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
-F ext/wasm/GNUmakefile 0d44bd3fb861f062b27ec86c43e62230b43d7f0125c1dc6e48b71082385e97cd
+F ext/wasm/GNUmakefile 772aabff47c96450209af61aa7b6a9894313d6523afb857b58b611f10fa9b766
F ext/wasm/README-dist.txt f01081a850ce38a56706af6b481e3a7878e24e42b314cfcd4b129f0f8427066a
F ext/wasm/README.md 66ace67ae98a45e4116f2ca5425b716887bcee4d64febee804ff6398e1ae9ec7
F ext/wasm/SQLTester/GNUmakefile e0794f676d55819951bbfae45cc5e8d7818dc460492dc317ce7f0d2eca15caff
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-see fb29e62082a658f0d81102488414d422c393c4b20cc2f685b216bc566237957b
F ext/wasm/api/EXPORTED_RUNTIME_METHODS.sqlite3-api 1ec3c73e7d66e95529c3c64ac3de2470b0e9e7fbf7a5b41261c367cf4f1b7287
F ext/wasm/api/README.md 7f029c5fe83b3493931d2fb915e2febd3536267d538a56408a6fef284ea38d29
-F ext/wasm/api/extern-post-js.c-pp.js c4801f87c18c9c738295eef199efbb9fe4e42ff25ae6927953dd3a27bac74bce
+F ext/wasm/api/extern-post-js.c-pp.js 6d058dd44164f3d3055299979db92f8a5821ac79cfd89635ef44363cfd82c64d
F ext/wasm/api/extern-pre-js.js cc61c09c7a24a07dbecb4c352453c3985170cec12b4e7e7e7a4d11d43c5c8f41
-F ext/wasm/api/post-js-footer.js 365405929f41ca0e6d389ed8a8da3f3c93e11d3ef43a90ae151e37fa9f75bf41
-F ext/wasm/api/post-js-header.js 53740d824e5d9027eb1e6fd59e216abbd2136740ce260ea5f0699ff2acb0a701
-F ext/wasm/api/pre-js.c-pp.js 58f823de197e2c10d76179aa05410a593b7ae03e1ece983bb42ffd818e8857e1
+F ext/wasm/api/post-js-footer.js e617e5f81a907362de152576323155f02d24642e625fc05fb801b86b6a269444
+F ext/wasm/api/post-js-header.js 935c4ff097dd2579217918ccbaaffa445e83f82f91cdd7ad68c8363080fa6913
+F ext/wasm/api/pre-js.c-pp.js d52f4a8e900927ac6f5f3608f322b2ad42cad181ec405b2ac8619d2cbf143bd2
F ext/wasm/api/sqlite3-api-cleanup.js d4f1a5e665afaf84015f6ef0ddd766f638cb28501c4569b1d4b527c4b5a2b9a4
F ext/wasm/api/sqlite3-api-glue.c-pp.js 12f5b36775fab1e7bf5385689fded2b2a9f77360562515e9849acb5e66602e2d
F ext/wasm/api/sqlite3-api-oo1.c-pp.js db4c8ebb03bac60db32ce03f8c615b00f4e4ad53e7d5de5e63d2780cba052caa
F ext/wasm/common/SqliteTestUtil.js 7adaeffef757d8708418dc9190f72df22367b531831775804b31598b44f6aa51
F ext/wasm/common/emscripten.css 11bd104b6c0d597c67d40cc8ecc0a60dae2b965151e3b6a37fa5708bac3acd15
F ext/wasm/common/testing.css e97549bab24126c24e0daabfe2de9bb478fb0a69fdb2ddd0a73a992c091aad6f
-F ext/wasm/common/whwasmutil.js fb2a10747234ad720fbe713d7fecbad54abed30ac41355872e7c431f62c23e72
+F ext/wasm/common/whwasmutil.js a4d0736b7e3abfbbe5342743d11c4663a9a1411def3a25cf6a3f5982baa73f95
F ext/wasm/config.make.in c424ae1cc3c89274520ad312509d36c4daa34a3fce5d0c688e5f8f4365e1049a
F ext/wasm/demo-123-worker.html a0b58d9caef098a626a1a1db567076fca4245e8d60ba94557ede8684350a81ed
F ext/wasm/demo-123.html 8c70a412ce386bd3796534257935eb1e3ea5c581e5d5aea0490b8232e570a508
F ext/wasm/index.html bcaa00eca521b372a6a62c7e7b17a870b0fcdf3e418a5921df1fd61e5344080d
F ext/wasm/jaccwabyt/jaccwabyt.js bbac67bc7a79dca34afe6215fd16b27768d84e22273507206f888c117e2ede7d
F ext/wasm/jaccwabyt/jaccwabyt.md 167fc0b624c9bc2c477846e336de9403842d81b1a24fc4d3b24317cb9eba734f
-F ext/wasm/mkwasmbuilds.c b722a3a44edc1498575d935939dfcbe23172f98b0f40d068998e0950707e749d
+F ext/wasm/mkwasmbuilds.c 17e1ed7825fbadce15ab2955c003ab61d0efb73167af9028ebd863cfc4a2fd00
F ext/wasm/module-symbols.html dc476b403369b26a1a23773e13b80f41b9a49f0825e81435fe3600a7cfbbe337
F ext/wasm/scratchpad-wasmfs.html a3d7388f3c4b263676b58b526846e9d02dfcb4014ff29d3a5040935286af5b96
F ext/wasm/scratchpad-wasmfs.mjs 66034b9256b218de59248aad796760a1584c1dd842231505895eff00dbd57c63
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 6a070f450ac9ee3d4d6a3e05ef8fa2071a684181ea160805e236c3bba226510a
-R 4abaa719c3f0b3c283ef0653194b4d07
+P fb053a27d94f9caedfddf28680e13836343745376e84c8008641df6bb517cd8b
+R 100960854ade0f263f89ddfe27508ecf
U stephan
-Z 0755752744575b5a7a7fc02264f08ee2
+Z ad7ae87bed8b1ac707c9f8f92f28fda3
# Remove this line to create a well-formed Fossil manifest.
-fb053a27d94f9caedfddf28680e13836343745376e84c8008641df6bb517cd8b
+e5f0256feab95c30a8e3e1e69963fb3e25ed2da296aff5bc6646fe96a76c0b81