[libcamera-devel] [PATCH] meson: Use x.y soname versioning

Kieran Bingham kieran.bingham at ideasonboard.com
Mon May 1 14:25:14 CEST 2023


Quoting Laurent Pinchart (2023-05-01 12:55:56)
> Hi Kieran,
> 
> Thank you for the patch.
> 
> On Mon, May 01, 2023 at 12:44:52PM +0100, Kieran Bingham via libcamera-devel wrote:
> > Now that we identify ABI breakages,
> 
> Can you explain how so ? Ideally I'd like a script in the utils/
> directory to handle the ABI checks.

I have this snippet in a local Makefile.

"""
VERSION:=$(shell ./utils/gen-version.sh)
abi-dump:
	echo Version : $(VERSION)
	mkdir -p abi/$(VERSION)/
	meson abi/build \
		-Ddocumentation=disabled \
		-Dcam=disabled \
		-Dqcam=disabled \
		-Dgstreamer=disabled \
		-Dlc-compliance=disabled \
		-Dtracing=disabled \
		-Dpipelines=
	ninja -C abi/build
	DESTDIR=$(shell pwd)/abi/$(VERSION)/ ninja -C abi/build install
	cat libcamera-abi-dump.xml.in | sed 's/VERSION/$(VERSION)/g' > libcamera-abi-dump.xml
	abi-compliance-checker \
		-lib libcamera \
		-v1 $(VERSION) \
		-dump libcamera-abi-dump.xml \
		-dump-path ./abi/v$(VERSION).abi.dump

RELEASE_ABI=$(shell ./utils/semver get release $(VERSION))
abi-check:
	abi-compliance-checker -l libcamera \
		-old abi/v$(RELEASE_ABI).abi.dump \
		-new abi/v$(VERSION).abi.dump
"""

Where 'libcamera-abi-dump.xml.in' contains:

"""
<version>VERSION</version>
<headers>abi/VERSION/usr/local/include/</headers>
<libs>abi/VERSION/usr/local/lib/</libs>
"""

The main issue is storing (or regenerating) previous versions of the ABI
dump files to compare against.

The abi-check produces an HTML 'report' which likely needs to be read by
the caller, or have something scrape for the detail, so there's still a
lot of manual steps involved for now.

--
Kieran



> 
> > provide incremental releases which
> > can support backwards compatible linkage across release points that have
> > a compatible ABI.
> > 
> > Introduction of this commit does not convey that libcamera now has a
> > stable API, but that patch releases with a common minor number
> > (0.minor.patch) may potentially be used by applications without
> > recompilation and linkage against new releases.
> > 
> > Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> > ---
> >  meson.build | 10 ++++------
> >  1 file changed, 4 insertions(+), 6 deletions(-)
> > 
> > diff --git a/meson.build b/meson.build
> > index 6e363a906c69..4afe7d1624a7 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -56,15 +56,13 @@ if libcamera_version != project_version
> >      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).
> > +# The major and minor libcamera version components are used as the soname.
> > +# No ABI/API compatibility is guaranteed between releases (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
> > +semver = libcamera_version.split('.')
> > +libcamera_soversion = semver[0] + '.' + semver[1]
> >  
> >  summary({ 'Sources': libcamera_git_version, }, section : 'Versions')
> >  
> 
> -- 
> Regards,
> 
> Laurent Pinchart


More information about the libcamera-devel mailing list