On Mon, Mar 27, 2023 at 02:47:40PM +0200, Michal Privoznik wrote:
There are couple of g_dbus_*() functions we provide an alternative implementation for in our virgdbusmock.c. However, these functions are declared in gio/gdbusconnection.h as: GIO_AVAILABLE_IN_ALL GDBusConnection *g_bus_get_sync (GBusType bus_type, GCancellable *cancellable, GError **error); where GIO_AVAILABLE_IN_ALL is declared as (in /gio/gio-visibility.h): #if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(GIO_STATIC_COMPILATION) # define _GIO_EXPORT __declspec(dllexport) # define _GIO_IMPORT __declspec(dllimport) #elif __GNUC__ >= 4 # define _GIO_EXPORT __attribute__((visibility("default"))) # define _GIO_IMPORT #else # define _GIO_EXPORT # define _GIO_IMPORT #endif #ifdef GIO_COMPILATION # define _GIO_API _GIO_EXPORT #else # define _GIO_API _GIO_IMPORT #endif #define _GIO_EXTERN _GIO_API extern #define GIO_AVAILABLE_IN_ALL _GIO_EXTERN Now, on mingw the functions we mock are declared with dllimport attribute which makes the compiler unhappy: ../tests/virgdbusmock.c:25:24: error: 'g_bus_get_sync' redeclared without dllimport attribute: previous dllimport ignored [-Werror=attributes] The solution is to do what glib does when it compiles the gio module: set GIO_COMPILATION macro which in turn annotates the function with dllexport attribute. Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx>
Reviewed-by: Martin Kletzander <mkletzan@xxxxxxxxxx> and safe for freeze
--- tests/meson.build | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/meson.build b/tests/meson.build index 0fd3bc62cf..6be806f4ae 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -65,6 +65,10 @@ else endif +virgdbusmock_dep = declare_dependency( + compile_args: [ '-DGIO_COMPILATION' ] +) + # mock_libs: # each entry is a dictionary with following items: # * name - mock library name which is also used as default source file name (required) @@ -78,7 +82,7 @@ mock_libs = [ { 'name': 'virdnsmasqmock' }, { 'name': 'virfilecachemock' }, { 'name': 'virfirewallmock' }, - { 'name': 'virgdbusmock' }, + { 'name': 'virgdbusmock', 'deps': [ virgdbusmock_dep] }, { 'name': 'virhostcpumock' }, { 'name': 'virhostdevmock' }, { 'name': 'virnetdaemonmock' }, -- 2.39.2
Attachment:
signature.asc
Description: PGP signature