gnucash stable: Multiple changes pushed

John Ralls jralls at code.gnucash.org
Tue Aug 19 14:42:53 EDT 2025


Updated	 via  https://github.com/Gnucash/gnucash/commit/5f701785 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/4c81bc3e (commit)
	 via  https://github.com/Gnucash/gnucash/commit/54664359 (commit)
	from  https://github.com/Gnucash/gnucash/commit/deded468 (commit)



commit 5f7017854b663b00c43ae5beca6ffaa26af43be6
Author: John Ralls <jralls at ceridwen.us>
Date:   Mon Aug 18 15:12:23 2025 -0700

    Specialize get_row_value_from_object for int64_t.
    
    So that it doesn't try to pass the value in a pointer. That comes out badly on 32-bit systems.

diff --git a/libgnucash/backend/sql/gnc-sql-column-table-entry.cpp b/libgnucash/backend/sql/gnc-sql-column-table-entry.cpp
index 4d3ad94850..a6e0d7ba17 100644
--- a/libgnucash/backend/sql/gnc-sql-column-table-entry.cpp
+++ b/libgnucash/backend/sql/gnc-sql-column-table-entry.cpp
@@ -48,7 +48,6 @@ set_autoinc_id (void* object, void* item)
     // Nowhere to put the ID
 }
 
-
 QofAccessFunc
 GncSqlColumnTableEntry::get_getter (QofIdTypeConst obj_name) const noexcept
 {
@@ -257,6 +256,25 @@ GncSqlColumnTableEntryImpl<CT_INT64>::add_to_table(ColVec& vec) const noexcept
     vec.emplace_back(std::move(info));
 }
 
+template<> gint64
+GncSqlColumnTableEntry::get_row_value_from_object<int64_t>(QofIdTypeConst obj_name,
+                                                               const void* pObject) const
+{
+    g_return_val_if_fail(obj_name != nullptr && pObject != nullptr,
+                         INT64_C(0));
+    int64_t result = INT64_C(0);
+    if (m_gobj_param_name != nullptr)
+        g_object_get(const_cast<void*>(pObject), m_gobj_param_name,
+                     &result, nullptr);
+    else
+    {
+        auto getter = (Int64AccessFunc)get_getter(obj_name);
+        if (getter != nullptr)
+            result = (getter)(const_cast<void*>(pObject));
+    }
+    return result;
+}
+
 template<> void
 GncSqlColumnTableEntryImpl<CT_INT64>::add_to_query(QofIdTypeConst obj_name,
                                                    const gpointer pObject,

commit 4c81bc3ea3c249025da43a85384bbffd4ebe9a5a
Author: John Ralls <jralls at ceridwen.us>
Date:   Mon Aug 18 15:10:12 2025 -0700

    [WIN32]Fix path problems prevneting test-backend-dbi from working.

diff --git a/libgnucash/backend/dbi/test/CMakeLists.txt b/libgnucash/backend/dbi/test/CMakeLists.txt
index 9e119c8b5b..4474a3edcb 100644
--- a/libgnucash/backend/dbi/test/CMakeLists.txt
+++ b/libgnucash/backend/dbi/test/CMakeLists.txt
@@ -39,9 +39,24 @@ if (WITH_SQL)
   gnc_add_test(test-backend-dbi "${test_dbi_backend_SOURCES}"
     BACKEND_DBI_TEST_INCLUDE_DIRS BACKEND_DBI_TEST_LIBS
   )
+  if (DEFINED ENV{TMPDIR})
+    set(temp_dir "$ENV{TMPDIR}")
+  elseif (DEFINED ENV{TMP})
+    set(temp_dir "$ENV{TMP}")
+  elseif (DEFINED ENV{TEMP})
+    set(temp_dir "$ENV{TEMP}")
+  else()
+    set(temp_dir "${CMAKE_TOP_BUILD_DIR}/tmp")
+    file(MAKE_DIRECTORY ${temp_dir})
+  endif()
+
+  if (MINGW64)
+    string(REGEX REPLACE "\\\\" "/" temp_dir ${temp_dir})
+  endif()
 
   target_compile_definitions(test-backend-dbi PRIVATE
     DBI_TEST_XML_FILENAME=\"${CMAKE_CURRENT_SOURCE_DIR}/test-dbi.xml\"
+    TEMPDIR=\"${temp_dir}\"
     G_LOG_DOMAIN=\"gnc.backend.dbi\"
   )
 endif()
diff --git a/libgnucash/backend/dbi/test/test-backend-dbi-basic.cpp b/libgnucash/backend/dbi/test/test-backend-dbi-basic.cpp
index 8923f74f77..8ba7ce591e 100644
--- a/libgnucash/backend/dbi/test/test-backend-dbi-basic.cpp
+++ b/libgnucash/backend/dbi/test/test-backend-dbi-basic.cpp
@@ -83,6 +83,17 @@ typedef struct
     GSList* hdlrs;
 } Fixture;
 
+
+static char*
+normalize_path(char* path)
+{
+    g_return_val_if_fail(path, nullptr);
+    auto rv = gnc_uri_normalize_uri (path, FALSE);
+    g_free (path);
+    return rv;
+}
+
+
 static void
 setup (Fixture* fixture, gconstpointer pData)
 {
@@ -94,14 +105,17 @@ setup (Fixture* fixture, gconstpointer pData)
      * prevents creating the lock file. Force the session to get
      * around that.
      */
-    qof_session_begin (fixture->session, DBI_TEST_XML_FILENAME,
+    qof_session_begin (fixture->session,
+                       normalize_path (g_strdup (DBI_TEST_XML_FILENAME)),
                        SESSION_BREAK_LOCK);
     g_assert_cmpint (qof_session_get_error (fixture->session), == ,
                      ERR_BACKEND_NO_ERR);
     qof_session_load (fixture->session, NULL);
 
     if (g_strcmp0 (url, "sqlite3") == 0)
-        fixture->filename = g_strdup_printf ("/tmp/test-sqlite-%d", getpid ());
+        fixture->filename =
+            normalize_path (g_strdup_printf (TEMPDIR "/test-sqlite-%d",
+                                                    getpid ()));
     else
         fixture->filename = NULL;
 }
@@ -158,7 +172,9 @@ setup_memory (Fixture* fixture, gconstpointer pData)
 
     fixture->session = session;
     if (g_strcmp0 (url, "sqlite3") == 0)
-        fixture->filename = g_strdup_printf ("/tmp/test-sqlite-%d", getpid ());
+        fixture->filename =
+            normalize_path (g_strdup_printf (TEMPDIR "/test-sqlite-%d",
+                                                    getpid ()));
     else
         fixture->filename = NULL;
 }
@@ -237,7 +253,9 @@ setup_business (Fixture* fixture, gconstpointer pData)
 
     fixture->session = session;
     if (g_strcmp0 (url, "sqlite3") == 0)
-        fixture->filename = g_strdup_printf ("/tmp/test-sqlite-%d", getpid ());
+        fixture->filename =
+            normalize_path (g_strdup_printf (TEMPDIR "/test-sqlite-%d",
+                                                    getpid ()));
     else
         fixture->filename = NULL;
 }

commit 54664359dc4dd18557e0cbecc7f00cf0a000f853
Author: John Ralls <jralls at ceridwen.us>
Date:   Tue Jul 15 15:11:33 2025 -0700

    Fix building tests on Win32.
    
    They don't pass, but at least they build and sort of run.

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9db2b6b6e3..10d9609e0e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -204,8 +204,11 @@ if (WIN32)
   set(REGEX_LDFLAGS "-L${REGEX_LIB_PATH} -lregex")
   #set(LIBXSLT_INCLUDE_DIR ${CMAKE_PREFIX_PATH}/libxslt/include)
   #set(LIBXSLT_XSLTPROC_EXECUTABLE ${CMAKE_PREFIX_PATH}/libxslt/bin/xsltproc)
-#Prevent creating a console window on startup and harden the executable.
+  #Prevent creating a console window on startup and harden the executable.
   set(CMAKE_EXE_LINKER_FLAGS "-mwindows -Wl,--nxcompat -Wl,--dynamicbase")
+  #Find the winsock2 library
+  find_library(WINSOCK_LIB wsock32)
+  find_library(WS2_LIB ws2_32)
 endif()
 
 find_package(Threads REQUIRED)
diff --git a/common/cmake_modules/GncAddTest.cmake b/common/cmake_modules/GncAddTest.cmake
index 6f62f32480..629bbf8010 100644
--- a/common/cmake_modules/GncAddTest.cmake
+++ b/common/cmake_modules/GncAddTest.cmake
@@ -100,6 +100,9 @@ function(gnc_add_test _TARGET _SOURCE_FILES TEST_INCLUDE_VAR_NAME TEST_LIBS_VAR_
   endif()
   add_executable(${_TARGET} EXCLUDE_FROM_ALL ${_SOURCE_FILES})
   target_link_libraries(${_TARGET} PRIVATE ${TEST_LIBS})
+if (MINGW)
+    target_link_options(${_TARGET} PRIVATE -mconsole)
+endif()
   target_include_directories(${_TARGET} PRIVATE ${TEST_INCLUDE_DIRS})
   set_tests_properties(${_TARGET} PROPERTIES ENVIRONMENT "${ENVVARS}$<$<CONFIG:Asan>:;ASAN_OPTIONS=${ASAN_TEST_OPTIONS}>")
   add_dependencies(testbuild ${_TARGET})
diff --git a/gnucash/import-export/test/CMakeLists.txt b/gnucash/import-export/test/CMakeLists.txt
index 0c9b34dab2..0c1859462f 100644
--- a/gnucash/import-export/test/CMakeLists.txt
+++ b/gnucash/import-export/test/CMakeLists.txt
@@ -42,6 +42,7 @@ set(gtest_import_backend_INCLUDE_DIRS
   ${CMAKE_SOURCE_DIR}/libgnucash/engine/mocks
   ${GTEST_INCLUDE_DIR}
   ${GMOCK_INCLUDE_DIR}
+  ${CMAKE_SOURCE_DIR}/borrowed/libc # for strptime.h
 )
 
 set(gtest_import_backend_LIBS
@@ -73,8 +74,14 @@ set(gtest_import_backend_SOURCES
   ${CMAKE_SOURCE_DIR}/libgnucash/engine/gnc-datetime.cpp
   ${CMAKE_SOURCE_DIR}/libgnucash/engine/gnc-timezone.cpp
   ${CMAKE_SOURCE_DIR}/libgnucash/core-utils/gnc-locale-utils.cpp
+  $<$<BOOL:${WIN32}>:${CMAKE_SOURCE_DIR}/libgnucash/engine/qof-win32.cpp>
+  $<$<BOOL:${WIN32}>:${CMAKE_SOURCE_DIR}/borrowed/libc/strptime.c>
 )
 
+if (WIN32)
+  add_definitions(-DOS_WIN32)
+endif()
+
 gnc_add_test(test-import-backend "${gtest_import_backend_SOURCES}"
   gtest_import_backend_INCLUDE_DIRS gtest_import_backend_LIBS)
 
diff --git a/libgnucash/app-utils/test/CMakeLists.txt b/libgnucash/app-utils/test/CMakeLists.txt
index b2da73c39c..c8143a333e 100644
--- a/libgnucash/app-utils/test/CMakeLists.txt
+++ b/libgnucash/app-utils/test/CMakeLists.txt
@@ -47,7 +47,10 @@ set(test_gnc_quotes_LIBS
         ${Boost_LOCALE_LIBRARY}
         ${Boost_PROPERTY_TREE_LIBRARY}
         ${Boost_SYSTEM_LIBRARY}
-        )
+        $<$<BOOL:${WIN32}>:${WINSOCK_LIB}>
+        $<$<BOOL:${WIN32}>:${WS2_LIB}>
+      )
+
 gnc_add_test(test-gnc-quotes "${test_gnc_quotes_SOURCES}" test_gnc_quotes_INCLUDES test_gnc_quotes_LIBS
         "GTEST_FILTER=-GncQuotesTest.online_wiggle")
 
diff --git a/libgnucash/backend/dbi/test/CMakeLists.txt b/libgnucash/backend/dbi/test/CMakeLists.txt
index efb193af04..9e119c8b5b 100644
--- a/libgnucash/backend/dbi/test/CMakeLists.txt
+++ b/libgnucash/backend/dbi/test/CMakeLists.txt
@@ -9,7 +9,16 @@ set(BACKEND_DBI_TEST_INCLUDE_DIRS
   ${CMAKE_SOURCE_DIR}/common/test-core
   ${LIBDBI_INCLUDE_PATH}
 )
-set(BACKEND_DBI_TEST_LIBS gnc-backend-sql gnc-engine gnc-test-engine test-core ${Boost_REGEX_LIBRARY} ${LIBDBI_LIBRARY})
+set(BACKEND_DBI_TEST_LIBS
+  gnc-backend-sql
+  gnc-engine
+  gnc-test-engine
+  test-core
+  ${Boost_REGEX_LIBRARY}
+  ${LIBDBI_LIBRARY}
+  $<$<BOOL:${WIN32}>:${WINSOCK_LIB}>
+  $<$<BOOL:${WIN32}>:${WS2_LIB}>
+)
 
 set(test_dbi_backend_SOURCES
   test-backend-dbi.cpp
@@ -26,7 +35,7 @@ set(test_dbi_backend_HEADERS test-dbi-business-stuff.h test-dbi-stuff.h)
 set_dist_list(test_dbi_backend_DIST ${test_dbi_backend_SOURCES} ${test_dbi_backend_HEADERS} test-dbi.xml CMakeLists.txt )
 
 # This test does not work on Win32
-if (WITH_SQL AND NOT WIN32)
+if (WITH_SQL)
   gnc_add_test(test-backend-dbi "${test_dbi_backend_SOURCES}"
     BACKEND_DBI_TEST_INCLUDE_DIRS BACKEND_DBI_TEST_LIBS
   )
diff --git a/libgnucash/backend/xml/test/gtest-xml-contents.cpp b/libgnucash/backend/xml/test/gtest-xml-contents.cpp
index d2ddcf02e7..d5db6912a1 100644
--- a/libgnucash/backend/xml/test/gtest-xml-contents.cpp
+++ b/libgnucash/backend/xml/test/gtest-xml-contents.cpp
@@ -96,7 +96,7 @@ TEST_F(LoadFile, LoadAndVerifyKVP)
 
     // THE FOLLOWING TESTS BANK ACCOUNT
     const auto& bank_splitlist = xaccAccountGetSplits (bank_acct);
-    ASSERT_EQ (bank_splitlist.size(), static_cast<uint>(4));
+    ASSERT_EQ (bank_splitlist.size(), static_cast<uint32_t>(4));
 
     // first split is from a regular transaction
     auto bank_reg_split{bank_splitlist[0]};
@@ -168,7 +168,7 @@ TEST_F(LoadFile, LoadAndVerifyKVP)
     ASSERT_TRUE (AR_acct != nullptr);
 
     const auto& AR_splitlist{xaccAccountGetSplits (AR_acct)};
-    ASSERT_EQ (AR_splitlist.size(), static_cast<uint>(3));
+    ASSERT_EQ (AR_splitlist.size(), static_cast<uint32_t>(3));
 
     // 1st split is invoice posting txn
     auto inv_post_txn{xaccSplitGetParent(AR_splitlist[0])};
@@ -195,7 +195,7 @@ TEST_F(LoadFile, LoadAndVerifyKVP)
     ASSERT_TRUE (close_acct != nullptr);
 
     const auto& close_splitlist{xaccAccountGetSplits (close_acct)};
-    ASSERT_EQ (close_splitlist.size(), static_cast<uint>(1));
+    ASSERT_EQ (close_splitlist.size(), static_cast<uint32_t>(1));
 
     // 3rd split is a closing txn
     auto closing_txn{xaccSplitGetParent(close_splitlist[0])};



Summary of changes:
 CMakeLists.txt                                     |  5 +++-
 common/cmake_modules/GncAddTest.cmake              |  3 +++
 gnucash/import-export/test/CMakeLists.txt          |  7 ++++++
 libgnucash/app-utils/test/CMakeLists.txt           |  5 +++-
 libgnucash/backend/dbi/test/CMakeLists.txt         | 28 ++++++++++++++++++++--
 .../backend/dbi/test/test-backend-dbi-basic.cpp    | 26 ++++++++++++++++----
 .../backend/sql/gnc-sql-column-table-entry.cpp     | 20 +++++++++++++++-
 libgnucash/backend/xml/test/gtest-xml-contents.cpp |  6 ++---
 8 files changed, 88 insertions(+), 12 deletions(-)



More information about the gnucash-changes mailing list