diff --git a/auto.def b/auto.def
index 7f1c9d6a86..0314bc3cde 100644
--- a/auto.def
+++ b/auto.def
@@ -189,7 +189,7 @@ set flags {
#
with-wasi-sdk:=/opt/wasi-sdk
=> {Top-most dir of the wasi-sdk for a WASI build}
- with-emsdk:DIR => {Top-most dir of the Emscripten SDK installation}
+ with-emsdk:=auto => {Top-most dir of the Emscripten SDK installation. Default = EMSDK env var.}
#
#
test-status => {Enable status of tests}
@@ -197,7 +197,6 @@ set flags {
linemacros => {Enable #line macros in the amalgamation}
dump-defines=0 => {Dump autosetup defines to $DUMP_DEFINES_TXT (for build debugging)}
#
-
}
if {"" ne $DUMP_DEFINES_JSON} {
lappend flags \
@@ -205,7 +204,7 @@ if {"" ne $DUMP_DEFINES_JSON} {
=> {Include lower-case defines (primarily system paths) in $DUMP_DEFINES_JSON}
}
-options [subst $flags]
+options [subst -nobackslashes -nocommands $flags]
unset flags
#
diff --git a/autosetup/proj.tcl b/autosetup/proj.tcl
index 82835ed601..c6b8b35d07 100644
--- a/autosetup/proj.tcl
+++ b/autosetup/proj.tcl
@@ -738,29 +738,41 @@ proc proj-affirm-files-exist {args} {
# Emscripten is used for doing in-tree builds of web-based WASM stuff,
# as opposed to WASI-based WASM or WASM binaries we import from other
# places. This is only set up for Unix-style OSes and is untested
-# anywhere but Linux.
+# anywhere but Linux. Requires that the --with-emsdk flag be
+# registered with autosetup.
+#
+# It looks for the SDK in the location specified by --with-emsdk.
+# Values of "" or "auto" mean to check for the environment var EMSDK
+# (which gets set by the emsdk_env.sh script from the SDK) or that
+# same var passed to configure.
+#
+# 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.
#
# Defines the following:
#
-# - EMSDK_HOME = top dir of the emsdk or "". It looks for
-# --with-emsdk=DIR or the $EMSDK environment variable.
-# - EMSDK_ENV = path to EMSDK_HOME/emsdk_env.sh or ""
+# - 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)
#
-# Returns 1 if EMSDK_ENV is found, else 0. If EMSDK_HOME is not empty
+# 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
-# case we have to rely on the fact that sourcing $EMSDK_ENV from a
+# case we have to rely on the fact that sourcing $EMSDK_ENV_SH from a
# shell will add emcc to the $PATH.
proc proj-check-emsdk {} {
set emsdkHome [opt-val with-emsdk]
define EMSDK_HOME ""
- define EMSDK_ENV ""
+ define EMSDK_ENV_SH ""
define BIN_EMCC ""
+ set hadValue [llength $emsdkHome]
msg-checking "Emscripten SDK? "
- if {$emsdkHome eq ""} {
- # Fall back to checking the environment. $EMSDK gets set by
- # sourcing emsdk_env.sh.
+ if {$emsdkHome in {"" "auto"}} {
+ # Check the environment. $EMSDK gets set by sourcing emsdk_env.sh.
set emsdkHome [get-env EMSDK ""]
}
set rc 0
@@ -769,7 +781,7 @@ proc proj-check-emsdk {} {
set emsdkEnv "$emsdkHome/emsdk_env.sh"
if {[file exists $emsdkEnv]} {
msg-result "$emsdkHome"
- define EMSDK_ENV $emsdkEnv
+ define EMSDK_ENV_SH $emsdkEnv
set rc 1
set emcc "$emsdkHome/upstream/emscripten/emcc"
if {[file exists $emcc]} {
@@ -781,6 +793,10 @@ proc proj-check-emsdk {} {
} else {
msg-result "not found"
}
+ if {$hadValue && 0 == $rc} {
+ # Fail if it was explicitly requested but not found
+ proj-fatal "Cannot find the Emscripten SDK"
+ }
define HAVE_EMSDK $rc
return $rc
}
diff --git a/manifest b/manifest
index a6816b068b..e4c205c753 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Improve\sthe\s".mode\sjson"\soutput\sof\sthe\sCLI\sso\sthat\sit\sencodes\sU+007f\susing\nan\sescape\ssequence.
-D 2024-11-05T23:26:31.239
+C Enhance\sthe\s--with-emsdk\sflag\sto\suse\sa\sdefault\svalue\sof\s'auto',\smeaning\sto\ssearch\sthe\senvironment\sfor\sit,\sand\sto\sfail\sfatally\sif\s--with-emsdk\sis\sexplicitly\sprovided\sbut\sthe\sSDK\sis\snot\sfound.
+D 2024-11-06T02:59:59.807
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md c5b4009dca54d127d2d6033c22fd9cc34f53bedb6ef12c7cbaa468381c74ab28
@@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d
F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90
F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2
-F auto.def 348be257a61090f739287d54046f63801c99705f42fae0dffa2ba415dd9afcfb
+F auto.def 4a5115da298b51f0332fda72933976bded86700c94e30d75066e665795d638d7
F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903
F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347
F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac
@@ -49,7 +49,7 @@ F autosetup/cc.tcl c0fcc50ca91deff8741e449ddad05bcd08268bc31177e613a6343bbd1fd3e
F autosetup/default.auto 5cdf016de2140e50f1db190a02039dc42fb390af1dda4cc4853e3042a9ef0e82
F autosetup/jimsh0.c d40e381ea4526a067590e7b91bd4b2efa6d4980d286f908054c647b3df4aee14
F autosetup/pkg-config.tcl 4e635bf39022ff65e0d5434339dd41503ea48fc53822c9c5bde88b02d3d952ba
-F autosetup/proj.tcl a3f180a97db6cf398f12d8e688651d10b8707c4869eb0096bfbf0b2952b31131
+F autosetup/proj.tcl 57b9c794d01124c91af840b3ba0ef1e991e815c9a872fa451baff0dc03e9f84a
F autosetup/system.tcl 51d4be76cd9a9074704b584e5c9cbba616202c8468cf9ba8a4f8294a7ab1dba9
F autosetup/tmake.auto eaebc74ad538dfdd3c817c27eefc31930c20510c4f3a3704071f6cb0629ed71f
F autosetup/tmake.tcl a275793ec1b6f8708179af0acef1f6f10d46c2920739743f7a8720c6d700c7a9
@@ -2115,7 +2115,7 @@ F tool/custom.txt 24ed55e71c5edae0067ba159bbf09240d58b160331f7716e95816cd3aa0ba5
F tool/dbhash.c 5da0c61032d23d74f2ab84ffc5740f0e8abec94f2c45c0b4306be7eb3ae96df0
F tool/dbtotxt.c ca48d34eaca6d6b6e4bd6a7be2b72caf34475869054240244c60fa7e69a518d6
F tool/dbtotxt.md c9a57af8739957ef36d2cfad5c4b1443ff3688ed33e4901ee200c8b651f43f3c
-F tool/emcc.sh.in 5a3534af8d437747cf4141abaab3db558756f4a1ac8f3ebf28a16ffa26209921
+F tool/emcc.sh.in 1f3226166bad1765c0bf42fac3d29037704c2078eb22562f9ddfbe73bff023b0
F tool/enlargedb.c 3e8b2612b985cfa7e3e8800031ee191b43ae80de96abb5abbd5eada62651ee21
F tool/extract-sqlite3h.tcl 069ceab0cee26cba99952bfa08c0b23e35941c837acabe143f0c355d96c9e2eb x
F tool/extract.c 054069d81b095fbdc189a6f5d4466e40380505e2
@@ -2199,8 +2199,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P f5113a2ef84831ad2da723fa7e29e0d575e74e10585741ff51db8c2e37332cd2
-R bbfc36e2090df7d25792a8d2c806a189
-U drh
-Z cf46ecae3bdcb7001fed6ddb7dbd656a
+P 8b58cf9bbd3090c60f1ee7468cdeeb0b0fa4560d1e51a5fd0bef43692d10fe04
+R caf12b590890f202527bfa9f99549a98
+U stephan
+Z 9566a0d488cad676e06a60ec48a87114
# Remove this line to create a well-formed Fossil manifest.
diff --git a/manifest.uuid b/manifest.uuid
index 56803aeda4..95cc89888f 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-8b58cf9bbd3090c60f1ee7468cdeeb0b0fa4560d1e51a5fd0bef43692d10fe04
+9724b747caa926bca09653ea6ac3c0f7869824c9a476eb81f03e1a6763552da1
diff --git a/tool/emcc.sh.in b/tool/emcc.sh.in
index fb849545f8..1263e1b0ea 100644
--- a/tool/emcc.sh.in
+++ b/tool/emcc.sh.in
@@ -10,10 +10,10 @@
# script, if needed.
########################################################################
# EMSDK_HOME comes from the configure --with-emsdk=/dir flag.
-# EMSDK_ENV is ${thatDir}/emsdk_env.sh and is also set by the
+# EMSDK_ENV_SH is ${thatDir}/emsdk_env.sh and is also set by the
# configure process.
EMSDK_HOME="@EMSDK_HOME@"
-EMSDK_ENV="@EMSDK_ENV@"
+EMSDK_ENV_SH="@EMSDK_ENV_SH@"
emcc="@BIN_EMCC@"
if [ x = "x${emcc}" ]; then
@@ -22,41 +22,43 @@ fi
if [ x = "x${emcc}" ]; then
# If emcc is not found in the path, try to find it via an emsdk
- # installation. The SDK variant is the official installation
- # style supported by the Emscripten folks, but emcc is also
- # available via package managers on some OSes.
+ # installation. The SDK variant is the official installation style
+ # supported by the Emscripten project, but emcc is also available
+ # via package managers on some OSes.
if [ x = "x${EMSDK_HOME}" ]; then
echo "EMSDK_HOME is not set. Pass --with-emsdk=/path/to/emsdk" \
"to the configure script." 1>&2
exit 1
fi
- if [ x = "x${EMSDK_ENV}" ]; then
+ if [ x = "x${EMSDK_ENV_SH}" ]; then
if [ -f "${EMSDK_HOME}/emsdk_env.sh" ]; then
- EMSDK_ENV="${EMSDK_HOME}/emsdk_env.sh"
+ EMSDK_ENV_SH="${EMSDK_HOME}/emsdk_env.sh"
else
- echo "EMSDK_ENV is not set. Expecting configure script to set it." 1>&2
+ echo "EMSDK_ENV_SH is not set. Expecting configure script to set it." 1>&2
exit 2
fi
fi
- if [ ! -f "${EMSDK_ENV}" ]; then
- echo "emsdk_env script not found: $EMSDK_ENV" 1>&2
+ if [ ! -f "${EMSDK_ENV_SH}" ]; then
+ echo "emsdk_env script not found: $EMSDK_ENV_SH" 1>&2
exit 3
fi
# $EMSDK is part of the state set by emsdk_env.sh.
if [ x = "x${EMSDK}" ]; then
- source "${EMSDK_ENV}" >/dev/null 2>&1 || {
- # ^^^ unfortunately outputs lots of noise to stderr
+ EMSDK_QUIET=1
+ export EMSDK_QUIET
+ # ^^^ Squelches informational output from ${EMSDK_ENV_SH}.
+ source "${EMSDK_ENV_SH}" || {
rc=$?
- echo "Error sourcing ${EMSDK_ENV}"
+ echo "Error sourcing ${EMSDK_ENV_SH}"
exit $rc
}
fi
emcc=`which emcc 2>/dev/null`
if [ x = "x${emcc}" ]; then
- echo "emcc not found in PATH. Normally that's set up by ${EMSDK_ENV}." 1>&2
+ echo "emcc not found in PATH. Normally that's set up by ${EMSDK_ENV_SH}." 1>&2
exit 4
fi
fi