[libcamera-devel] [PATCH 1/4] meson: Shared Object version handling

Kieran Bingham kieran.bingham at ideasonboard.com
Sat Oct 1 00:03:27 CEST 2022


Quoting Laurent Pinchart (2022-09-30 21:50:44)
> Hi Kieran,
> 
> (CC'ing Javier)
> 
> Final lap before a release (even if it's just a minor one), that's nice
> :-)
> 
> On Fri, Sep 30, 2022 at 04:44:33PM +0100, Kieran Bingham via libcamera-devel wrote:
> > Quoting Jacopo Mondi (2022-09-30 14:54:32)
> > > On Thu, Sep 29, 2022 at 03:36:23PM +0100, Kieran Bingham via libcamera-devel wrote:
> > > > 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 and minor 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.
> > > >
> > > > Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> 
> I tried the script and it seemed to work, but compiling libcamera then
> gave me the following warnings:
> 
> warning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so.0.0' is not a readable file or directory... skipping.
> warning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so.0' is not a readable file or directory... skipping.
> warning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so' is not a readable file or directory... skipping.
> warning: source './x86-gcc-11.3.0/src/libcamera/base/libcamera-base.so.0' is not a readable file or directory... skipping

Hrm ... looks like that might be doxygen?

This fixes it.

diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in
index 88dfcddaebf6..761807005294 100644
--- a/Documentation/Doxyfile.in
+++ b/Documentation/Doxyfile.in
@@ -46,7 +46,9 @@ EXCLUDE                = @TOP_SRCDIR@/include/libcamera/base/span.h \
                          @TOP_BUILDDIR@/include/libcamera/internal/tracepoints.h \
                          @TOP_BUILDDIR@/src/libcamera/proxy/

-EXCLUDE_PATTERNS       = @TOP_BUILDDIR@/include/libcamera/ipa/*_serializer.h \
+EXCLUDE_PATTERNS       = @TOP_BUILDDIR@/src/libcamera/libcamera.so* \
+                         @TOP_BUILDDIR@/src/libcamera/base/libcamera-base.so* \
+                         @TOP_BUILDDIR@/include/libcamera/ipa/*_serializer.h \
                          @TOP_BUILDDIR@/include/libcamera/ipa/*_proxy.h \
                          @TOP_BUILDDIR@/include/libcamera/ipa/ipu3_*.h \
                          @TOP_BUILDDIR@/include/libcamera/ipa/raspberrypi_*.h \


> 
> > > > ---
> > > >  meson.build                    | 15 +++++++++++++++
> > > >  src/libcamera/base/meson.build |  1 +
> > > >  src/libcamera/meson.build      |  1 +
> > > >  3 files changed, 17 insertions(+)
> > > >
> > > > diff --git a/meson.build b/meson.build
> > > > index 72919102ad55..9bbfd0e9c784 100644
> > > > --- a/meson.build
> > > > +++ b/meson.build
> > > > @@ -26,6 +26,21 @@ endif
> > > >
> > > >  libcamera_version = libcamera_git_version.split('+')[0]
> > > >
> > > > +# Enforce Major and Minor as part of the soversion. Until we make a first major
> > > > +# release, and remain on version 0.x each release may denote ABI instabilty.
> > > 
> > > Missing a , after 0.x ?
> > 
> > Yes, looks like the , after release should move to after 0.x,
> 
> That's more readable indeed.
> 
> > > nit apart:
> > > Reviewed-by: Jacopo Mondi <jacopo at jmondi.org>
> > 
> > Thanks.
> > 
> > > > +# We can continue to consider that a patch level increment should be
> > > > +# compatible.
> > > > +project_version = meson.project_version().split('.')
> > > > +soversion = project_version[0] + '.' + project_version[1]
> 
> As we have libcamera_version and not just version, I'd have named the
> variable libcamera_soversion.
> 
> Why do you use two components of the version only ? As we don't
> guarantee ABI stability, could we use all three components for now ?
> This could then be shortened to major.minor when we'll add ABI change
> detection (but still without ABI stability), and finally to just major
> once ABI stability will be guaranteed. Javier, do you have any opinion ?

I believe we don't define ABI stability in either of major or minor. But
we 'do' (or can) in .patch. (We're also unlikely to create a .patch
relase, unless we find a specific need to fix something for a
distributions release, but distributions might still make patch
releases...).

So I don't see specific benefit in including it in the sovesion.


> > > > +
> > > > +summary({
> > > > +            'Project': meson.project_version(),
> > > > +            'Sources': libcamera_git_version,
> > > > +            'libcamera': libcamera_version,
> 
> Is there ever a case where libcamera_version should be different than
> meson.project_version() ?

*should be* ... no. *can be* yes.

I think this can occur if you clone a repo without fetching tags.

That's why it's split to highlight ;-)


On a local build that has had a 'release', but all tags removed

libcamera 0.1.0

  Versions
    Project                  : 0.1.0
    Sources                  : 0.0.0+3954-a64a132e
    libcamera                : 0.0.0
    Shared Object            : 0.1

> > > > +            'Shared Object': soversion,
> 
> I would have named this 'soname' (or 'SONAME'), that's the official
> term. 'Shared Object' is ambiguous.

It's in the 'version' section, and is the Shared Object Version. I.e.
the soversion.

It can be soname though.

> 
> > > > +        },
> > > > +        section : 'Versions')
> > > > +
> > > >  # This script gererates the .tarball-version file on a 'meson dist' command.
> 
> While at it you could fix the "gererates" typo.
> 
> > > >  meson.add_dist_script('utils/run-dist.sh')
> > > >
> > > > diff --git a/src/libcamera/base/meson.build b/src/libcamera/base/meson.build
> > > > index 3b9d74efe935..51719f112d26 100644
> > > > --- a/src/libcamera/base/meson.build
> > > > +++ b/src/libcamera/base/meson.build
> > > > @@ -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 : soversion,
> > > >                                      name_prefix : '',
> > > >                                      install : true,
> > > >                                      cpp_args : libcamera_base_args,
> > > > diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
> > > > index 63b47b177fd2..3aa7f32067f8 100644
> > > > --- a/src/libcamera/meson.build
> > > > +++ b/src/libcamera/meson.build
> > > > @@ -160,6 +160,7 @@ libcamera_deps = [
> > > >  libcamera = shared_library('libcamera',
> > > >                             libcamera_sources,
> > > >                             version : libcamera_version,
> > > > +                           soversion : soversion,
> > > >                             name_prefix : '',
> > > >                             install : true,
> > > >                             include_directories : includes,
> 
> -- 
> Regards,
> 
> Laurent Pinchart


More information about the libcamera-devel mailing list