# a binary, sets a define (see below) to the result, and returns the
# result (an empty string if not found).
#
-# The define'd name is: if defName is empty then "BIN_X" is used,
-# where X is the upper-case form of $binName with any '-' characters
-# replaced with '_'.
+# The define'd name is: If $defName is not empty, it is used as-is. If
+# $defName is empty then "BIN_X" is used, where X is the upper-case
+# form of $binName with any '-' characters replaced with '_'.
proc proj-bin-define {binName {defName {}}} {
set check [proj-find-executable-path -v $binName]
if {"" eq $defName} {
# If the given directory is found, it expects to find emsdk_env.sh in
# that directory, as well as the emcc compiler somewhere under there.
#
-# If the --with-emsdk flag is explicitly provided and the SDK is not
-# found then a fatal error is generated, otherwise failure to find the
-# SDK is not fatal.
+# If the --with-emsdk[=DIR] flag is explicitly provided and the SDK is
+# not found then a fatal error is generated, otherwise failure to find
+# the SDK is not fatal.
#
# Defines the following:
#
-# - EMSDK_HOME = top dir of the emsdk or "".
-# - EMSDK_ENV_SH = path to EMSDK_HOME/emsdk_env.sh or ""
-# - BIN_EMCC = $EMSDK_HOME/upstream/emscripten/emcc or ""
# - HAVE_EMSDK = 0 or 1 (this function's return value)
+# - EMSDK_HOME = "" or top dir of the emsdk
+# - EMSDK_ENV_SH = "" or $EMSDK_HOME/emsdk_env.sh
+# - BIN_EMCC = "" or $EMSDK_HOME/upstream/emscripten/emcc
#
# Returns 1 if EMSDK_ENV_SH is found, else 0. If EMSDK_HOME is not empty
# but BIN_EMCC is then emcc was not found in the EMSDK_HOME, in which
########################################################################
# Check for the Emscripten SDK for building the web-based wasm
# components. The core lib and tools do not require this but ext/wasm
-# does.
+# does. Most of the work is done via [proj-check-emsdk], then this
+# function adds the following defines:
+#
+# - EMCC_WRAPPER = "" or top-srcdir/tool/emcc.sh
+# - BIN_WASM_OPT = "" or path to wasm-opt
+# - BIN_WASM_STRIP = "" or path to wasm-strip
+#
+# Noting that:
+#
+# 1) Not finding the SDK is not fatal at this level, nor is failure to
+# find one of the related binaries.
+#
+# 2) wasm-strip is part of the wabt package:
+#
+# https://github.com/WebAssembly/wabt
+#
+# and this project requires it for production-mode builds but not dev
+# builds.
+#
proc sqlite-handle-emsdk {} {
+ define EMCC_WRAPPER ""
+ define BIN_WASM_STRIP ""
+ define BIN_WASM_OPT ""
set srcdir $::autosetup(srcdir)
if {$srcdir ne $::autosetup(builddir)} {
# The EMSDK pieces require writing to the original source tree
# even when doing an out-of-tree build. The ext/wasm pieces do not
- # support an out-of-tree build so we catch that case and treat it
- # as if EMSDK were not found.
+ # support an out-of-tree build so we treat that case as if EMSDK
+ # were not found.
msg-result "Out-of tree build: not checking for EMSDK."
- define EMCC_WRAPPER ""
return
}
- set emccsh $srcdir/tool/emcc.sh
+ set emccSh $srcdir/tool/emcc.sh
+ set extWasmConfig $srcdir/ext/wasm/config.make
if {![get-define HAVE_WASI_SDK] && [proj-check-emsdk]} {
- define EMCC_WRAPPER $emccsh
- proj-make-from-dot-in $emccsh
- catch {exec chmod u+x $emccsh}
+ define EMCC_WRAPPER $emccSh
+ set emsdkHome [get-define EMSDK_HOME ""]
+ proj-assert {"" ne $emsdkHome}
+ #define EMCC_WRAPPER ""; # just for testing
+ proj-bin-define wasm-strip
+ proj-bin-define bash; # ext/wasm/GNUmakefile requires bash
+ if {[file-isexec $emsdkHome/upstream/bin/wasm-opt]} {
+ define BIN_WASM_OPT $emsdkHome/upstream/bin/wasm-opt
+ } else {
+ # Maybe there's a copy in the path?
+ proj-bin-define wasm-opt BIN_WASM_OPT
+ }
+ proj-make-from-dot-in $emccSh $extWasmConfig
+ catch {exec chmod u+x $emccSh}
} else {
define EMCC_WRAPPER ""
- file delete -force $emccsh
+ file delete -force -- $emccSh $extWasmConfig
}
}
# Check #1: ensure that files which get filtered for @VAR@ do not
# contain any unresolved @VAR@ refs. That may indicate an
# unexported/unused var or a typo.
- foreach f "Makefile sqlite3.pc $::autosetup(srcdir)/tool/emcc.sh" {
+ set srcdir $::autosetup(srcdir)
+ foreach f [list Makefile sqlite3.pc \
+ $srcdir/tool/emcc.sh \
+ $srcdir/ext/wasm/config.make] {
if {![file exists $f]} continue
set lnno 1
foreach line [proj-file-content-list $f] {
- if {[regexp {(@[A-Za-z_]+@)} $line match]} {
+ if {[regexp {(@[A-Za-z0-9_]+@)} $line match]} {
error "Unresolved reference to $match at line $lnno of $f"
}
incr lnno
########################################################################
default: all
#default: quick
-SHELL := $(firstword $(shell which bash) $(wildcard /usr/local/bin/bash /usr/bin/bash /bin/bash))
-ifeq (,$(SHELL))
- $(error Cannot find the bash shell)
-endif
MAKEFILE := $(lastword $(MAKEFILE_LIST))
CLEAN_FILES :=
-DISTCLEAN_FILES :=
+DISTCLEAN_FILES := config.make
MAKING_CLEAN := $(if $(filter %clean,$(MAKECMDGOALS)),1,0)
.PHONY: clean distclean
clean:
distclean: clean
-rm -f $(DISTCLEAN_FILES)
+
+########################################################################
+# Special-case builds for which we require certain pre-conditions
+# which, if not met, may cause warnings or fatal errors in the build.
+# This also affects the default optimization level flags. Note that
+# the fiddle targets are in this list because they are used for
+# generating sqlite.org/fiddle.
+OPTIMIZED_TARGETS := dist snapshot fiddle fiddle.debug
+
+ifeq (1,$(MAKING_CLEAN))
+ bin.wasm-strip := echo "not stripping"
+ bin.wasm-opt := irrelevant
+ bin.emcc := irrelevant
+ bin.bash := irrelevant
+ emcc.version := unknown
+else
+ # Include config.make and perform some bootstrapping...
+ ifeq (,$(wildcard ./config.make))
+ $(error Missing config.make (gets generated by the configure script if the EMSDK is found))
+ endif
+ include ./config.make
+ ifeq (,$(bin.bash))
+ $(error Configure script did not find the bash shell)
+ endif
+ ifeq (,$(bin.emcc))
+ $(error Configure script did not find emcc)
+ endif
+ emcc.version := $(shell $(bin.emcc) --version | sed -n 1p | sed -e 's/^.* \([3-9][^ ]*\) .*$$/\1/;')
+ $(info using emcc version [$(emcc.version)])
+ ifeq (,$(bin.wasm-strip))
+ ####################################################################
+ # We need wasm-strip for release builds (see below for why) but
+ # not strictly for non-release builds.
+ $(info WARNING: *******************************************************************)
+ $(info WARNING: Builds using -Oz will minify WASM-exported names, breaking)
+ $(info WARNING: _All The Things_. The workaround for that is to build)
+ $(info WARNING: with -g3 (which explodes the file size) and then strip the debug)
+ $(info WARNING: info after compilation, using wasm-strip, to shrink the wasm file.)
+ $(info WARNING: wasm-strip was not found in the PATH so we cannot strip those.)
+ $(info WARNING: If this build uses any optimization level higher than -O1 then)
+ $(info WARNING: the ***resulting JS code WILL NOT BE USABLE***.)
+ $(info WARNING: wasm-strip is part of the wabt package:)
+ $(info WARNING: https://github.com/WebAssembly/wabt)
+ $(info WARNING: on Ubuntu-like systems it can be installed with:)
+ $(info WARNING: sudo apt install wabt)
+ $(info WARNING: *******************************************************************)
+ ifneq (,$(filter $(OPTIMIZED_TARGETS),$(MAKECMDGOALS)))
+ $(error Cannot make release-quality binary because wasm-strip is not available.)
+ endif
+ bin.wasm-strip := echo "not wasm-stripping"
+ endif
+ ifeq (,$(filter $(OPTIMIZED_TARGETS),$(MAKECMDGOALS)))
+ $(info ==============================================================)
+ $(info == Development build. Make one of (dist, snapshot) for a)
+ $(info == smaller release build.)
+ $(info ==============================================================)
+ endif
+endif
+# ^^^ end of are-we-MAKING_CLEAN
+maybe-wasm-strip := $(bin.wasm-strip)
+
########################################################################
# JS_BUILD_NAMES exists for documentation purposes only. It enumerates
# the core build styles:
sqlite3.c ?= $(firstword $(wildcard $(dir.top)/sqlite3-see.c) $(sqlite3.canonical.c))
sqlite3.h := $(dir.top)/sqlite3.h
-ifneq (1,$(MAKING_CLEAN))
-ifeq (,$(shell grep sqlite3_activate_see $(sqlite3.c)))
+ifeq (1,$(MAKING_CLEAN))
SQLITE_C_IS_SEE := 0
else
- SQLITE_C_IS_SEE := 1
- $(info This is an SEE build)
-endif
+ ifeq (,$(shell grep sqlite3_activate_see $(sqlite3.c)))
+ SQLITE_C_IS_SEE := 0
+ else
+ SQLITE_C_IS_SEE := 1
+ $(info This is an SEE build)
+ endif
endif
########################################################################@
$(MAKE) -C $(dir.top) sqlite3.c
$(sqlite3.c): $(sqlite3.h)
-########################################################################
-# Special-case builds for which we require certain pre-conditions
-# which, if not met, may cause warnings or fatal errors in the build.
-# This also affects the default optimization level flags. Note that
-# the fiddle targets are in this list because they are used for
-# generating sqlite.org/fiddle.
-OPTIMIZED_TARGETS := dist snapshot fiddle fiddle.debug
-
-ifneq (1,$(MAKING_CLEAN))
- ifeq (,$(filter $(OPTIMIZED_TARGETS),$(MAKECMDGOALS)))
- $(info ==============================================================)
- $(info == Development build. Make one of (dist, snapshot) for a)
- $(info == smaller release build.)
- $(info ==============================================================)
- endif
-endif
-
-########################################################################
-# Find emcc (Emscripten compiler)...
-ifeq (1,$(MAKING_CLEAN))
- emcc.bin := echo
- emcc.version := unknown
-else
- emcc.bin := $(dir.tool)/emcc.sh
- ifeq (,$(wildcard $(emcc.bin)))
- $(error Configure script did not find emcc.)
- endif
- emcc.version := $(shell $(emcc.bin) --version | sed -n 1p | sed -e 's/^.* \([3-9][^ ]*\) .*$$/\1/;')
- $(info using emcc version [$(emcc.version)])
-endif
-#########################################################################
-# Find wasm-strip, which we need for release builds (see below for
-# why) but not strictly for non-release builds.
-ifeq (1,$(MAKING_CLEAN))
- wasm-strip.bin := irrelevant
-else
- wasm-strip.bin ?= $(shell which wasm-strip 2>/dev/null)
- ifeq (,$(wasm-strip.bin))
- $(info WARNING: *******************************************************************)
- $(info WARNING: Builds using -O2/-O3/-Os/-Oz will minify WASM-exported names,)
- $(info WARNING: breaking _All The Things_. The workaround for that is to build)
- $(info WARNING: with -g3 (which explodes the file size) and then strip the debug)
- $(info WARNING: info after compilation, using wasm-strip, to shrink the wasm file.)
- $(info WARNING: wasm-strip was not found in the PATH so we cannot strip those.)
- $(info WARNING: If this build uses any optimization level higher than -O1 then)
- $(info WARNING: the ***resulting JS code WILL NOT BE USABLE***.)
- $(info WARNING: wasm-strip is part of the wabt package:)
- $(info WARNING: https://github.com/WebAssembly/wabt)
- $(info WARNING: on Ubuntu-like systems it can be installed with:)
- $(info WARNING: sudo apt install wabt)
- $(info WARNING: *******************************************************************)
- ifneq (,$(filter $(OPTIMIZED_TARGETS),$(MAKECMDGOALS)))
- $(error Cannot make release-quality binary because wasm-strip is not available.)
- endif
- wasm-strip.bin := echo "not wasm-stripping"
- endif
-endif
-maybe-wasm-strip := $(wasm-strip.bin)
-
########################################################################
# barebones=1 disables all "extraneous" stuff from sqlite3-wasm.c, the
# goal being to create a WASM file with only the core APIs.
$(CC) -o $@ $<
DISTCLEAN_FILES += $(bin.stripccomments)
-########################################################################
-# bin.mkwb is used for generating some of the makefile code for the
-# various wasm builds. It used to be generated in this makefile via a
-# difficult-to-read/maintain block of $(eval)'d code. Attempts were
-# made to generate it from tcl and bash (shell) but having to escape
-# the $ references in those languages made it just as illegible as the
-# native makefile code. Somewhat surprisingly, moving that code generation
-# to C makes it slightly less illegible than the previous 3 options.
-bin.mkwb := ./mkwasmbuilds
-$(bin.mkwb): $(bin.mkwb).c $(MAKEFILE)
- $(CC) -o $@ $<
-DISTCLEAN_FILES += $(bin.mkwb)
-
########################################################################
# C-PP.FILTER: a $(call)able to transform $(1) to $(2) via:
#
sqlite3-api-wasmfs.mjs := $(dir.tmp)/sqlite3-api-wasmfs.mjs
sqlite3-wasmfs.mjs := $(dir.wasmfs)/sqlite3-wasmfs.mjs
EXPORTED_FUNCTIONS.fiddle := $(dir.tmp)/EXPORTED_FUNCTIONS.fiddle
-ifneq (1,$(MAKING_CLEAN))
-.wasmbuilds.make: $(bin.mkwb)
- @rm -f $@
- $(bin.mkwb) > $@
- @chmod -w $@
--include .wasmbuilds.make
-endif
-DISTCLEAN_FILES += .wasmbuilds.make
# The various -D... values used by *.c-pp.js include:
#
all quick: $(sqlite3-api.ext.jses)
q: quick
+ifneq (1,$(MAKING_CLEAN))
+########################################################################
+# bin.mkwb is used for generating some of the makefile code for the
+# various wasm builds. It used to be generated in this makefile via a
+# difficult-to-read/maintain block of $(eval)'d code. Attempts were
+# made to generate it from tcl and bash (shell) but having to escape
+# the $ references in those languages made it just as illegible as the
+# native makefile code. Somewhat surprisingly, moving that code generation
+# to C makes it slightly less illegible than the previous 3 options.
+bin.mkwb := ./mkwasmbuilds
+$(bin.mkwb): $(bin.mkwb).c $(MAKEFILE)
+ $(CC) -o $@ $<
+DISTCLEAN_FILES += $(bin.mkwb)
+.wasmbuilds.make: $(bin.mkwb)
+ @rm -f $@
+ $(bin.mkwb) > $@
+ @chmod -w $@
+-include .wasmbuilds.make
+endif
+DISTCLEAN_FILES += .wasmbuilds.make
+
########################################################################
# batch-runner.js is part of one of the test apps which reads in SQL
# dumps generated by $(speedtest1) and executes them.
$(pre-post-speedtest1-vanilla.deps) \
$(EXPORTED_FUNCTIONS.speedtest1)
@echo "Building $@ ..."
- $(emcc.bin) \
+ $(bin.emcc) \
$(emcc.speedtest1) \
$(emcc.speedtest1.common) \
$(emcc.flags.speedtest1-vanilla) $(pre-post-speedtest1-vanilla.flags) \
--- /dev/null
+# Gets filtered by the configure script
+bin.bash = @BIN_BASH@
+bin.emcc = @EMCC_WRAPPER@
+bin.wasm-strip = @BIN_WASM_STRIP@
+bin.wasm-opt = @BIN_WASM_OPT@
+
+SHELL := $(bin.bash)
+
+# The following overrides can be activated to test
+# various validation in GNUmakefile:
+#
+#bin.bash :=
+#bin.emcc :=
+#bin.wasm-strip :=
if( 1==i ){/*fiddle.debug*/
pf(" @test -d \"$(dir $@)\" || mkdir -p \"$(dir $@)\"\n");
}
- pf(" $(emcc.bin) -o $@ $(fiddle.emcc-flags%s) "
+ pf(" $(bin.emcc) -o $@ $(fiddle.emcc-flags%s) "
"$(pre-post-fiddle-module-vanilla.flags) $(fiddle.cses)\n",
zTail);
pf(" $(maybe-wasm-strip) $(fiddle-module.wasm%s)\n", zTail);
/* target zJsOut */
pf("%s: %s $(MAKEFILE) $(sqlite3-wasm.cfiles) $(EXPORTED_FUNCTIONS.api) "
- "$(pre-post-%s-%s.deps)\n",
+ "$(pre-post-%s-%s.deps) "
+ "$(sqlite3-api.ext.jses)"
+ /* ^^^ maintenance reminder: we set these as deps so that they
+ get copied into place early. That allows the developer to
+ reload the base-most test pages while the later-stage builds
+ are still compiling, which is especially helpful when running
+ builds with long build times (like -Oz). */
+ "\n",
zJsOut, zApiJsOut, zNM);
pf("\t@echo \"Building $@ ...\"\n");
- pf("\t$(emcc.bin) -o $@ $(emcc_opt_full) $(emcc.flags) \\\n");
+ pf("\t$(bin.emcc) -o $@ $(emcc_opt_full) $(emcc.flags) \\\n");
pf("\t\t$(emcc.jsflags) -sENVIRONMENT=$(emcc.environment.%s) \\\n", zMode);
pf("\t\t$(pre-post-%s-%s.flags) \\\n", zNM);
pf("\t\t$(emcc.flags.%s) $(emcc.flags.%s.%s) \\\n", zName, zNM);
speed up lib init, and reduce memory cost
considerably, by stripping them out. */;
/*
- ** The above $(emcc.bin) call will write zJsOut and will create a
+ ** The above $(bin.emcc) call will write zJsOut and will create a
** like-named .wasm file. That .wasm file name gets hard-coded into
** zJsOut so we need to, for some cases, patch zJsOut to use the
** name sqlite3.wasm instead. Note that the resulting .wasm file is
-C Remove\sunnecessary\s--minify\s0\semcc\sflag\sfrom\sthe\swasm\sbuild,\sas\s-g3\simplies\sthat\scapability\salong\swith\sother\santi-minification\sfeatures\swe\srely\son.
-D 2025-01-23T11:21:29.495
+C Move\ssmall\sparts\sof\sext/wasm/GNUmakefile\sinto\sext/wasm/config.make.in\sand\shave\sthe\sconfigure\sscript\spopulate\sthat,\srather\sthan\sdynamically\sdetermining\sthose\svalues\son\seach\s'make'\sinvocation.\sAdd\sa\sconfigure-time\scheck\sfor\sthe\soptional\swasm-opt\sbinary\sin\sprep\sfor\spending\sexperimentation\swith\susing\sit\sto\sreduce\sthe\swasm\sfile\ssizes.
+D 2025-01-23T14:09:02.122
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md e108e1e69ae8e8a59e93c455654b8ac9356a11720d3345df2a4743e9590fb20d
F autosetup/cc.tcl c0fcc50ca91deff8741e449ddad05bcd08268bc31177e613a6343bbd1fd3e45f
F autosetup/jimsh0.c d40e381ea4526a067590e7b91bd4b2efa6d4980d286f908054c647b3df4aee14
F autosetup/pkg-config.tcl 4e635bf39022ff65e0d5434339dd41503ea48fc53822c9c5bde88b02d3d952ba
-F autosetup/proj.tcl 50b060ea6760b02ef5cb16650fbe9c1840e16351a0be0ccfc3727c565f74a257
-F autosetup/sqlite-config.tcl cf9790dc31d498b69ad2b348b7a3a6f2c7df9a86d770b31dff2255c2f62e5015
+F autosetup/proj.tcl 9adf1539673cef15bff862d9360b479e6920cc2c0d85de707b0ba31c04ce4531
+F autosetup/sqlite-config.tcl f37f6961c8fb2454960f97a28011a29994f6c591b1da392a9ae28af96e0c15a2
F autosetup/system.tcl 51d4be76cd9a9074704b584e5c9cbba616202c8468cf9ba8a4f8294a7ab1dba9
F configure 9a00b21dfd13757bbfb8d89b30660a89ec1f8f3a79402b8f9f9b6fc475c3303a x
F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad
F ext/session/sqlite3session.h 683ccbf16e2c2521661fc4c1cf918ce57002039efbcabcd8097fa4bca569104b
F ext/session/test_session.c 12e0a2c15fd60f92da4bb29c697c9177ff0c0dbcdc5129a54c47e999f147937a
F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
-F ext/wasm/GNUmakefile ccd219b2db93f5dba54ba5ed45d71b46eb219e2b27a541d3dc21f98b16dc0f5f
+F ext/wasm/GNUmakefile 5c36cb9ad5217e74f8936861210dac0b052b9cd418cbabe915cc9d646c5743a0
F ext/wasm/README-dist.txt 6382cb9548076fca472fb3330bbdba3a55c1ea0b180ff9253f084f07ff383576
F ext/wasm/README.md a8a2962c3aebdf8d2104a9102e336c5554e78fc6072746e5daf9c61514e7d193
F ext/wasm/SQLTester/GNUmakefile e0794f676d55819951bbfae45cc5e8d7818dc460492dc317ce7f0d2eca15caff
F ext/wasm/common/emscripten.css 11bd104b6c0d597c67d40cc8ecc0a60dae2b965151e3b6a37fa5708bac3acd15
F ext/wasm/common/testing.css e97549bab24126c24e0daabfe2de9bb478fb0a69fdb2ddd0a73a992c091aad6f
F ext/wasm/common/whwasmutil.js d76c69617e95d85ffc9996f7d9d7481df6976dcbd860ecd82bd8c075e3a101ae
+F ext/wasm/config.make.in f830c98f0f668f7628d9521bc0b1175ab15b050f20fe3234346be346d747c587
F ext/wasm/demo-123-worker.html a0b58d9caef098a626a1a1db567076fca4245e8d60ba94557ede8684350a81ed
F ext/wasm/demo-123.html 8c70a412ce386bd3796534257935eb1e3ea5c581e5d5aea0490b8232e570a508
F ext/wasm/demo-123.js c7b3cca50c55841c381a9ca4f9396e5bbdc6114273d0b10a43e378e32e7be5bf
F ext/wasm/index.html e4bbffdb3d40eff12b3f9c7abedef91787e2935620b7f8d40f2c774b80ad8fa9
F ext/wasm/jaccwabyt/jaccwabyt.js 1264710db3cfbcb6887d95665b7aeba60c1126eaef789ca4cf1a4a17d5bc7f54
F ext/wasm/jaccwabyt/jaccwabyt.md 59a20df389abcc3606eb4eaea7fb7ba14504beb3e345dbea9b99a0618ba3bec8
-F ext/wasm/mkwasmbuilds.c af06fd14fcb7803c0adacab276047bb696c07f5b683a6f70adc5b3f146cf61f3
+F ext/wasm/mkwasmbuilds.c 619b99bffb9538c681f0622395a177e4ba2e2658bc1b94bb7f6605245b6e365e
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 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P cd3fed5c2082c250c32c4d99eecd49a1ab840583fc343bcfd27fb536715d0ce9
-R de609fdf581bc64ebd30372c2fbf1eb4
+P 10c91f9cd074e8d35af1c7f8251ac18e5dd91fa14df3fe4e1fb44441c4f08c7a
+R 07e50a0cf41474faaa27c1572e1c844e
U stephan
-Z a93ce720e037c2af4cd69560e744cedd
+Z 685755e90bacd2eb62f10206ae6eb72e
# Remove this line to create a well-formed Fossil manifest.
-10c91f9cd074e8d35af1c7f8251ac18e5dd91fa14df3fe4e1fb44441c4f08c7a
+0a426a549577b883e2de7cd0605041cc97b57f53ee6657bc318b0bfde7b62677