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.can_run_host_binaries() # 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.compiled() and 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) # Expose as variable to be used by gobject-introspection # when it includes GLib as a subproject gmodule_h = files('gmodule.h') gmodule_c = files('gmodule.c') install_headers([gmodule_h], subdir : 'glib-2.0') gvisibility_h = configure_file( output: 'gmodule-visibility.h', command: [gen_visibility_macros, meson.project_version(), 'visibility-macros', 'GMODULE', '@OUTPUT@'], ) install_headers(gvisibility_h, subdir : 'glib-2.0/gmodule') 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"', '-DGMODULE_COMPILATION'], gnu_symbol_visibility : 'hidden', 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]) meson.override_dependency('gmodule-no-export-2.0', libgmodule_dep) meson.override_dependency('gmodule-export-2.0', libgmodule_dep) meson.override_dependency('gmodule-2.0', libgmodule_dep) if build_tests subdir('tests') endif