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 \
diff --git a/meson.build b/meson.build
index 2c6173b4f97e..2a7b90133bbd 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.
+# We can continue to consider that a patch level increment should be
+# compatible.
+project_version = meson.project_version().split('.')
+libcamera_soversion = project_version[0] + '.' + project_version[1]
+
+summary({
+            'Project': meson.project_version(),
+            'Sources': libcamera_git_version,
+            'libcamera': libcamera_version,
+            'soname': libcamera_soversion,
+        },
+        section : 'Versions')
+
 # This script generates the .tarball-version file on a 'meson dist' command.
 meson.add_dist_script('utils/run-dist.sh')
 
diff --git a/src/libcamera/base/meson.build b/src/libcamera/base/meson.build
index 3b9d74efe935..65933905a5df 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 : libcamera_soversion,
                                     name_prefix : '',
                                     install : true,
                                     cpp_args : libcamera_base_args,
diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
index 63b47b177fd2..f905c15ece85 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 : libcamera_soversion,
                            name_prefix : '',
                            install : true,
                            include_directories : includes,
