diff --git a/gio/giomodule.h b/gio/giomodule.h index 1c53aa8ee..2fe7e1d06 100644 --- a/gio/giomodule.h +++ b/gio/giomodule.h @@ -103,7 +103,11 @@ GIO_AVAILABLE_IN_ALL GTypeClass* g_io_extension_ref_class (GIOExtension *extension); -/* API for the modules to implement */ +/* API for the modules to implement. + * Note that those functions are not implemented by libgio, they are declared + * here to be implemented in modules, that's why it uses G_MODULE_EXPORT + * instead of GIO_AVAILABLE_IN_ALL. + */ /** * g_io_module_load: (skip) @@ -123,7 +127,7 @@ GTypeClass* g_io_extension_ref_class (GIOExtension * statically. The old symbol names continue to be supported, but cannot be used * for static builds. **/ -GIO_AVAILABLE_IN_ALL +G_MODULE_EXPORT void g_io_module_load (GIOModule *module); /** @@ -143,7 +147,7 @@ void g_io_module_load (GIOModule *module); * statically. The old symbol names continue to be supported, but cannot be used * for static builds. **/ -GIO_AVAILABLE_IN_ALL +G_MODULE_EXPORT void g_io_module_unload (GIOModule *module); /** @@ -187,7 +191,7 @@ void g_io_module_unload (GIOModule *module); * * Since: 2.24 **/ -GIO_AVAILABLE_IN_ALL +G_MODULE_EXPORT char **g_io_module_query (void); G_END_DECLS diff --git a/gio/tests/modules/symbol-visibility.h b/gio/tests/modules/symbol-visibility.h index e83894444..2aa1fc663 100644 --- a/gio/tests/modules/symbol-visibility.h +++ b/gio/tests/modules/symbol-visibility.h @@ -3,7 +3,7 @@ /* This is the same check that's done in configure to create config.h */ #ifdef _WIN32 -#ifdef GLIB_STATIC_COMPILATION +#ifdef GLIB_TEST_STATIC_COMPILATION #define GLIB_TEST_EXPORT_SYMBOL extern #else #ifdef _MSC_VER diff --git a/gio/tests/modules/test-module-a.c b/gio/tests/modules/test-module-a.c index 0a64ea60a..6ac065d8a 100644 --- a/gio/tests/modules/test-module-a.c +++ b/gio/tests/modules/test-module-a.c @@ -20,8 +20,6 @@ * if advised of the possibility of such damage. */ -#include "config.h" /* for _GLIB_EXTERN */ - #include #include "symbol-visibility.h" diff --git a/gio/tests/modules/test-module-b.c b/gio/tests/modules/test-module-b.c index 8d3527e43..21932287f 100644 --- a/gio/tests/modules/test-module-b.c +++ b/gio/tests/modules/test-module-b.c @@ -20,8 +20,6 @@ * if advised of the possibility of such damage. */ -#include "config.h" /* for _GLIB_EXTERN */ - #include #include "symbol-visibility.h" diff --git a/gio/tests/resourceplugin.c b/gio/tests/resourceplugin.c index 1f218f26f..1f5f7ef87 100644 --- a/gio/tests/resourceplugin.c +++ b/gio/tests/resourceplugin.c @@ -6,8 +6,6 @@ * g_io_module*() symbols, is defined to be _GLIB_EXTERN, * which must be overridden to export the symbols. */ -#include "modules/symbol-visibility.h" -#define _GLIB_EXTERN GLIB_TEST_EXPORT_SYMBOL #include diff --git a/gmodule/gmodule.c b/gmodule/gmodule.c index 972d8ad63..49fc39664 100644 --- a/gmodule/gmodule.c +++ b/gmodule/gmodule.c @@ -178,6 +178,11 @@ * non-default * [visibility flag](https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#index-fvisibility-1260) * such as `hidden`. + * + * This macro must only be used when compiling a shared module. Modules that + * support both shared and static linking should define their own macro that + * expands to %G_MODULE_EXPORT when compiling the shared module, but is empty + * when compiling the static module on Windows. */ /** diff --git a/gmodule/gmodule.h b/gmodule/gmodule.h index 03ac91d10..664d8bbaa 100644 --- a/gmodule/gmodule.h +++ b/gmodule/gmodule.h @@ -35,14 +35,16 @@ G_BEGIN_DECLS /* exporting and importing functions, this is special cased * to feature Windows dll stubs. */ -#define G_MODULE_IMPORT extern -#ifdef G_PLATFORM_WIN32 -# define G_MODULE_EXPORT __declspec(dllexport) +#if defined(_WIN32) || defined(__CYGWIN__) +# define G_MODULE_EXPORT __declspec(dllexport) +# define G_MODULE_IMPORT __declspec(dllimport) extern #elif __GNUC__ >= 4 -# define G_MODULE_EXPORT __attribute__((visibility("default"))) -#else /* !G_PLATFORM_WIN32 && __GNUC__ < 4 */ -# define G_MODULE_EXPORT -#endif /* !G_PLATFORM_WIN32 */ +# define G_MODULE_EXPORT __attribute__((visibility("default"))) +# define G_MODULE_IMPORT extern +#else /* !defined(_WIN32) && !defined(__CYGWIN__) && __GNUC__ < 4 */ +# define G_MODULE_EXPORT +# define G_MODULE_IMPORT extern +#endif /** * GModuleFlags: