{"id":17591,"url":"https://patchwork.libcamera.org/api/patches/17591/?format=json","web_url":"https://patchwork.libcamera.org/patch/17591/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20221013095957.1642901-2-kieran.bingham@ideasonboard.com>","date":"2022-10-13T09:59:55","name":"[libcamera-devel,v4,1/3] meson: Shared Object version handling","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"e75fec9fa7ae6d1153a683b8a6df01d4b325ce61","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/?format=json","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/17591/mbox/","series":[{"id":3553,"url":"https://patchwork.libcamera.org/api/series/3553/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=3553","date":"2022-10-13T09:59:54","name":"Add release infrastructure","version":4,"mbox":"https://patchwork.libcamera.org/series/3553/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/17591/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/17591/checks/","tags":{},"headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id D42A2C327C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 13 Oct 2022 10:00:05 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D28B262DB0;\n\tThu, 13 Oct 2022 12:00:03 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 62C0462D6B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 13 Oct 2022 12:00:02 +0200 (CEST)","from Monstersaurus.ksquared.org.uk.beta.tailscale.net\n\t(cpc89244-aztw30-2-0-cust3082.18-1.cable.virginm.net [86.31.172.11])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 74F2BBB8;\n\tThu, 13 Oct 2022 12:00:01 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1665655204;\n\tbh=KHAS4uiEgbbCNfCaSS+BQR7DU43JPBYhGoiWP2rPWH8=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=plm3s36MTstHRBAK32wqk/D+Q0OsJhyO3AINT63Ep2Pt/w/PrQsQivpf3WdL8ESqb\n\t1RNspn6ZH5qeXtxZ6cB3vvzmApAIoYH21Y9Xz2ZYUhgx/Vf10FRdiJeimpPufKYYya\n\tmSPQ6wYTL2GEi3clnwCl94AbPaIyFS6efHr+sD2jTstcxnlsfIASjjW44yhiDzokjL\n\tAs8nrWK5upbEKsio0wPmyoBsHaPPG+KOfb41NY8aBubskGxYRKAXt9uIAvmCmD9vRT\n\t/CCyciV13l0jsAHGj/Xia8kqA5ThVpw69oDyEM4Lm6eFhBrJV4VzJ3PCCRSDyzKCEA\n\tkbmlFgUM5FxTA==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1665655201;\n\tbh=KHAS4uiEgbbCNfCaSS+BQR7DU43JPBYhGoiWP2rPWH8=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=XlOJynWwcha+/SKCDZ/0CkwggUsivUTvxDrRxEegJM/A5YCt/G2bpt1CV3Vh5mwBq\n\tFUnq5iQ9XkrHxHpur/RwSmUzxmk9YUhRIOBMSQSdzsnEv42K8M0dypvNg0h0TLVRTx\n\tJK6RL2a9z13lkpt7Wsl84qByxagWBDqNyrWd2NXI="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"XlOJynWw\"; dkim-atps=neutral","To":"libcamera devel <libcamera-devel@lists.libcamera.org>","Date":"Thu, 13 Oct 2022 10:59:55 +0100","Message-Id":"<20221013095957.1642901-2-kieran.bingham@ideasonboard.com>","X-Mailer":"git-send-email 2.34.1","In-Reply-To":"<20221013095957.1642901-1-kieran.bingham@ideasonboard.com>","References":"<20221013095957.1642901-1-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH v4 1/3] meson: Shared Object version\n\thandling","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","From":"Kieran Bingham via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"The libcamera project is not yet ready to declare ABI nor API stability,\nbut it will benefit the community to be able to provide more regular\nrelease cycles to determine 'versioned' points of history.\n\nIdeally, these releases will be made at any ABI breakage, but can be\nmade at arbitary time based points along the way.\n\nTo support releases which may not be ABI stable, declare the soversion\nof both the libcamera and libcamera-base library to be dependant upon\nboth the major minor and patch component of the project version.\n\nAs part of this, introduce a new 'Versions' summary section to highlight\nthe different version components that may become apparent within any\ngiven build.\n\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\nSigned-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n---\n\nv4:\n - Use EXCLUDE_SYMLINKS\n - Reduce redundant information from Versions summary\n - -nvm appended when the sources do not match the project version.\n - Fixed the update of the libcamera source version from the project\n   version in event of mismatch\n\nv3:\n - fix typo\n - Use libcamera_version directly for SONAME.\n - Fix ordering of EXCLUDE_PATTERNS\n - Use meson.project_version() in the event the git versions\n   are incorrect.\n - No need to present libcamera_version anymore\n   - Guaranteed to be the same as 'project_version'\n\n Documentation/Doxyfile.in      |  2 ++\n meson.build                    | 32 ++++++++++++++++++++++++++++++++\n src/libcamera/base/meson.build |  1 +\n src/libcamera/meson.build      |  1 +\n 4 files changed, 36 insertions(+)","diff":"diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\nindex 88dfcddaebf6..e4f0cd426d39 100644\n--- a/Documentation/Doxyfile.in\n+++ b/Documentation/Doxyfile.in\n@@ -66,6 +66,8 @@ EXCLUDE_SYMBOLS        = libcamera::BoundMethodArgs \\\n                          *::details \\\n                          std::*\n \n+EXCLUDE_SYMLINKS       = YES\n+\n HTML_OUTPUT            = api-html\n \n GENERATE_LATEX         = NO\ndiff --git a/meson.build b/meson.build\nindex 2c6173b4f97e..9b0966cb04c9 100644\n--- a/meson.build\n+++ b/meson.build\n@@ -26,6 +26,38 @@ endif\n \n libcamera_version = libcamera_git_version.split('+')[0]\n \n+# A shallow clone, or a clone without a reachable tag equivalent to the\n+# meson.project_version() could leave the project in a mis-described state.\n+# Produce a warning in this event, and fix to a best effort.\n+if libcamera_version != meson.project_version()\n+    warning('The sources disagree about the version: '\n+            + libcamera_version + ' != ' + meson.project_version())\n+\n+    summary({'libcamera git version' : libcamera_git_version,\n+             'Source version match' : false,\n+            },\n+            bool_yn : true, section : 'Versions')\n+\n+    libcamera_git_version = libcamera_git_version.replace(libcamera_version,\n+                                                          meson.project_version())\n+    libcamera_version = meson.project_version()\n+\n+    # Append a marker to show we have modified this version string\n+    libcamera_git_version += '-nvm'\n+endif\n+\n+# Until we make ABI compatible releases, the full libcamera version is used as\n+# the soname. No ABI/API compatibility is guaranteed between releases. (x.x.x)\n+#\n+# When automatic ABI based detection is used to increment the version, this\n+# will bump the minor number. (x.x)\n+#\n+# When we declare a stable ABI/API we will provide a 1.0 release and the\n+# soversion at that point will be the 'major' release value. (x)\n+libcamera_soversion = libcamera_version\n+\n+summary({ 'Sources': libcamera_git_version, }, section : 'Versions')\n+\n # This script generates the .tarball-version file on a 'meson dist' command.\n meson.add_dist_script('utils/run-dist.sh')\n \ndiff --git a/src/libcamera/base/meson.build b/src/libcamera/base/meson.build\nindex 7a75914ab2a8..7a7fd7e4ca87 100644\n--- a/src/libcamera/base/meson.build\n+++ b/src/libcamera/base/meson.build\n@@ -51,6 +51,7 @@ libcamera_base_args = [ '-DLIBCAMERA_BASE_PRIVATE' ]\n libcamera_base_lib = shared_library('libcamera-base',\n                                     [libcamera_base_sources, libcamera_base_headers],\n                                     version : libcamera_version,\n+                                    soversion : libcamera_soversion,\n                                     name_prefix : '',\n                                     install : true,\n                                     cpp_args : libcamera_base_args,\ndiff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\nindex 7fcbb2ddc9e7..5f39d2e2c60a 100644\n--- a/src/libcamera/meson.build\n+++ b/src/libcamera/meson.build\n@@ -161,6 +161,7 @@ libcamera_deps = [\n libcamera = shared_library('libcamera',\n                            libcamera_sources,\n                            version : libcamera_version,\n+                           soversion : libcamera_soversion,\n                            name_prefix : '',\n                            install : true,\n                            include_directories : includes,\n","prefixes":["libcamera-devel","v4","1/3"]}