Bug 290509 - www/node24: link errors after ef4c02d2310d
Summary: www/node24: link errors after ef4c02d2310d
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: --- Affects Only Me
Assignee: Po-Chuan Hsieh
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-10-25 14:11 UTC by Dimitry Andric
Modified: 2025-11-20 23:24 UTC (History)
9 users (show)

See Also:
bugzilla: maintainer-feedback? (sunpoet)


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dimitry Andric freebsd_committer freebsd_triage 2025-10-25 14:11:36 UTC
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.
Comment 1 Dimitry Andric freebsd_committer freebsd_triage 2025-10-25 14:16:07 UTC
Looks like databases/sqlite3 needs to have the SESSION option enabled to install the sqlite3session.h header, and export the sqlite3session_* functions.
Comment 2 Martin Birgmeier 2025-10-25 16:06:24 UTC
Indeed, after enabling the SESSION option in sqlite3, node24 compiles.

-- Martin
Comment 3 Po-Chuan Hsieh freebsd_committer freebsd_triage 2025-10-25 19:03:20 UTC
(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.
Comment 4 commit-hook freebsd_committer freebsd_triage 2025-10-25 19:28:14 UTC
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(-)
Comment 5 commit-hook freebsd_committer freebsd_triage 2025-10-25 19:28:16 UTC
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(-)
Comment 6 Dimitry Andric freebsd_committer freebsd_triage 2025-10-25 22:54:09 UTC
Works for me, thanks!
Comment 7 Po-Chuan Hsieh freebsd_committer freebsd_triage 2025-10-27 20:56:42 UTC
(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.
Comment 8 commit-hook freebsd_committer freebsd_triage 2025-11-11 12:16:17 UTC
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(-)
Comment 9 commit-hook freebsd_committer freebsd_triage 2025-11-11 12:16:19 UTC
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(-)
Comment 10 commit-hook freebsd_committer freebsd_triage 2025-11-11 12:16:20 UTC
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(-)
Comment 11 Harald Schmalzbauer 2025-11-13 20:10:53 UTC
(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!
Comment 12 Koichiro Iwao freebsd_committer freebsd_triage 2025-11-14 12:13:18 UTC
(In reply to Harald Schmalzbauer from comment #11)

make rmconfig with databases/sqlite3 did the trick, thank you!
Comment 13 John Hein 2025-11-18 01:30:54 UTC
(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).
Comment 14 Matt Kempe 2025-11-20 23:24:18 UTC
(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).