mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-26 22:16:16 +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:
commit
d0b3021f7f
@ -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 _MSC_VER
|
#ifdef G_OS_WIN32
|
||||||
# define MODULE_FILENAME_PREFIX ""
|
#ifdef _MSC_VER
|
||||||
|
#define MODULE_FILENAME(x) "" x ".dll"
|
||||||
|
#else
|
||||||
|
#define MODULE_FILENAME(x) "lib" x ".dll"
|
||||||
|
#endif
|
||||||
|
#elif defined(G_OS_DARWIN)
|
||||||
|
#define MODULE_FILENAME(x) "lib" x ".dylib"
|
||||||
#else
|
#else
|
||||||
# define MODULE_FILENAME_PREFIX "lib"
|
#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',
|
||||||
|
Loading…
Reference in New Issue
Block a user