summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Aboukhalil <robert.aboukhalil@gmail.com>2023-07-19 08:04:39 -0700
committerNico Williams <nico@cryptonector.com>2023-07-19 13:07:46 -0500
commit4c25cf3f7cfc83b2d75d8997c70da86a302dc1da (patch)
tree55e06c2fc8cae0b8012d8d4b3fbbc72f06155754
parentf1c49473a36bd5068031f2dca4f8cdc7c5dddb70 (diff)
Reset options to 0 so can call main() multiple times in a row
-rw-r--r--README.md7
-rw-r--r--src/main.c6
2 files changed, 13 insertions, 0 deletions
diff --git a/README.md b/README.md
index 7871ca84..e21ed9bc 100644
--- a/README.md
+++ b/README.md
@@ -66,6 +66,13 @@ cross-compilation environment. See also
["Cross compilation"](https://github.com/jqlang/jq/wiki/Cross-compilation) on
the wiki.
+To compile jq to WebAssembly, install the [Emscripten SDK](https://emscripten.org/docs/getting_started/downloads.html), then:
+
+ git submodule update --init # if building from git to get oniguruma
+ autoreconf -i # if building from git
+ emconfigure ./configure --with-oniguruma=builtin --disable-maintainer-mode
+ emmake make EXEEXT=.js CFLAGS="-O2" LDFLAGS="-s EXPORTED_RUNTIME_METHODS=['callMain']"
+
# Community
diff --git a/src/main.c b/src/main.c
index 3c5133d7..49cd0ed1 100644
--- a/src/main.c
+++ b/src/main.c
@@ -292,6 +292,12 @@ int main(int argc, char* argv[]) {
_setmode(fileno(stderr), _O_TEXT | _O_U8TEXT);
#endif
+#ifdef __EMSCRIPTEN__
+ /* When compiling to WebAssembly with Emscripten, reset options to ensure we can
+ call main() multiple times without reinitializing the WebAssembly module. */
+ options = 0;
+#endif
+
if (argc) progname = argv[0];
jq = jq_init();