glib/girepository/meson.build
Philip Withnall dda97fea98 girepository: Ensure gi-visibility.h is built before girepository-internals
It gets transitively included.

Signed-off-by: Philip Withnall <philip@tecnocode.co.uk>

Helps: #3155
2023-10-25 18:41:05 +01:00

219 lines
5.5 KiB
Meson

# SPDX-License-Identifier: LGPL-2.1-or-later
# SPDX-FileCopyrightText: 2017 Patrick Griffis
# SPDX-FileCopyrightText: 2017 Danny Forghieri
# SPDX-FileCopyrightText: 2017 Nirbheek Chauhan
# SPDX-FileCopyrightText: 2017, 2021, 2022 Emmanuele Bassi
# SPDX-FileCopyrightText: 2018 Mathieu Duponchelle
# SPDX-FileCopyrightText: 2018, 2019, 2020 Christoph Reiter
# SPDX-FileCopyrightText: 2018 Kai Kang
# SPDX-FileCopyrightText: 2018 Carlos Garnacho
# SPDX-FileCopyrightText: 2018, 2019, 2020 Alexander Kanavin
# SPDX-FileCopyrightText: 2019, 2020 Chun-wei Fan
# SPDX-FileCopyrightText: 2019 Aaron Boxer
# SPDX-FileCopyrightText: 2019 Thibault Saunier
# SPDX-FileCopyrightText: 2019 Joshua Watt
# SPDX-FileCopyrightText: 2020 Xavier Claessens
# SPDX-FileCopyrightText: 2020 Philip Chimento
# SPDX-FileCopyrightText: 2021 John Ericson
# SPDX-FileCopyrightText: 2021 Cimbali
# SPDX-FileCopyrightText: 2021, 2023 Simon McVittie
# SPDX-FileCopyrightText: 2022 Andoni Morales Alastruey
subdir('cmph')
gir_dir_prefix = get_option('gir_dir_prefix')
if gir_dir_prefix == '' or gir_dir_prefix == get_option('datadir')
gir_dir_prefix = get_option('datadir')
gir_dir_pc_prefix = '${datadir}'
else
gir_dir_pc_prefix = join_paths('${prefix}', gir_dir_prefix)
endif
glib_girdir = get_option('prefix') / gir_dir_prefix / 'gir-1.0'
gir_includedir = glib_includedir / 'girepository'
gi_visibility_h = custom_target(
output: 'gi-visibility.h',
command: [gen_visibility_macros, meson.project_version(), 'visibility-macros', 'GI', '@OUTPUT@'],
install: true,
install_dir: gir_includedir,
install_tag: 'devel',
)
girepo_headers = files(
'giarginfo.h',
'gibaseinfo.h',
'gicallableinfo.h',
'giconstantinfo.h',
'gienuminfo.h',
'gifieldinfo.h',
'gifunctioninfo.h',
'giinterfaceinfo.h',
'giobjectinfo.h',
'gipropertyinfo.h',
'giregisteredtypeinfo.h',
'girepository.h',
'girffi.h',
'gisignalinfo.h',
'gistructinfo.h',
'gitypeinfo.h',
'gitypelib.h',
'gitypes.h',
'giunioninfo.h',
'givfuncinfo.h',
)
install_headers(girepo_headers, install_dir: gir_includedir)
gir_c_args = [
'-DGI_COMPILATION',
'-DG_LOG_DOMAIN="GLib-GIRepository"',
'-DGIR_SUFFIX="gir-1.0"',
'-DGIR_DIR="@0@"'.format(glib_girdir),
'-DGOBJECT_INTROSPECTION_LIBDIR="@0@"'.format(glib_libdir),
'-DGOBJECT_INTROSPECTION_DATADIR="@0@"'.format(glib_datadir),
]
custom_c_args = []
if cc.get_id() != 'msvc'
custom_c_args = cc.get_supported_arguments([
'-Wno-old-style-definition',
'-Wno-cast-align',
])
endif
girepo_gthash_lib = static_library('girepository-gthash',
sources: ['gthash.c', gi_visibility_h],
include_directories : [configinc, girepoinc],
c_args: gir_c_args + custom_c_args,
dependencies: [
cmph_dep,
libglib_dep,
libgmodule_dep,
libgobject_dep,
],
)
girepo_gthash_dep = declare_dependency(
link_with: girepo_gthash_lib,
dependencies: [libglib_dep, libgmodule_dep, libgobject_dep],
include_directories: [girepoinc],
)
if cc.get_id() != 'msvc'
custom_c_args = cc.get_supported_arguments([
'-Wno-unused-parameter',
'-Wno-duplicated-branches',
'-Wno-cast-align',
])
endif
libgirepo_internals = static_library('girepository-internals',
sources: [
'girmodule.c',
'girnode.c',
'giroffsets.c',
'girparser.c',
'girwriter.c',
gi_visibility_h,
],
c_args: gir_c_args + custom_c_args,
include_directories : [configinc, girepoinc],
dependencies: [girepo_gthash_dep, libffi_dep],
)
libgirepo_internals_dep = declare_dependency(
link_with: libgirepo_internals,
dependencies: libffi_dep,
include_directories: [girepoinc],
)
girepo_sources = files(
'gdump.c',
'giarginfo.c',
'gibaseinfo.c',
'gicallableinfo.c',
'giconstantinfo.c',
'gienuminfo.c',
'gifieldinfo.c',
'gifunctioninfo.c',
'ginvoke.c',
'giinterfaceinfo.c',
'giobjectinfo.c',
'gipropertyinfo.c',
'giregisteredtypeinfo.c',
'girepository.c',
'girffi.c',
'gisignalinfo.c',
'gistructinfo.c',
'gitypeinfo.c',
'gitypelib.c',
'giunioninfo.c',
'givfuncinfo.c',
)
if cc.get_id() != 'msvc'
custom_c_args = cc.get_supported_arguments([
'-Wno-unused-parameter',
'-Wno-duplicated-branches',
'-Wno-type-limits',
'-Wno-cast-align',
'-Wno-missing-field-initializers',
])
endif
libgirepo = shared_library('girepository-2.0',
sources: girepo_sources + [gi_visibility_h],
include_directories: [configinc, girepoinc],
c_args: gir_c_args,
version: library_version,
soversion: soversion,
darwin_versions: darwin_versions,
gnu_symbol_visibility: 'hidden',
link_args: glib_link_flags,
dependencies: [
libglib_dep,
libgobject_dep,
libgmodule_dep,
libgio_dep,
libgirepo_internals_dep,
],
install: true,
)
libgirepo_dep = declare_dependency(
link_with: libgirepo,
dependencies: [libglib_dep, libgobject_dep, libgio_dep, libgmodule_dep],
include_directories: [girepoinc],
)
executable('gi-dump-types',
sources: 'gi-dump-types.c',
dependencies: [
libgirepo_dep,
libgiounix_dep,
libgiowin32_dep
],
)
pkgconfig_variables = [
'datadir=' + '${prefix}' / get_option('datadir'),
'bindir=' + '${prefix}' / get_option('bindir'),
'gidatadir=${datadir}/gobject-introspection-1.0',
'girdir=' + gir_dir_pc_prefix / 'gir-1.0',
'typelibdir=${libdir}/girepository-1.0',
]
pkg.generate(libgirepo,
name: 'girepository',
version: glib_version,
filebase: 'girepository-2.0',
install_dir: glib_pkgconfigreldir,
description: 'GObject Introspection repository parser',
variables: pkgconfig_variables,
libraries: [libglib_dep, libgobject_dep],
)