meson: Shared Object version handling

The libcamera project is not yet ready to declare ABI nor API stability,
but it will benefit the community to be able to provide more regular
release cycles to determine 'versioned' points of history.

Ideally, these releases will be made at any ABI breakage, but can be
made at arbitary time based points along the way.

To support releases which may not be ABI stable, declare the soversion
of both the libcamera and libcamera-base library to be dependant upon
both the major minor and patch component of the project version.

As part of this, introduce a new 'Versions' summary section to highlight
the different version components that may become apparent within any
given build.

Bumping versions may leave dangling libcamera.so.* symlinks in build
directories. This will confuse Doxygen which will print during its
directory scanning phase a warning that the symlink can't be read. As we
don't need Doxygen to follow symlinks, disable it with EXCLUDE_SYMLINKS.

Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Kieran Bingham 2022-10-01 00:28:23 +01:00
parent cfe30ec54f
commit 0aac297afd
4 changed files with 36 additions and 0 deletions

View file

@ -66,6 +66,8 @@ EXCLUDE_SYMBOLS = libcamera::BoundMethodArgs \
*::details \
std::*
EXCLUDE_SYMLINKS = YES
HTML_OUTPUT = api-html
GENERATE_LATEX = NO

View file

@ -26,6 +26,38 @@ endif
libcamera_version = libcamera_git_version.split('+')[0]
# A shallow clone, or a clone without a reachable tag equivalent to the
# meson.project_version() could leave the project in a mis-described state.
# Produce a warning in this event, and fix to a best effort.
if libcamera_version != meson.project_version()
warning('The sources disagree about the version: '
+ libcamera_version + ' != ' + meson.project_version())
summary({'libcamera git version' : libcamera_git_version,
'Source version match' : false,
},
bool_yn : true, section : 'Versions')
libcamera_git_version = libcamera_git_version.replace(libcamera_version,
meson.project_version())
libcamera_version = meson.project_version()
# Append a marker to show we have modified this version string
libcamera_git_version += '-nvm'
endif
# Until we make ABI compatible releases, the full libcamera version is used as
# the soname. No ABI/API compatibility is guaranteed between releases (x.y.z).
#
# When automatic ABI based detection is used to increment the version, this
# will bump the minor number (x.y).
#
# When we declare a stable ABI/API we will provide a 1.0 release and the
# soversion at that point will be the 'major' release value (x).
libcamera_soversion = libcamera_version
summary({ 'Sources': libcamera_git_version, }, section : 'Versions')
# This script generates the .tarball-version file on a 'meson dist' command.
meson.add_dist_script('utils/run-dist.sh')

View file

@ -51,6 +51,7 @@ libcamera_base_args = [ '-DLIBCAMERA_BASE_PRIVATE' ]
libcamera_base_lib = shared_library('libcamera-base',
[libcamera_base_sources, libcamera_base_headers],
version : libcamera_version,
soversion : libcamera_soversion,
name_prefix : '',
install : true,
cpp_args : libcamera_base_args,

View file

@ -161,6 +161,7 @@ libcamera_deps = [
libcamera = shared_library('libcamera',
libcamera_sources,
version : libcamera_version,
soversion : libcamera_soversion,
name_prefix : '',
install : true,
include_directories : includes,