You could try rebuilding databases/db/v4 with MODTCL_VERSION=8.6 added to the Makefile and see if that helps at all..

--
 Sent from a phone, apologies for poor formatting.

On 21 December 2022 20:52:06 Roger Marsh <r...@rmswch.plus.com> wrote:

On Tue, 20 Dec 2022 12:18:59 -0000 (UTC)
Stuart Henderson <stu.li...@spacehopper.org> wrote:

["Followup-To:" header set to gmane.os.openbsd.misc.]
On 2022-12-19, Stuart Cassoff <3...@bell.net> wrote:
> ------ Original Message ------
>     From: stu.li...@spacehopper.org
>     To: ports@openbsd.org
> Cc: m...@openbsd.org
>     Sent: Monday, December 19, 2022 7:53 AM
>     Subject: Re: Python access to Berkeley DB
>
>           [ moving to ports@, hopefully reply-to will be set correctly
> if
>   I got the gmane/nntp bits right :) ]
>
>   You might possibly be able to kludge around it with some LD_PRELOAD,
>   though tkinter is now built against Tcl 8.6 and the db-tcl package is
>   built against Tcl 8.5 and I don't know if extensions are compatible
>   cross-version.
>
>
> Extensions built against 8.5 should load into 8.6 no problem.

Thanks. I wasn't sure and the tclsh import didn't work for either 8.5 or 8.6
for me.


Thanks for LD_PRELOAD, about which I knew nothing.

The kludge got rid of all but one undefined symbols:

Script started on Tue Dec 20 09:20:33 2022
d630amd64$ ls /usr/local/lib/db4
libdb.a             libdb_cxx.a         libdb_tcl.a         pkgIndex.tcl
libdb.la            libdb_cxx.la        libdb_tcl.la
libdb.so.5.0        libdb_cxx.so.6.0    libdb_tcl.so.6.0
d630amd64$ export LD_PRELOAD=/usr/local/lib/db4/libdb_tcl.so.6.0
d630amd64$ python3.9
Python 3.9.15 (main, Oct 21 2022, 14:01:40)
[Clang 13.0.0 ] on openbsd7
Type "help", "copyright", "credits" or "license" for more information.
import tkinter
tcl = tkinter.Tk(useTk=False)
tcl.tk.call("lappend", "auto_path", "/usr/local/lib/db4")
(<path object: '/usr/local/lib/tcl/tcl8.6'>, '/usr/local/lib/tcl', '/usr/local/lib/db4')
tcl.tk.call("package", "require", "Db_tcl")
python3.9:/usr/local/lib/db4/libdb_tcl.so.6.0: undefined symbol 'Tcl_PkgProvideEx'
ld.so: python3.9: lazy binding failed!
Killed
d630amd64$ exit

Script done on Tue Dec 20 09:24:01 2022

so I tried building from ports, building Python against Tcl/Tk 8.5 because I could see what to change in Makefile.inc with some confidence I was guessing right (8.6 > 8.5 about line 100). Same result, first with package command:

Script started on Tue Dec 20 20:25:17 2022
rack$ export LD_PRELOAD=/usr/local/lib/db4/libdb_tcl.so.6.0
rack$ python3.9
Python 3.9.14 (main, Dec 20 2022, 16:12:25)
[Clang 13.0.0 ] on openbsd7
Type "help", "copyright", "credits" or "license" for more information.
import tkinter
tkinter.TclVersion
8.5
tcl = tkinter.Tk(useTk=False)
tcl.tk.call("lappend", "auto_path", "/usr/local/lib/db4")
(<path object: '/usr/local/lib/tcl/tcl8.5'>, '/usr/local/lib/tcl', '/usr/local/lib/db4')
tcl.tk.call("package", "require", "Db_tcl")
python3.9:/usr/local/lib/db4/libdb_tcl.so.6.0: undefined symbol 'Tcl_PkgProvideEx'
ld.so: python3.9: lazy binding failed!
Killed
rack$ tclsh8.5
% lappend auto_path /usr/local/lib/db4
/usr/local/lib/tcl/tcl8.5 /usr/local/lib/tcl /usr/local/lib/db4
% package require Db_tcl
4.6
% exit
rack$ exit

Script done on Tue Dec 20 20:33:19 2022


And with the load command:

Script started on Wed Dec 21 20:25:22 2022
rack$ tclsh8.5
% load /usr/local/lib/db4/libdb_tcl.so.6.0
% berkdb version -string
Berkeley DB 4.6.21: (September 27, 2007)
% exit
rack$ export LD_PRELOAD=/usr/local/lib/db4/libdb_tcl.so.6.0
rack$ python3.9
Python 3.9.14 (main, Dec 20 2022, 16:12:25)
[Clang 13.0.0 ] on openbsd7
Type "help", "copyright", "credits" or "license" for more information.
import tkinter
tkinter.TclVersion
8.5
tcl = tkinter.Tk(useTk=False)
tcl.tk.call("load", "/usr/local/lib/db4/libdb_tcl.so.6.0")
python3.9:/usr/local/lib/db4/libdb_tcl.so.6.0: undefined symbol 'Tcl_PkgProvideEx'
ld.so: python3.9: lazy binding failed!
Killed
rack$ exit

Script done on Wed Dec 21 20:30:35 2022


Give up on kludge I think.

Roger

Reply via email to