diff options
author | Sam James <sam@gentoo.org> | 2024-12-26 09:41:40 +0000 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2024-12-26 09:55:46 +0000 |
commit | 72dbf2ec4049df11ad63576971883ee239eadb7f (patch) | |
tree | bae62c96116ebf0161e5a7c862417d2c9ccd7b7c /app-office | |
parent | dev-libs/libkdumpfile: add binutils-libs dep to 0.5.5 (diff) | |
download | gentoo-72dbf2ec4049df11ad63576971883ee239eadb7f.tar.gz gentoo-72dbf2ec4049df11ad63576971883ee239eadb7f.tar.bz2 gentoo-72dbf2ec4049df11ad63576971883ee239eadb7f.zip |
app-office/gnucash: don't use installed copy of gnucash for build or tests
Per https://www.gnu.org/software/guile/manual/html_node/Foreign-Libraries.html,
newer guile (>= 3.0.6) will respect GUILE_EXTENSIONS_PATH when looking up paths for
`dlopen` for `load-extension` -> `load-foreign-library`. Older guiles will use
`LTDL_LIBRARY_PATH` instead.
Without this set, the system paths are checked instead (maybe falling back
to another variable if not found on the system, unclear), and we end up
with build failures when we try to mix system and just-built gnucash (this
is also obviously a problem for testing as well).
For tests, we additionally have to do a "fake install" in ${BUILD_DIR}/whatever
and we set the path to that in the ebuild with GENTOO_TEMPORARY_TEST_INSTALLDIR.
https://www.gnu.org/software/guile/manual/html_node/Load-Paths.html and
https://www.gnu.org/software/guile/manual/html_node/Environment-Variables.html were
also a lot of help.
(When testing w/ guile-2.2 briefly, it didn't seem that we needed
to set LTDL_LIBRARY_PATH, but someone can add that if it turns out to be
needed, or I may later.)
(With regard to GUILE_AUTO_COMPILE=0, dropped that as it doesn't seem
necessary. Plan is to also add GUILE_AUTO_COMPILE=fresh to the eclass,
am discussing it w/ Arsen.)
Bug: https://bugs.gnucash.org/show_bug.cgi?id=799159
Bug: https://bugs.gentoo.org/359033
Bug: https://bugs.gentoo.org/371264
Bug: https://bugs.gentoo.org/734286
Bug: https://bugs.gentoo.org/946927
Closes: https://bugs.gentoo.org/941426
Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'app-office')
-rw-r--r-- | app-office/gnucash/files/gnucash-5.10-guile-load-path.patch | 96 | ||||
-rw-r--r-- | app-office/gnucash/gnucash-5.10.ebuild | 33 |
2 files changed, 120 insertions, 9 deletions
diff --git a/app-office/gnucash/files/gnucash-5.10-guile-load-path.patch b/app-office/gnucash/files/gnucash-5.10-guile-load-path.patch new file mode 100644 index 000000000000..0a488817f547 --- /dev/null +++ b/app-office/gnucash/files/gnucash-5.10-guile-load-path.patch @@ -0,0 +1,96 @@ +From 59c0a848aeab5a600f40962b359395e4dca57537 Mon Sep 17 00:00:00 2001 +From: Sam James <sam@gentoo.org> +Date: Thu, 26 Dec 2024 09:55:15 +0000 +Subject: [PATCH] Don't use installed copy of gnucash for build or tests + +Per https://www.gnu.org/software/guile/manual/html_node/Foreign-Libraries.html, +newer guile (>= 3.0.6) will respect GUILE_EXTENSIONS_PATH when looking up paths for +`dlopen` for `load-extension` -> `load-foreign-library`. Older guiles will use +`LTDL_LIBRARY_PATH` instead. + +Without this set, the system paths are checked instead (maybe falling back +to another variable if not found on the system, unclear), and we end up +with build failures when we try to mix system and just-built gnucash (this +is also obviously a problem for testing as well). + +For tests, we additionally have to do a "fake install" in ${BUILD_DIR}/whatever +and we set the path to that in the ebuild with GENTOO_TEMPORARY_TEST_INSTALLDIR. + +https://www.gnu.org/software/guile/manual/html_node/Load-Paths.html and +https://www.gnu.org/software/guile/manual/html_node/Environment-Variables.html were +also a lot of help. + +(When testing w/ guile-2.2 briefly, it didn't seem that we needed +to set LTDL_LIBRARY_PATH, but someone can add that if it turns out to be +needed, or I may later.) + +(With regard to GUILE_AUTO_COMPILE=0, dropped that as it doesn't seem +necessary. Plan is to also add GUILE_AUTO_COMPILE=fresh to the eclass, +am discussing it w/ Arsen.) + +Bug: https://bugs.gnucash.org/show_bug.cgi?id=799159 +Bug: https://bugs.gentoo.org/359033 +Bug: https://bugs.gentoo.org/371264 +Bug: https://bugs.gentoo.org/734286 +Bug: https://bugs.gentoo.org/946927 +Closes: https://bugs.gentoo.org/941426 +Signed-off-by: Sam James <sam@gentoo.org> +--- + common/cmake_modules/GncAddSchemeTargets.cmake | 2 ++ + common/cmake_modules/GncAddTest.cmake | 6 ++++++ + 2 files changed, 8 insertions(+) + +diff --git a/common/cmake_modules/GncAddSchemeTargets.cmake b/common/cmake_modules/GncAddSchemeTargets.cmake +index 9a038de..bab89bf 100644 +--- a/common/cmake_modules/GncAddSchemeTargets.cmake ++++ b/common/cmake_modules/GncAddSchemeTargets.cmake +@@ -253,6 +253,7 @@ function(gnc_add_scheme_targets _TARGET) + make_win32_path_list(LIBRARY_PATH) + else() + set (LIBRARY_PATH "LD_LIBRARY_PATH=${LIBDIR_BUILD}:${LIBDIR_BUILD}/gnucash:$ENV{LD_LIBRARY_PATH}") ++ set (GUILE_EXTENSIONS_PATH "GUILE_EXTENSIONS_PATH=${LIBDIR_BUILD}:${LIBDIR_BUILD}/gnucash:$ENV{GUILE_EXTENSIONS_PATH}") + endif() + if (APPLE) + set (LIBRARY_PATH "DYLD_LIBRARY_PATH=${LIBDIR_BUILD}:${LIBDIR_BUILD}/gnucash:$ENV{DYLD_LIBRARY_PATH}") +@@ -281,6 +282,7 @@ function(gnc_add_scheme_targets _TARGET) + #We quote the arguments to stop CMake stripping the path separators. + set (GUILE_ENV + "${LIBRARY_PATH}" ++ "${GUILE_EXTENSIONS_PATH}" + "GNC_UNINSTALLED=YES" + "GNC_BUILDDIR=${CMAKE_BINARY_DIR}" + "GUILE_LOAD_PATH=${_GUILE_LOAD_PATH}" +diff --git a/common/cmake_modules/GncAddTest.cmake b/common/cmake_modules/GncAddTest.cmake +index ce12e8b..9ab2cc2 100644 +--- a/common/cmake_modules/GncAddTest.cmake ++++ b/common/cmake_modules/GncAddTest.cmake +@@ -13,6 +13,7 @@ function(get_guile_env) + endif() + if (UNIX) + list(APPEND env "LD_LIBRARY_PATH=${_GNC_MODULE_PATH}:$ENV{LD_LIBRARY_PATH}") ++ list(APPEND env "GUILE_EXTENSIONS_PATH=${LIBDIR_BUILD}:${LIBDIR_BUILD}/gnucash:$ENV{GUILE_EXTENSIONS_PATH}") + endif() + if (MINGW64) + set(fpath "") +@@ -32,6 +33,8 @@ function(get_guile_env) + list(APPEND env "GUILE=${GUILE_EXECUTABLE}") + + set(guile_load_paths "") ++ list(APPEND guile_load_paths "$ENV{GENTOO_TEMPORARY_TEST_INSTALLDIR}/${GUILE_REL_SITEDIR}") ++ list(APPEND guile_load_paths "$ENV{GENTOO_TEMPORARY_TEST_INSTALLDIR}/${GUILE_REL_SITEDIR}/gnucash/deprecated") # Path to gnucash' deprecated modules + 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 + if (GUILE_COVERAGE) +@@ -46,6 +49,9 @@ function(get_guile_env) + set(guile_load_path "${guile_load_paths}") + + set(guile_load_compiled_paths "") ++ list(APPEND guile_load_compiled_paths "$ENV{GENTOO_TEMPORARY_TEST_INSTALLDIR}/${GUILE_REL_SITECCACHEDIR}") ++ list(APPEND guile_load_compiled_paths "$ENV{GENTOO_TEMPORARY_TEST_INSTALLDIR}/${GUILE_REL_SITECCACHEDIR}/gnucash/deprecated") ++ list(APPEND guile_load_compiled_paths "$ENV{GENTOO_TEMPORARY_TEST_INSTALLDIR}/${GUILE_REL_SITECCACHEDIR}/tests") + 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") +-- +2.47.1 + diff --git a/app-office/gnucash/gnucash-5.10.ebuild b/app-office/gnucash/gnucash-5.10.ebuild index bd528c080bdd..f258c56acd5f 100644 --- a/app-office/gnucash/gnucash-5.10.ebuild +++ b/app-office/gnucash/gnucash-5.10.ebuild @@ -18,12 +18,11 @@ LICENSE="GPL-2+" SLOT="0" KEYWORDS="~amd64 ~arm64 ~ppc ~ppc64 ~riscv ~x86" IUSE="aqbanking debug doc examples gnome-keyring +gui mysql nls ofx postgres python quotes smartcard sqlite test" - -# Currently restricting due to the following: -# https://bugs.gnucash.org/show_bug.cgi?id=799159#c1 -# -# Tests can be run but must first unmerge any existing GnuCash installation. -RESTRICT="test" +# Tests were previously restricted because guile would try to use installed, +# not just-built modules. See https://bugs.gnucash.org/show_bug.cgi?id=799159#c1. +# TODO: as of 5.10, the ebuild should handle this OK. If no issues come up, +# need to forward those findings (and tidy up the patch for) upstream. +RESTRICT="!test? ( test )" # Examples doesn't build unless GUI is also built REQUIRED_USE=" @@ -119,6 +118,7 @@ PATCHES=( # https://bugs.gentoo.org/893676 "${FILESDIR}/${PN}-5.0-webkit2gtk-4.1.patch" "${FILESDIR}/${P}-import-qif.patch" + "${FILESDIR}/${PN}-5.10-guile-load-path.patch" ) pkg_setup() { @@ -149,13 +149,16 @@ src_prepare() { libgnucash/backend/dbi/test/test-backend-dbi-basic.cpp libgnucash/backend/xml/test/test-xml-pricedb.cpp ) + local x for x in "${fixtestfiles[@]}"; do sed -i -e "s|\"/tmp/|\"${T}/|g" "${S}/${x}" || die "sed of ${S}/${x} failed" done } src_configure() { - export GUILE_AUTO_COMPILE=0 + # Used in src_test but the value has to be available at `cmake` + # generation time. + export GENTOO_TEMPORARY_TEST_INSTALLDIR="${BUILD_DIR}/test_install" local sql_on_off="OFF" if use mysql || use postgres || use sqlite ; then @@ -197,8 +200,20 @@ src_test() { fi cd "${BUILD_DIR}" || die "Failed to enter ${BUILD_DIR}" - XDG_DATA_HOME="${T}/$(whoami)" eninja check - cmake_src_test + + # We need e.g. `options.scm` to be available for loading by tests + # and the compiled `options.go` isn't enough. Do a temporary install + # for the benefit of the testsuite. + DESTDIR="${GENTOO_TEMPORARY_TEST_INSTALLDIR}" cmake_build install + # This is needed for `load-path` to be correct, as it lacks `/usr` in there. + local dir + for dir in bin include "$(get_libdir)" share ; do + ln -s "${GENTOO_TEMPORARY_TEST_INSTALLDIR}/usr/${dir}" "${GENTOO_TEMPORARY_TEST_INSTALLDIR}/${dir}" || die + done + + # Avoid cmake_src_test as we don't get the test binaries built first + # and get various failures as a result. Copy what upstream do in CI. + eninja check } src_install() { |