mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-11-07 09:56:15 +01:00
98854efa74
libgirepository is not needed by most of the modules, 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. Signed-off-by: Philip Withnall <pwithnall@gnome.org> Fixes: #3401
380 lines
11 KiB
Meson
380 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()
|
||
|
||
if 'address' in glib_sanitizers
|
||
gi_gen_env_variables.append(
|
||
'ASAN_OPTIONS', 'verify_asan_link_order=0', 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=@0@'.format(h)
|
||
endforeach
|
||
gio_gir_packages += 'gio-win32-2.0'
|
||
gio_gir_args += '--pkg=gio-win32-2.0'
|
||
else
|
||
gio_gir_sources += [ gio_unix_include_headers, unix_sources ]
|
||
foreach h: gio_unix_include_headers
|
||
gio_gir_args += '--c-include=@0@'.format(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=@0@'.format(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-win32-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-win32-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=@0@'.format(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,
|
||
)
|
||
|