From 21374c12a16a122e859175e1cfdd870b984887c3 Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Wed, 17 Mar 2021 18:33:05 +0200 Subject: [PATCH] guile: Fix and re-enable unit test --- guile/Makefile.am | 3 ++- guile/mu-guile-message.cc | 12 ++++++++---- guile/mu-guile.cc | 36 +++++++++++++++++++++++------------- guile/mu-guile.hh | 4 ++-- guile/tests/Makefile.am | 6 +++--- 5 files changed, 38 insertions(+), 23 deletions(-) diff --git a/guile/Makefile.am b/guile/Makefile.am index 401db936..048c0e01 100644 --- a/guile/Makefile.am +++ b/guile/Makefile.am @@ -56,10 +56,11 @@ libguile_mu_la_CXXFLAGS=$(AM_CXXFLAGS) libguile_mu_la_LIBADD= \ ${top_builddir}/lib/libmu.la \ + ${top_builddir}/lib/utils/libmu-utils.la \ $(READLINE_LIBS) \ ${GUILE_LIBS} -libguile_mu_la_LDFLAGS= \ +libguile_mu_la_LDFLAGS= \ $(ASAN_LDFLAGS) \ -shared \ -export-dynamic diff --git a/guile/mu-guile-message.cc b/guile/mu-guile-message.cc index c4e1bb1a..0cb1dd07 100644 --- a/guile/mu-guile-message.cc +++ b/guile/mu-guile-message.cc @@ -82,11 +82,13 @@ typedef struct _FlagData FlagData; #define MU_GUILE_INITIALIZED_OR_ERROR \ - do { if (!(mu_guile_initialized())) \ + do { \ + if (!(mu_guile_initialized())) { \ mu_guile_error (FUNC_NAME, 0, \ "mu not initialized; call mu:initialize", \ SCM_UNDEFINED); \ - return SCM_UNSPECIFIED; \ + return SCM_UNSPECIFIED; \ + } \ } while (0) @@ -423,8 +425,10 @@ SCM_DEFINE (get_header, "mu:c:get-header", 2, 0, 0, #undef FUNC_NAME static Mu::Option -get_query_results (Mu::Query& query, const char* expr, int maxnum) +get_query_results (Mu::Store& store, const char* expr, int maxnum) { + Mu::Query query(store); + return query.run(expr, MU_MSG_FIELD_ID_NONE, Mu::QueryFlags::None, maxnum); } @@ -456,7 +460,7 @@ SCM_DEFINE (for_each_message, "mu:c:for-each-message", 3, 0, 0, else expr = scm_to_utf8_string(EXPR); - const auto res{get_query_results(mu_guile_query(), expr, + const auto res{get_query_results(mu_guile_store(), expr, scm_to_int(MAXNUM))}; free (expr); if (!res) diff --git a/guile/mu-guile.cc b/guile/mu-guile.cc index 05db5ea5..bb30a0f1 100644 --- a/guile/mu-guile.cc +++ b/guile/mu-guile.cc @@ -1,5 +1,5 @@ /* -** Copyright (C) 2011-2020 Dirk-Jan C. Binnema +** Copyright (C) 2011-2021 Dirk-Jan C. Binnema ** ** This program is free software; you can redistribute it and/or modify it ** under the terms of the GNU General Public License as published by the @@ -72,46 +72,53 @@ mu_guile_g_error (const char *func_name, GError *err) /* there can be only one */ -static std::unique_ptr QuerySingleton; +static std::unique_ptr StoreSingleton; static gboolean mu_guile_init_instance (const char *muhome) try { setlocale (LC_ALL, ""); - if (!mu_runtime_init (muhome, "guile", FALSE)) + if (!mu_runtime_init (muhome, "guile", true) || StoreSingleton) return FALSE; - Mu::Store store{mu_runtime_path(MU_RUNTIME_PATH_XAPIANDB)}; - QuerySingleton = std::make_unique(store); + StoreSingleton = std::make_unique( + mu_runtime_path(MU_RUNTIME_PATH_XAPIANDB)); + + g_debug ("mu-guile: opened store @ %s (n=%zu); maildir: %s", + StoreSingleton->metadata().database_path.c_str(), + StoreSingleton->size(), + StoreSingleton->metadata().root_maildir.c_str()); return TRUE; } catch (...) { - return FALSE; + return FALSE; } static void mu_guile_uninit_instance () { - QuerySingleton.reset(); + StoreSingleton.reset(); mu_runtime_uninit (); } -Mu::Query& -mu_guile_query () +Mu::Store& +mu_guile_store () { - if (!QuerySingleton) - g_error("mu guile not initialized"); + if (!StoreSingleton) + g_error("mu guile not initialized"); - return *QuerySingleton.get(); + return *StoreSingleton.get(); } gboolean mu_guile_initialized () { - return !!QuerySingleton; + g_debug ("initialized ? %u", !!StoreSingleton); + + return !!StoreSingleton; } @@ -145,6 +152,9 @@ SCM_DEFINE_PUBLIC (mu_initialize, "mu:initialize", 0, 1, 0, return mu_guile_error (FUNC_NAME, 0, "Failed to initialize mu", SCM_UNSPECIFIED); + g_debug ("mu-guile: initialized @ %s (%p)", + muhome ? muhome : "", StoreSingleton.get()); + /* cleanup when we're exiting */ atexit (mu_guile_uninit_instance); diff --git a/guile/mu-guile.hh b/guile/mu-guile.hh index 34d9398d..6afd71cf 100644 --- a/guile/mu-guile.hh +++ b/guile/mu-guile.hh @@ -26,9 +26,9 @@ /** - * get the singleton Query instance + * get the singleton Store instance */ -Mu::Query& mu_guile_query (void); +Mu::Store& mu_guile_store (); /** diff --git a/guile/tests/Makefile.am b/guile/tests/Makefile.am index 005a9d24..afe893f6 100644 --- a/guile/tests/Makefile.am +++ b/guile/tests/Makefile.am @@ -39,8 +39,8 @@ AM_LDFLAGS=$(ASAN_LDFLAGS) noinst_PROGRAMS= $(TEST_PROGS) -# TEST_PROGS += test-mu-guile -# test_mu_guile_SOURCES= test-mu-guile.cc -# test_mu_guile_LDADD=${top_builddir}/lib/libtestmucommon.la +TEST_PROGS += test-mu-guile +test_mu_guile_SOURCES= test-mu-guile.cc +test_mu_guile_LDADD=${top_builddir}/lib/libtestmucommon.la EXTRA_DIST=test-mu-guile.scm test-mu-guile.cc