John,
Thanks. That explains why only Windows appears broken.
So, is the intent to use GNC_DBD_DIR on Windows as well or should we fix
the code and not use GNC_DBD_DIR to work around the issue on Mac?
Regards,
Sherlock
On 10/30/25 8:28 AM, John Ralls wrote:
Sherlock,
It doesn’t affect the Mac Bundle because that defines GNC_DBD_DIR to point to
the bundle’s Resources/lib/dbd in the environment file.
Mingw64 doesn’t provide libdbi so it’s built by jhbuild. We set the dbd-driver
directory to the installation prefix,
https://github.com/Gnucash/gnucash-on-windows/blob/668227c9651224bd0a0f9ce87713546ccfca9af8/jhbuildrc.in#L82.
Regards,
John Ralls
On Oct 29, 2025, at 20:02, Sherlock <[email protected]> wrote:
I've been trying to understand why this hasn't been an issue on the other
platforms that have been on libdbi 0.9.1 for sometime. The generic bug was
introduced 2 years ago (commit b011c81). I suspect the issue isn't seen on
Linux where libdbi is installed in the system location or on a Mac build
machine. I think the issue should appear on non-build Macs but, of course, the
issue won't be apparent to a user unless they aren't using the xml format.
Regards,
Sherlock
On 10/29/25 6:54 PM, Sherlock wrote:
I maybe wrong about the c:\libdbi\lib\dbd folder as there are compile time
definition that will override the location which appears to be something like
/mingw32/lib/dbd but that should still typically miss in a typical user's
gnucash installation.
Setting GNC_DBD_DIR to something like C:\Program Files (x86)\gnucash\lib\dbd
should work around the issue.
Regards,
Sherlock
On 10/29/25 4:32 PM, Sherlock wrote:
Hi John,
I suspect the Windows nightly builds have not been properly supporting
databases since libdbi was updated to 0.9.1 on October 5th unless the drivers
are in the c:\libdbi\lib\dbd folder or the folder to which the GNC_DBD_DIR
environment variable is set.
For example, attempt to save as sqlite3.
It appears there is a generic bug in gnc_module_init_backend_dbi() when
HAVE_LIBDBI_R is defined. Specifically, when the initial dbi_initialize_r()
returns no drivers, the dbi_instance variable is still set.
So, instead of:
#if HAVE_LIBDBI_R
if (dbi_instance)
return;
#endif
the code should be:
#if HAVE_LIBDBI_R
if (dbi_instance)
{
dbi_shutdown_r (dbi_instance);
dbi_instance = nullptr;
}
#endif
Regards,
Sherlock
_______________________________________________
gnucash-user mailing list
[email protected]
To update your subscription preferences or to unsubscribe:
https://lists.gnucash.org/mailman/listinfo/gnucash-user
-----
Please remember to CC this list on all your replies.
You can do this by using Reply-To-List or Reply-All.