glib/girepository/meson.build
Philip Withnall a35c6f764d girepository: Re-number GIR file from 2.0 to 3.0
The library shipped by gobject-introspection.git was
`libgirepository-1.0.so`, but for some reason (accident?), it was
accompanied by `GIRepository-2.0.gir`. That’s been the case for the last
6 years.

In moving libgirepository to glib.git, we’ve bumped the version to
`libgirepository-2.0.so`, and have changed the API.

In order to avoid a collision between the new `GIRepository-2.0.gir` and
the old `GIRepository-2.0.gir`, we can either:
 * Rename the basename of the library (confusing).
 * Re-version the whole thing to 3.0 (would mean it’s completely out of
   sync with the rest of glib.git, and would lead to build system
   misery).
 * Re-version only the GIR file (a bit confusing, but hopefully less
   confusing).

So I’ve done the final option: glib.git now ships
`libgirepository-2.0.so` and `GIRepository-3.0.gir`. This avoids
collisions with what’s shipped by gobject-introspection.git, while
hopefully still making some sense.

We considered using version number 2.1 rather than 3.0, but decided
against it because that makes it look like it’s compatible with version
2.0, which it isn’t.

Note that none of these changes touch the
`${prefix}/lib/girepository-1.0` and `${prefix}/share/gir-1.0`
directories. The version numbers in those refer to the versions of the
GIR and typelib file formats, which have not changed.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>

Helps: #3155
2023-12-22 12:21:57 +00:00

260 lines
6.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',
'gicallbackinfo.h',
'giconstantinfo.h',
'gienuminfo.h',
'gifieldinfo.h',
'gifunctioninfo.h',
'giinterfaceinfo.h',
'giobjectinfo.h',
'gipropertyinfo.h',
'giregisteredtypeinfo.h',
'girepository.h',
'gisignalinfo.h',
'gistructinfo.h',
'gitypeinfo.h',
'gitypelib.h',
'gitypes.h',
'giunioninfo.h',
'giunresolvedinfo.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,
],
)
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,
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',
'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',
'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 = shared_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],
)
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
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',
]
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,
dependencies: [ libglib_dep, libgobject_dep, libgmodule_dep, libgio_dep ],
extra_args: gir_args + libgirepository_gir_args,
)
endif
if build_tests
subdir('tests')
endif