From 6fda0321a71a825df8684e90adae24ef86f659af Mon Sep 17 00:00:00 2001 From: John Ralls Date: Fri, 22 Aug 2025 16:17:02 -0700 Subject: [PATCH] Fix path environment for Guile and GncModule tests on Windows. --- common/cmake_modules/GncAddTest.cmake | 123 ++++++++++++---------- libgnucash/gnc-module/test/CMakeLists.txt | 27 +++-- 2 files changed, 83 insertions(+), 67 deletions(-) diff --git a/common/cmake_modules/GncAddTest.cmake b/common/cmake_modules/GncAddTest.cmake index 4d6fa5e770..707e46deeb 100644 --- a/common/cmake_modules/GncAddTest.cmake +++ b/common/cmake_modules/GncAddTest.cmake @@ -1,85 +1,94 @@ function(get_guile_env) - set(_GNC_MODULE_PATH ${LIBDIR_BUILD}:${LIBDIR_BUILD}/gnucash) + set(_gnc_module_path ${LIBDIR_BUILD}:${LIBDIR_BUILD}/gnucash) if (WIN32) - set(_GNC_MODULE_PATH ${CMAKE_BINARY_DIR}/bin) - endif() - set(env "") - list(APPEND env "GNC_UNINSTALLED=yes") - list(APPEND env "GNC_BUILDDIR=${CMAKE_BINARY_DIR}") - if (APPLE) - list(APPEND env "DYLD_LIBRARY_PATH=${_GNC_MODULE_PATH}:$ENV{DYLD_LIBRARY_PATH}") - endif() - if (UNIX) - list(APPEND env "LD_LIBRARY_PATH=${_GNC_MODULE_PATH}:$ENV{LD_LIBRARY_PATH}") + set(_gnc_module_path ${CMAKE_BINARY_DIR}/bin) endif() + set(_relative_site_dir "${CMAKE_BINARY_DIR}/${GUILE_REL_SITEDIR}") + set(_relative_cache_dir "${CMAKE_BINARY_DIR}/${GUILE_REL_SITECCACHEDIR}") + if (MINGW64) set(fpath "") set(path $ENV{PATH}) list(INSERT path 0 ${CMAKE_BINARY_DIR}/bin) - foreach(dir ${path}) - string(REGEX REPLACE "^([A-Za-z]):" "/\\1" dir ${dir}) - string(REGEX REPLACE "\\\\" "/" dir ${dir}) - set(fpath "${fpath}${dir}:") - endforeach(dir) - list(APPEND env "PATH=${fpath}") - set(compiled_path "${CMAKE_BINARY_DIR}/${GUILE_REL_SITECCACHEDIR}") - string(REGEX REPLACE "^([A-Za-z]):" "/\\1" compiled_path ${compiled_path}) - string(REGEX REPLACE "\\\\" "/" compiled_path ${compiled_path}) - list(APPEND env GUILE_LOAD_COMPILED_PATH=${compiled_path}) + if (${GUILE_EFFECTIVE_VERSION} VERSION_LESS 2.2) + foreach(dir ${path}) + make_unix_path(dir) + list(APPEND fpath ${dir}) + endforeach(dir) + make_unix_path_list(fpath) + else() + set(fpath ${path}) + make_win32_path_list(fpath) + endif() endif() - list(APPEND env "GNC_MODULE_PATH=${_GNC_MODULE_PATH}") - list(APPEND env "GUILE=${GUILE_EXECUTABLE}") - set(guile_load_paths "") - list(APPEND guile_load_paths "${CMAKE_BINARY_DIR}/${GUILE_REL_SITEDIR}") - list(APPEND guile_load_paths "${CMAKE_BINARY_DIR}/${GUILE_REL_SITEDIR}/gnucash/deprecated") # Path to gnucash' deprecated modules + set(guile_load_paths "$ENV{GUILE_LOAD_PATH}") + list(APPEND guile_load_paths + "${_relative_site_dir}" + "${_relative_site_dir}/gnucash/deprecated" + ) if (GUILE_COVERAGE) - list(APPEND guile_load_paths "${CMAKE_BINARY_DIR}/${GUILE_REL_SITEDIR}/gnucash") - list(APPEND guile_load_paths "${CMAKE_BINARY_DIR}/${GUILE_REL_SITEDIR}/gnucash/report") - list(APPEND guile_load_paths "${CMAKE_BINARY_DIR}/${GUILE_REL_SITEDIR}/gnucash/reports") - list(APPEND guile_load_paths "${CMAKE_BINARY_DIR}/${GUILE_REL_SITEDIR}/gnucash/engine") - list(APPEND guile_load_paths "${CMAKE_BINARY_DIR}/${GUILE_REL_SITEDIR}/gnucash/app-utils") - list(APPEND guile_load_paths "${CMAKE_BINARY_DIR}/${GUILE_REL_SITEDIR}/gnucash/qif-import") + list(APPEND guile_load_paths + "${_relative_site_dir}/gnucash" + "${_relative_site_dir}/gnucash/report" + "${_relative_site_dir}/gnucash/reports" + "${_relative_site_dir}/gnucash/engine" + "${_relative_site_dir}/gnucash/app-utils" + "${_relative_site_dir}/gnucash/qif-import" + ) endif() - set(guile_load_path "${guile_load_paths}") + set(_guile_load_path "${guile_load_paths}") - set(guile_load_compiled_paths "") - list(APPEND guile_load_compiled_paths "${CMAKE_BINARY_DIR}/${GUILE_REL_SITECCACHEDIR}") - list(APPEND guile_load_compiled_paths "${CMAKE_BINARY_DIR}/${GUILE_REL_SITECCACHEDIR}/gnucash/deprecated") - list(APPEND guile_load_compiled_paths "${CMAKE_BINARY_DIR}/${GUILE_REL_SITECCACHEDIR}/tests") - set(guile_load_compiled_path "${guile_load_compiled_paths}") + set(guile_load_compiled_paths "$ENV{GUILE_LOAD_COMPILED_PATH}") + list(APPEND guile_load_compiled_paths + "${_relative_cache_dir}" + "${_relative_cache_dir}/gnucash/deprecated" + "${_relative_cache_dir}/tests" + ) + set(_guile_load_compiled_path "${guile_load_compiled_paths}") - if (MINGW64) + if (MINGW64 AND ${GUILE_EFFECTIVE_VERSION} VERSION_LESS 2.2) set(new_path "") - foreach(load_item ${guile_load_path}) -# string(REGEX REPLACE "^([A-Za-z]):" "/\\1" load_item ${load_item}) - string(REGEX REPLACE "\\\\" "/" load_item ${load_item}) - list(APPEND new_path ${load_item}) + foreach(load_item ${_guile_load_path}) + make_unix_path(load_item) + list(APPEND new_path "${load_item}") endforeach(load_item) - set(guile_load_path ${new_path}) + set(_guile_load_path ${new_path}) set(new_path "") - foreach(load_item ${guile_load_compiled_path}) -# string(REGEX REPLACE "^([A-Za-z]):" "/\\1" load_item ${load_item}) - string(REGEX REPLACE "\\\\" "/" load_item ${load_item}) + foreach(load_item ${_guile_load_compiled_path}) + make_unix_path(load_item) list(APPEND new_path ${load_item}) endforeach(load_item) - set(guile_load_compiled_path ${new_path}) + set(_guile_load_compiled_path ${new_path}) endif() - if (WIN32) - string(REPLACE ";" "\\\\;" GUILE_LOAD_PATH "${guile_load_path}") - string(REPLACE ";" "\\\\;" GUILE_LOAD_COMPILED_PATH "${guile_load_compiled_path}") + + if (NOT MINGW64 OR ${GUILE_EFFECTIVE_VERSION} VERSION_LESS 2.2) + make_unix_path_list(_guile_load_path) + make_unix_path_list(_guile_load_compiled_path) else() - string(REPLACE ";" ":" GUILE_LOAD_PATH "${guile_load_path}") - string(REPLACE ";" ":" GUILE_LOAD_COMPILED_PATH "${guile_load_compiled_path}") + make_win32_path_list(_guile_load_path) + make_win32_path_list(_guile_load_compiled_path) + endif() + + set(_guile_env + "GNC_MODULE_PATH=${_gnc_module_path}" + "GUILE=${GUILE_EXECUTABLE}" + "GUILE_LOAD_PATH=${_guile_load_path}" + "GUILE_LOAD_COMPILED_PATH=${_guile_load_compiled_path}" + "GUILE_WARN_DEPRECATED=detailed" + ) + if (MINGW64) + list(APPEND _guile_env "PATH=${fpath}") + elseif (APPLE) + list(APPEND _guile_env "DYLD_LIBRARY_PATH=${_gnc_module_path}:$ENV{DYLD_LIBRARY_PATH}") + elseif (UNIX) + list(APPEND _guile_env "LD_LIBRARY_PATH=${_gnc_module_path}:$ENV{LD_LIBRARY_PATH}") endif() - list(APPEND env "GUILE_LOAD_PATH=${GUILE_LOAD_PATH}") - list(APPEND env "GUILE_LOAD_COMPILED_PATH=${GUILE_LOAD_COMPILED_PATH}") - list(APPEND env "GUILE_WARN_DEPRECATED=detailed") - set(GUILE_ENV ${env} PARENT_SCOPE) + set(GUILE_ENV "${_guile_env}" PARENT_SCOPE) endfunction() diff --git a/libgnucash/gnc-module/test/CMakeLists.txt b/libgnucash/gnc-module/test/CMakeLists.txt index f5c3e5629a..e99f1ca2dc 100644 --- a/libgnucash/gnc-module/test/CMakeLists.txt +++ b/libgnucash/gnc-module/test/CMakeLists.txt @@ -17,43 +17,50 @@ set(GNC_MODULE_TEST_LIBS gncmod-incompatdep gncmod-ordinary gncmod-withdep - ) +) + +set(_gnc_libdir ${LIBDIR_BUILD}) +set(_gnc_module_dir "${_gnc_libdir}/gnucash") +if (WIN32) + set(_gnc_libdir "${CMAKE_BINARY_DIR}/bin") + set(_gnc_module_dir "${_gnc_libdir}") + set(path $ENV{PATH}) + list(APPEND path "${_gnc_module_dir}/test") + make_win32_path_list(path) +endif() gnc_add_test(test-load-c test-load-c.c GNC_MODULE_TEST_INCLUDE_DIRS GNC_MODULE_TEST_LIBS - "GNC_MODULE_PATH=${LIBDIR_BUILD}/gnucash/test" + "GNC_MODULE_PATH=${_gnc_module_dir}/test" + "PATH=${path}" ) gnc_add_test(test-modsysver test-modsysver.c GNC_MODULE_TEST_INCLUDE_DIRS GNC_MODULE_TEST_LIBS - "GNC_MODULE_PATH=${LIBDIR_BUILD}/gnucash/test/future" + "GNC_MODULE_PATH=${_gnc_module_dir}/test/future" ) gnc_add_test(test-incompatdep test-incompatdep.c GNC_MODULE_TEST_INCLUDE_DIRS GNC_MODULE_TEST_LIBS - "GNC_MODULE_PATH=${LIBDIR_BUILD}/gnucash/test" + "GNC_MODULE_PATH=${_gnc_module_dir}/test" ) gnc_add_test(test-agedver test-agedver.c GNC_MODULE_TEST_INCLUDE_DIRS GNC_MODULE_TEST_LIBS - "GNC_MODULE_PATH=${LIBDIR_BUILD}/gnucash/test" + "GNC_MODULE_PATH=${_gnc_module_dir}/test" ) -set(_LIBDIR ${LIBDIR_BUILD}) -if (WIN32) - set(_LIBDIR ${CMAKE_BINARY_DIR}/bin) -endif() gnc_add_test(test-dynload test-dynload.c GNC_MODULE_TEST_INCLUDE_DIRS GNC_MODULE_TEST_LIBS - LIBDIR=${_LIBDIR} + LIBDIR=${_gnc_libdir} ) set(test_gnc_module_SOURCE_DIST