[GNC-dev] Master: Cannot open or save to SQLite3 database

Chris Good goodchris96 at gmail.com
Wed May 6 23:42:33 EDT 2020


Hi John,

cd /home/cgood/gnucash-master/build
cmake -DCMAKE_BUILD_TYPE=debug -G"Eclipse CDT4 - Ninja"
-DCMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT=TRUE
-DCMAKE_INSTALL_PREFIX=../install ../src
as per https://wiki.gnucash.org/wiki/Eclipse#With_CMake_.26_Ninja

repo is /home/cgood/gnucash-master/src

Regards,
Chris Good

-----Original Message-----
From: John Ralls <jralls at ceridwen.us> 
Sent: Thursday, 7 May 2020 3:10 AM
To: Chris Good <goodchris96 at gmail.com>
Cc: gnucash-devel <gnucash-devel at gnucash.org>
Subject: Re: [GNC-dev] Master: Cannot open or save to SQLite3 database

Are you setting CMAKE_PREFIX_PATH on the cmake command line? Better yet,
what's the whole cmake command line that you're using?

Regards,
John Ralls


> On May 5, 2020, at 9:26 PM, Chris Good <goodchris96 at gmail.com> wrote:
> 
> -----Original Message-----
> From: John Ralls <jralls at ceridwen.us>
> Sent: Wednesday, 6 May 2020 1:30 PM
> To: Chris Good <goodchris96 at gmail.com>
> Cc: gnucash-devel <gnucash-devel at gnucash.org>
> Subject: Re: [GNC-dev] Master: Cannot open or save to SQLite3 database
> 
> 
> 
>> On May 5, 2020, at 7:10 PM, Chris Good <goodchris96 at gmail.com> wrote:
>> 
>> -----Original Message-----
>> From: John Ralls <jralls at ceridwen.us>
>> Sent: Wednesday, 6 May 2020 1:59 AM
>> To: Chris Good <goodchris96 at gmail.com>
>> Cc: gnucash-devel <gnucash-devel at gnucash.org>
>> Subject: Re: [GNC-dev] Master: Cannot open or save to SQLite3 
>> database
>> 
>> 
>> 
>>> On May 4, 2020, at 7:53 PM, Chris Good <goodchris96 at gmail.com> wrote:
>>> 
>>> -----Original Message-----
>>> From: John Ralls <jralls at ceridwen.us>
>>> Sent: Tuesday, 5 May 2020 4:28 AM
>>> To: Chris Good <goodchris96 at gmail.com>
>>> Cc: gnucash-devel <gnucash-devel at gnucash.org>
>>> Subject: Re: [GNC-dev] Master: Cannot open or save to SQLite3 
>>> database
>>> 
>>> 
>>> 
>>>> On May 3, 2020, at 10:40 PM, Chris Good <goodchris96 at gmail.com> wrote:
>>>> 
>>>> Hi,
>>>> 
>>>> 
>>>> 
>>>> GnuCash master (as at 29 Apr 2020 fbf7171ab Fix 
>>>> libgnc-app-utils.dylib
>>>> install_name_dir.) on Ubuntu 18.04
>>>> 
>>>> 
>>>> 
>>>> I'm trying to open SQLite3 file
>>>> del-account-cross-currencies-issue.gnucash
>>>> attached to bug 797220.
>>>> 
>>>> 
>>>> 
>>>> But when I try to open SQLite3 file. It says "no suitable backend 
>>>> was
>>> found"
>>>> and if I try to save an xml file, only xml format is available.
>>>> 
>>>> 
>>>> 
>>>> I have built with no options for turning off SQL ie
>>>> 
>>>> 
>>>> 
>>>> Src/CMakeLists.txt:                         WITH_SQL=ON
>>>> 
>>>> 
>>>> 
>>>> I have the following installed
>>>> 
>>>> libdbi-dev                           0.9.0-5
>>>> 
>>>> libdbi1                                 0.9.0-5
>>>> 
>>>> libdbi1-dbg                         0.9.0-5
>>>> 
>>>> libdbd-sqlite3                     0.9.0-5ubuntu2
>>>> 
>>>> 
>>>> 
>>>> When I try to debug, it seems to me:
>>>> 
>>>> 
>>>> 
>>>> In gnucash/libgnucash/backend/dbi/gnc-backend-dbi.cpp
>>>> gnc_module_init_backend_dbi()
>>>> 
>>>> I can see HAVE_LIBDBI_R is set
>>>> 
>>>> 
>>>> 
>>>> num_drivers = dbi_initialize_r (driver_dir, &dbi_instance);
>>>> 
>>>> 
>>>> 
>>>>            returns num_drivers=0 but dbi_instance is no longer null 
>>>> so the code exits before any drivers are registered.
>>>> 
>>>> 
>>>> 
>>>> Any suggestions please?
>>>> 
>>> 
>>> I just built from current master on my Ubuntu-18.04 VM and SQLite3 
>>> is an option in Save As...
>>> 
>>> If dpi_initialize_r returns 0 then that function (a libdbi one) 
>>> didn't find any drivers to initialize. Make sure that GNC_DBD_DIR 
>>> isn't set and in gdb at that dpi_initialize_r call check that 
>>> driver_dir
> is 0.
>>> 
>>> Check that /usr/lib/x86_64-linux-gnu/dbd/lidbdsqlite3.so and
>>> /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 is present.
>>> 
>>> Regards,
>>> John Ralls
>>> 
>>> Hi John,
>>> 
>>> GNC_DBD_DIR=/         is set in build/etc/gnucash/environment
>>> Commenting that out enables SQLite to work.
>>> 
>>> Here are the libraries:
>>> 
>>> /usr/lib/x86_64-linux-gnu/dbd/libdbdpgsql.la
>>> /usr/lib/x86_64-linux-gnu/dbd/libdbdsqlite3.so
>>> /usr/lib/x86_64-linux-gnu/dbd/libdbdmysql.la
>>> /usr/lib/x86_64-linux-gnu/dbd/libdbdpgsql.so
>>> /usr/lib/x86_64-linux-gnu/dbd/libdbdsqlite3.la
>>> /usr/lib/x86_64-linux-gnu/dbd/libdbdmysql.so
>>> 
>>> /usr/lib/x86_64-linux-gnu/libdbi.so.1.1.0
>>> /usr/lib/x86_64-linux-gnu/libdbi.a
>>> /usr/lib/x86_64-linux-gnu/libdbi.so.1
>>> /usr/lib/x86_64-linux-gnu/libdbi.so
>>> 
>>> cmake 3.10.2-1ubuntu2.18.04.1
>>> 
>>> I think the " GNC_DBD_DIR=/" line is added to environment file in 
>>> src/gnucash/CMakeLists.txt :
>>> 
>>> 		  if (LIBDBI_LIBRARY AND LIBDBI_DRIVERS_DIR)
>>> 		    get_filename_component(libdir ${LIBDBI_LIBRARY}
>>> DIRECTORY)
>>> 		    string(FIND ${LIBDBI_DRIVERS_DIR} ${libdir} is_subdir)
>>> 		    if (NOT is_subdir EQUAL 0)
>>> 		      file(APPEND ${BUILD_ENV_FILE_OUT}
>>> "GNC_DBD_DIR=${LIBDBI_DRIVERS_DIR}")
>>> 		    endif()
>>> 		  endif()
>>> 
>>> Before I spend too much time trying to fix this, I am running the 
>>> build environment from within eclipse. Is SQLite supported while 
>>> running from the build or should I "ninja install" and run from there?
>> 
>> Chris,
>> 
>> It should run from the build directory. Misconfiguring GNC_DBD_DIR is 
>> the obvious problem and would break libdbi regardless of whether 
>> GnuCash is installed.
>> 
>> You found half of the LIBDBI_DRIVERS_DIR code; the other half is in 
>> the top-level CMakeLists.txt beginning at line 436 (in master):
>> find_library (LIBDBI_DRIVERS_DIR
>> NAMES dbdmysql dbdpgsql dbdsqlite3 NAMES_PER_DIR  PATH_SUFFIXES dbd 
>> libdbi-drivers/dbd  HINTS LIBDBI_LIBRARY  PATHS GNC_DBD_DIR  DOC 
>> "Libdbi Drivers Directory") If (WITH_SQL)  if (NOT
>> LIBDBI_INCLUDE_PATH)
>>   message (SEND_ERROR "Include file <dbi/dbi.h> was not found - did 
>> you install libdbi0-dev or libdbi-dev?")
>> endif()
>> if (NOT LIBDBI_LIBRARY)
>>   message (SEND_ERROR "Library libdbi was not found")
>> endif()
>> set(HAVE_DBI_DBI_H 1)
>> if (NOT LIBDBI_DRIVERS_DIR)
>>   message (SEND_ERROR "No libdbi drivers found, SQL tests will
>> fail.")
>> else()
>>   get_filename_component(drivers_dir ${LIBDBI_DRIVERS_DIR} DIRECTORY)
>>   set(LIBDBI_DRIVERS_DIR ${drivers_dir} CACHE FILEPATH "Directory 
>> containing the libdbi driver modules." FORCE)
>> endif()
>> endif()
>> 
>> Note that the "found" value of LIBDBI_DRIVERS_DIR gets overwritten in 
>> that last phrase so it might be helpful to insert  message(INFO 
>> "find_library found drivers at $LIBDBI_DRIVERS_DIR") just before the
>> get_filename_component() call.
>> 
>> Regards,
>> John Ralls
>> 
>> Hi John,
>> 
>> The problem is that src/CMakeLists.txt does:
>> set(GNC_DBD_DIR ${CMAKE_PREFIX_LIBDIR}/dbd CACHE PATH "specify 
>> location of libdbi drivers") and CMAKE_PREFIX_LIBDIR is null (and not 
>> used anywhere else...)
>> 
>> I see for mac :
>> file(APPEND ${ENV_FILE_OUT} "GNC_DBD_DIR={SYS_LIB}/dbd\n") but 
>> SYS_LIB is not set in Ubuntu.
>> 
>> What is the functionality we need to cater for?
>> Just using the system dbd libraries and also possibly a special 
>> version of the drivers somewhere in build/lib?
> 
> Chris,
> 
> Don't worry about the MacOS stuff, it doesn't apply to anything else.
> 
> Try changing that
>  set(GNC_DBD_DIR ${CMAKE_PREFIX_LIBDIR}/dbd CACHE PATH to  
> set(GNC_DBD_DIR ${CMAKE_PREFIX_PATH}/lib/dbd CACHE PATH and re-run cmake.
> 
> Regards,
> John Ralls
> 
> Hi John,
> 
> No good. The result of that is GNC_DBD_DIR=/dbd still.
> 
> Regards, Chris Good
> 




More information about the gnucash-devel mailing list