mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-26 07:26:15 +01:00
3daa3ac835
It did not work for dylibs, was full of ancient, deprecated code, and was not actually used anyway.
123 lines
3.9 KiB
Meson
123 lines
3.9 KiB
Meson
gmoduleconf_conf = configuration_data()
|
|
|
|
g_module_need_uscore = 0
|
|
g_module_broken_rtld_global = 0
|
|
g_module_have_dlerror = 0
|
|
|
|
g_module_impl = ''
|
|
|
|
# On Windows force native WIN32 shared lib loader
|
|
if host_system == 'windows'
|
|
g_module_impl = 'G_MODULE_IMPL_WIN32'
|
|
# Force native AIX library loader
|
|
# dlopen() filepath must be of the form /path/libname.a(libname.so)
|
|
elif host_system == 'aix'
|
|
g_module_impl = 'G_MODULE_IMPL_AR'
|
|
elif have_dlopen_dlsym
|
|
g_module_impl = 'G_MODULE_IMPL_DL'
|
|
endif
|
|
|
|
# additional checks for G_MODULE_IMPL_DL
|
|
if g_module_impl == 'G_MODULE_IMPL_DL'
|
|
# FIXME: check for OSF1/5.0 RTLD_GLOBAL brokenness (is this still relevant?)
|
|
|
|
# Check whether we need preceding underscores
|
|
if cc.get_id() == 'msvc' or cc.get_id() == 'clang-cl'
|
|
message('Building for MSVC: assuming that symbols are prefixed with underscore')
|
|
g_module_need_uscore = 1
|
|
elif meson.has_exe_wrapper()
|
|
# FIXME: communicate result via stdout instead of return value, so non-0 return is not printed in bold red
|
|
rres = cc.run(dlopen_dlsym_test_code,
|
|
dependencies : libdl_dep,
|
|
name : 'dlsym() preceding underscores')
|
|
if host_system == 'windows' or rres.returncode() == 0
|
|
g_module_need_uscore = 1
|
|
endif
|
|
else
|
|
message('Cross-compiling: assuming that symbols aren\'t prefixed with underscore')
|
|
g_module_need_uscore = 0
|
|
endif
|
|
|
|
if cc.has_function('dlerror', dependencies : libdl_dep)
|
|
g_module_have_dlerror = 1
|
|
endif
|
|
endif
|
|
|
|
# Done, have we got an implementation?
|
|
if g_module_impl == ''
|
|
g_module_impl = '0'
|
|
message('WARNING: No suitable GModule implementation found!')
|
|
endif
|
|
|
|
gmoduleconf_conf.set('G_MODULE_IMPL', g_module_impl)
|
|
gmoduleconf_conf.set('G_MODULE_SUPPORTED', g_module_impl != '0')
|
|
gmoduleconf_conf.set('G_MODULE_HAVE_DLERROR', g_module_have_dlerror)
|
|
gmoduleconf_conf.set('G_MODULE_NEED_USCORE', g_module_need_uscore)
|
|
gmoduleconf_conf.set('G_MODULE_BROKEN_RTLD_GLOBAL', g_module_broken_rtld_global)
|
|
|
|
gmoduleconf_h = configure_file(input : 'gmoduleconf.h.in',
|
|
output : 'gmoduleconf.h',
|
|
configuration : gmoduleconf_conf)
|
|
|
|
install_headers(['gmodule.h'], subdir : 'glib-2.0')
|
|
|
|
gmodule_sources = ['gmodule.c']
|
|
if host_system == 'windows'
|
|
gmodule_win_rc = configure_file(
|
|
input: 'gmodule.rc.in',
|
|
output: 'gmodule.rc',
|
|
configuration: glibconfig_conf,
|
|
)
|
|
gmodule_win_res = windows.compile_resources(gmodule_win_rc)
|
|
gmodule_sources += [gmodule_win_res]
|
|
endif
|
|
|
|
libgmodule = library('gmodule-2.0',
|
|
sources : gmodule_sources,
|
|
version : library_version,
|
|
soversion : soversion,
|
|
darwin_versions : darwin_versions,
|
|
install : true,
|
|
include_directories : [configinc, gmoduleinc],
|
|
dependencies : [libdl_dep, libglib_dep],
|
|
c_args : ['-DG_LOG_DOMAIN="GModule"'] + glib_hidden_visibility_args,
|
|
link_args : [glib_link_flags],
|
|
)
|
|
|
|
supported_var = 'gmodule_supported=@0@'.format(g_module_impl != '0')
|
|
|
|
pkg.generate(libgmodule,
|
|
libraries : [thread_dep],
|
|
requires : ['glib-2.0'],
|
|
version : glib_version,
|
|
variables : [supported_var],
|
|
install_dir : glib_pkgconfigreldir,
|
|
filebase : 'gmodule-no-export-2.0',
|
|
name : 'GModule',
|
|
description : 'Dynamic module loader for GLib',
|
|
)
|
|
|
|
pkg.generate(libraries : [libgmodule, export_dynamic_ldflags],
|
|
requires : ['glib-2.0'],
|
|
version : glib_version,
|
|
variables : [supported_var],
|
|
install_dir : glib_pkgconfigreldir,
|
|
filebase : 'gmodule-export-2.0',
|
|
name : 'GModule',
|
|
description : 'Dynamic module loader for GLib',
|
|
)
|
|
|
|
pkg.generate(libraries : [libgmodule, export_dynamic_ldflags],
|
|
requires : ['glib-2.0'],
|
|
version : glib_version,
|
|
variables : [supported_var],
|
|
install_dir : glib_pkgconfigreldir,
|
|
filebase : 'gmodule-2.0',
|
|
name : 'GModule',
|
|
description : 'Dynamic module loader for GLib',
|
|
)
|
|
|
|
libgmodule_dep = declare_dependency(link_with : libgmodule,
|
|
include_directories : [gmoduleinc],
|
|
dependencies : [libglib_dep])
|