diff --git a/meson.build b/meson.build index e89ce6872a..13517714b7 100644 --- a/meson.build +++ b/meson.build @@ -370,6 +370,13 @@ glib_dep = dependency('glib-2.0', version: glib_req) gobject_dep = dependency('gobject-2.0', version: glib_req) if os_win32 giowin32_dep = dependency('gio-windows-2.0', version: glib_req, required: win32_enabled) + if giowin32_dep.version().version_compare('<2.75.0') + if cc.get_id() == 'msvc' and get_option('default_library') != 'static' + # Override _GLIB_EXTERN on Visual Studio for media modules for glib <= 2.74.x, so that we + # avoid error C2375 (redefinition; different linkage) when building the g_io_module_*() bits + cdata.set('MODULES_OVERRIDE_GLIB_EXTERN', true) + endif + endif endif if os_unix giounix_dep = dependency('gio-unix-2.0', version: glib_req, required: false) diff --git a/modules/media/gtkffmediafile.c b/modules/media/gtkffmediafile.c index 2839cb8174..0103e5bd16 100644 --- a/modules/media/gtkffmediafile.c +++ b/modules/media/gtkffmediafile.c @@ -19,6 +19,15 @@ #include "config.h" +/* + * Sadly, we need this to build on Visual Studio against glib-2.74.x or earlier, + * otherwise the build will fail when building the g_io_module_*() bits with error C2375 + * (redefinition; different linkage). This must be before including the Gio headers. + */ +#if defined (_MSC_VER) && defined (MODULES_OVERRIDE_GLIB_EXTERN) +# define _GLIB_EXTERN __declspec(dllexport) extern +#endif + #include "gtkffmediafileprivate.h" #include diff --git a/modules/media/gtkgstmediafile.c b/modules/media/gtkgstmediafile.c index 5487bb0571..7353539ef6 100644 --- a/modules/media/gtkgstmediafile.c +++ b/modules/media/gtkgstmediafile.c @@ -19,6 +19,15 @@ #include "config.h" +/* + * Sadly, we need this to build on Visual Studio against glib-2.74.x or earlier, + * otherwise the build will fail when building the g_io_module_*() bits with error C2375 + * (redefinition; different linkage). This must be before including the Gio headers. + */ +#if defined (_MSC_VER) && defined (MODULES_OVERRIDE_GLIB_EXTERN) +# define _GLIB_EXTERN __declspec(dllexport) extern +#endif + #include "gtkgstmediafileprivate.h" #include "gtkgstpaintableprivate.h"