In this email, I have attached a patch to update lang/quickjs from
version 2024.01.13 to version 2025.09.13.
From 2024.01.13 to 2025.09.13, the project removed the legacy bignum
extensions and qjscalc, introduced a faster small-number BigInt, and
added WeakRef/FinalizationRegistry (with symbols as weakrefs). It
expanded language/stdlib features with JSON modules and import
attributes, improved JSON spec conformance and JSON5 compatibility
(including accepting JSON5 modules), major RegExp upgrades (v flag,
modifiers, RegExp.escape), Float16Array, Promise.try, and Error.isError.
Runtime behavior and tooling were refined: qjs now pretty-prints objects
and treats unhandled promise rejections as fatal by default, float64
printing/parsing is more correct, repeated string concatenation is
faster, and debug info includes column numbers; new CLI flags arrived
(qjs -s/--strip-source, qjsc -s/--keep-source) and the "use strip"
extension was dropped. The C API grew with JS_PrintValue(),
JS_FreePropertyEnum(), JS_AtomToCStringLen(), JS_GetAnyOpaque(), plus
more exotic class callbacks.
Tested on amd64 and it builds and runs fine.
Ping
Index: lang/quickjs/Makefile
===================================================================
RCS file: /cvs/ports/lang/quickjs/Makefile,v
diff -u -p -u -r1.10 Makefile
--- lang/quickjs/Makefile 28 Jan 2025 11:22:03 -0000 1.10
+++ lang/quickjs/Makefile 6 Nov 2025 03:56:28 -0000
@@ -1,9 +1,8 @@
COMMENT = small, embeddable JavaScript engine in C
-V = 2024.01.13
+V = 2025.09.13
DISTNAME = quickjs-${V:S/./-/g}
PKGNAME = quickjs-${V}
-REVISION = 0
CATEGORIES = lang
Index: lang/quickjs/distinfo
===================================================================
RCS file: /cvs/ports/lang/quickjs/distinfo,v
diff -u -p -u -r1.3 distinfo
--- lang/quickjs/distinfo 30 May 2024 18:05:13 -0000 1.3
+++ lang/quickjs/distinfo 6 Nov 2025 03:56:39 -0000
@@ -1,2 +1,2 @@
-SHA256 (quickjs-2024-01-13.tar.xz) = PEv4+JW/pUvrSGyNEhgRJ3Hs/FrDvhA2hR70FWghLgM=
-SIZE (quickjs-2024-01-13.tar.xz) = 765800
+SHA256 (quickjs-2025-09-13.tar.xz) = bx8yKuo7s6kIWNuFyf5xcBP95N99/K/i9X549btLSgw=
+SIZE (quickjs-2025-09-13.tar.xz) = 595964
Index: lang/quickjs/pkg/PLIST
===================================================================
RCS file: /cvs/ports/lang/quickjs/pkg/PLIST,v
diff -u -p -u -r1.3 PLIST
--- lang/quickjs/pkg/PLIST 11 Mar 2022 19:29:13 -0000 1.3
+++ lang/quickjs/pkg/PLIST 6 Nov 2025 03:56:48 -0000
@@ -1,6 +1,5 @@
@bin bin/qjs
@bin bin/qjsc
-bin/qjscalc
include/quickjs/
include/quickjs/quickjs-libc.h
include/quickjs/quickjs.h
Index: lang/quickjs/patches/patch-cutils_h
===================================================================
RCS file: lang/quickjs/patches/patch-cutils_h
diff -N lang/quickjs/patches/patch-cutils_h
--- lang/quickjs/patches/patch-cutils_h 11 Mar 2022 19:29:13 -0000 1.2
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,19 +0,0 @@
-Properly detect endianness.
-
-Index: cutils.h
---- cutils.h.orig
-+++ cutils.h
-@@ -28,8 +28,11 @@
- #include <stdlib.h>
- #include <inttypes.h>
-
--/* set if CPU is big endian */
--#undef WORDS_BIGENDIAN
-+#include <endian.h>
-+
-+#if BYTE_ORDER == BIG_ENDIAN
-+#define WORDS_BIGENDIAN
-+#endif
-
- #define likely(x) __builtin_expect(!!(x), 1)
- #define unlikely(x) __builtin_expect(!!(x), 0)
Index: lang/quickjs/patches/patch-Makefile
===================================================================
RCS file: /cvs/ports/lang/quickjs/patches/patch-Makefile,v
diff -u -p -u -r1.4 patch-Makefile
--- lang/quickjs/patches/patch-Makefile 30 May 2024 18:05:13 -0000 1.4
+++ lang/quickjs/patches/patch-Makefile 6 Nov 2025 03:57:28 -0000
@@ -1,40 +1,34 @@
Remove hardcoded -O2
Use default ar
-Don't use LTO
Remove warning clang doesn't understand
Remove -ldl
+Remove hello_module
Index: Makefile
--- Makefile.orig
+++ Makefile
-@@ -28,13 +28,14 @@ endif
- # Windows cross compilation from Linux
- #CONFIG_WIN32=y
- # use link time optimization (smaller and faster executables but slower build)
--CONFIG_LTO=y
-+#CONFIG_LTO=y
+@@ -37,8 +37,9 @@ endif
+ #CONFIG_LTO=y
# consider warnings as errors (for development)
#CONFIG_WERROR=y
- # force 32 bit build for some utilities
+ # force 32 bit build on x86_64
#CONFIG_M32=y
# cosmopolitan build (see https://github.com/jart/cosmopolitan)
#CONFIG_COSMO=y
+CONFIG_DEFAULT_AR=y
- # installation directory
- PREFIX?=/usr/local
-@@ -98,8 +99,8 @@ else ifdef CONFIG_COSMO
+@@ -127,8 +127,8 @@ else ifdef CONFIG_COSMO
else
HOST_CC=gcc
CC=$(CROSS_PREFIX)gcc
- CFLAGS+=-g -Wall -MMD -MF $(OBJDIR)/$(@F).d
-- CFLAGS += -Wno-array-bounds -Wno-format-truncation
+- CFLAGS += -Wno-array-bounds -Wno-format-truncation -Wno-infinite-recursion
+ CFLAGS+=-Wall -MMD -MF $(OBJDIR)/$(@F).d
+ CFLAGS += -Wno-array-bounds
ifdef CONFIG_LTO
AR=$(CROSS_PREFIX)gcc-ar
else
-@@ -122,7 +123,7 @@ endif
+@@ -160,7 +160,7 @@ endif
CFLAGS+=$(DEFINES)
CFLAGS_DEBUG=$(CFLAGS) -O0
CFLAGS_SMALL=$(CFLAGS) -Os
@@ -43,16 +37,27 @@ Index: Makefile
CFLAGS_NOLTO:=$(CFLAGS_OPT)
ifdef CONFIG_COSMO
LDFLAGS+=-s # better to strip by default
-@@ -194,10 +195,10 @@ ifdef CONFIG_BIGNUM
- QJS_OBJS+=$(OBJDIR)/qjscalc.o
- endif
+@@ -229,1 +229,1 @@ ifeq ($(CROSS_PREFIX),)
+-PROGS+=examples/hello_module
++#PROGS+=examples/hello_module
+@@ -244,9 +244,9 @@ endif
+ QJS_OBJS=$(OBJDIR)/qjs.o $(OBJDIR)/repl.o $(QJS_LIB_OBJS)
-HOST_LIBS=-lm -ldl -lpthread
+HOST_LIBS=-lm -lpthread
- LIBS=-lm
+ LIBS=-lm -lpthread
ifndef CONFIG_WIN32
--LIBS+=-ldl -lpthread
+-LIBS+=-ldl
+LIBS+=-lpthread
endif
LIBS+=$(EXTRA_LIBS)
+
+@@ -394,8 +394,1 @@ # examples
+-# example of static JS compilation with modules
+-HELLO_MODULE_SRCS=examples/hello_module.js
+-HELLO_MODULE_OPTS=-fno-string-normalize -fno-map -fno-typedarray \
+- -fno-typedarray -fno-regexp -fno-json -fno-eval -fno-proxy \
+- -fno-date -m
+-examples/hello_module: $(QJSC) libquickjs$(LTOEXT).a $(HELLO_MODULE_SRCS)
+- $(QJSC) $(HELLO_MODULE_OPTS) -o $@ $(HELLO_MODULE_SRCS)
Index: lang/quickjs/patches/patch-qjs_c
===================================================================
RCS file: /cvs/ports/lang/quickjs/patches/patch-qjs_c,v
diff -u -p -u -r1.4 patch-qjs_c
--- lang/quickjs/patches/patch-qjs_c 30 May 2024 18:05:13 -0000 1.4
+++ lang/quickjs/patches/patch-qjs_c 6 Nov 2025 03:57:44 -0000
@@ -1,7 +1,7 @@
Index: qjs.c
--- qjs.c.orig
+++ qjs.c
-@@ -152,7 +152,7 @@ static size_t js_trace_malloc_usable_size(const void *
+@@ -142,7 +142,7 @@ static size_t js_trace_malloc_usable_size(const void *
return malloc_usable_size((void *)ptr);
#else
/* change this to `return 0;` if compilation fails */
Index: lang/quickjs/patches/patch-qjsc_c
===================================================================
RCS file: /cvs/ports/lang/quickjs/patches/patch-qjsc_c,v
diff -u -p -u -r1.4 patch-qjsc_c
--- lang/quickjs/patches/patch-qjsc_c 30 May 2024 18:05:13 -0000 1.4
+++ lang/quickjs/patches/patch-qjsc_c 6 Nov 2025 03:57:54 -0000
@@ -3,11 +3,11 @@ Remove -ldl
Index: qjsc.c
--- qjsc.c.orig
+++ qjsc.c
-@@ -449,7 +449,6 @@ static int output_executable(const char *out_filename,
+@@ -502,7 +502,6 @@ static int output_executable(const char *out_filename,
lib_dir, bn_suffix, lto_suffix);
*arg++ = libjsname;
*arg++ = "-lm";
- *arg++ = "-ldl";
*arg++ = "-lpthread";
*arg = NULL;
-
+
Index: lang/quickjs/patches/patch-quickjs-libc_c
===================================================================
RCS file: /cvs/ports/lang/quickjs/patches/patch-quickjs-libc_c,v
diff -u -p -u -r1.3 patch-quickjs-libc_c
--- lang/quickjs/patches/patch-quickjs-libc_c 11 Mar 2022 19:29:13 -0000 1.3
+++ lang/quickjs/patches/patch-quickjs-libc_c 6 Nov 2025 03:58:16 -0000
@@ -1,7 +1,7 @@
Index: quickjs-libc.c
--- quickjs-libc.c.orig
+++ quickjs-libc.c
-@@ -55,6 +55,11 @@ typedef sig_t sighandler_t;
+@@ -62,5 +62,10 @@ typedef sig_t sighandler_t;
#endif
#endif /* __APPLE__ */
@@ -12,4 +12,3 @@ Index: quickjs-libc.c
+
#endif
- #if !defined(_WIN32)
Index: lang/quickjs/patches/patch-quickjs_c
===================================================================
RCS file: /cvs/ports/lang/quickjs/patches/patch-quickjs_c,v
diff -u -p -u -r1.4 patch-quickjs_c
--- lang/quickjs/patches/patch-quickjs_c 30 May 2024 18:05:13 -0000 1.4
+++ lang/quickjs/patches/patch-quickjs_c 6 Nov 2025 03:58:26 -0000
@@ -1,7 +1,7 @@
Index: quickjs.c
--- quickjs.c.orig
+++ quickjs.c
-@@ -1705,7 +1705,7 @@ static size_t js_def_malloc_usable_size(const void *pt
+@@ -1675,7 +1675,7 @@ static size_t js_def_malloc_usable_size(const void *pt
return malloc_usable_size((void *)ptr);
#else
/* change this to `return 0;` if compilation fails */
Index: lang/quickjs/patches/patch-tests_test_builtin_js
===================================================================
RCS file: /cvs/ports/lang/quickjs/patches/patch-tests_test_builtin_js,v
diff -u -p -u -r1.4 patch-tests_test_builtin_js
--- lang/quickjs/patches/patch-tests_test_builtin_js 30 May 2024 18:05:13 -0000 1.4
+++ lang/quickjs/patches/patch-tests_test_builtin_js 6 Nov 2025 03:58:38 -0000
@@ -6,22 +6,25 @@ Fix the Float32Array test on big-endian
Index: tests/test_builtin.js
--- tests/test_builtin.js.orig
+++ tests/test_builtin.js
-@@ -336,12 +336,12 @@ function test_number()
- assert(Number.isNaN(Number("-")));
- assert(Number.isNaN(Number("\x00a")));
-
+@@ -384,13 +384,13 @@ function test_number()
+ assert((1-2**-53).toString(12), "0.bbbbbbbbbbbbbba");
+ assert((1000000000000000128).toString(), "1000000000000000100");
+ assert((1000000000000000128).toFixed(0), "1000000000000000128");
- assert((25).toExponential(0), "3e+1");
- assert((-25).toExponential(0), "-3e+1");
- assert((2.5).toPrecision(1), "3");
- assert((-2.5).toPrecision(1), "-3");
+- assert((25).toPrecision(1) === "3e+1");
- assert((1.125).toFixed(2), "1.13");
- assert((-1.125).toFixed(2), "-1.13");
+// assert((25).toExponential(0), "3e+1");
+// assert((-25).toExponential(0), "-3e+1");
+// assert((2.5).toPrecision(1), "3");
+// assert((-2.5).toPrecision(1), "-3");
++// assert((25).toPrecision(1) === "3e+1");
+// assert((1.125).toFixed(2), "1.13");
+// assert((-1.125).toFixed(2), "-1.13");
- }
+ assert((0.5).toFixed(0), "1");
+ assert((-0.5).toFixed(0), "-1");
+ assert((-1e-10).toFixed(0), "-0");
- function test_eval2()
Index: lang/quickjs/patches/patch-tests_test_std_js
===================================================================
RCS file: lang/quickjs/patches/patch-tests_test_std_js
diff -N lang/quickjs/patches/patch-tests_test_std_js
--- lang/quickjs/patches/patch-tests_test_std_js 30 May 2024 18:05:13 -0000 1.3
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,18 +0,0 @@
-This test waits forever if the process ignores SIGQUIT.
-
-Index: tests/test_std.js
---- tests/test_std.js.orig
-+++ tests/test_std.js
-@@ -253,10 +253,10 @@ function test_os_exec()
-
- pid = os.exec(["cat"], { block: false } );
- assert(pid >= 0);
-- os.kill(pid, os.SIGQUIT);
-+ os.kill(pid, os.SIGTERM);
- [ret, status] = os.waitpid(pid, 0);
- assert(ret, pid);
-- assert(status & 0x7f, os.SIGQUIT);
-+ assert(status & 0x7f, os.SIGTERM);
- }
-
- function test_timer()