mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-10-31 00:12:19 +01:00 
			
		
		
		
	Merge branch 'nirbheek/gmodule-suffix-deprecation' into 'main'
Improve g_module_open(), deprecate G_MODULE_SUFFIX Closes #520 e #1413 See merge request GNOME/glib!2950
This commit is contained in:
		| @@ -35,9 +35,15 @@ static gboolean | |||||||
| is_valid_module_name (const gchar *basename) | is_valid_module_name (const gchar *basename) | ||||||
| { | { | ||||||
| #if !defined(G_OS_WIN32) && !defined(G_WITH_CYGWIN) | #if !defined(G_OS_WIN32) && !defined(G_WITH_CYGWIN) | ||||||
|  |   #if defined(G_OS_DARWIN) | ||||||
|  |   return g_str_has_prefix (basename, "lib") && | ||||||
|  |          (g_str_has_suffix (basename, ".so") || | ||||||
|  |           g_str_has_suffix (basename, ".dylib")); | ||||||
|  |   #else | ||||||
|   return |   return | ||||||
|     g_str_has_prefix (basename, "lib") && |     g_str_has_prefix (basename, "lib") && | ||||||
|     g_str_has_suffix (basename, ".so"); |     g_str_has_suffix (basename, ".so"); | ||||||
|  |   #endif | ||||||
| #else | #else | ||||||
|   return g_str_has_suffix (basename, ".dll"); |   return g_str_has_suffix (basename, ".dll"); | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -430,9 +430,16 @@ is_valid_module_name (const gchar        *basename, | |||||||
|   gboolean result; |   gboolean result; | ||||||
|  |  | ||||||
| #if !defined(G_OS_WIN32) && !defined(G_WITH_CYGWIN) | #if !defined(G_OS_WIN32) && !defined(G_WITH_CYGWIN) | ||||||
|  |   #if defined(G_OS_DARWIN) | ||||||
|  |   if (!g_str_has_prefix (basename, "lib") || | ||||||
|  |       !(g_str_has_suffix (basename, ".so") || | ||||||
|  |         g_str_has_suffix (basename, ".dylib"))) | ||||||
|  |     return FALSE; | ||||||
|  |   #else | ||||||
|   if (!g_str_has_prefix (basename, "lib") || |   if (!g_str_has_prefix (basename, "lib") || | ||||||
|       !g_str_has_suffix (basename, ".so")) |       !g_str_has_suffix (basename, ".so")) | ||||||
|     return FALSE; |     return FALSE; | ||||||
|  |   #endif | ||||||
| #else | #else | ||||||
|   if (!g_str_has_suffix (basename, ".dll")) |   if (!g_str_has_suffix (basename, ".dll")) | ||||||
|     return FALSE; |     return FALSE; | ||||||
|   | |||||||
| @@ -23,10 +23,16 @@ | |||||||
| #include <gio/gio.h> | #include <gio/gio.h> | ||||||
| #include <glibconfig.h> | #include <glibconfig.h> | ||||||
|  |  | ||||||
|  | #ifdef G_OS_WIN32 | ||||||
|   #ifdef _MSC_VER |   #ifdef _MSC_VER | ||||||
| # define MODULE_FILENAME_PREFIX "" |     #define MODULE_FILENAME(x) "" x ".dll" | ||||||
|   #else |   #else | ||||||
| # define MODULE_FILENAME_PREFIX "lib" |     #define MODULE_FILENAME(x) "lib" x ".dll" | ||||||
|  |   #endif | ||||||
|  | #elif defined(G_OS_DARWIN) | ||||||
|  |   #define MODULE_FILENAME(x) "lib" x ".dylib" | ||||||
|  | #else | ||||||
|  |   #define MODULE_FILENAME(x) "lib" x ".so" | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| static void | static void | ||||||
| @@ -131,7 +137,7 @@ test_module_scan_all_with_scope (void) | |||||||
|  |  | ||||||
|       ep = g_io_extension_point_register ("test-extension-point"); |       ep = g_io_extension_point_register ("test-extension-point"); | ||||||
|       scope = g_io_module_scope_new (G_IO_MODULE_SCOPE_BLOCK_DUPLICATES); |       scope = g_io_module_scope_new (G_IO_MODULE_SCOPE_BLOCK_DUPLICATES); | ||||||
|       g_io_module_scope_block (scope, MODULE_FILENAME_PREFIX "testmoduleb." G_MODULE_SUFFIX); |       g_io_module_scope_block (scope, MODULE_FILENAME ("testmoduleb")); | ||||||
|       g_io_modules_scan_all_in_directory_with_scope (g_test_get_filename (G_TEST_BUILT, "modules", NULL), scope); |       g_io_modules_scan_all_in_directory_with_scope (g_test_get_filename (G_TEST_BUILT, "modules", NULL), scope); | ||||||
|       list = g_io_extension_point_get_extensions (ep); |       list = g_io_extension_point_get_extensions (ep); | ||||||
|       g_assert_cmpint (g_list_length (list), ==, 1); |       g_assert_cmpint (g_list_length (list), ==, 1); | ||||||
|   | |||||||
| @@ -66,10 +66,7 @@ gio_tests = { | |||||||
|   'file-thumbnail' : {}, |   'file-thumbnail' : {}, | ||||||
|   'fileattributematcher' : {}, |   'fileattributematcher' : {}, | ||||||
|   'filter-streams' : {}, |   'filter-streams' : {}, | ||||||
|   'giomodule' : { |   'giomodule' : {}, | ||||||
|     # FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1392 |  | ||||||
|     'should_fail' : host_system == 'darwin', |  | ||||||
|   }, |  | ||||||
|   'gsubprocess' : {}, |   'gsubprocess' : {}, | ||||||
|   'g-file' : {}, |   'g-file' : {}, | ||||||
|   'g-file-info' : {}, |   'g-file-info' : {}, | ||||||
| @@ -859,8 +856,6 @@ if meson.can_run_host_binaries() | |||||||
|   gio_tests += { |   gio_tests += { | ||||||
|     'resources' : { |     'resources' : { | ||||||
|       'extra_sources' : resources_extra_sources, |       'extra_sources' : resources_extra_sources, | ||||||
|       # FIXME: https://gitlab.gnome.org/GNOME/glib/-/issues/1392 |  | ||||||
|       'should_fail' : host_system == 'darwin', |  | ||||||
|     }, |     }, | ||||||
|   } |   } | ||||||
| endif | endif | ||||||
|   | |||||||
| @@ -805,7 +805,11 @@ test_uri_query_info (void) | |||||||
|   g_assert_nonnull (content_type); |   g_assert_nonnull (content_type); | ||||||
|   mime_type = g_content_type_get_mime_type (content_type); |   mime_type = g_content_type_get_mime_type (content_type); | ||||||
|   g_assert_nonnull (mime_type); |   g_assert_nonnull (mime_type); | ||||||
|  | #ifdef G_OS_DARWIN | ||||||
|  |   g_assert_cmpstr (mime_type, ==, "text/*"); | ||||||
|  | #else | ||||||
|   g_assert_cmpstr (mime_type, ==, "text/plain"); |   g_assert_cmpstr (mime_type, ==, "text/plain"); | ||||||
|  | #endif | ||||||
|   g_free (mime_type); |   g_free (mime_type); | ||||||
|  |  | ||||||
|   g_object_unref (info); |   g_object_unref (info); | ||||||
|   | |||||||
| @@ -188,7 +188,13 @@ typedef unsigned @glib_intptr_type_define@ guintptr; | |||||||
| #define GLIB_SYSDEF_POLLERR =@g_pollerr@ | #define GLIB_SYSDEF_POLLERR =@g_pollerr@ | ||||||
| #define GLIB_SYSDEF_POLLNVAL =@g_pollnval@ | #define GLIB_SYSDEF_POLLNVAL =@g_pollnval@ | ||||||
|  |  | ||||||
|  | /* No way to disable deprecation warnings for macros, so only emit deprecation | ||||||
|  |  * warnings on platforms where usage of this macro is broken */ | ||||||
|  | #if defined(__APPLE__) || defined(_MSC_VER) || defined(__CYGWIN__) | ||||||
|  | #define G_MODULE_SUFFIX "@g_module_suffix@" GLIB_DEPRECATED_MACRO_IN_2_76 | ||||||
|  | #else | ||||||
| #define G_MODULE_SUFFIX "@g_module_suffix@" | #define G_MODULE_SUFFIX "@g_module_suffix@" | ||||||
|  | #endif | ||||||
|  |  | ||||||
| typedef @g_pid_type@ GPid; | typedef @g_pid_type@ GPid; | ||||||
| #define G_PID_FORMAT @g_pid_format@ | #define G_PID_FORMAT @g_pid_format@ | ||||||
|   | |||||||
| @@ -28,7 +28,6 @@ gvisibility_h = custom_target( | |||||||
|  |  | ||||||
| glib_built_headers = [gversionmacros_h, gvisibility_h] | glib_built_headers = [gversionmacros_h, gvisibility_h] | ||||||
| glib_sources += glib_built_headers | glib_sources += glib_built_headers | ||||||
|  |  | ||||||
| glib_c_args_internal = [ | glib_c_args_internal = [ | ||||||
|   '-DGLIB_COMPILATION', |   '-DGLIB_COMPILATION', | ||||||
| ] | ] | ||||||
|   | |||||||
| @@ -751,8 +751,8 @@ test_mkdir_with_parents (void) | |||||||
|  |  | ||||||
| #ifndef G_OS_WIN32 | #ifndef G_OS_WIN32 | ||||||
|   g_assert_cmpint (g_mkdir_with_parents ("/usr/b/c", 0), ==, -1); |   g_assert_cmpint (g_mkdir_with_parents ("/usr/b/c", 0), ==, -1); | ||||||
|   /* EPERM may be returned if the filesystem as a whole is read-only */ |   /* EPERM or EROFS may be returned if the filesystem as a whole is read-only */ | ||||||
|   if (errno != EPERM) |   if (errno != EPERM && errno != EROFS) | ||||||
|     g_assert_cmpint (errno, ==, EACCES); |     g_assert_cmpint (errno, ==, EACCES); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -167,18 +167,3 @@ _g_module_symbol (gpointer     handle, | |||||||
|    |    | ||||||
|   return p; |   return p; | ||||||
| } | } | ||||||
|  |  | ||||||
| static gchar* |  | ||||||
| _g_module_build_path (const gchar *directory, |  | ||||||
| 		      const gchar *module_name) |  | ||||||
| { |  | ||||||
|   if (directory && *directory) { |  | ||||||
|     if (strncmp (module_name, "lib", 3) == 0) |  | ||||||
|       return g_strconcat (directory, "/", module_name, NULL); |  | ||||||
|     else |  | ||||||
|       return g_strconcat (directory, "/lib", module_name, "." G_MODULE_SUFFIX, NULL); |  | ||||||
|   } else if (strncmp (module_name, "lib", 3) == 0) |  | ||||||
|     return g_strdup (module_name); |  | ||||||
|   else |  | ||||||
|     return g_strconcat ("lib", module_name, "." G_MODULE_SUFFIX, NULL); |  | ||||||
| } |  | ||||||
|   | |||||||
							
								
								
									
										29
									
								
								gmodule/gmodule-deprecated.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								gmodule/gmodule-deprecated.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | |||||||
|  | #include "config.h" | ||||||
|  |  | ||||||
|  | /*  | ||||||
|  |  * This is the only way to disable deprecation warnings for macros, and we need | ||||||
|  |  * to continue using G_MODULE_SUFFIX in the implementation of | ||||||
|  |  * g_module_build_path() which is also deprecated API. | ||||||
|  |  */ | ||||||
|  | #define GLIB_DISABLE_DEPRECATION_WARNINGS | ||||||
|  | #include <glib.h> | ||||||
|  |  | ||||||
|  | #if (G_MODULE_IMPL == G_MODULE_IMPL_AR) || (G_MODULE_IMPL == G_MODULE_IMPL_DL) | ||||||
|  | G_GNUC_INTERNAL gchar*    _g_module_build_path (const gchar *directory, | ||||||
|  |                                                 const gchar *module_name); | ||||||
|  |  | ||||||
|  | gchar* | ||||||
|  | _g_module_build_path (const gchar *directory, | ||||||
|  | 		      const gchar *module_name) | ||||||
|  | { | ||||||
|  |   if (directory && *directory) { | ||||||
|  |     if (strncmp (module_name, "lib", 3) == 0) | ||||||
|  |       return g_strconcat (directory, "/", module_name, NULL); | ||||||
|  |     else | ||||||
|  |       return g_strconcat (directory, "/lib", module_name, "." G_MODULE_SUFFIX, NULL); | ||||||
|  |   } else if (strncmp (module_name, "lib", 3) == 0) | ||||||
|  |     return g_strdup (module_name); | ||||||
|  |   else | ||||||
|  |     return g_strconcat ("lib", module_name, "." G_MODULE_SUFFIX, NULL); | ||||||
|  | } | ||||||
|  | #endif | ||||||
| @@ -210,18 +210,3 @@ _g_module_symbol (gpointer     handle, | |||||||
|    |    | ||||||
|   return p; |   return p; | ||||||
| } | } | ||||||
|  |  | ||||||
| static gchar* |  | ||||||
| _g_module_build_path (const gchar *directory, |  | ||||||
| 		      const gchar *module_name) |  | ||||||
| { |  | ||||||
|   if (directory && *directory) { |  | ||||||
|     if (strncmp (module_name, "lib", 3) == 0) |  | ||||||
|       return g_strconcat (directory, "/", module_name, NULL); |  | ||||||
|     else |  | ||||||
|       return g_strconcat (directory, "/lib", module_name, "." G_MODULE_SUFFIX, NULL); |  | ||||||
|   } else if (strncmp (module_name, "lib", 3) == 0) |  | ||||||
|     return g_strdup (module_name); |  | ||||||
|   else |  | ||||||
|     return g_strconcat ("lib", module_name, "." G_MODULE_SUFFIX, NULL); |  | ||||||
| } |  | ||||||
|   | |||||||
| @@ -161,9 +161,24 @@ | |||||||
| /** | /** | ||||||
|  * G_MODULE_SUFFIX: |  * G_MODULE_SUFFIX: | ||||||
|  * |  * | ||||||
|  * Expands to the proper shared library suffix for the current platform |  * Expands to a shared library suffix for the current platform without the | ||||||
|  * without the leading dot. For most Unices and Linux this is "so", and |  * leading dot. On Unixes this is "so", and on Windows this is "dll". | ||||||
|  * for Windows this is "dll". |  * | ||||||
|  |  * Deprecated: 2.76: Use g_module_open() instead with @module_name as the | ||||||
|  |  * basename of the file_name argument. You will get the wrong results using | ||||||
|  |  * this macro most of the time: | ||||||
|  |  * | ||||||
|  |  * 1. The suffix on macOS is usually 'dylib', but it's 'so' when using | ||||||
|  |  *    Autotools, so there's no way to get the suffix correct using | ||||||
|  |  *    a pre-processor macro. | ||||||
|  |  * 2. Prefixes also vary in a platform-specific way. You may or may not have | ||||||
|  |  *    a 'lib' prefix for the name on Windows and on Cygwin the prefix is | ||||||
|  |  *    'cyg'. | ||||||
|  |  * 3. The library name itself can vary per platform. For instance, you may | ||||||
|  |  *    want to load foo-1.dll on Windows and libfoo.1.dylib on macOS. | ||||||
|  |  * | ||||||
|  |  * g_module_open() takes care of all this by searching the filesystem for | ||||||
|  |  * combinations of possible suffixes and prefixes. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
| /** | /** | ||||||
| @@ -219,8 +234,14 @@ static void		_g_module_close		(gpointer	 handle); | |||||||
| static gpointer		_g_module_self		(void); | static gpointer		_g_module_self		(void); | ||||||
| static gpointer		_g_module_symbol	(gpointer	 handle, | static gpointer		_g_module_symbol	(gpointer	 handle, | ||||||
| 						 const gchar	*symbol_name); | 						 const gchar	*symbol_name); | ||||||
|  | #if (G_MODULE_IMPL != G_MODULE_IMPL_DL) && (G_MODULE_IMPL != G_MODULE_IMPL_AR) | ||||||
| static gchar*		_g_module_build_path	(const gchar	*directory, | static gchar*		_g_module_build_path	(const gchar	*directory, | ||||||
| 						 const gchar	*module_name); | 						 const gchar	*module_name); | ||||||
|  | #else | ||||||
|  | /* Implementation is in gmodule-deprecated.c */ | ||||||
|  | gchar*		        _g_module_build_path	(const gchar	*directory, | ||||||
|  | 						 const gchar	*module_name); | ||||||
|  | #endif | ||||||
| static inline void	g_module_set_error	(const gchar	*error); | static inline void	g_module_set_error	(const gchar	*error); | ||||||
| static inline GModule*	g_module_find_by_handle (gpointer	 handle); | static inline GModule*	g_module_find_by_handle (gpointer	 handle); | ||||||
| static inline GModule*	g_module_find_by_name	(const gchar	*name); | static inline GModule*	g_module_find_by_name	(const gchar	*name); | ||||||
| @@ -481,24 +502,28 @@ static GRecMutex g_module_global_lock; | |||||||
|  |  | ||||||
| /** | /** | ||||||
|  * g_module_open_full: |  * g_module_open_full: | ||||||
|  * @file_name: (nullable): the name of the file containing the module, or %NULL |  * @file_name: (nullable): the name or path to the file containing the module, | ||||||
|  *     to obtain a #GModule representing the main program itself |  *     or %NULL to obtain a #GModule representing the main program itself | ||||||
|  * @flags: the flags used for opening the module. This can be the |  * @flags: the flags used for opening the module. This can be the | ||||||
|  *     logical OR of any of the #GModuleFlags |  *     logical OR of any of the #GModuleFlags | ||||||
|  * @error: #GError. |  * @error: #GError. | ||||||
|  * |  * | ||||||
|  * Opens a module. If the module has already been opened, |  * Opens a module. If the module has already been opened, its reference count | ||||||
|  * its reference count is incremented. |  * is incremented. If not, the module is searched in the following order: | ||||||
|  * |  * | ||||||
|  * First of all g_module_open_full() tries to open @file_name as a module. |  * 1. If @file_name exists as a regular file, it is used as-is; else | ||||||
|  * If that fails and @file_name has the ".la"-suffix (and is a libtool |  * 2. If @file_name doesn't have the correct suffix and/or prefix for the | ||||||
|  * archive) it tries to open the corresponding module. If that fails |  *    platform, then possible suffixes and prefixes will be added to the | ||||||
|  * and it doesn't have the proper module suffix for the platform |  *    basename till a file is found and whatever is found will be used; else | ||||||
|  * (%G_MODULE_SUFFIX), this suffix will be appended and the corresponding |  * 3. If @file_name doesn't have the ".la"-suffix, ".la" is appended. Either | ||||||
|  * module will be opened. If that fails and @file_name doesn't have the |  *    way, if a matching .la file exists (and is a libtool archive) the | ||||||
|  * ".la"-suffix, this suffix is appended and g_module_open_full() tries to open |  *    libtool archive is parsed to find the actual file name, and that is | ||||||
|  * the corresponding module. If eventually that fails as well, %NULL is |  *    used. | ||||||
|  * returned. |  * | ||||||
|  |  * At the end of all this, we would have a file path that we can access on | ||||||
|  |  * disk, and it is opened as a module. If not, @file_name is opened as | ||||||
|  |  * a module verbatim in the hopes that the system implementation will somehow | ||||||
|  |  * be able to access it. | ||||||
|  * |  * | ||||||
|  * Returns: a #GModule on success, or %NULL on failure |  * Returns: a #GModule on success, or %NULL on failure | ||||||
|  * |  * | ||||||
| @@ -568,13 +593,59 @@ g_module_open_full (const gchar   *file_name, | |||||||
|   /* try completing file name with standard library suffix */ |   /* try completing file name with standard library suffix */ | ||||||
|   if (!name) |   if (!name) | ||||||
|     { |     { | ||||||
|       name = g_strconcat (file_name, "." G_MODULE_SUFFIX, NULL); |       char *basename, *dirname; | ||||||
|       if (!g_file_test (name, G_FILE_TEST_IS_REGULAR)) |       size_t prefix_idx = 0, suffix_idx = 0; | ||||||
|  |       const char *prefixes[2] = {0}, *suffixes[2] = {0}; | ||||||
|  |  | ||||||
|  |       basename = g_path_get_basename (file_name); | ||||||
|  |       dirname = g_path_get_dirname (file_name); | ||||||
|  | #ifdef G_OS_WIN32 | ||||||
|  |       if (!g_str_has_prefix (basename, "lib")) | ||||||
|  |         prefixes[prefix_idx++] = "lib"; | ||||||
|  |       prefixes[prefix_idx++] = ""; | ||||||
|  |       if (!g_str_has_suffix (basename, ".dll")) | ||||||
|  |         suffixes[suffix_idx++] = ".dll"; | ||||||
|  | #else | ||||||
|  |   #ifdef __CYGWIN__ | ||||||
|  |       if (!g_str_has_prefix (basename, "cyg")) | ||||||
|  |         prefixes[prefix_idx++] = "cyg"; | ||||||
|  |   #else | ||||||
|  |       if (!g_str_has_prefix (basename, "lib")) | ||||||
|  |         prefixes[prefix_idx++] = "lib"; | ||||||
|  |       else | ||||||
|  |         /* People commonly pass `libfoo` as the file_name and want us to | ||||||
|  |          * auto-detect the suffix as .la or .so, etc. We need to also find | ||||||
|  |          * .dylib and .dll in those cases. */ | ||||||
|  |         prefixes[prefix_idx++] = ""; | ||||||
|  |   #endif | ||||||
|  |   #ifdef G_OS_DARWIN | ||||||
|  |       if (!g_str_has_suffix (basename, ".dylib") && | ||||||
|  |           !g_str_has_suffix (basename, ".so")) | ||||||
|         { |         { | ||||||
|  |           suffixes[suffix_idx++] = ".dylib"; | ||||||
|  |           suffixes[suffix_idx++] = ".so"; | ||||||
|  |         } | ||||||
|  |   #else | ||||||
|  |       if (!g_str_has_suffix (basename, ".so")) | ||||||
|  |         suffixes[suffix_idx++] = ".so"; | ||||||
|  |   #endif | ||||||
|  | #endif | ||||||
|  |       for (guint i = 0; i < prefix_idx; i++) | ||||||
|  |         { | ||||||
|  |           for (guint j = 0; j < suffix_idx; j++) | ||||||
|  |             { | ||||||
|  |               name = g_strconcat (dirname, G_DIR_SEPARATOR_S, prefixes[i], | ||||||
|  |                                   basename, suffixes[j], NULL); | ||||||
|  |               if (g_file_test (name, G_FILE_TEST_IS_REGULAR)) | ||||||
|  |                 goto name_found; | ||||||
|               g_free (name); |               g_free (name); | ||||||
|               name = NULL; |               name = NULL; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |     name_found: | ||||||
|  |       g_free (basename); | ||||||
|  |       g_free (dirname); | ||||||
|  |     } | ||||||
|   /* try completing by appending libtool suffix */ |   /* try completing by appending libtool suffix */ | ||||||
|   if (!name) |   if (!name) | ||||||
|     { |     { | ||||||
| @@ -593,7 +664,8 @@ g_module_open_full (const gchar   *file_name, | |||||||
|       gchar *dot = strrchr (file_name, '.'); |       gchar *dot = strrchr (file_name, '.'); | ||||||
|       gchar *slash = strrchr (file_name, G_DIR_SEPARATOR); |       gchar *slash = strrchr (file_name, G_DIR_SEPARATOR); | ||||||
|  |  | ||||||
|       /* make sure the name has a suffix */ |       /* we make sure the name has a suffix using the deprecated | ||||||
|  |        * G_MODULE_SUFFIX for backward-compat */ | ||||||
|       if (!dot || dot < slash) |       if (!dot || dot < slash) | ||||||
| 	name = g_strconcat (file_name, "." G_MODULE_SUFFIX, NULL); | 	name = g_strconcat (file_name, "." G_MODULE_SUFFIX, NULL); | ||||||
|       else |       else | ||||||
| @@ -687,8 +759,8 @@ g_module_open_full (const gchar   *file_name, | |||||||
|  |  | ||||||
| /** | /** | ||||||
|  * g_module_open: |  * g_module_open: | ||||||
|  * @file_name: (nullable): the name of the file containing the module, or %NULL |  * @file_name: (nullable): the name or path to the file containing the module, | ||||||
|  *     to obtain a #GModule representing the main program itself |  *     or %NULL to obtain a #GModule representing the main program itself | ||||||
|  * @flags: the flags used for opening the module. This can be the |  * @flags: the flags used for opening the module. This can be the | ||||||
|  *     logical OR of any of the #GModuleFlags. |  *     logical OR of any of the #GModuleFlags. | ||||||
|  * |  * | ||||||
| @@ -891,6 +963,9 @@ g_module_name (GModule *module) | |||||||
|  * |  * | ||||||
|  * Returns: the complete path of the module, including the standard library |  * Returns: the complete path of the module, including the standard library | ||||||
|  *     prefix and suffix. This should be freed when no longer needed |  *     prefix and suffix. This should be freed when no longer needed | ||||||
|  |  * | ||||||
|  |  * Deprecated: 2.76: Use g_module_open() instead with @module_name as the | ||||||
|  |  * basename of the file_name argument. See %G_MODULE_SUFFIX for why. | ||||||
|  */ |  */ | ||||||
| gchar * | gchar * | ||||||
| g_module_build_path (const gchar *directory, | g_module_build_path (const gchar *directory, | ||||||
|   | |||||||
| @@ -138,7 +138,7 @@ const gchar *         g_module_name          (GModule      *module); | |||||||
|  * |  * | ||||||
|  * No checks are made that the file exists, or is of correct type. |  * No checks are made that the file exists, or is of correct type. | ||||||
|  */ |  */ | ||||||
| GMODULE_AVAILABLE_IN_ALL | GMODULE_DEPRECATED_IN_2_76 | ||||||
| gchar*                g_module_build_path    (const gchar  *directory, | gchar*                g_module_build_path    (const gchar  *directory, | ||||||
| 					      const gchar  *module_name); | 					      const gchar  *module_name); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -77,7 +77,8 @@ gvisibility_h = custom_target( | |||||||
|   install_tag: 'devel', |   install_tag: 'devel', | ||||||
| ) | ) | ||||||
|  |  | ||||||
| gmodule_sources = [gmodule_c, gvisibility_h] | gmodule_sources = [gmodule_c, gvisibility_h, 'gmodule-deprecated.c'] | ||||||
|  |  | ||||||
| if host_system == 'windows' | if host_system == 'windows' | ||||||
|   gmodule_win_rc = configure_file( |   gmodule_win_rc = configure_file( | ||||||
|     input: 'gmodule.rc.in', |     input: 'gmodule.rc.in', | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user