mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-26 07:26:15 +01:00
51e3e7d9ae
Meson 1.5.1 is available in the fd.o SDK and in Debian testing, so the glib Meson policy says we can update. Update the minimum only as far as 1.4.0 because we don't yet have a need for 1.5.0. This allows us to: - Use file.full_path() to avoid deprecation warnings on str.format(file). - Set c_std=gnu99,c99 to avoid deprecation warnings with gnu99 on MSVC. Update all the CI builds to use the latest 1.4.x patch release, 1.4.2. The FreeBSD runner cannot be updated via `gitlab-ci.yml`, so will be broken for now. Similarly, the macOS build will not work unless `-Dc_std=gnu99` is specified at configure time, due to https://github.com/mesonbuild/meson/issues/13639.
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=' + h.full_path()
|
||
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=' + h.full_path()
|
||
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=' + h.full_path()
|
||
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=' + h.full_path()
|
||
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,
|
||
)
|
||
|