# 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', 'gicallbackinfo.h', 'giconstantinfo.h', 'gienuminfo.h', 'gifieldinfo.h', 'giflagsinfo.h', 'gifunctioninfo.h', 'giinterfaceinfo.h', 'giobjectinfo.h', 'gipropertyinfo.h', 'giregisteredtypeinfo.h', 'girepository.h', 'girepository-autocleanups.h', 'gisignalinfo.h', 'gistructinfo.h', 'gitypeinfo.h', 'gitypelib.h', 'gitypes.h', 'giunioninfo.h', 'giunresolvedinfo.h', 'givalueinfo.h', 'givfuncinfo.h', ) girepo_ffi_headers = [ 'girffi.h', ] girepo_ffi_sources = files( 'girffi.c', ) install_headers(girepo_headers + girepo_ffi_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, ], gnu_symbol_visibility : 'hidden', ) 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 libgirepository_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, gnu_symbol_visibility : 'hidden', include_directories : [configinc, girepoinc], dependencies: [girepo_gthash_dep, libffi_dep], ) libgirepository_internals_dep = declare_dependency( link_with: libgirepository_internals, dependencies: libffi_dep, include_directories: [girepoinc], ) girepo_sources = files( 'gdump.c', 'giarginfo.c', 'gibaseinfo.c', 'gicallableinfo.c', 'gicallbackinfo.c', 'giconstantinfo.c', 'gienuminfo.c', 'gifieldinfo.c', 'giflagsinfo.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', 'giunresolvedinfo.c', 'givalueinfo.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 libgirepository = library('girepository-2.0', sources: girepo_sources + girepo_ffi_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, libgirepository_internals_dep, ], install: true, ) libgirepository_dep = declare_dependency( link_with: libgirepository, dependencies: [libglib_dep, libgobject_dep, libgio_dep, libgmodule_dep], sources: [gi_visibility_h], include_directories: [girepoinc], variables: { # Export the path for the built GLib-2.0.typelib (etc.) for when GLib is # used as a subproject. The variable names match those in # pkgconfig_variables below. 'girdir': meson.current_build_dir() / 'introspection', 'typelibdir': meson.current_build_dir() / 'introspection', }, ) executable('gi-dump-types', sources: 'gi-dump-types.c', dependencies: [ libgirepository_dep, libgiounix_dep, libgiowin32_dep ], ) pkgconfig_variables = [ 'gidatadir=${datadir}/gobject-introspection-1.0', 'girdir=' + gir_dir_pc_prefix / 'gir-1.0', 'typelibdir=${libdir}/girepository-1.0', ] pkg.generate(libgirepository, 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], ) if enable_gir subdir('introspection') endif if build_tests subdir('tests') endif subdir('compiler') subdir('decompiler') subdir('inspector')