mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-07-29 13:23:31 +02:00
If we use the system libraries we can't really debug it, so ensure we're using the currently built libraries for it too. We're doing it globally to ensure that we're testing the result that this version of the libraries are building
386 lines
11 KiB
Meson
386 lines
11 KiB
Meson
|
||
gi_identifier_prefix = 'G'
|
||
gi_symbol_prefix = 'g'
|
||
|
||
gi_gen_shared_sources = [
|
||
# Required to compile gdump
|
||
gmodule_visibility_h,
|
||
]
|
||
|
||
gi_gen_shared_dependencies = [
|
||
# libgirepository is not needed by most of the modules below, but it is needed
|
||
# by the g-ir-scanner generated dumper program. If we don’t explicitly include
|
||
# the local version of it here, Meson will implicitly link against it anyway,
|
||
# and that might pull in a different version, or try to link against a
|
||
# half-built local version as the build ordering dependency tree won’t
|
||
# reflect this relationship.
|
||
libgirepository_dep,
|
||
]
|
||
|
||
gi_gen_env_variables = environment()
|
||
|
||
# Use currently built libraries to run g-ir-scanner and the various tools
|
||
# this may not happen if we don't set the library paths.
|
||
gi_gen_env_variables.prepend(glib_exec_var_library_path,
|
||
fs.parent(libglib.full_path()), fs.parent(libgobject.full_path()),
|
||
fs.parent(libgmodule.full_path()), fs.parent(libgio.full_path()))
|
||
|
||
if 'address' in glib_sanitizers
|
||
gi_gen_env_variables.append(
|
||
'ASAN_OPTIONS', glib_exec_asan_option_ignore_preload, separator: ',')
|
||
endif
|
||
|
||
if host_system == 'windows'
|
||
# Use gio-2.0-uninstalled.pc to find the paths where the GLib DLLs (and their dependent non-system
|
||
# DLLs that are built as subprojects) are located
|
||
check_built_dll_paths_cmd = [get_dll_paths_script, '--build-path=@0@'.format(meson.project_build_root())]
|
||
meson_pkgconfig_paths = get_option('pkg_config_path')
|
||
if meson_pkgconfig_paths.length() > 0
|
||
check_built_dll_paths_cmd += '--pkg-config-path=@0@'.format(''.join(meson_pkgconfig_paths))
|
||
endif
|
||
check_built_dll_paths = run_command(
|
||
check_built_dll_paths_cmd,
|
||
capture: true,
|
||
check: true,
|
||
)
|
||
# hmm, no os.pathsep in Meson to make this more portable, if needed?
|
||
gi_scanner_dll_paths = check_built_dll_paths.stdout().strip().split(';')
|
||
|
||
# Also assume the existing paths in %PATH% to be considered for DLLs
|
||
message('Ensure that all of GLib\'s dependent non-system DLLs that are not built')
|
||
message('alongside with GLib can be found in paths in %PATH%')
|
||
message('Check this if building .gir files fail due to \'ImportError: DLL load failed while importing _giscanner\'')
|
||
|
||
gi_gen_env_variables.set('GI_EXTRA_BASE_DLL_DIRS', gi_scanner_dll_paths)
|
||
endif
|
||
|
||
# GLib
|
||
glib_gir_sources = [
|
||
gi_gen_shared_sources,
|
||
glibconfig_h,
|
||
gversionmacros_h,
|
||
glib_visibility_h,
|
||
glib_headers,
|
||
glib_deprecated_headers,
|
||
glib_sub_headers,
|
||
glib_enumtypes_h,
|
||
glib_types_h,
|
||
glib_deprecated_sources,
|
||
glib_sources,
|
||
files('../../glib/docs.c'),
|
||
]
|
||
|
||
# For API compatibility reasons, GLib-2.0.gir needs to contain the platform
|
||
# specific APIs which are also present in the (newer) GLibUnix-2.0.gir and
|
||
# GLibWin32-2.0.gir repositories.
|
||
# See https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3892#note_2001361
|
||
# These can be dropped when GLib next breaks API (i.e. with GLib-3.0.gir).
|
||
if host_system == 'windows'
|
||
glib_gir_sources += files('../../glib/gwin32.h')
|
||
else
|
||
glib_gir_sources += files('../../glib/glib-unix.h')
|
||
endif
|
||
|
||
glib_gir = gnome.generate_gir(libglib,
|
||
sources: glib_gir_sources,
|
||
namespace: 'GLib',
|
||
nsversion: '2.0',
|
||
identifier_prefix: gi_identifier_prefix,
|
||
symbol_prefix: gi_symbol_prefix,
|
||
export_packages: 'glib-2.0',
|
||
header: 'glib.h',
|
||
install: true,
|
||
install_dir_gir: glib_girdir,
|
||
dependencies: gi_gen_shared_dependencies + [
|
||
libgobject_dep,
|
||
],
|
||
env: gi_gen_env_variables,
|
||
extra_args: gir_args + [
|
||
'-DGLIB_COMPILATION',
|
||
'-DGETTEXT_PACKAGE="dummy"',
|
||
'--symbol-prefix=glib',
|
||
'--library-path=' + meson.current_build_dir(),
|
||
'--library=gobject-2.0',
|
||
],
|
||
)
|
||
|
||
if host_system == 'windows'
|
||
glib_win32_gir = gnome.generate_gir(libglib,
|
||
sources: [
|
||
gi_gen_shared_sources,
|
||
glib_win32_headers,
|
||
],
|
||
namespace: 'GLibWin32',
|
||
nsversion: '2.0',
|
||
identifier_prefix: gi_identifier_prefix,
|
||
symbol_prefix: gi_symbol_prefix,
|
||
export_packages: 'glib-2.0',
|
||
header: 'glib.h',
|
||
includes: [ glib_gir[0] ],
|
||
install: true,
|
||
install_dir_gir: glib_girdir,
|
||
dependencies: gi_gen_shared_dependencies + [
|
||
libgobject_dep,
|
||
],
|
||
env: gi_gen_env_variables,
|
||
extra_args: gir_args + [
|
||
'-DGLIB_COMPILATION',
|
||
'-DGETTEXT_PACKAGE="dummy"',
|
||
'--symbol-prefix=glib',
|
||
'--symbol-prefix=g_win32',
|
||
'--identifier-prefix=GWin32',
|
||
'--library-path=' + meson.current_build_dir(),
|
||
'--library=gobject-2.0',
|
||
],
|
||
)
|
||
else
|
||
glib_unix_gir = gnome.generate_gir(libglib,
|
||
sources: [
|
||
gi_gen_shared_sources,
|
||
glib_unix_headers,
|
||
],
|
||
namespace: 'GLibUnix',
|
||
nsversion: '2.0',
|
||
identifier_prefix: gi_identifier_prefix,
|
||
symbol_prefix: gi_symbol_prefix,
|
||
export_packages: 'glib-2.0',
|
||
header: 'glib.h',
|
||
includes: [ glib_gir[0] ],
|
||
install: true,
|
||
install_dir_gir: glib_girdir,
|
||
dependencies: gi_gen_shared_dependencies + [
|
||
libgobject_dep,
|
||
],
|
||
env: gi_gen_env_variables,
|
||
extra_args: gir_args + [
|
||
'-DGLIB_COMPILATION',
|
||
'-DGETTEXT_PACKAGE="dummy"',
|
||
'--symbol-prefix=glib',
|
||
'--symbol-prefix=g_unix',
|
||
'--identifier-prefix=GUnix',
|
||
'--library-path=' + meson.current_build_dir(),
|
||
'--library=gobject-2.0',
|
||
'--c-include=glib-unix.h',
|
||
],
|
||
)
|
||
endif
|
||
|
||
# GObject
|
||
gobject_gir = gnome.generate_gir(libgobject,
|
||
sources: [
|
||
gi_gen_shared_sources,
|
||
gobject_visibility_h,
|
||
gobject_install_headers,
|
||
gobject_sources,
|
||
],
|
||
namespace: 'GObject',
|
||
nsversion: '2.0',
|
||
identifier_prefix: gi_identifier_prefix,
|
||
symbol_prefix: gi_symbol_prefix,
|
||
export_packages: 'gobject-2.0',
|
||
header: 'glib-object.h',
|
||
includes: [ glib_gir[0] ],
|
||
install: true,
|
||
install_dir_gir: glib_girdir,
|
||
dependencies: gi_gen_shared_dependencies,
|
||
env: gi_gen_env_variables,
|
||
extra_args: gir_args + [
|
||
'-DGOBJECT_COMPILATION',
|
||
'--symbol-prefix=gobject',
|
||
],
|
||
)
|
||
|
||
# GModule
|
||
gmodule_gir = gnome.generate_gir(libgmodule,
|
||
sources: [
|
||
gi_gen_shared_sources,
|
||
gmoduleconf_h,
|
||
gmodule_h,
|
||
gmodule_c,
|
||
gmodule_deprecated_c,
|
||
gmodule_visibility_h,
|
||
],
|
||
namespace: 'GModule',
|
||
nsversion: '2.0',
|
||
identifier_prefix: gi_identifier_prefix,
|
||
symbol_prefix: gi_symbol_prefix,
|
||
export_packages: 'gmodule-2.0',
|
||
header: 'gmodule.h',
|
||
includes: [ glib_gir[0] ],
|
||
install: true,
|
||
install_dir_gir: glib_girdir,
|
||
dependencies: gi_gen_shared_dependencies + [
|
||
libglib_dep,
|
||
],
|
||
env: gi_gen_env_variables,
|
||
extra_args: gir_args + [
|
||
'-DGMODULE_COMPILATION',
|
||
'-DGETTEXT_PACKAGE="dummy"',
|
||
'--symbol-prefix=gmodule',
|
||
],
|
||
)
|
||
|
||
# Gio
|
||
gio_gir_sources = [
|
||
gi_gen_shared_sources,
|
||
gio_visibility_h,
|
||
gioenumtypes_h,
|
||
gnetworking_h,
|
||
gio_headers,
|
||
gio_base_sources,
|
||
application_sources,
|
||
gdbus_sources,
|
||
contenttype_sources,
|
||
settings_sources,
|
||
]
|
||
gio_gir_packages = [ 'gio-2.0' ]
|
||
gio_gir_args = [
|
||
'-DGIO_COMPILATION',
|
||
'-DG_SETTINGS_ENABLE_BACKEND',
|
||
'--symbol-prefix=gio',
|
||
]
|
||
|
||
# For API compatibility reasons, Gio-2.0.gir needs to contain the platform
|
||
# specific APIs which are also present in the (newer) GioUnix-2.0.gir and
|
||
# GioWin32-2.0.gir repositories.
|
||
# See https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3892#note_2001361
|
||
# These can be dropped when GIO next breaks API (i.e. with Gio-3.0.gir).
|
||
if host_system == 'windows'
|
||
gio_gir_sources += [ gio_win32_include_headers, win32_sources ]
|
||
foreach h: gio_win32_include_headers
|
||
gio_gir_args += '--c-include=gio/' + fs.name(h)
|
||
endforeach
|
||
gio_gir_packages += 'gio-windows-2.0'
|
||
gio_gir_args += '--pkg=gio-windows-2.0'
|
||
else
|
||
gio_gir_sources += [ gio_unix_include_headers, unix_sources ]
|
||
foreach h: gio_unix_include_headers
|
||
gio_gir_args += '--c-include=gio/' + fs.name(h)
|
||
endforeach
|
||
gio_gir_packages += 'gio-unix-2.0'
|
||
gio_gir_args += '--pkg=gio-unix-2.0'
|
||
endif
|
||
|
||
gio_gir = gnome.generate_gir(libgio,
|
||
sources: gio_gir_sources,
|
||
namespace: 'Gio',
|
||
nsversion: '2.0',
|
||
identifier_prefix: gi_identifier_prefix,
|
||
symbol_prefix: gi_symbol_prefix,
|
||
export_packages: gio_gir_packages,
|
||
header: 'gio/gio.h',
|
||
includes: [ glib_gir[0], gmodule_gir[0], gobject_gir[0] ],
|
||
install: true,
|
||
install_dir_gir: glib_girdir,
|
||
dependencies: gi_gen_shared_dependencies + [
|
||
libglib_dep,
|
||
libgobject_dep,
|
||
libgmodule_dep,
|
||
],
|
||
env: gi_gen_env_variables,
|
||
extra_args: gir_args + gio_gir_args,
|
||
)
|
||
|
||
if host_system == 'windows'
|
||
gio_win32_gir_c_includes = []
|
||
foreach h: gio_win32_include_headers
|
||
gio_win32_gir_c_includes += '--c-include=gio/' + fs.name(h)
|
||
endforeach
|
||
|
||
gio_win32_gir = gnome.generate_gir(libgio,
|
||
sources: gio_win32_include_headers + win32_sources,
|
||
namespace: 'GioWin32',
|
||
nsversion: '2.0',
|
||
identifier_prefix: gi_identifier_prefix,
|
||
symbol_prefix: gi_symbol_prefix,
|
||
export_packages: [ 'gio-windows-2.0' ],
|
||
header: 'gio/gio.h',
|
||
includes: [ glib_gir[0], gmodule_gir[0], gobject_gir[0], gio_gir[0] ],
|
||
install: true,
|
||
install_dir_gir: glib_girdir,
|
||
dependencies: gi_gen_shared_dependencies + [
|
||
libglib_dep,
|
||
libgobject_dep,
|
||
libgmodule_dep,
|
||
],
|
||
env: gi_gen_env_variables,
|
||
extra_args: gir_args + gio_gir_args + gio_win32_gir_c_includes + [
|
||
'--pkg=gio-windows-2.0',
|
||
'--symbol-prefix=g_win32',
|
||
'--identifier-prefix=GWin32'
|
||
],
|
||
)
|
||
gio_platform_gir = gio_win32_gir
|
||
else
|
||
gio_unix_gir_c_includes = []
|
||
foreach h: gio_unix_include_headers
|
||
gio_unix_gir_c_includes += '--c-include=gio/' + fs.name(h)
|
||
endforeach
|
||
|
||
gio_unix_gir = gnome.generate_gir(libgio,
|
||
sources: gio_unix_include_headers + unix_sources,
|
||
namespace: 'GioUnix',
|
||
nsversion: '2.0',
|
||
identifier_prefix: gi_identifier_prefix,
|
||
symbol_prefix: gi_symbol_prefix,
|
||
export_packages: [ 'gio-unix-2.0' ],
|
||
header: 'gio/gio.h',
|
||
includes: [ glib_gir[0], gmodule_gir[0], gobject_gir[0], gio_gir[0] ],
|
||
install: true,
|
||
install_dir_gir: glib_girdir,
|
||
dependencies: gi_gen_shared_dependencies + [
|
||
libglib_dep,
|
||
libgobject_dep,
|
||
libgmodule_dep,
|
||
],
|
||
env: gi_gen_env_variables,
|
||
extra_args: gir_args + gio_gir_args + gio_unix_gir_c_includes + [
|
||
'--pkg=gio-unix-2.0',
|
||
'--symbol-prefix=g_unix',
|
||
'--identifier-prefix=GUnix'
|
||
],
|
||
)
|
||
gio_platform_gir = gio_unix_gir
|
||
endif
|
||
|
||
# GIRepository
|
||
libgirepository_gir_sources = [
|
||
gi_visibility_h,
|
||
girepo_headers,
|
||
girepo_sources,
|
||
]
|
||
libgirepository_gir_packages = [ 'girepository-2.0' ]
|
||
libgirepository_gir_args = [
|
||
'-DGI_COMPILATION',
|
||
'--symbol-prefix=gi',
|
||
'--identifier-prefix=GI',
|
||
]
|
||
|
||
gi_libgirepository_gen_env_variables = environment()
|
||
|
||
if host_system == 'windows'
|
||
gi_libgirepository_gen_env_variables.set('GI_EXTRA_BASE_DLL_DIRS', gi_scanner_dll_paths)
|
||
endif
|
||
|
||
girepository_gir = gnome.generate_gir(libgirepository,
|
||
sources: libgirepository_gir_sources,
|
||
namespace: 'GIRepository',
|
||
nsversion: '3.0',
|
||
identifier_prefix: 'GI',
|
||
symbol_prefix: 'gi',
|
||
export_packages: libgirepository_gir_packages,
|
||
header: 'girepository/girepository.h',
|
||
includes: [ glib_gir[0], gmodule_gir[0], gobject_gir[0], gio_gir[0] ],
|
||
install: true,
|
||
install_dir_gir: glib_girdir,
|
||
dependencies: gi_gen_shared_dependencies + [
|
||
libglib_dep,
|
||
libgobject_dep,
|
||
libgmodule_dep,
|
||
libgio_dep,
|
||
],
|
||
extra_args: gir_args + libgirepository_gir_args,
|
||
env: gi_libgirepository_gen_env_variables,
|
||
)
|
||
|