[{"id":25184,"web_url":"https://patchwork.libcamera.org/comment/25184/","msgid":"<20220930135432.jamopome5phq2pk4@uno.localdomain>","date":"2022-09-30T13:54:32","subject":"Re: [libcamera-devel] [PATCH 1/4] meson: Shared Object version\n\thandling","submitter":{"id":3,"url":"https://patchwork.libcamera.org/api/people/3/","name":"Jacopo Mondi","email":"jacopo@jmondi.org"},"content":"Hi Kieran\n\nOn Thu, Sep 29, 2022 at 03:36:23PM +0100, Kieran Bingham via libcamera-devel wrote:\n> The libcamera project is not yet ready to declare ABI nor API stability,\n> but it will benefit the community to be able to provide more regular\n> release cycles to determine 'versioned' points of history.\n>\n> Ideally, these releases will be made at any ABI breakage, but can be\n> made at arbitary time based points along the way.\n>\n> To support releases which may not be ABI stable, declare the soversion\n> of both the libcamera and libcamera-base library to be dependant upon\n> both the major and minor component of the project version.\n>\n> As part of this, introduce a new 'Versions' summary section to highlight\n> the different version components that may become apparent within any\n> given build.\n>\n> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> ---\n>  meson.build                    | 15 +++++++++++++++\n>  src/libcamera/base/meson.build |  1 +\n>  src/libcamera/meson.build      |  1 +\n>  3 files changed, 17 insertions(+)\n>\n> diff --git a/meson.build b/meson.build\n> index 72919102ad55..9bbfd0e9c784 100644\n> --- a/meson.build\n> +++ b/meson.build\n> @@ -26,6 +26,21 @@ endif\n>\n>  libcamera_version = libcamera_git_version.split('+')[0]\n>\n> +# Enforce Major and Minor as part of the soversion. Until we make a first major\n> +# release, and remain on version 0.x each release may denote ABI instabilty.\n\nMissing a , after 0.x ?\n\nnit apart:\nReviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks\n  j\n\n> +# We can continue to consider that a patch level increment should be\n> +# compatible.\n> +project_version = meson.project_version().split('.')\n> +soversion = project_version[0] + '.' + project_version[1]\n> +\n> +summary({\n> +            'Project': meson.project_version(),\n> +            'Sources': libcamera_git_version,\n> +            'libcamera': libcamera_version,\n> +            'Shared Object': soversion,\n> +        },\n> +        section : 'Versions')\n> +\n>  # This script gererates the .tarball-version file on a 'meson dist' command.\n>  meson.add_dist_script('utils/run-dist.sh')\n>\n> diff --git a/src/libcamera/base/meson.build b/src/libcamera/base/meson.build\n> index 3b9d74efe935..51719f112d26 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 : soversion,\n>                                      name_prefix : '',\n>                                      install : true,\n>                                      cpp_args : libcamera_base_args,\n> diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\n> index 63b47b177fd2..3aa7f32067f8 100644\n> --- a/src/libcamera/meson.build\n> +++ b/src/libcamera/meson.build\n> @@ -160,6 +160,7 @@ libcamera_deps = [\n>  libcamera = shared_library('libcamera',\n>                             libcamera_sources,\n>                             version : libcamera_version,\n> +                           soversion : soversion,\n>                             name_prefix : '',\n>                             install : true,\n>                             include_directories : includes,\n> --\n> 2.34.1\n>","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 F1514C0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 30 Sep 2022 13:54:36 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 64278623A8;\n\tFri, 30 Sep 2022 15:54:36 +0200 (CEST)","from relay8-d.mail.gandi.net (relay8-d.mail.gandi.net\n\t[IPv6:2001:4b98:dc4:8::228])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 951E761F77\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 30 Sep 2022 15:54:35 +0200 (CEST)","(Authenticated sender: jacopo@jmondi.org)\n\tby mail.gandi.net (Postfix) with ESMTPSA id D267F1BF209;\n\tFri, 30 Sep 2022 13:54:34 +0000 (UTC)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1664546076;\n\tbh=A3GUiF4woGOwGbJosaBzzXCLAqIs+PC1r5Ixm+mSxUo=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=LSgJHq0rAnmuOqIPB5XA12M9qy7rl6ONRN3Mebo3j4KINlNqlGaFLFUzxxbrp30fA\n\tK2n/EdWCyHUPC0azAmH8/9rfqH0AYkLJEY8BvBtfPnn7CPb6IVc0ZXE/XOTka7pMH/\n\teOAb1Sxukij9/lDFjnsRPJYiTD80wTvaZG55tTd1iG0qnheQQmg/uR1O8LhS3U7ju9\n\t1uClF8V+tTjZQ5Kq884ER5b/REqkVDK8eYY7fEGEKND6MUhEkYen73dFWLxIrXDhql\n\tCTArbJbIUPFGuF3Wa4chNhorZP3YoJbmYXMQ/XACbrtNU7VOx52CT/Sudb7+7EFzJC\n\tRTjvjLE50FHwA==","Date":"Fri, 30 Sep 2022 15:54:32 +0200","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<20220930135432.jamopome5phq2pk4@uno.localdomain>","References":"<20220929143626.3100668-1-kieran.bingham@ideasonboard.com>\n\t<20220929143626.3100668-2-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20220929143626.3100668-2-kieran.bingham@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH 1/4] 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":"Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"Jacopo Mondi <jacopo@jmondi.org>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":25190,"web_url":"https://patchwork.libcamera.org/comment/25190/","msgid":"<166455267309.2677993.5895773133427690802@Monstersaurus>","date":"2022-09-30T15:44:33","subject":"Re: [libcamera-devel] [PATCH 1/4] meson: Shared Object version\n\thandling","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Jacopo Mondi (2022-09-30 14:54:32)\n> Hi Kieran\n> \n> On Thu, Sep 29, 2022 at 03:36:23PM +0100, Kieran Bingham via libcamera-devel wrote:\n> > The libcamera project is not yet ready to declare ABI nor API stability,\n> > but it will benefit the community to be able to provide more regular\n> > release cycles to determine 'versioned' points of history.\n> >\n> > Ideally, these releases will be made at any ABI breakage, but can be\n> > made at arbitary time based points along the way.\n> >\n> > To support releases which may not be ABI stable, declare the soversion\n> > of both the libcamera and libcamera-base library to be dependant upon\n> > both the major and minor component of the project version.\n> >\n> > As part of this, introduce a new 'Versions' summary section to highlight\n> > the different version components that may become apparent within any\n> > given build.\n> >\n> > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > ---\n> >  meson.build                    | 15 +++++++++++++++\n> >  src/libcamera/base/meson.build |  1 +\n> >  src/libcamera/meson.build      |  1 +\n> >  3 files changed, 17 insertions(+)\n> >\n> > diff --git a/meson.build b/meson.build\n> > index 72919102ad55..9bbfd0e9c784 100644\n> > --- a/meson.build\n> > +++ b/meson.build\n> > @@ -26,6 +26,21 @@ endif\n> >\n> >  libcamera_version = libcamera_git_version.split('+')[0]\n> >\n> > +# Enforce Major and Minor as part of the soversion. Until we make a first major\n> > +# release, and remain on version 0.x each release may denote ABI instabilty.\n> \n> Missing a , after 0.x ?\n\nYes, looks like the , after release should move to after 0.x,\n\n> \n> nit apart:\n> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n\nThanks.\n\n\n> \n> Thanks\n>   j\n> \n> > +# We can continue to consider that a patch level increment should be\n> > +# compatible.\n> > +project_version = meson.project_version().split('.')\n> > +soversion = project_version[0] + '.' + project_version[1]\n> > +\n> > +summary({\n> > +            'Project': meson.project_version(),\n> > +            'Sources': libcamera_git_version,\n> > +            'libcamera': libcamera_version,\n> > +            'Shared Object': soversion,\n> > +        },\n> > +        section : 'Versions')\n> > +\n> >  # This script gererates the .tarball-version file on a 'meson dist' command.\n> >  meson.add_dist_script('utils/run-dist.sh')\n> >\n> > diff --git a/src/libcamera/base/meson.build b/src/libcamera/base/meson.build\n> > index 3b9d74efe935..51719f112d26 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 : soversion,\n> >                                      name_prefix : '',\n> >                                      install : true,\n> >                                      cpp_args : libcamera_base_args,\n> > diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\n> > index 63b47b177fd2..3aa7f32067f8 100644\n> > --- a/src/libcamera/meson.build\n> > +++ b/src/libcamera/meson.build\n> > @@ -160,6 +160,7 @@ libcamera_deps = [\n> >  libcamera = shared_library('libcamera',\n> >                             libcamera_sources,\n> >                             version : libcamera_version,\n> > +                           soversion : soversion,\n> >                             name_prefix : '',\n> >                             install : true,\n> >                             include_directories : includes,\n> > --\n> > 2.34.1\n> >","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 38A2BBD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 30 Sep 2022 15:44:38 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DBF97623AE;\n\tFri, 30 Sep 2022 17:44:37 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 442E561F77\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 30 Sep 2022 17:44:36 +0200 (CEST)","from pendragon.ideasonboard.com\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 E0CD247C;\n\tFri, 30 Sep 2022 17:44:35 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1664552677;\n\tbh=4gDesChTCb3yXYUhI5CqN2hzEIf7TsEagmeduuo6K9w=;\n\th=In-Reply-To:References:To:Date:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=aY60D3wPd3eXlfS3l2fQIkH07pJgtpgU7KvBsnD+JXPtklNVlxjrXyvaMJ6cWs2xF\n\t1wcdj0sP1L0rgh+bn+ftSZVFAWreTUbY36qDDaXznl6DOmRLSSwwQKRgnkwbYSNt6w\n\to0IAXsTLQ+PibXvlMnOJz+KLyp8pgnj2N6bFUGV69peMiYZnY9fIdoI2w2R8t5lFTr\n\t7jJYhbzt0tqFzU+VrBZ/65lXfH1TosuB2lVFxsrKVytldoM9WKPfbqUXEP9XM17T20\n\tLkGP2agZqIy2r+R4iQBqYQ59fMooJafCbguA16FUjt4NfjBL8kHf8opOcLaPisrXWP\n\tb4L2AeCtFglRw==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1664552676;\n\tbh=4gDesChTCb3yXYUhI5CqN2hzEIf7TsEagmeduuo6K9w=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=vg6412J/4qMvTiHxcL8RZcqRHgKyaKmKrp6xaiVgcK0/QfmMsccDweXmtZ8wdC4CT\n\tJdkWzzK3DaiNDPNZJwe/4qMkz20KKgGCalvn00L6Uq1K0GFJvHF3tF/mAV4D69GUIx\n\tLoCEZnAO/WzEE5ykOZjkZtm4yxOKQ/WRnXemvd9o="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"vg6412J/\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20220930135432.jamopome5phq2pk4@uno.localdomain>","References":"<20220929143626.3100668-1-kieran.bingham@ideasonboard.com>\n\t<20220929143626.3100668-2-kieran.bingham@ideasonboard.com>\n\t<20220930135432.jamopome5phq2pk4@uno.localdomain>","To":"Jacopo Mondi <jacopo@jmondi.org>","Date":"Fri, 30 Sep 2022 16:44:33 +0100","Message-ID":"<166455267309.2677993.5895773133427690802@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH 1/4] 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>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":25203,"web_url":"https://patchwork.libcamera.org/comment/25203/","msgid":"<YzdWpCly8s5EZTmS@pendragon.ideasonboard.com>","date":"2022-09-30T20:50:44","subject":"Re: [libcamera-devel] [PATCH 1/4] meson: Shared Object version\n\thandling","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Kieran,\n\n(CC'ing Javier)\n\nFinal lap before a release (even if it's just a minor one), that's nice\n:-)\n\nOn Fri, Sep 30, 2022 at 04:44:33PM +0100, Kieran Bingham via libcamera-devel wrote:\n> Quoting Jacopo Mondi (2022-09-30 14:54:32)\n> > On Thu, Sep 29, 2022 at 03:36:23PM +0100, Kieran Bingham via libcamera-devel wrote:\n> > > The libcamera project is not yet ready to declare ABI nor API stability,\n> > > but it will benefit the community to be able to provide more regular\n> > > release cycles to determine 'versioned' points of history.\n> > >\n> > > Ideally, these releases will be made at any ABI breakage, but can be\n> > > made at arbitary time based points along the way.\n> > >\n> > > To support releases which may not be ABI stable, declare the soversion\n> > > of both the libcamera and libcamera-base library to be dependant upon\n> > > both the major and minor component of the project version.\n> > >\n> > > As part of this, introduce a new 'Versions' summary section to highlight\n> > > the different version components that may become apparent within any\n> > > given build.\n> > >\n> > > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\nI tried the script and it seemed to work, but compiling libcamera then\ngave me the following warnings:\n\nwarning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so.0.0' is not a readable file or directory... skipping.\nwarning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so.0' is not a readable file or directory... skipping.\nwarning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so' is not a readable file or directory... skipping.\nwarning: source './x86-gcc-11.3.0/src/libcamera/base/libcamera-base.so.0' is not a readable file or directory... skipping\n\n> > > ---\n> > >  meson.build                    | 15 +++++++++++++++\n> > >  src/libcamera/base/meson.build |  1 +\n> > >  src/libcamera/meson.build      |  1 +\n> > >  3 files changed, 17 insertions(+)\n> > >\n> > > diff --git a/meson.build b/meson.build\n> > > index 72919102ad55..9bbfd0e9c784 100644\n> > > --- a/meson.build\n> > > +++ b/meson.build\n> > > @@ -26,6 +26,21 @@ endif\n> > >\n> > >  libcamera_version = libcamera_git_version.split('+')[0]\n> > >\n> > > +# Enforce Major and Minor as part of the soversion. Until we make a first major\n> > > +# release, and remain on version 0.x each release may denote ABI instabilty.\n> > \n> > Missing a , after 0.x ?\n> \n> Yes, looks like the , after release should move to after 0.x,\n\nThat's more readable indeed.\n\n> > nit apart:\n> > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> \n> Thanks.\n> \n> > > +# We can continue to consider that a patch level increment should be\n> > > +# compatible.\n> > > +project_version = meson.project_version().split('.')\n> > > +soversion = project_version[0] + '.' + project_version[1]\n\nAs we have libcamera_version and not just version, I'd have named the\nvariable libcamera_soversion.\n\nWhy do you use two components of the version only ? As we don't\nguarantee ABI stability, could we use all three components for now ?\nThis could then be shortened to major.minor when we'll add ABI change\ndetection (but still without ABI stability), and finally to just major\nonce ABI stability will be guaranteed. Javier, do you have any opinion ?\n\n> > > +\n> > > +summary({\n> > > +            'Project': meson.project_version(),\n> > > +            'Sources': libcamera_git_version,\n> > > +            'libcamera': libcamera_version,\n\nIs there ever a case where libcamera_version should be different than\nmeson.project_version() ?\n\n> > > +            'Shared Object': soversion,\n\nI would have named this 'soname' (or 'SONAME'), that's the official\nterm. 'Shared Object' is ambiguous.\n\n> > > +        },\n> > > +        section : 'Versions')\n> > > +\n> > >  # This script gererates the .tarball-version file on a 'meson dist' command.\n\nWhile at it you could fix the \"gererates\" typo.\n\n> > >  meson.add_dist_script('utils/run-dist.sh')\n> > >\n> > > diff --git a/src/libcamera/base/meson.build b/src/libcamera/base/meson.build\n> > > index 3b9d74efe935..51719f112d26 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 : soversion,\n> > >                                      name_prefix : '',\n> > >                                      install : true,\n> > >                                      cpp_args : libcamera_base_args,\n> > > diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\n> > > index 63b47b177fd2..3aa7f32067f8 100644\n> > > --- a/src/libcamera/meson.build\n> > > +++ b/src/libcamera/meson.build\n> > > @@ -160,6 +160,7 @@ libcamera_deps = [\n> > >  libcamera = shared_library('libcamera',\n> > >                             libcamera_sources,\n> > >                             version : libcamera_version,\n> > > +                           soversion : soversion,\n> > >                             name_prefix : '',\n> > >                             install : true,\n> > >                             include_directories : includes,","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 0FAB1BD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 30 Sep 2022 20:50:50 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 64F9D62848;\n\tFri, 30 Sep 2022 22:50:49 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8DC3861FB1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 30 Sep 2022 22:50:47 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id D22B347C;\n\tFri, 30 Sep 2022 22:50:46 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1664571049;\n\tbh=btL0eVjS6YCkIkAtdb+j25Q0jk6s+cCWsOOpjxGKrkM=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=RC8OB3qfpdu/fwmO124tGnVi1P4b1uFbvredYnlwU34QrjyquY8jczBA03EdCOtaN\n\tF97a36MlHnfJ0IdfvJSS0EtZ+GUVwN9S6R3nysFcf+xuT7WSQN7EU611+dodA9zDJV\n\tegPHyK6sNEDAWS31iWId9kVddKBsApVVWh+i173PB7FCe3kT/RwoWTzgN+tGDcM/3q\n\tTXLCsd+i3oJKUvSZZZ0f0GISPSkfjEMZfYUNLOjg3KRVT4KjA6eDRiskipp4fQCYk9\n\tj+acPIeYB9yPin+ESy8mSts19EncZAWKC8tvLxStTCUEAk/EuJ/eDu36vUakQ9y8Tr\n\tCZBbPDaeSvtvQ==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1664571047;\n\tbh=btL0eVjS6YCkIkAtdb+j25Q0jk6s+cCWsOOpjxGKrkM=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=ABFb40LxcHnKcsjBRducWobyV0wfEcxIJTng7lCeyv+CHUp+LHWMB5sCV7NXVUdzz\n\tjm/X5Atr1L7I0MzgbbAOSn7K8kCCUeOzlPa3LkIl+KCFDQOfdL803z/BAgHhNYa+jG\n\t7bUQbSuHnT6F+tCz3ZpfTbnxyNw2iQmiICRnL6uo="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"ABFb40Lx\"; dkim-atps=neutral","Date":"Fri, 30 Sep 2022 23:50:44 +0300","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<YzdWpCly8s5EZTmS@pendragon.ideasonboard.com>","References":"<20220929143626.3100668-1-kieran.bingham@ideasonboard.com>\n\t<20220929143626.3100668-2-kieran.bingham@ideasonboard.com>\n\t<20220930135432.jamopome5phq2pk4@uno.localdomain>\n\t<166455267309.2677993.5895773133427690802@Monstersaurus>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<166455267309.2677993.5895773133427690802@Monstersaurus>","Subject":"Re: [libcamera-devel] [PATCH 1/4] 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":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":25205,"web_url":"https://patchwork.libcamera.org/comment/25205/","msgid":"<166457540792.4106166.8909322087525632590@Monstersaurus>","date":"2022-09-30T22:03:27","subject":"Re: [libcamera-devel] [PATCH 1/4] meson: Shared Object version\n\thandling","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Laurent Pinchart (2022-09-30 21:50:44)\n> Hi Kieran,\n> \n> (CC'ing Javier)\n> \n> Final lap before a release (even if it's just a minor one), that's nice\n> :-)\n> \n> On Fri, Sep 30, 2022 at 04:44:33PM +0100, Kieran Bingham via libcamera-devel wrote:\n> > Quoting Jacopo Mondi (2022-09-30 14:54:32)\n> > > On Thu, Sep 29, 2022 at 03:36:23PM +0100, Kieran Bingham via libcamera-devel wrote:\n> > > > The libcamera project is not yet ready to declare ABI nor API stability,\n> > > > but it will benefit the community to be able to provide more regular\n> > > > release cycles to determine 'versioned' points of history.\n> > > >\n> > > > Ideally, these releases will be made at any ABI breakage, but can be\n> > > > made at arbitary time based points along the way.\n> > > >\n> > > > To support releases which may not be ABI stable, declare the soversion\n> > > > of both the libcamera and libcamera-base library to be dependant upon\n> > > > both the major and minor component of the project version.\n> > > >\n> > > > As part of this, introduce a new 'Versions' summary section to highlight\n> > > > the different version components that may become apparent within any\n> > > > given build.\n> > > >\n> > > > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> \n> I tried the script and it seemed to work, but compiling libcamera then\n> gave me the following warnings:\n> \n> warning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so.0.0' is not a readable file or directory... skipping.\n> warning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so.0' is not a readable file or directory... skipping.\n> warning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so' is not a readable file or directory... skipping.\n> warning: source './x86-gcc-11.3.0/src/libcamera/base/libcamera-base.so.0' is not a readable file or directory... skipping\n\nHrm ... looks like that might be doxygen?\n\nThis fixes it.\n\ndiff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\nindex 88dfcddaebf6..761807005294 100644\n--- a/Documentation/Doxyfile.in\n+++ b/Documentation/Doxyfile.in\n@@ -46,7 +46,9 @@ EXCLUDE                = @TOP_SRCDIR@/include/libcamera/base/span.h \\\n                          @TOP_BUILDDIR@/include/libcamera/internal/tracepoints.h \\\n                          @TOP_BUILDDIR@/src/libcamera/proxy/\n\n-EXCLUDE_PATTERNS       = @TOP_BUILDDIR@/include/libcamera/ipa/*_serializer.h \\\n+EXCLUDE_PATTERNS       = @TOP_BUILDDIR@/src/libcamera/libcamera.so* \\\n+                         @TOP_BUILDDIR@/src/libcamera/base/libcamera-base.so* \\\n+                         @TOP_BUILDDIR@/include/libcamera/ipa/*_serializer.h \\\n                          @TOP_BUILDDIR@/include/libcamera/ipa/*_proxy.h \\\n                          @TOP_BUILDDIR@/include/libcamera/ipa/ipu3_*.h \\\n                          @TOP_BUILDDIR@/include/libcamera/ipa/raspberrypi_*.h \\\n\n\n> \n> > > > ---\n> > > >  meson.build                    | 15 +++++++++++++++\n> > > >  src/libcamera/base/meson.build |  1 +\n> > > >  src/libcamera/meson.build      |  1 +\n> > > >  3 files changed, 17 insertions(+)\n> > > >\n> > > > diff --git a/meson.build b/meson.build\n> > > > index 72919102ad55..9bbfd0e9c784 100644\n> > > > --- a/meson.build\n> > > > +++ b/meson.build\n> > > > @@ -26,6 +26,21 @@ endif\n> > > >\n> > > >  libcamera_version = libcamera_git_version.split('+')[0]\n> > > >\n> > > > +# Enforce Major and Minor as part of the soversion. Until we make a first major\n> > > > +# release, and remain on version 0.x each release may denote ABI instabilty.\n> > > \n> > > Missing a , after 0.x ?\n> > \n> > Yes, looks like the , after release should move to after 0.x,\n> \n> That's more readable indeed.\n> \n> > > nit apart:\n> > > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> > \n> > Thanks.\n> > \n> > > > +# We can continue to consider that a patch level increment should be\n> > > > +# compatible.\n> > > > +project_version = meson.project_version().split('.')\n> > > > +soversion = project_version[0] + '.' + project_version[1]\n> \n> As we have libcamera_version and not just version, I'd have named the\n> variable libcamera_soversion.\n> \n> Why do you use two components of the version only ? As we don't\n> guarantee ABI stability, could we use all three components for now ?\n> This could then be shortened to major.minor when we'll add ABI change\n> detection (but still without ABI stability), and finally to just major\n> once ABI stability will be guaranteed. Javier, do you have any opinion ?\n\nI believe we don't define ABI stability in either of major or minor. But\nwe 'do' (or can) in .patch. (We're also unlikely to create a .patch\nrelase, unless we find a specific need to fix something for a\ndistributions release, but distributions might still make patch\nreleases...).\n\nSo I don't see specific benefit in including it in the sovesion.\n\n\n> > > > +\n> > > > +summary({\n> > > > +            'Project': meson.project_version(),\n> > > > +            'Sources': libcamera_git_version,\n> > > > +            'libcamera': libcamera_version,\n> \n> Is there ever a case where libcamera_version should be different than\n> meson.project_version() ?\n\n*should be* ... no. *can be* yes.\n\nI think this can occur if you clone a repo without fetching tags.\n\nThat's why it's split to highlight ;-)\n\n\nOn a local build that has had a 'release', but all tags removed\n\nlibcamera 0.1.0\n\n  Versions\n    Project                  : 0.1.0\n    Sources                  : 0.0.0+3954-a64a132e\n    libcamera                : 0.0.0\n    Shared Object            : 0.1\n\n> > > > +            'Shared Object': soversion,\n> \n> I would have named this 'soname' (or 'SONAME'), that's the official\n> term. 'Shared Object' is ambiguous.\n\nIt's in the 'version' section, and is the Shared Object Version. I.e.\nthe soversion.\n\nIt can be soname though.\n\n> \n> > > > +        },\n> > > > +        section : 'Versions')\n> > > > +\n> > > >  # This script gererates the .tarball-version file on a 'meson dist' command.\n> \n> While at it you could fix the \"gererates\" typo.\n> \n> > > >  meson.add_dist_script('utils/run-dist.sh')\n> > > >\n> > > > diff --git a/src/libcamera/base/meson.build b/src/libcamera/base/meson.build\n> > > > index 3b9d74efe935..51719f112d26 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 : soversion,\n> > > >                                      name_prefix : '',\n> > > >                                      install : true,\n> > > >                                      cpp_args : libcamera_base_args,\n> > > > diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\n> > > > index 63b47b177fd2..3aa7f32067f8 100644\n> > > > --- a/src/libcamera/meson.build\n> > > > +++ b/src/libcamera/meson.build\n> > > > @@ -160,6 +160,7 @@ libcamera_deps = [\n> > > >  libcamera = shared_library('libcamera',\n> > > >                             libcamera_sources,\n> > > >                             version : libcamera_version,\n> > > > +                           soversion : soversion,\n> > > >                             name_prefix : '',\n> > > >                             install : true,\n> > > >                             include_directories : includes,\n> \n> -- \n> Regards,\n> \n> Laurent Pinchart","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 002CDBD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 30 Sep 2022 22:03:32 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 36D7A62850;\n\tSat,  1 Oct 2022 00:03:32 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id A29CA62272\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat,  1 Oct 2022 00:03:30 +0200 (CEST)","from pendragon.ideasonboard.com\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 0022259D;\n\tSat,  1 Oct 2022 00:03:29 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1664575412;\n\tbh=sCv6NlU53lZYbY1l6vymu8lNhsuc2gEvos2JSPW1znc=;\n\th=In-Reply-To:References:To:Date:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=v0rZinmbCfN7tHF80OAwZh/OOrh7KqpZCeMknCj/sZ3zBg0rhyNotUpVblfxdm1d+\n\tkShvshbQ6HWwi4nX4YJUJ74ZnmUgx5fEy6FkBlBKjO6L/H6r6yBeI776ipCOuZIHqR\n\tjm+a0MgbdhROP8wvciN7nyLGoKA/XhVFZuNK9djxRIKtKLeUEjIsBJ0+fLQ/pu4MfK\n\tk2+91Wwaxx/JN/S/iMJaK3JK6SI9+OroREpETZDZ1QGsKy2yTyH4B8aK/0Z853v0cF\n\tOZ+bmf4Y2zTjDOlP0OuMXZeyTEcqkIBYcFr6Ixj+uBEQaow0EDCt9udwG0fTZyCL5I\n\t+QKrT0nZIm/6w==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1664575410;\n\tbh=sCv6NlU53lZYbY1l6vymu8lNhsuc2gEvos2JSPW1znc=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=etPuybDlVnwTYU3p9KJ/u/FJopGETLIrecUbJMkgEgxbqK8DnlCq2+mbQ/1jJHUKj\n\tDpoC9egjgSfWLPsPW2XF+M38KnWZSg+OhSrdEYlEyxBplChlN7YFEpwaZJdcy20Yo1\n\t2QDtx4lsUV6m4I9754YN3D0RfQl/AhcmHK/TqGzY="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"etPuybDl\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<YzdWpCly8s5EZTmS@pendragon.ideasonboard.com>","References":"<20220929143626.3100668-1-kieran.bingham@ideasonboard.com>\n\t<20220929143626.3100668-2-kieran.bingham@ideasonboard.com>\n\t<20220930135432.jamopome5phq2pk4@uno.localdomain>\n\t<166455267309.2677993.5895773133427690802@Monstersaurus>\n\t<YzdWpCly8s5EZTmS@pendragon.ideasonboard.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Date":"Fri, 30 Sep 2022 23:03:27 +0100","Message-ID":"<166457540792.4106166.8909322087525632590@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH 1/4] 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>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":25209,"web_url":"https://patchwork.libcamera.org/comment/25209/","msgid":"<Yzd7wjdDN4bhoc5o@pendragon.ideasonboard.com>","date":"2022-09-30T23:29:06","subject":"Re: [libcamera-devel] [PATCH 1/4] meson: Shared Object version\n\thandling","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Fri, Sep 30, 2022 at 11:03:27PM +0100, Kieran Bingham wrote:\n> Quoting Laurent Pinchart (2022-09-30 21:50:44)\n> > Hi Kieran,\n> > \n> > (CC'ing Javier)\n> > \n> > Final lap before a release (even if it's just a minor one), that's nice\n> > :-)\n> > \n> > On Fri, Sep 30, 2022 at 04:44:33PM +0100, Kieran Bingham via libcamera-devel wrote:\n> > > Quoting Jacopo Mondi (2022-09-30 14:54:32)\n> > > > On Thu, Sep 29, 2022 at 03:36:23PM +0100, Kieran Bingham via libcamera-devel wrote:\n> > > > > The libcamera project is not yet ready to declare ABI nor API stability,\n> > > > > but it will benefit the community to be able to provide more regular\n> > > > > release cycles to determine 'versioned' points of history.\n> > > > >\n> > > > > Ideally, these releases will be made at any ABI breakage, but can be\n> > > > > made at arbitary time based points along the way.\n> > > > >\n> > > > > To support releases which may not be ABI stable, declare the soversion\n> > > > > of both the libcamera and libcamera-base library to be dependant upon\n> > > > > both the major and minor component of the project version.\n> > > > >\n> > > > > As part of this, introduce a new 'Versions' summary section to highlight\n> > > > > the different version components that may become apparent within any\n> > > > > given build.\n> > > > >\n> > > > > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > \n> > I tried the script and it seemed to work, but compiling libcamera then\n> > gave me the following warnings:\n> > \n> > warning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so.0.0' is not a readable file or directory... skipping.\n> > warning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so.0' is not a readable file or directory... skipping.\n> > warning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so' is not a readable file or directory... skipping.\n> > warning: source './x86-gcc-11.3.0/src/libcamera/base/libcamera-base.so.0' is not a readable file or directory... skipping\n> \n> Hrm ... looks like that might be doxygen?\n\nI think you're right.\n\nmeson generates the symlinks for the shared libraries at configure time,\nso if Doxygen runs before the binary is built, the links will be broken.\nFurthermore, meson fails to remove old links when the soname is bumped,\nso broken links will remain in place. We thus can't fix the problem by\njust adding a dependency on libcamera and libcamera-base to the Doxygen\ntarget like I initially thought.\n\n> This fixes it.\n> \n> diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\n> index 88dfcddaebf6..761807005294 100644\n> --- a/Documentation/Doxyfile.in\n> +++ b/Documentation/Doxyfile.in\n> @@ -46,7 +46,9 @@ EXCLUDE                = @TOP_SRCDIR@/include/libcamera/base/span.h \\\n>                           @TOP_BUILDDIR@/include/libcamera/internal/tracepoints.h \\\n>                           @TOP_BUILDDIR@/src/libcamera/proxy/\n> \n> -EXCLUDE_PATTERNS       = @TOP_BUILDDIR@/include/libcamera/ipa/*_serializer.h \\\n> +EXCLUDE_PATTERNS       = @TOP_BUILDDIR@/src/libcamera/libcamera.so* \\\n> +                         @TOP_BUILDDIR@/src/libcamera/base/libcamera-base.so* \\\n> +                         @TOP_BUILDDIR@/include/libcamera/ipa/*_serializer.h \\\n>                           @TOP_BUILDDIR@/include/libcamera/ipa/*_proxy.h \\\n>                           @TOP_BUILDDIR@/include/libcamera/ipa/ipu3_*.h \\\n>                           @TOP_BUILDDIR@/include/libcamera/ipa/raspberrypi_*.h \\\n\nI can't think of a better option :-S\n\n> > > > > ---\n> > > > >  meson.build                    | 15 +++++++++++++++\n> > > > >  src/libcamera/base/meson.build |  1 +\n> > > > >  src/libcamera/meson.build      |  1 +\n> > > > >  3 files changed, 17 insertions(+)\n> > > > >\n> > > > > diff --git a/meson.build b/meson.build\n> > > > > index 72919102ad55..9bbfd0e9c784 100644\n> > > > > --- a/meson.build\n> > > > > +++ b/meson.build\n> > > > > @@ -26,6 +26,21 @@ endif\n> > > > >\n> > > > >  libcamera_version = libcamera_git_version.split('+')[0]\n> > > > >\n> > > > > +# Enforce Major and Minor as part of the soversion. Until we make a first major\n> > > > > +# release, and remain on version 0.x each release may denote ABI instabilty.\n> > > > \n> > > > Missing a , after 0.x ?\n> > > \n> > > Yes, looks like the , after release should move to after 0.x,\n> > \n> > That's more readable indeed.\n> > \n> > > > nit apart:\n> > > > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> > > \n> > > Thanks.\n> > > \n> > > > > +# We can continue to consider that a patch level increment should be\n> > > > > +# compatible.\n> > > > > +project_version = meson.project_version().split('.')\n> > > > > +soversion = project_version[0] + '.' + project_version[1]\n> > \n> > As we have libcamera_version and not just version, I'd have named the\n> > variable libcamera_soversion.\n> > \n> > Why do you use two components of the version only ? As we don't\n> > guarantee ABI stability, could we use all three components for now ?\n> > This could then be shortened to major.minor when we'll add ABI change\n> > detection (but still without ABI stability), and finally to just major\n> > once ABI stability will be guaranteed. Javier, do you have any opinion ?\n> \n> I believe we don't define ABI stability in either of major or minor. But\n> we 'do' (or can) in .patch. (We're also unlikely to create a .patch\n> relase, unless we find a specific need to fix something for a\n> distributions release, but distributions might still make patch\n> releases...).\n\nWhy wouldn't we start with patch releases ?\n\n> So I don't see specific benefit in including it in the sovesion.\n> \n> > > > > +\n> > > > > +summary({\n> > > > > +            'Project': meson.project_version(),\n> > > > > +            'Sources': libcamera_git_version,\n> > > > > +            'libcamera': libcamera_version,\n> > \n> > Is there ever a case where libcamera_version should be different than\n> > meson.project_version() ?\n> \n> *should be* ... no. *can be* yes.\n> \n> I think this can occur if you clone a repo without fetching tags.\n> \n> That's why it's split to highlight ;-)\n> \n> \n> On a local build that has had a 'release', but all tags removed\n> \n> libcamera 0.1.0\n> \n>   Versions\n>     Project                  : 0.1.0\n>     Sources                  : 0.0.0+3954-a64a132e\n>     libcamera                : 0.0.0\n>     Shared Object            : 0.1\n\nIs this something we really have to handle ? :-) If so, there's more to\nfix, as the \"sources\" version is what libcamera will print in its log,\nand it won't match the soname or project version. The \"libcamera\"\nversion is what will end up in version.h, which could also confuse\napplications. I see three options, we could consider that:\n\n- This really shouldn't happen, and let people who clone the git tree\n  without tags suffer from their mistake if they decide to shoot\n  themselves in the foot.\n\n- This could happen by mistake and we should fail loudly at configure\n  time, to be kind to people's feet.\n\n- This is a valid case, and the project version from meson.build should\n  then be use to construct the other versions if tags are missing.\n\n> > > > > +            'Shared Object': soversion,\n> > \n> > I would have named this 'soname' (or 'SONAME'), that's the official\n> > term. 'Shared Object' is ambiguous.\n> \n> It's in the 'version' section, and is the Shared Object Version. I.e.\n> the soversion.\n> \n> It can be soname though.\n\nI'd still prefer soname, it's more explicit.\n\n> > > > > +        },\n> > > > > +        section : 'Versions')\n> > > > > +\n> > > > >  # This script gererates the .tarball-version file on a 'meson dist' command.\n> > \n> > While at it you could fix the \"gererates\" typo.\n> > \n> > > > >  meson.add_dist_script('utils/run-dist.sh')\n> > > > >\n> > > > > diff --git a/src/libcamera/base/meson.build b/src/libcamera/base/meson.build\n> > > > > index 3b9d74efe935..51719f112d26 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 : soversion,\n> > > > >                                      name_prefix : '',\n> > > > >                                      install : true,\n> > > > >                                      cpp_args : libcamera_base_args,\n> > > > > diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\n> > > > > index 63b47b177fd2..3aa7f32067f8 100644\n> > > > > --- a/src/libcamera/meson.build\n> > > > > +++ b/src/libcamera/meson.build\n> > > > > @@ -160,6 +160,7 @@ libcamera_deps = [\n> > > > >  libcamera = shared_library('libcamera',\n> > > > >                             libcamera_sources,\n> > > > >                             version : libcamera_version,\n> > > > > +                           soversion : soversion,\n> > > > >                             name_prefix : '',\n> > > > >                             install : true,\n> > > > >                             include_directories : includes,","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 4B58CBD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 30 Sep 2022 23:29:11 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 01ADB62858;\n\tSat,  1 Oct 2022 01:29:11 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3A5F862851\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat,  1 Oct 2022 01:29:09 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id B128859D;\n\tSat,  1 Oct 2022 01:29:08 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1664580551;\n\tbh=evu0COjY7+484onVVcIlWn5/TFqNut9GzH9Ufsmh7Qs=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=B5dmD0aIJ1Mu3e2G3vhlYVoscObWKcfCQMvKiuQkKNQFLljnIDyUO2UGEYvoImsgx\n\tdwCOn5HNlZ5GZNdE4WMVsmUedEDDsu1/DLrsuPlJHyMDx4A97B1kPDAy/Ehd7RMJsB\n\tzvJyitAbcEKjZqUzeMAnkEIe1gQO3recpdveUE8dWrcrzW3u/2C5Gm3RVpTHxbtOyn\n\tjxvHNadghlU6Cubev6rxd9mQgr4WZnyxW+nLIznW4dbK+CBbCFwvs7aOGsBM+lOWzn\n\t8hHxPWsQrylQs+9IMpYKpeNdkOr5HL5pv1G1g0LzvF6GR3hlvllZcMa66fh88oVF0I\n\tXlvW0D+Zcwtsg==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1664580549;\n\tbh=evu0COjY7+484onVVcIlWn5/TFqNut9GzH9Ufsmh7Qs=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=AyZ2jciZT9Gb2AQI1s1MbrOb0usqHKOwMSzQ95Bh3EHn4GwSQQyCZfpCfIIh8uMuY\n\tvJ4koAsOhiUHZHtoz/M9YUqbIG1vdLxL1Qn93/4U0dm4WdFMi82poVQ330S3qkSXdC\n\twE+zwMJQQLRw1evVLOfWULVrKXtPfCP+1ILRi1HU="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"AyZ2jciZ\"; dkim-atps=neutral","Date":"Sat, 1 Oct 2022 02:29:06 +0300","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<Yzd7wjdDN4bhoc5o@pendragon.ideasonboard.com>","References":"<20220929143626.3100668-1-kieran.bingham@ideasonboard.com>\n\t<20220929143626.3100668-2-kieran.bingham@ideasonboard.com>\n\t<20220930135432.jamopome5phq2pk4@uno.localdomain>\n\t<166455267309.2677993.5895773133427690802@Monstersaurus>\n\t<YzdWpCly8s5EZTmS@pendragon.ideasonboard.com>\n\t<166457540792.4106166.8909322087525632590@Monstersaurus>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<166457540792.4106166.8909322087525632590@Monstersaurus>","Subject":"Re: [libcamera-devel] [PATCH 1/4] 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":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":25212,"web_url":"https://patchwork.libcamera.org/comment/25212/","msgid":"<166458144171.4106166.15014334859208421803@Monstersaurus>","date":"2022-09-30T23:44:01","subject":"Re: [libcamera-devel] [PATCH 1/4] meson: Shared Object version\n\thandling","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Laurent Pinchart (2022-10-01 00:29:06)\n> On Fri, Sep 30, 2022 at 11:03:27PM +0100, Kieran Bingham wrote:\n> > Quoting Laurent Pinchart (2022-09-30 21:50:44)\n> > > Hi Kieran,\n> > > \n> > > (CC'ing Javier)\n> > > \n> > > Final lap before a release (even if it's just a minor one), that's nice\n> > > :-)\n> > > \n> > > On Fri, Sep 30, 2022 at 04:44:33PM +0100, Kieran Bingham via libcamera-devel wrote:\n> > > > Quoting Jacopo Mondi (2022-09-30 14:54:32)\n> > > > > On Thu, Sep 29, 2022 at 03:36:23PM +0100, Kieran Bingham via libcamera-devel wrote:\n> > > > > > The libcamera project is not yet ready to declare ABI nor API stability,\n> > > > > > but it will benefit the community to be able to provide more regular\n> > > > > > release cycles to determine 'versioned' points of history.\n> > > > > >\n> > > > > > Ideally, these releases will be made at any ABI breakage, but can be\n> > > > > > made at arbitary time based points along the way.\n> > > > > >\n> > > > > > To support releases which may not be ABI stable, declare the soversion\n> > > > > > of both the libcamera and libcamera-base library to be dependant upon\n> > > > > > both the major and minor component of the project version.\n> > > > > >\n> > > > > > As part of this, introduce a new 'Versions' summary section to highlight\n> > > > > > the different version components that may become apparent within any\n> > > > > > given build.\n> > > > > >\n> > > > > > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > > \n> > > I tried the script and it seemed to work, but compiling libcamera then\n> > > gave me the following warnings:\n> > > \n> > > warning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so.0.0' is not a readable file or directory... skipping.\n> > > warning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so.0' is not a readable file or directory... skipping.\n> > > warning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so' is not a readable file or directory... skipping.\n> > > warning: source './x86-gcc-11.3.0/src/libcamera/base/libcamera-base.so.0' is not a readable file or directory... skipping\n> > \n> > Hrm ... looks like that might be doxygen?\n> \n> I think you're right.\n> \n> meson generates the symlinks for the shared libraries at configure time,\n> so if Doxygen runs before the binary is built, the links will be broken.\n> Furthermore, meson fails to remove old links when the soname is bumped,\n> so broken links will remain in place. We thus can't fix the problem by\n> just adding a dependency on libcamera and libcamera-base to the Doxygen\n> target like I initially thought.\n> \n> > This fixes it.\n> > \n> > diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\n> > index 88dfcddaebf6..761807005294 100644\n> > --- a/Documentation/Doxyfile.in\n> > +++ b/Documentation/Doxyfile.in\n> > @@ -46,7 +46,9 @@ EXCLUDE                = @TOP_SRCDIR@/include/libcamera/base/span.h \\\n> >                           @TOP_BUILDDIR@/include/libcamera/internal/tracepoints.h \\\n> >                           @TOP_BUILDDIR@/src/libcamera/proxy/\n> > \n> > -EXCLUDE_PATTERNS       = @TOP_BUILDDIR@/include/libcamera/ipa/*_serializer.h \\\n> > +EXCLUDE_PATTERNS       = @TOP_BUILDDIR@/src/libcamera/libcamera.so* \\\n> > +                         @TOP_BUILDDIR@/src/libcamera/base/libcamera-base.so* \\\n> > +                         @TOP_BUILDDIR@/include/libcamera/ipa/*_serializer.h \\\n> >                           @TOP_BUILDDIR@/include/libcamera/ipa/*_proxy.h \\\n> >                           @TOP_BUILDDIR@/include/libcamera/ipa/ipu3_*.h \\\n> >                           @TOP_BUILDDIR@/include/libcamera/ipa/raspberrypi_*.h \\\n> \n> I can't think of a better option :-S\n> \n> > > > > > ---\n> > > > > >  meson.build                    | 15 +++++++++++++++\n> > > > > >  src/libcamera/base/meson.build |  1 +\n> > > > > >  src/libcamera/meson.build      |  1 +\n> > > > > >  3 files changed, 17 insertions(+)\n> > > > > >\n> > > > > > diff --git a/meson.build b/meson.build\n> > > > > > index 72919102ad55..9bbfd0e9c784 100644\n> > > > > > --- a/meson.build\n> > > > > > +++ b/meson.build\n> > > > > > @@ -26,6 +26,21 @@ endif\n> > > > > >\n> > > > > >  libcamera_version = libcamera_git_version.split('+')[0]\n> > > > > >\n> > > > > > +# Enforce Major and Minor as part of the soversion. Until we make a first major\n> > > > > > +# release, and remain on version 0.x each release may denote ABI instabilty.\n> > > > > \n> > > > > Missing a , after 0.x ?\n> > > > \n> > > > Yes, looks like the , after release should move to after 0.x,\n> > > \n> > > That's more readable indeed.\n> > > \n> > > > > nit apart:\n> > > > > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> > > > \n> > > > Thanks.\n> > > > \n> > > > > > +# We can continue to consider that a patch level increment should be\n> > > > > > +# compatible.\n> > > > > > +project_version = meson.project_version().split('.')\n> > > > > > +soversion = project_version[0] + '.' + project_version[1]\n> > > \n> > > As we have libcamera_version and not just version, I'd have named the\n> > > variable libcamera_soversion.\n> > > \n> > > Why do you use two components of the version only ? As we don't\n> > > guarantee ABI stability, could we use all three components for now ?\n> > > This could then be shortened to major.minor when we'll add ABI change\n> > > detection (but still without ABI stability), and finally to just major\n> > > once ABI stability will be guaranteed. Javier, do you have any opinion ?\n> > \n> > I believe we don't define ABI stability in either of major or minor. But\n> > we 'do' (or can) in .patch. (We're also unlikely to create a .patch\n> > relase, unless we find a specific need to fix something for a\n> > distributions release, but distributions might still make patch\n> > releases...).\n> \n> Why wouldn't we start with patch releases ?\n\nBecaause that prohibits anyone else adding fixes to that release point.\n\nIf Ubuntu take libcamera-0.5 ... but there's a bug .. they can fix it\n(or we can) in libcamera-0.5.1.\n\nIf we do patch release that's not possible.\n\n> > So I don't see specific benefit in including it in the sovesion.\n> > \n> > > > > > +\n> > > > > > +summary({\n> > > > > > +            'Project': meson.project_version(),\n> > > > > > +            'Sources': libcamera_git_version,\n> > > > > > +            'libcamera': libcamera_version,\n> > > \n> > > Is there ever a case where libcamera_version should be different than\n> > > meson.project_version() ?\n> > \n> > *should be* ... no. *can be* yes.\n> > \n> > I think this can occur if you clone a repo without fetching tags.\n> > \n> > That's why it's split to highlight ;-)\n> > \n> > \n> > On a local build that has had a 'release', but all tags removed\n> > \n> > libcamera 0.1.0\n> > \n> >   Versions\n> >     Project                  : 0.1.0\n> >     Sources                  : 0.0.0+3954-a64a132e\n> >     libcamera                : 0.0.0\n> >     Shared Object            : 0.1\n> \n> Is this something we really have to handle ? :-) If so, there's more to\n> fix, as the \"sources\" version is what libcamera will print in its log,\n> and it won't match the soname or project version. The \"libcamera\"\n> version is what will end up in version.h, which could also confuse\n> applications. I see three options, we could consider that:\n> \n> - This really shouldn't happen, and let people who clone the git tree\n>   without tags suffer from their mistake if they decide to shoot\n>   themselves in the foot.\n\nYup. I'm here right now.\n\n> - This could happen by mistake and we should fail loudly at configure\n>   time, to be kind to people's feet.\n\nI'm not sure failing to build because of a version string is friendly.\nBut not having the right 'version' isn't nice either. But I think we're\ntrying to fight corner cases here.\n\n\n> - This is a valid case, and the project version from meson.build should\n>   then be use to construct the other versions if tags are missing.\n\nThat gets difficult, (or ... more difficult) as you won't be able to\ndetermine 'what' point the specific release was made at, so you can't\ngenerate any additional information. We'd end up losing helpful\ninformation.\n\nIf you want to update utils/gen-version.sh ... we can do that on top.\n\n\n\n> \n> > > > > > +            'Shared Object': soversion,\n> > > \n> > > I would have named this 'soname' (or 'SONAME'), that's the official\n> > > term. 'Shared Object' is ambiguous.\n> > \n> > It's in the 'version' section, and is the Shared Object Version. I.e.\n> > the soversion.\n> > \n> > It can be soname though.\n> \n> I'd still prefer soname, it's more explicit.\n> \n> > > > > > +        },\n> > > > > > +        section : 'Versions')\n> > > > > > +\n> > > > > >  # This script gererates the .tarball-version file on a 'meson dist' command.\n> > > \n> > > While at it you could fix the \"gererates\" typo.\n> > > \n> > > > > >  meson.add_dist_script('utils/run-dist.sh')\n> > > > > >\n> > > > > > diff --git a/src/libcamera/base/meson.build b/src/libcamera/base/meson.build\n> > > > > > index 3b9d74efe935..51719f112d26 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 : soversion,\n> > > > > >                                      name_prefix : '',\n> > > > > >                                      install : true,\n> > > > > >                                      cpp_args : libcamera_base_args,\n> > > > > > diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\n> > > > > > index 63b47b177fd2..3aa7f32067f8 100644\n> > > > > > --- a/src/libcamera/meson.build\n> > > > > > +++ b/src/libcamera/meson.build\n> > > > > > @@ -160,6 +160,7 @@ libcamera_deps = [\n> > > > > >  libcamera = shared_library('libcamera',\n> > > > > >                             libcamera_sources,\n> > > > > >                             version : libcamera_version,\n> > > > > > +                           soversion : soversion,\n> > > > > >                             name_prefix : '',\n> > > > > >                             install : true,\n> > > > > >                             include_directories : includes,\n> \n> -- \n> Regards,\n> \n> Laurent Pinchart","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 6D23BC0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 30 Sep 2022 23:44:07 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B62C862858;\n\tSat,  1 Oct 2022 01:44:06 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1DC9862851\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat,  1 Oct 2022 01:44:05 +0200 (CEST)","from pendragon.ideasonboard.com\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 77F3059D;\n\tSat,  1 Oct 2022 01:44:04 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1664581446;\n\tbh=CaIr3FB8TVjodLT8cp4mYP+MBLOswV2Rh5NDe+KN7h8=;\n\th=In-Reply-To:References:To:Date:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=u6Bj+cvY/bII+GRPsyxLE2lq1CQmKQtOUBzqMSJmBSaVawMONdMrGfqkq7TkXRtyH\n\t6HMaGNlZ3QxuIPUlUfRjEjuYFGETvOQoZDsxOI/CasQ3BqZId+93VXxOM6Q0uOjdWJ\n\tY6OCZu6uSYGZ896ieIGsHxAsF8EaTADFDo7xJYe2ttLtb98puVdjQhk/W1qOJg8cWt\n\t8beyN6VGFnuA5YPrkLRIXuvfP9WZmDT0j32WklInMoLO6I4EUmGQ9jFCHla+3+Jzga\n\t9u4ZjujR0h5E1e0pu1tXsS8OtqfdAnuHMqGx8pB6TZsfK7Ng2dxhvsidylb3FQumTD\n\tfmQH/FAnE8vPw==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1664581444;\n\tbh=CaIr3FB8TVjodLT8cp4mYP+MBLOswV2Rh5NDe+KN7h8=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=F0jdQ39pJyszajvrUQtjTIx/5ZmyQQhTnPoKqnKAVW/dOar7GbwVu0Eo2k+dwZdF5\n\tv0GUYuByIJmNUYgz5VUBDral5JAycoNOLJ/MZEjwaH/vbbZGVW9hRYBlyVW3z1OV9q\n\tRENDEakdwafxEHs8gZiwNUVMiRhyDH36IS5j+jkg="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"F0jdQ39p\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<Yzd7wjdDN4bhoc5o@pendragon.ideasonboard.com>","References":"<20220929143626.3100668-1-kieran.bingham@ideasonboard.com>\n\t<20220929143626.3100668-2-kieran.bingham@ideasonboard.com>\n\t<20220930135432.jamopome5phq2pk4@uno.localdomain>\n\t<166455267309.2677993.5895773133427690802@Monstersaurus>\n\t<YzdWpCly8s5EZTmS@pendragon.ideasonboard.com>\n\t<166457540792.4106166.8909322087525632590@Monstersaurus>\n\t<Yzd7wjdDN4bhoc5o@pendragon.ideasonboard.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Date":"Sat, 01 Oct 2022 00:44:01 +0100","Message-ID":"<166458144171.4106166.15014334859208421803@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH 1/4] 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>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":25214,"web_url":"https://patchwork.libcamera.org/comment/25214/","msgid":"<YzeErJQX2QKmFmvV@pendragon.ideasonboard.com>","date":"2022-10-01T00:07:08","subject":"Re: [libcamera-devel] [PATCH 1/4] meson: Shared Object version\n\thandling","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Sat, Oct 01, 2022 at 12:44:01AM +0100, Kieran Bingham wrote:\n> Quoting Laurent Pinchart (2022-10-01 00:29:06)\n> > On Fri, Sep 30, 2022 at 11:03:27PM +0100, Kieran Bingham wrote:\n> > > Quoting Laurent Pinchart (2022-09-30 21:50:44)\n> > > > Hi Kieran,\n> > > > \n> > > > (CC'ing Javier)\n> > > > \n> > > > Final lap before a release (even if it's just a minor one), that's nice\n> > > > :-)\n> > > > \n> > > > On Fri, Sep 30, 2022 at 04:44:33PM +0100, Kieran Bingham via libcamera-devel wrote:\n> > > > > Quoting Jacopo Mondi (2022-09-30 14:54:32)\n> > > > > > On Thu, Sep 29, 2022 at 03:36:23PM +0100, Kieran Bingham via libcamera-devel wrote:\n> > > > > > > The libcamera project is not yet ready to declare ABI nor API stability,\n> > > > > > > but it will benefit the community to be able to provide more regular\n> > > > > > > release cycles to determine 'versioned' points of history.\n> > > > > > >\n> > > > > > > Ideally, these releases will be made at any ABI breakage, but can be\n> > > > > > > made at arbitary time based points along the way.\n> > > > > > >\n> > > > > > > To support releases which may not be ABI stable, declare the soversion\n> > > > > > > of both the libcamera and libcamera-base library to be dependant upon\n> > > > > > > both the major and minor component of the project version.\n> > > > > > >\n> > > > > > > As part of this, introduce a new 'Versions' summary section to highlight\n> > > > > > > the different version components that may become apparent within any\n> > > > > > > given build.\n> > > > > > >\n> > > > > > > Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > > > \n> > > > I tried the script and it seemed to work, but compiling libcamera then\n> > > > gave me the following warnings:\n> > > > \n> > > > warning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so.0.0' is not a readable file or directory... skipping.\n> > > > warning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so.0' is not a readable file or directory... skipping.\n> > > > warning: source './x86-gcc-11.3.0/src/libcamera/libcamera.so' is not a readable file or directory... skipping.\n> > > > warning: source './x86-gcc-11.3.0/src/libcamera/base/libcamera-base.so.0' is not a readable file or directory... skipping\n> > > \n> > > Hrm ... looks like that might be doxygen?\n> > \n> > I think you're right.\n> > \n> > meson generates the symlinks for the shared libraries at configure time,\n> > so if Doxygen runs before the binary is built, the links will be broken.\n> > Furthermore, meson fails to remove old links when the soname is bumped,\n> > so broken links will remain in place. We thus can't fix the problem by\n> > just adding a dependency on libcamera and libcamera-base to the Doxygen\n> > target like I initially thought.\n> > \n> > > This fixes it.\n> > > \n> > > diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\n> > > index 88dfcddaebf6..761807005294 100644\n> > > --- a/Documentation/Doxyfile.in\n> > > +++ b/Documentation/Doxyfile.in\n> > > @@ -46,7 +46,9 @@ EXCLUDE                = @TOP_SRCDIR@/include/libcamera/base/span.h \\\n> > >                           @TOP_BUILDDIR@/include/libcamera/internal/tracepoints.h \\\n> > >                           @TOP_BUILDDIR@/src/libcamera/proxy/\n> > > \n> > > -EXCLUDE_PATTERNS       = @TOP_BUILDDIR@/include/libcamera/ipa/*_serializer.h \\\n> > > +EXCLUDE_PATTERNS       = @TOP_BUILDDIR@/src/libcamera/libcamera.so* \\\n> > > +                         @TOP_BUILDDIR@/src/libcamera/base/libcamera-base.so* \\\n> > > +                         @TOP_BUILDDIR@/include/libcamera/ipa/*_serializer.h \\\n> > >                           @TOP_BUILDDIR@/include/libcamera/ipa/*_proxy.h \\\n> > >                           @TOP_BUILDDIR@/include/libcamera/ipa/ipu3_*.h \\\n> > >                           @TOP_BUILDDIR@/include/libcamera/ipa/raspberrypi_*.h \\\n> > \n> > I can't think of a better option :-S\n> > \n> > > > > > > ---\n> > > > > > >  meson.build                    | 15 +++++++++++++++\n> > > > > > >  src/libcamera/base/meson.build |  1 +\n> > > > > > >  src/libcamera/meson.build      |  1 +\n> > > > > > >  3 files changed, 17 insertions(+)\n> > > > > > >\n> > > > > > > diff --git a/meson.build b/meson.build\n> > > > > > > index 72919102ad55..9bbfd0e9c784 100644\n> > > > > > > --- a/meson.build\n> > > > > > > +++ b/meson.build\n> > > > > > > @@ -26,6 +26,21 @@ endif\n> > > > > > >\n> > > > > > >  libcamera_version = libcamera_git_version.split('+')[0]\n> > > > > > >\n> > > > > > > +# Enforce Major and Minor as part of the soversion. Until we make a first major\n> > > > > > > +# release, and remain on version 0.x each release may denote ABI instabilty.\n> > > > > > \n> > > > > > Missing a , after 0.x ?\n> > > > > \n> > > > > Yes, looks like the , after release should move to after 0.x,\n> > > > \n> > > > That's more readable indeed.\n> > > > \n> > > > > > nit apart:\n> > > > > > Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>\n> > > > > \n> > > > > Thanks.\n> > > > > \n> > > > > > > +# We can continue to consider that a patch level increment should be\n> > > > > > > +# compatible.\n> > > > > > > +project_version = meson.project_version().split('.')\n> > > > > > > +soversion = project_version[0] + '.' + project_version[1]\n> > > > \n> > > > As we have libcamera_version and not just version, I'd have named the\n> > > > variable libcamera_soversion.\n> > > > \n> > > > Why do you use two components of the version only ? As we don't\n> > > > guarantee ABI stability, could we use all three components for now ?\n> > > > This could then be shortened to major.minor when we'll add ABI change\n> > > > detection (but still without ABI stability), and finally to just major\n> > > > once ABI stability will be guaranteed. Javier, do you have any opinion ?\n> > > \n> > > I believe we don't define ABI stability in either of major or minor. But\n> > > we 'do' (or can) in .patch. (We're also unlikely to create a .patch\n> > > relase, unless we find a specific need to fix something for a\n> > > distributions release, but distributions might still make patch\n> > > releases...).\n> > \n> > Why wouldn't we start with patch releases ?\n> \n> Becaause that prohibits anyone else adding fixes to that release point.\n> \n> If Ubuntu take libcamera-0.5 ... but there's a bug .. they can fix it\n> (or we can) in libcamera-0.5.1.\n> \n> If we do patch release that's not possible.\n\nThis is an area where Javier may shed some light. I see lots of\nlibraries that make use of major, minor and patch themselves, it doesn't\nseem like the patch number is meant to be reserved for distributions.\n\nAt some point in the future I'm quite sure we'll have multiple\nmaintained stable branches, with bug fix releases. We're not there yet,\nso I'd rather start by doing 0.0.x releases to start with, and see where\nit leads.\n\n> > > So I don't see specific benefit in including it in the sovesion.\n> > > \n> > > > > > > +\n> > > > > > > +summary({\n> > > > > > > +            'Project': meson.project_version(),\n> > > > > > > +            'Sources': libcamera_git_version,\n> > > > > > > +            'libcamera': libcamera_version,\n> > > > \n> > > > Is there ever a case where libcamera_version should be different than\n> > > > meson.project_version() ?\n> > > \n> > > *should be* ... no. *can be* yes.\n> > > \n> > > I think this can occur if you clone a repo without fetching tags.\n> > > \n> > > That's why it's split to highlight ;-)\n> > > \n> > > \n> > > On a local build that has had a 'release', but all tags removed\n> > > \n> > > libcamera 0.1.0\n> > > \n> > >   Versions\n> > >     Project                  : 0.1.0\n> > >     Sources                  : 0.0.0+3954-a64a132e\n> > >     libcamera                : 0.0.0\n> > >     Shared Object            : 0.1\n> > \n> > Is this something we really have to handle ? :-) If so, there's more to\n> > fix, as the \"sources\" version is what libcamera will print in its log,\n> > and it won't match the soname or project version. The \"libcamera\"\n> > version is what will end up in version.h, which could also confuse\n> > applications. I see three options, we could consider that:\n> > \n> > - This really shouldn't happen, and let people who clone the git tree\n> >   without tags suffer from their mistake if they decide to shoot\n> >   themselves in the foot.\n> \n> Yup. I'm here right now.\n> \n> > - This could happen by mistake and we should fail loudly at configure\n> >   time, to be kind to people's feet.\n> \n> I'm not sure failing to build because of a version string is friendly.\n> But not having the right 'version' isn't nice either.\n\nIf it's really not supposed to happen, I think this would be more\nuser-friendly than letting it go through silently, and having the user\nexperience subtle and hard to debug issues. The mismatch in the versions\nprinted at configure time will likely be ignored, if noticed at all. And\nif users complain about this problem, then we'll get to learn about\nvalid use cases, in which case we would switch to the strategy below.\n\nTL;DR: I would fail at configure time if we detect a problem, and lower\nthe number of versions we print to remove duplicates.\n\n> But I think we're trying to fight corner cases here.\n> \n> > - This is a valid case, and the project version from meson.build should\n> >   then be use to construct the other versions if tags are missing.\n> \n> That gets difficult, (or ... more difficult) as you won't be able to\n> determine 'what' point the specific release was made at, so you can't\n> generate any additional information. We'd end up losing helpful\n> information.\n\nYes, it's not nice.\n\n> If you want to update utils/gen-version.sh ... we can do that on top.\n\nOn top, and later, if we realize there are valid use cases.\n\n> > > > > > > +            'Shared Object': soversion,\n> > > > \n> > > > I would have named this 'soname' (or 'SONAME'), that's the official\n> > > > term. 'Shared Object' is ambiguous.\n> > > \n> > > It's in the 'version' section, and is the Shared Object Version. I.e.\n> > > the soversion.\n> > > \n> > > It can be soname though.\n> > \n> > I'd still prefer soname, it's more explicit.\n> > \n> > > > > > > +        },\n> > > > > > > +        section : 'Versions')\n> > > > > > > +\n> > > > > > >  # This script gererates the .tarball-version file on a 'meson dist' command.\n> > > > \n> > > > While at it you could fix the \"gererates\" typo.\n> > > > \n> > > > > > >  meson.add_dist_script('utils/run-dist.sh')\n> > > > > > >\n> > > > > > > diff --git a/src/libcamera/base/meson.build b/src/libcamera/base/meson.build\n> > > > > > > index 3b9d74efe935..51719f112d26 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 : soversion,\n> > > > > > >                                      name_prefix : '',\n> > > > > > >                                      install : true,\n> > > > > > >                                      cpp_args : libcamera_base_args,\n> > > > > > > diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\n> > > > > > > index 63b47b177fd2..3aa7f32067f8 100644\n> > > > > > > --- a/src/libcamera/meson.build\n> > > > > > > +++ b/src/libcamera/meson.build\n> > > > > > > @@ -160,6 +160,7 @@ libcamera_deps = [\n> > > > > > >  libcamera = shared_library('libcamera',\n> > > > > > >                             libcamera_sources,\n> > > > > > >                             version : libcamera_version,\n> > > > > > > +                           soversion : soversion,\n> > > > > > >                             name_prefix : '',\n> > > > > > >                             install : true,\n> > > > > > >                             include_directories : includes,","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 34B65C0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat,  1 Oct 2022 00:07:13 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7D91062859;\n\tSat,  1 Oct 2022 02:07:12 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D445662851\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat,  1 Oct 2022 02:07:10 +0200 (CEST)","from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi\n\t[62.78.145.57])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 188E359D;\n\tSat,  1 Oct 2022 02:07:10 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1664582832;\n\tbh=VKJimuJyfhcS+euw+GhrZPHF5OARwBO3il9wU7gofX0=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=TPdyKSmltW9UVX28cp+pOqYLEVCkNRf1Zx/BcvwAlTLHbOmmOV+2Q3aP1cE3Yah9W\n\tn59gScTo1JWKhvdCXM4MNX+JATKFeZoTkk1jw03TbLjaRhI3U9PplRyyof4C8xpCJp\n\t6T9lforrh64mVpRUENN5JA67z38EccRczV6svfFpn4na+WTsaWbmE2V8EfZ9AQZuWh\n\tbVto4pj2Qdx2dPb5sW+Q0ZBhjlRReWuNVmSfmf01kVDgJjAbzNohF4wsSAEavdEWIC\n\tTIMW68No8DUILqlSzvpkclwLWHkUOCwF3d8SsW2q81pDHQtrk+o4yFExzN7d379Lg0\n\ttY25rS9UNZR7A==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1664582830;\n\tbh=VKJimuJyfhcS+euw+GhrZPHF5OARwBO3il9wU7gofX0=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=FYQb8jKP1J26N6PliCGsDJ7UPpjF3TzAW6J8jSNhTlBcTGT1htPGIYh1dIShAXdxj\n\tUFUB0sj0AnssqiJ3upNQfAIbbthaA8oSGt+ssXhAkutWbVJWIowkw4MNDpZh5MXgqW\n\tlE7ZKF5e/RI7qmKDXDvB1GX7ZdOSKaaUsiLbrNRs="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"FYQb8jKP\"; dkim-atps=neutral","Date":"Sat, 1 Oct 2022 03:07:08 +0300","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Message-ID":"<YzeErJQX2QKmFmvV@pendragon.ideasonboard.com>","References":"<20220929143626.3100668-1-kieran.bingham@ideasonboard.com>\n\t<20220929143626.3100668-2-kieran.bingham@ideasonboard.com>\n\t<20220930135432.jamopome5phq2pk4@uno.localdomain>\n\t<166455267309.2677993.5895773133427690802@Monstersaurus>\n\t<YzdWpCly8s5EZTmS@pendragon.ideasonboard.com>\n\t<166457540792.4106166.8909322087525632590@Monstersaurus>\n\t<Yzd7wjdDN4bhoc5o@pendragon.ideasonboard.com>\n\t<166458144171.4106166.15014334859208421803@Monstersaurus>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<166458144171.4106166.15014334859208421803@Monstersaurus>","Subject":"Re: [libcamera-devel] [PATCH 1/4] 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":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":25216,"web_url":"https://patchwork.libcamera.org/comment/25216/","msgid":"<cb20073e-622a-1ebc-f224-c1e02aaa0f26@redhat.com>","date":"2022-10-01T09:25:11","subject":"Re: [libcamera-devel] [PATCH 1/4] meson: Shared Object version\n\thandling","submitter":{"id":95,"url":"https://patchwork.libcamera.org/api/people/95/","name":"Javier Martinez Canillas","email":"javierm@redhat.com"},"content":"Hello folks,\n\nI'll try to take a detailed look at the patches next week and give\nfeedback, but I see that there are some distro related questions,\nso thought that would be better to answer those ASAP.\n\nOn 10/1/22 02:07, Laurent Pinchart wrote:\n> On Sat, Oct 01, 2022 at 12:44:01AM +0100, Kieran Bingham wrote:\n>> Quoting Laurent Pinchart (2022-10-01 00:29:06)\n>>> On Fri, Sep 30, 2022 at 11:03:27PM +0100, Kieran Bingham wrote:\n>>>> Quoting Laurent Pinchart (2022-09-30 21:50:44)\n\n[...]\n\n>>>>>>\n>>>>>>>> +# We can continue to consider that a patch level increment should be\n>>>>>>>> +# compatible.\n>>>>>>>> +project_version = meson.project_version().split('.')\n>>>>>>>> +soversion = project_version[0] + '.' + project_version[1]\n>>>>>\n>>>>> As we have libcamera_version and not just version, I'd have named the\n>>>>> variable libcamera_soversion.\n>>>>>\n>>>>> Why do you use two components of the version only ? As we don't\n>>>>> guarantee ABI stability, could we use all three components for now ?\n>>>>> This could then be shortened to major.minor when we'll add ABI change\n>>>>> detection (but still without ABI stability), and finally to just major\n>>>>> once ABI stability will be guaranteed. Javier, do you have any opinion ?\n>>>>\n>>>> I believe we don't define ABI stability in either of major or minor. But\n>>>> we 'do' (or can) in .patch. (We're also unlikely to create a .patch\n>>>> relase, unless we find a specific need to fix something for a\n>>>> distributions release, but distributions might still make patch\n>>>> releases...).\n>>>\n>>> Why wouldn't we start with patch releases ?\n>>\n>> Becaause that prohibits anyone else adding fixes to that release point.\n>>\n>> If Ubuntu take libcamera-0.5 ... but there's a bug .. they can fix it\n>> (or we can) in libcamera-0.5.1.\n>>\n>> If we do patch release that's not possible.\n> \n> This is an area where Javier may shed some light. I see lots of\n> libraries that make use of major, minor and patch themselves, it doesn't\n> seem like the patch number is meant to be reserved for distributions.\n> \n> At some point in the future I'm quite sure we'll have multiple\n> maintained stable branches, with bug fix releases. We're not there yet,\n> so I'd rather start by doing 0.0.x releases to start with, and see where\n> it leads.\n> \n\nI agree with Laurent here. Upstream projects can make use of all the three\nMAJOR.MINOR.PATCH version numbers, distros add their own release numbering\non top of it. For example, let's say we have a libcamera-0.5.1 release; a\ndistro would release that for example as libcamera-0.5.1-1.fc36.x86_64.\n\nIf later there's a bug (either in the packaging or in libcamera itself),\nthe distro can propose a fix for upstream, carry it as a downstream patch\nin the meantime and release a new package as libcamera-0.5.1-2.fc36.x86_64.\n\nIt would be very rare for distro downstream patch either change the library\nAPI/ABI or add a new a new feature in a backward compatible change, to need\na SONAME bump. So that's in complete control of upstream and distros should\nnot have a say there. They just need to pay attention to SONAME bumps since\nis how upstream notifies downstream distros whether the new release breaks\nbackward compatibility or not.","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 A31DDC0DA4\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSat,  1 Oct 2022 09:25:19 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E02276285E;\n\tSat,  1 Oct 2022 11:25:18 +0200 (CEST)","from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.133.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0FBCB622B4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat,  1 Oct 2022 11:25:16 +0200 (CEST)","from mail-wm1-f70.google.com (mail-wm1-f70.google.com\n\t[209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS\n\t(version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id\n\tus-mta-636-xxp9TbgGNjW0krzj5XBdbQ-1; Sat, 01 Oct 2022 05:25:14 -0400","by mail-wm1-f70.google.com with SMTP id\n\tr128-20020a1c4486000000b003b3309435a9so4969697wma.6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 01 Oct 2022 02:25:14 -0700 (PDT)","from [192.168.1.130] (205.pool92-176-231.dynamic.orange.es.\n\t[92.176.231.205]) by smtp.gmail.com with ESMTPSA id\n\tq16-20020a7bce90000000b003b3401f1e24sm4875493wmj.28.2022.10.01.02.25.12\n\t(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n\tSat, 01 Oct 2022 02:25:12 -0700 (PDT)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1664616318;\n\tbh=i2gcAhhMsntK7ppLmuRcPCjb5qB5Lxfl3go6g4nn0hI=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=N3O/N1r7nDxIGEYuxd/Vk6B8s6BnU64udhjwV3hf5TXfsdMwMvOI/Dls70ZTJbrxc\n\tT64ocFaO6PMcXJQElWKZ+jcWgp8Iqdhz+1mO9YuF8KHfJMOoF9Rlz471fdC5NlN7AF\n\tAqXTyFbDD3iNkYdtfqmxgvs+SeCmk3UonXYapnJ0hBHOZRU2ekemOxfdWfPOOp4fNP\n\tssx49R9NnBq9SS029O9KzSneuN8oo9uA2Shxz2g3IGnJqOF8iA6tufCT7NUx3ePL81\n\tblvLBACVQqSiYvl++h8Ag7tFGoMQWlFvTbx3YgvCJb4uVGA9hsSgYr5lcDFrzMBZx9\n\tOKxUJ23XpBEwQ==","v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1664616316;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tcontent-transfer-encoding:content-transfer-encoding:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=Sp9lVNBl0bP6ZhchLfRDfjH57E6V3p9S+fb0zppuUzk=;\n\tb=NnIVwyXF3AQiXHh6Rz+E+PWcvK/mPbZ3Gz65A89766jJ6x8MxWrtW0Tqggn1S6NuIJJ9C7\n\tLCBXgTFyIvCzvCdw8SOWcwMi8irKqfgTGk+skGcx6rL0ahHNwCB54xxJuRbFdt5nRO7i2O\n\twLRDqbPlTRivSBosPcRE5RI09HHiPXg="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=redhat.com\n\theader.i=@redhat.com header.b=\"NnIVwyXF\"; \n\tdkim-atps=neutral","X-MC-Unique":"xxp9TbgGNjW0krzj5XBdbQ-1","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=content-transfer-encoding:in-reply-to:from:references:cc:to\n\t:content-language:subject:user-agent:mime-version:date:message-id\n\t:x-gm-message-state:from:to:cc:subject:date;\n\tbh=Sp9lVNBl0bP6ZhchLfRDfjH57E6V3p9S+fb0zppuUzk=;\n\tb=PFGpAGgtYKgfEMRBYV+e/11voHziDVcMemr0SE11DhuoT0Q8YhfoG7rQ9P6sc9imD4\n\tSevcbEKLXJrS5ZV4LvJtqeK5bTV6eUf6h/dDzd2x2o0FyZxM0N2VJTTVIReDFDNkUBh9\n\tdb98hbrJG6s8vDgRHv4A3PrFJNlgtB5l+jlu7cLKpNITcaS4Fv7ii0xUlmafQCjzcWPG\n\t8BkSwUneZSXQZmZOA2te5IK7i1v9VutkUJUISBkAF+3X7sNX+tzc9wHWKYyLPXjwvjwz\n\tb8wbwC8ynODd1kn+0Nuh64DTUCdLMcVpYASHP4U7b0F2etRU+JsqElS0m/1syS1/+mYi\n\t5cjQ==","X-Gm-Message-State":"ACrzQf2KOYue1ZX35i3Sb0Dsu6oHcPyP8fl4H4Ya47WC7ERZ0nJ3o499\n\tqctmYccqC92MTqV/1FbuAZsZPVnYKDfVbHFn7qSeGhuqeNemHosGTcwE3hNKvLLnN4uiRIiyAWO\n\t3kZx13twDBIwDp9RLF8JAk2K5VrJ2To+vWg==","X-Received":["by 2002:a5d:598c:0:b0:22b:100f:c2d2 with SMTP id\n\tn12-20020a5d598c000000b0022b100fc2d2mr7671048wri.263.1664616313200; \n\tSat, 01 Oct 2022 02:25:13 -0700 (PDT)","by 2002:a5d:598c:0:b0:22b:100f:c2d2 with SMTP id\n\tn12-20020a5d598c000000b0022b100fc2d2mr7671033wri.263.1664616312971; \n\tSat, 01 Oct 2022 02:25:12 -0700 (PDT)"],"X-Google-Smtp-Source":"AMsMyM6/Qq3CdfuAeonpkwr9ajNvFMWTprzg7lAtOo//t56W93dU1QYa5fusLNnOVbf13Y26EAkM9g==","Message-ID":"<cb20073e-622a-1ebc-f224-c1e02aaa0f26@redhat.com>","Date":"Sat, 1 Oct 2022 11:25:11 +0200","MIME-Version":"1.0","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101\n\tThunderbird/102.2.0","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>","References":"<20220929143626.3100668-1-kieran.bingham@ideasonboard.com>\n\t<20220929143626.3100668-2-kieran.bingham@ideasonboard.com>\n\t<20220930135432.jamopome5phq2pk4@uno.localdomain>\n\t<166455267309.2677993.5895773133427690802@Monstersaurus>\n\t<YzdWpCly8s5EZTmS@pendragon.ideasonboard.com>\n\t<166457540792.4106166.8909322087525632590@Monstersaurus>\n\t<Yzd7wjdDN4bhoc5o@pendragon.ideasonboard.com>\n\t<166458144171.4106166.15014334859208421803@Monstersaurus>\n\t<YzeErJQX2QKmFmvV@pendragon.ideasonboard.com>","In-Reply-To":"<YzeErJQX2QKmFmvV@pendragon.ideasonboard.com>","X-Mimecast-Spam-Score":"0","X-Mimecast-Originator":"redhat.com","Content-Language":"en-US","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"7bit","Subject":"Re: [libcamera-devel] [PATCH 1/4] 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":"Javier Martinez Canillas via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Javier Martinez Canillas <javierm@redhat.com>","Cc":"libcamera devel <libcamera-devel@lists.libcamera.org>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]