]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Experimental addition of sqlite3-node.mjs, for node.js, based on feedback from [forum...
authorstephan <stephan@noemail.net>
Thu, 9 Mar 2023 08:51:04 +0000 (08:51 +0000)
committerstephan <stephan@noemail.net>
Thu, 9 Mar 2023 08:51:04 +0000 (08:51 +0000)
FossilOrigin-Name: a5db97fa17d15711ab19af70595912d342ffa326a9b7029d4deb2194ae72a9f0

ext/wasm/GNUmakefile
ext/wasm/dist.make
manifest
manifest.uuid

index 250b8be0c70329dded28f31b593243596eff1941..a99513bfa877bf8c1f64c20cbdfc17277c19b0a9 100644 (file)
@@ -44,7 +44,7 @@
 # 1) Consolidate the code generation for sqlite3*.*js into a script
 #    which generates the makefile code, rather than using $(call) and
 #    $(eval), or at least centralize the setup of the numerous vars
-#    related to each build variant (vanilla, esm, bundler-friendly).
+#    related to each build variant $(JS_BUILD_MODES).
 #
 SHELL := $(shell which bash 2>/dev/null)
 MAKEFILE := $(lastword $(MAKEFILE_LIST))
@@ -52,7 +52,9 @@ CLEAN_FILES :=
 DISTCLEAN_FILES := ./--dummy--
 default: all
 release: oz
-
+# JS_BUILD_MODES exists solely to reduce repetition in documentation
+# below.
+JS_BUILD_MODES := vanilla esm bunder-friendly node
 # Emscripten SDK home dir and related binaries...
 EMSDK_HOME ?= $(word 1,$(wildcard $(HOME)/emsdk $(HOME)/src/emsdk))
 emcc.bin ?= $(word 1,$(wildcard $(EMSDK_HOME)/upstream/emscripten/emcc) $(shell which emcc))
@@ -461,7 +463,16 @@ emcc.jsflags += -sSTRICT_JS=0
 # STRICT_JS disabled due to:
 #   https://github.com/emscripten-core/emscripten/issues/18610
 # TL;DR: does not work with MODULARIZE or EXPORT_ES6 as of version 3.1.31.
-emcc.environment := -sENVIRONMENT=web,worker,node
+
+# -sENVIRONMENT values for the various build modes:
+emcc.environment.vanilla := web,worker
+emcc.environment.bundler-friendly := $(emcc.environment.vanilla)
+emcc.environment.esm := $(emcc.environment.vanilla)
+emcc.environment.node := node
+# Note that adding "node" to the list for the other builds causes
+# Emscripten to generate code which confuses node: it cannot reliably
+# determine whether the build is for a browser or for node.
+
 ########################################################################
 # -sINITIAL_MEMORY: How much memory we need to start with is governed
 # at least in part by whether -sALLOW_MEMORY_GROWTH is enabled. If so,
@@ -605,10 +616,11 @@ $(post-js.js.in): $(post-jses.js) $(MAKEFILE)
 ########################################################################
 # call-make-pre-post is a $(call)able which creates rules for
 # pre-js-$(1).js. $1 = the base name of the JS file on whose behalf
-# this pre-js is for (one of: sqlite3, sqlite3-wasmfs). $2 is the build
-# mode: one of (vanilla, esm, bundler-friendly).  This sets up
-# --[extern-][pre/post]-js flags in $(pre-post-$(1).flags.$(2)) and
-# dependencies in $(pre-post-$(1).deps.$(2)).
+# this pre-js is for (one of: sqlite3, sqlite3-wasmfs). $2 is the
+# build mode: one of $(JS_BUILD_MODES).  This
+# sets up --[extern-][pre/post]-js flags in
+# $(pre-post-$(1).flags.$(2)) and dependencies in
+# $(pre-post-$(1).deps.$(2)).
 define call-make-pre-post
 pre-post-$(1).flags.$(2) ?=
 $$(dir.tmp)/pre-js-$(1)-$(2).js: $$(pre-js.js.$(2)) $$(MAKEFILE)
@@ -681,14 +693,16 @@ pre-post-common.flags := \
 pre-post-jses.deps.common := $(extern-pre-js.js) $(sqlite3-license-version.js)
 ########################################################################
 # SETUP_LIB_BUILD_MODE is a $(call)'able which sets up numerous pieces
-# for one of the build modes (vanilla, esm, bundler-friendly).
+# for one of the build modes.
 #
-# $1 = build mode name
+# $1 = build mode name: one of $(JS_BUILD_MODES)
 # $2 = 1 for ESM build mode, else 0
 # $3 = resulting sqlite-api JS/MJS file
 # $4 = resulting JS/MJS file
 # $5 = -D... flags for $(bin.c-pp)
-# $6 = emcc -sXYZ flags
+# $6 = emcc -sXYZ flags (CURRENTLY UNUSED - was factored out)
+#
+# emcc.environment.$(1) must be set to a value for the -sENVIRONMENT flag.
 define SETUP_LIB_BUILD_MODE
 $(info Setting up build [$(1)]: $(4))
 c-pp.D.$(1) := $(5)
@@ -707,19 +721,21 @@ pre-post-jses.deps.$(1) := $$(pre-post-jses.deps.common) \
 $$(eval $$(call call-make-pre-post,sqlite3,$(1)))
 emcc.flags.sqlite3.$(1) := $(6)
 $$(eval $$(call C-PP.FILTER, $$(sqlite3-api.js.in), $(3), $(5)))
-$(4): $(3)
 $(4): $(3) $$(MAKEFILE) $$(sqlite3-wasm.cses) $$(EXPORTED_FUNCTIONS.api) $$(pre-post-sqlite3.deps.$(1))
        @echo "Building $$@ ..."
        $$(emcc.bin) -o $$@ $$(emcc_opt_full) $$(emcc.flags) \
     $$(emcc.jsflags) \
+    -sENVIRONMENT=$$(emcc.environment.$(1)) \
     $$(pre-post-sqlite3.flags.$(1)) $$(emcc.flags.sqlite3.$(1)) \
     $$(cflags.common) $$(SQLITE_OPT) $$(cflags.wasm_extra_init) $$(sqlite3-wasm.cses)
        @$$(call SQLITE3.xJS.ESM-EXPORT-DEFAULT,$(2))
-       @if [ bundler-friendly = $(1) ]; then \
-               echo "Patching $(3) for sqlite3.wasm..."; \
-               rm -f $$(dir.dout)/sqlite3-bundler-friendly.wasm; \
-               sed -i -e 's/sqlite3-bundler-friendly.wasm/sqlite3.wasm/g' $$@ || exit $$$$?; \
-       fi
+       @case $(1) in \
+    bundler-friendly|node) \
+      echo "Patching $(3) for sqlite3.wasm..."; \
+      rm -f $$(dir.dout)/sqlite3-$(1).wasm; \
+      sed -i -e 's/sqlite3-$(1).wasm/sqlite3.wasm/g' $$@ || exit $$$$?; \
+      ;; \
+       esac
        chmod -x $$(sqlite3.wasm)
        $$(maybe-wasm-strip) $$(sqlite3.wasm)
        @ls -la $@ $$(sqlite3.wasm)
@@ -735,6 +751,8 @@ sqlite3-api.mjs := $(dir.dout)/sqlite3-api.mjs
 sqlite3.mjs := $(dir.dout)/sqlite3.mjs
 sqlite3-api-bundler-friendly.mjs := $(dir.dout)/sqlite3-api-bundler-friendly.mjs
 sqlite3-bundler-friendly.mjs := $(dir.dout)/sqlite3-bundler-friendly.mjs
+sqlite3-api-node.mjs := $(dir.dout)/sqlite3-api-node.mjs
+sqlite3-node.mjs := $(dir.dout)/sqlite3-node.mjs
 # Maintenance reminder: careful not to introduce spaces around args $1, $2
 #$(info $(call SETUP_LIB_BUILD_MODE,vanilla,0, $(sqlite3-api.js), $(sqlite3.js)))
 $(eval $(call SETUP_LIB_BUILD_MODE,vanilla,0, $(sqlite3-api.js), $(sqlite3.js)))
@@ -742,7 +760,10 @@ $(eval $(call SETUP_LIB_BUILD_MODE,esm,1, $(sqlite3-api.mjs), $(sqlite3.mjs), \
        -Dtarget=es6-module, -sEXPORT_ES6 -sUSE_ES6_IMPORT_META))
 $(eval $(call SETUP_LIB_BUILD_MODE,bundler-friendly,1,\
        $(sqlite3-api-bundler-friendly.mjs),$(sqlite3-bundler-friendly.mjs),\
-       $(c-pp.D.esm) -Dtarget=es6-bundler-friendly, $(emcc.flags.sqlite3.esm)))
+       $(c-pp.D.esm) -Dtarget=es6-bundler-friendly))
+$(eval $(call SETUP_LIB_BUILD_MODE,node,1,\
+       $(sqlite3-api-node.mjs),$(sqlite3-node.mjs),\
+       $(c-pp.D.bundler-friendly) -Dtarget=node))
 # The various -D... values used by *.c-pp.js include:
 #
 # -Dtarget=es6-module: for all ESM module builds
@@ -754,6 +775,13 @@ $(eval $(call SETUP_LIB_BUILD_MODE,bundler-friendly,1,\
 #    as string literals so that bundlers' static-analysis tools can
 #    find those files and include them in their bundles.
 #
+# -Dtarget=es6-module -Dtarget=es6-bundler-friendly -Dtarget=node: is
+#    intended for use by node.js for node.js, as opposed to by
+#    node.js on behalf of a browser. Mixing -sENVIRONMENT=web and
+#    -sENVIRONMENT=node leads to ambiguity and confusion on node's
+#    part, as it's unable to reliably determine whether the target is
+#    a browser or node.
+#
 ########################################################################
 ########################################################################
 # We have to ensure that we do not build $(sqlite3*.*js) in parallel
@@ -766,6 +794,7 @@ $(eval $(call SETUP_LIB_BUILD_MODE,bundler-friendly,1,\
 $(sqlite3.wasm): $(sqlite3.js)
 $(sqlite3.mjs): $(sqlite3.js)
 $(sqlite3-bundler-friendly.mjs): $(sqlite3.mjs)
+$(sqlite3-node.mjs): $(sqlite3.mjs)
 CLEAN_FILES += $(sqlite3.wasm)
 
 ########################################################################
index 7073c24b788b4c3e83b2f808852de713b5eaa113..3f99ad5a5b6cd60563d1d9b6dd8b06267d241258 100644 (file)
@@ -70,7 +70,8 @@ STRIP_K1.js := $(sqlite3-worker1.js) $(sqlite3-worker1-promiser.js) \
   $(sqlite3-worker1-bundler-friendly.js) $(sqlite3-worker1-promiser-bundler-friendly.js)
 # STRIP_K2.js = list of JS files which need to be passed through
 # $(bin.stripcomments) with two -k flags.
-STRIP_K2.js := $(sqlite3.js) $(sqlite3.mjs) $(sqlite3-bundler-friendly.mjs)
+STRIP_K2.js := $(sqlite3.js) $(sqlite3.mjs) \
+  $(sqlite3-bundler-friendly.mjs) $(sqlite3-node.mjs)
 ########################################################################
 # dist: create the end-user deliverable archive.
 #
index 7548c98b518d71995bd7bea29162bf7aded82d5e..a9a799a9c8138272f0cfebd94b946e3d0ca28eb3 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\spossible\sNULL\spointer\sdereference\sdue\sto\sthe\ssqlite3_interrupt()\nenhancement\sat\s[bd8fa10e59f58886].\s\sReported\sby\n[forum:/forumpost/f5a2b1db87|forum\spost\sf5a2b1db87].
-D 2023-03-08T23:05:18.525
+C Experimental\saddition\sof\ssqlite3-node.mjs,\sfor\snode.js,\sbased\son\sfeedback\sfrom\s[forum:ac7a94d4f77db235|forum\spost\sac7a94d4f77db235]\sand\srelated\soff-list\sdiscussions.\sBuild\schanges\sonly\s-\sno\scode\schanges.
+D 2023-03-09T08:51:04.021
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -468,7 +468,7 @@ F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3
 F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04
 F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
 F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
-F ext/wasm/GNUmakefile 97f01bb84b0b745e2ba642e12ab24a682e369538e8d68b6e67bdbe502450fc6c
+F ext/wasm/GNUmakefile 38700d5074af690f004e4e5f3533164ab49693b9d0832929c4ecf97a0bc09494
 F ext/wasm/README-dist.txt 6382cb9548076fca472fb3330bbdba3a55c1ea0b180ff9253f084f07ff383576
 F ext/wasm/README.md ef39861aa21632fdbca0bdd469f78f0096f6449a720f3f39642594af503030e9
 F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api d6a5078f48a5301ed17b9a30331075d9b2506e1360c1f0dee0c7816c10acd9ab
@@ -509,7 +509,7 @@ F ext/wasm/demo-worker1-promiser.html 1de7c248c7c2cfd4a5783d2aa154bce62d74c6de98
 F ext/wasm/demo-worker1-promiser.js 51b02509a109e82f623fb4c900c8b48b9a77cc13fbd038396f9a083b86593ae3
 F ext/wasm/demo-worker1.html 2c178c1890a2beb5a5fecb1453e796d067a4b8d3d2a04d65ca2eb1ab2c68ef5d
 F ext/wasm/demo-worker1.js 2c7794d8bc4ab9ecf9cdc2c15de940b11a006942226e441ea41edd458dfc0a26
-F ext/wasm/dist.make f55f9c9e1980ea11a59964e59535c66175a17f004d1c2e274522c3366b3a084a
+F ext/wasm/dist.make 451fb1b732257849f6e898d2a862512a0401500ed369ef53bdfeddf9c77bc3b9
 F ext/wasm/example_extra_init.c 2347cd69d19d839ef4e5e77b7855103a7fe3ef2af86f2e8c95839afd8b05862f
 F ext/wasm/fiddle.make dbe36b90b8907ae28ecb9c0e9fd8389dbdaecf117ea4fb2ea33864bdfa498a94
 F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
@@ -2049,8 +2049,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 25017312d0d476d9cd5a39835748ee26c2ea482e163264ce2f9843ac627276d6
-R 04992e5ef08ba70fad9283f737a9de1e
-U drh
-Z f2ca12f92c53ce29bf6ab3953a4fa6eb
+P 84417bbd144b2197c9930a520feb94b59053957c190be79f8deaaaebca68ecf1
+R 9c34fcd2bec4c96e1de9e3017b1c7eba
+U stephan
+Z 735017807a470df527691c6295a81ba6
 # Remove this line to create a well-formed Fossil manifest.
index ac3cc4a4f22ed7e9918f91da30d56e0ed0a17b44..77410f6e6ad3ac2c45e1ac50a50809f1445a574a 100644 (file)
@@ -1 +1 @@
-84417bbd144b2197c9930a520feb94b59053957c190be79f8deaaaebca68ecf1
\ No newline at end of file
+a5db97fa17d15711ab19af70595912d342ffa326a9b7029d4deb2194ae72a9f0
\ No newline at end of file