ports ef4c02d2310d ("www/node24: Use databases/sqlite3 and www/llhttp instead of the bundled one") appears to lead to linker errors, similar to: c++ -o /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/embedtest -pthread -rdynamic -Wl,--export-dynamic -Wl,-z,noexecstack -Wl,--whole-archive /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/tools/v8_gypfiles/libv8_snapshot.a -Wl,--no-whole-archive -Wl,-z,relro -Wl,-z,now -m64 -Wl,--start-group /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/embedtest/src/node_snapshot_stub.o /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/embedtest/test/embedding/embedtest.o /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/deps/histogram/libhistogram.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/deps/nbytes/libnbytes.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/tools/v8_gypfiles/libv8_snapshot.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/tools/v8_gypfiles/libv8_libplatform.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/deps/uvwasi/libuvwasi.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/deps/ada/libada.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/tools/v8_gypfiles/libsimdutf.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/tools/v8_gypfiles/libabseil.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/deps/inspector_protocol/libcrdtp.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/deps/ncrypto/libncrypto.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/tools/v8_gypfiles/libv8_base_without_compiler.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/tools/v8_gypfiles/libv8_libbase.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/tools/v8_gypfiles/libv8_zlib.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/tools/v8_gypfiles/libhighway.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/tools/v8_gypfiles/libv8_compiler.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/tools/v8_gypfiles/libv8_initializers.a /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/tools/v8_gypfiles/libv8_initializers_slow.a -L/lib -lz -L/usr/local/lib -lllhttp -luv -lsimdjson -lbrotlidec -lbrotlienc -lcares -lnghttp2 -lnghttp3 -lngtcp2 -lsqlite3 -lzstd -lcrypto -lssl -licui18n -licuuc -lutil -lkvm -L/usr/local/lib -lexecinfo -Wl,--end-group ld: error: undefined symbol: sqlite3session_delete >>> referenced by node_sqlite.cc >>> /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode/src/node_sqlite.o:(node::sqlite::DatabaseSync::DeleteSessions()) in archive /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode.a >>> referenced by node_sqlite.cc >>> /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode/src/node_sqlite.o:(node::sqlite::DatabaseSync::~DatabaseSync()) in archive /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode.a >>> referenced by node_sqlite.cc >>> /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode/src/node_sqlite.o:(node::sqlite::DatabaseSync::Close(v8::FunctionCallbackInfo<v8::Value> const&)) in archive /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode.a >>> referenced 1 more times ld: error: undefined symbol: sqlite3session_create >>> referenced by node_sqlite.cc >>> /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode/src/node_sqlite.o:(node::sqlite::DatabaseSync::CreateSession(v8::FunctionCallbackInfo<v8::Value> const&)) in archive /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode.a ld: error: undefined symbol: sqlite3session_attach >>> referenced by node_sqlite.cc >>> /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode/src/node_sqlite.o:(node::sqlite::DatabaseSync::CreateSession(v8::FunctionCallbackInfo<v8::Value> const&)) in archive /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode.a ld: error: undefined symbol: sqlite3changeset_apply >>> referenced by node_sqlite.cc >>> /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode/src/node_sqlite.o:(node::sqlite::DatabaseSync::ApplyChangeset(v8::FunctionCallbackInfo<v8::Value> const&)) in archive /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode.a ld: error: undefined symbol: sqlite3session_changeset >>> referenced by node_sqlite.cc >>> /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode/src/node_sqlite.o:(void node::sqlite::Session::Changeset<&sqlite3session_changeset>(v8::FunctionCallbackInfo<v8::Value> const&)) in archive /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode.a ld: error: undefined symbol: sqlite3session_patchset >>> referenced by node_sqlite.cc >>> /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode/src/node_sqlite.o:(void node::sqlite::Session::Changeset<&sqlite3session_patchset>(v8::FunctionCallbackInfo<v8::Value> const&)) in archive /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/obj.target/libnode.a c++: error: linker command failed with exit code 1 (use -v to see invocation) gmake[1]: *** [embedtest.target.mk:198: /wrkdirs/usr/ports/www/node24/work/node-v24.10.0/out/Release/embedtest] Error 1 I've not yet investigated further.
Looks like databases/sqlite3 needs to have the SESSION option enabled to install the sqlite3session.h header, and export the sqlite3session_* functions.
Indeed, after enabling the SESSION option in sqlite3, node24 compiles. -- Martin
(In reply to Dimitry Andric from comment #1) You're right. I have session enabled in my databases/sqlite3 which is pending for a PR. I'll revert the sqlite3 part now. Thanks.
A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/ports/commit/?id=4954d2bd39a5de491c56c64c80dd9a6700a8aeb4 commit 4954d2bd39a5de491c56c64c80dd9a6700a8aeb4 Author: Po-Chuan Hsieh <sunpoet@FreeBSD.org> AuthorDate: 2025-10-25 19:10:22 +0000 Commit: Po-Chuan Hsieh <sunpoet@FreeBSD.org> CommitDate: 2025-10-25 19:10:22 +0000 www/node24: Use bundled sqlite3 - Bump PORTREVISION for dependency and package change nodejs 22+ needs sqlite3 with SESSION enabled. PR: 290509 Reported by: dim www/node24/Makefile | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/ports/commit/?id=eba3ef23d0e01be034d635576c80574f9e8ce68f commit eba3ef23d0e01be034d635576c80574f9e8ce68f Author: Po-Chuan Hsieh <sunpoet@FreeBSD.org> AuthorDate: 2025-10-25 19:10:17 +0000 Commit: Po-Chuan Hsieh <sunpoet@FreeBSD.org> CommitDate: 2025-10-25 19:10:17 +0000 www/node22: Use bundled sqlite3 - Bump PORTREVISION for dependency and package change nodejs 22+ needs sqlite3 with SESSION enabled. PR: 290509 Reported by: dim www/node22/Makefile | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
Works for me, thanks!
(In reply to Po-Chuan Hsieh from comment #3) The databases/sqlite3 patch submitted as bug #290588. I'll re-apply the sqlite3 change to www/node{22,24,25} after SESSION enabled by default. Thanks.
A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/ports/commit/?id=fe26dd975fd90e9851e505f0363efb826b8e6596 commit fe26dd975fd90e9851e505f0363efb826b8e6596 Author: Po-Chuan Hsieh <sunpoet@FreeBSD.org> AuthorDate: 2025-11-11 12:10:11 +0000 Commit: Po-Chuan Hsieh <sunpoet@FreeBSD.org> CommitDate: 2025-11-11 12:10:11 +0000 www/node22: Use databases/sqlite3 instead of the bundled one - Bump PORTREVISION for dependency and package change PR: 290509 www/node22/Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/ports/commit/?id=0d10e93992f3a0ccf00756f75fb590e317fd4c27 commit 0d10e93992f3a0ccf00756f75fb590e317fd4c27 Author: Po-Chuan Hsieh <sunpoet@FreeBSD.org> AuthorDate: 2025-11-11 12:10:14 +0000 Commit: Po-Chuan Hsieh <sunpoet@FreeBSD.org> CommitDate: 2025-11-11 12:10:14 +0000 www/node24: Use databases/sqlite3 instead of the bundled one - Bump PORTREVISION for dependency and package change PR: 290509 www/node24/Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/ports/commit/?id=a6378115b974108e5d6d2e1e71769f60b8aad75d commit a6378115b974108e5d6d2e1e71769f60b8aad75d Author: Po-Chuan Hsieh <sunpoet@FreeBSD.org> AuthorDate: 2025-11-11 12:10:18 +0000 Commit: Po-Chuan Hsieh <sunpoet@FreeBSD.org> CommitDate: 2025-11-11 12:10:18 +0000 www/node25: Use databases/sqlite3 instead of the bundled one - Bump PORTREVISION for dependency and package change PR: 290509 www/node25/Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
(In reply to commit-hook from comment #9) The linker error will hit everybody who previously compiled databases/sqlite3 without having -DBATCH used, because the previous default options are stored permanently. You only changed the preselected default SESSION option for databases/sqlite3, which doesn't override nor warn or reset the previous default. A propter fix would have been to rename the SESSION option so at least for interactive builds, user will see the config dialog and maybe remember they disabled the SESSION2 option - otherwise www/node24 would succeed... No better idea right now, sorry. But I guess the current state will cause lots of build-failures out there... and beginners might not find that dependency chain glitch!
(In reply to Harald Schmalzbauer from comment #11) make rmconfig with databases/sqlite3 did the trick, thank you!
(In reply to Harald Schmalzbauer from comment #11) I [mostly] like the idea of changing a OPTION name (e.g., SESSION -> SESSION2) when the default changes. For those building manually, it forces them to reconsider whether they should accept the new default (which may have been changed for a very good reason). If you just change the option name, however, what's missing (for the ports user) is a way to track what ports require a particular option setting in another port. Now you have to dig into phab / bugzilla / commit history to understand why. That's where having node22, etc., depend on a flavored version - such as database/sqlite@session - can be helpful (whether it is a build-time or run-time requirement).
(In reply to John Hein from comment #13) I wholeheartedly agree about flavors - but there's probably a case for the flavor to be @node, so that subsequent changes to node dependencies don't require a new flavor (sqlite3@icusession.... then sqlite3@icusessionoffset.... and so on).