mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-11-03 17:48:56 +01:00 
			
		
		
		
	There was only one `-Wsign-conversion` warning in the whole subdirectory, so that was easy. Signed-off-by: Philip Withnall <pwithnall@gnome.org> Helps: #3405
		
			
				
	
	
		
			152 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Meson
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			4.7 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 = ''
 | 
						|
 | 
						|
g_module_includedir = glib_includedir / 'gmodule'
 | 
						|
 | 
						|
# 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()
 | 
						|
    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 and rres.stdout().to_int() == 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')
 | 
						|
gmodule_deprecated_c = files('gmodule-deprecated.c')
 | 
						|
 | 
						|
install_headers([gmodule_h], install_dir : glib_includedir)
 | 
						|
 | 
						|
gmodule_visibility_h = custom_target(
 | 
						|
  output: 'gmodule-visibility.h',
 | 
						|
  command: [gen_visibility_macros, meson.project_version(), 'visibility-macros', 'GMODULE', '@OUTPUT@'],
 | 
						|
  install: true,
 | 
						|
  install_dir: g_module_includedir,
 | 
						|
)
 | 
						|
 | 
						|
gmodule_sources = [gmodule_c, gmodule_visibility_h, gmodule_deprecated_c]
 | 
						|
 | 
						|
if host_system == 'windows' and glib_build_shared
 | 
						|
  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', warning_sign_conversion_args],
 | 
						|
  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',
 | 
						|
)
 | 
						|
 | 
						|
gmodule_inc_dep = declare_dependency(
 | 
						|
  include_directories: [gmoduleinc],
 | 
						|
  sources: [gmodule_visibility_h],
 | 
						|
)
 | 
						|
 | 
						|
libgmodule_dep = declare_dependency(link_with : libgmodule,
 | 
						|
  dependencies : [libglib_dep, gmodule_inc_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
 |