[PATCH] tests: Compile virgdbusmock.c with GIO_COMPILATION enabled

Martin Kletzander mkletzan at redhat.com
Tue Mar 28 06:35:04 UTC 2023


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 at redhat.com>

Reviewed-by: Martin Kletzander <mkletzan at redhat.com>

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
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20230328/04c4d5a1/attachment.sig>


More information about the libvir-list mailing list