[{"id":38105,"web_url":"https://patchwork.libcamera.org/comment/38105/","msgid":"<20260205233945.GB1376807@killaraus.ideasonboard.com>","date":"2026-02-05T23:39:45","subject":"Re: [RFC PATCH v1 3/3] utils: checkstyle.py: Add `MesonFormatter`","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Mon, Feb 02, 2026 at 12:25:11PM +0100, Barnabás Pőcze wrote:\n> Add support for diagnosing meson file style issues using `meson format`.\n> \n> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> ---\n> This probably makes `MesonChecker` unnecessary.\n\nAck.\n\n> ---\n>  utils/checkstyle.py | 30 ++++++++++++++++++++++++++++++\n>  1 file changed, 30 insertions(+)\n> \n> diff --git a/utils/checkstyle.py b/utils/checkstyle.py\n> index 06b9f199a..2dfff0473 100755\n> --- a/utils/checkstyle.py\n> +++ b/utils/checkstyle.py\n> @@ -919,6 +919,36 @@ class StripTrailingSpaceFormatter(Formatter):\n>              lines[i] = lines[i].rstrip() + '\\n'\n>          return ''.join(lines)\n> \n> +class MesonFormatter(Formatter):\n> +    @staticmethod\n> +    def _check_meson_version():\n> +        # 1.5.0 for `meson format`\n> +        # 1.7.0 for stdin input\n> +        # 1.9.0 for `--source-file-path`\n> +        VERSION_REQ = (1, 9, 0)\n> +\n> +        ret = subprocess.run(['meson', '--version'],\n> +                             stdin=subprocess.DEVNULL,\n> +                             stdout=subprocess.PIPE,\n> +                             stderr=subprocess.PIPE)\n> +\n> +        ver = tuple(map(int, ret.stdout.decode('utf-8').split('.')))\n> +        if ver < VERSION_REQ:\n> +            return [\n> +                CommitIssue(f'Missing meson {\".\".join(map(str, VERSION_REQ))} to run `meson format`')\n> +            ]\n\n1.9.0 is very recent. Won't this cause failures in CI ?\n\n> +\n> +\n> +    dependencies = (('meson', _check_meson_version), )\n> +    patterns = ('meson.build', )\n> +\n> +    @classmethod\n> +    def format(cls, filename, data):\n> +        ret = subprocess.run(['meson', 'format', '-',\n> +                              '--source-file-path', filename],\n> +                             input=data.encode('utf-8'), stdout=subprocess.PIPE)\n> +        return ret.stdout.decode('utf-8')\n> +\n> \n>  # ------------------------------------------------------------------------------\n>  # Style checking","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 7B0A2BD78E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  5 Feb 2026 23:39:49 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7059562075;\n\tFri,  6 Feb 2026 00:39:48 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0149961FBF\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  6 Feb 2026 00:39:46 +0100 (CET)","from killaraus.ideasonboard.com\n\t(2001-14ba-703d-e500--2a1.rev.dnainternet.fi\n\t[IPv6:2001:14ba:703d:e500::2a1])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id AAAF4460;\n\tFri,  6 Feb 2026 00:39:03 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"SytgBbn8\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1770334743;\n\tbh=pvl03H5egWeWp60QMtzWLrzVg7oKtLxAMPvTEufu7bE=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=SytgBbn819pB5uFCpOPCvytc7NO1HCOHxRkvBKiuBjD/YRpW1/660mTJ9s2za50On\n\tgeqESEXssh6zj68F7G5+ZpnQGnmwwSHivi7VkLBKZhtPD9SaBlGHmMKxrL/o5Q+vlx\n\tSl00mUM+IbxwxX8JcfZMXVws7Q5xkNZ2e2KwNAPg=","Date":"Fri, 6 Feb 2026 01:39:45 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [RFC PATCH v1 3/3] utils: checkstyle.py: Add `MesonFormatter`","Message-ID":"<20260205233945.GB1376807@killaraus.ideasonboard.com>","References":"<20260202112511.640320-1-barnabas.pocze@ideasonboard.com>\n\t<20260202112511.640320-4-barnabas.pocze@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20260202112511.640320-4-barnabas.pocze@ideasonboard.com>","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":38116,"web_url":"https://patchwork.libcamera.org/comment/38116/","msgid":"<aaf36197-0926-4fd6-ad21-545bc1dea68c@ideasonboard.com>","date":"2026-02-06T08:55:20","subject":"Re: [RFC PATCH v1 3/3] utils: checkstyle.py: Add `MesonFormatter`","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"content":"2026. 02. 06. 0:39 keltezéssel, Laurent Pinchart írta:\n> On Mon, Feb 02, 2026 at 12:25:11PM +0100, Barnabás Pőcze wrote:\n>> Add support for diagnosing meson file style issues using `meson format`.\n>>\n>> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n>> ---\n>> This probably makes `MesonChecker` unnecessary.\n> \n> Ack.\n> \n>> ---\n>>   utils/checkstyle.py | 30 ++++++++++++++++++++++++++++++\n>>   1 file changed, 30 insertions(+)\n>>\n>> diff --git a/utils/checkstyle.py b/utils/checkstyle.py\n>> index 06b9f199a..2dfff0473 100755\n>> --- a/utils/checkstyle.py\n>> +++ b/utils/checkstyle.py\n>> @@ -919,6 +919,36 @@ class StripTrailingSpaceFormatter(Formatter):\n>>               lines[i] = lines[i].rstrip() + '\\n'\n>>           return ''.join(lines)\n>>\n>> +class MesonFormatter(Formatter):\n>> +    @staticmethod\n>> +    def _check_meson_version():\n>> +        # 1.5.0 for `meson format`\n>> +        # 1.7.0 for stdin input\n>> +        # 1.9.0 for `--source-file-path`\n>> +        VERSION_REQ = (1, 9, 0)\n>> +\n>> +        ret = subprocess.run(['meson', '--version'],\n>> +                             stdin=subprocess.DEVNULL,\n>> +                             stdout=subprocess.PIPE,\n>> +                             stderr=subprocess.PIPE)\n>> +\n>> +        ver = tuple(map(int, ret.stdout.decode('utf-8').split('.')))\n>> +        if ver < VERSION_REQ:\n>> +            return [\n>> +                CommitIssue(f'Missing meson {\".\".join(map(str, VERSION_REQ))} to run `meson format`')\n>> +            ]\n> \n> 1.9.0 is very recent. Won't this cause failures in CI ?\n\nYes indeed, debian 13 has 1.7.0. So this is very much a \"very rfc\".\nI suppose `pip` could be used to get a newer version.\n\n\n> \n>> +\n>> +\n>> +    dependencies = (('meson', _check_meson_version), )\n>> +    patterns = ('meson.build', )\n>> +\n>> +    @classmethod\n>> +    def format(cls, filename, data):\n>> +        ret = subprocess.run(['meson', 'format', '-',\n>> +                              '--source-file-path', filename],\n>> +                             input=data.encode('utf-8'), stdout=subprocess.PIPE)\n>> +        return ret.stdout.decode('utf-8')\n>> +\n>>\n>>   # ------------------------------------------------------------------------------\n>>   # Style checking\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 22FD5C31E9\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  6 Feb 2026 08:55:27 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 05A566207E;\n\tFri,  6 Feb 2026 09:55:26 +0100 (CET)","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 2B7AD61FC6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  6 Feb 2026 09:55:24 +0100 (CET)","from [192.168.33.58] (185.221.141.206.nat.pool.zt.hu\n\t[185.221.141.206])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id A076F63B;\n\tFri,  6 Feb 2026 09:54:40 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"MNzzXYxZ\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1770368080;\n\tbh=O2ViOL/3l42SWEaAxeNAMqXShhgb6BSiajU2H+DiR+A=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=MNzzXYxZNLdThIK831u68ek02PxUdBpt9FHlwbRR2T2vmAtlD2qNiK+UtwOOLsaCd\n\tJzr0Ca26lPntMY+MT+ZWDbfPy55DPHFBzhnsdkfzqn3NMbvZgbvXZ68qw1i+ffvKkT\n\t164/nqGDfWmJ4Mgh04p01eswMGncFOC+oOJWhcd0=","Message-ID":"<aaf36197-0926-4fd6-ad21-545bc1dea68c@ideasonboard.com>","Date":"Fri, 6 Feb 2026 09:55:20 +0100","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [RFC PATCH v1 3/3] utils: checkstyle.py: Add `MesonFormatter`","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","References":"<20260202112511.640320-1-barnabas.pocze@ideasonboard.com>\n\t<20260202112511.640320-4-barnabas.pocze@ideasonboard.com>\n\t<20260205233945.GB1376807@killaraus.ideasonboard.com>","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Content-Language":"en-US, hu-HU","In-Reply-To":"<20260205233945.GB1376807@killaraus.ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"8bit","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":38117,"web_url":"https://patchwork.libcamera.org/comment/38117/","msgid":"<20260206095118.GK1376807@killaraus.ideasonboard.com>","date":"2026-02-06T09:51:18","subject":"Re: [RFC PATCH v1 3/3] utils: checkstyle.py: Add `MesonFormatter`","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"On Fri, Feb 06, 2026 at 09:55:20AM +0100, Barnabás Pőcze wrote:\n> 2026. 02. 06. 0:39 keltezéssel, Laurent Pinchart írta:\n> > On Mon, Feb 02, 2026 at 12:25:11PM +0100, Barnabás Pőcze wrote:\n> >> Add support for diagnosing meson file style issues using `meson format`.\n> >>\n> >> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> >> ---\n> >> This probably makes `MesonChecker` unnecessary.\n> > \n> > Ack.\n> > \n> >> ---\n> >>   utils/checkstyle.py | 30 ++++++++++++++++++++++++++++++\n> >>   1 file changed, 30 insertions(+)\n> >>\n> >> diff --git a/utils/checkstyle.py b/utils/checkstyle.py\n> >> index 06b9f199a..2dfff0473 100755\n> >> --- a/utils/checkstyle.py\n> >> +++ b/utils/checkstyle.py\n> >> @@ -919,6 +919,36 @@ class StripTrailingSpaceFormatter(Formatter):\n> >>               lines[i] = lines[i].rstrip() + '\\n'\n> >>           return ''.join(lines)\n> >>\n> >> +class MesonFormatter(Formatter):\n> >> +    @staticmethod\n> >> +    def _check_meson_version():\n> >> +        # 1.5.0 for `meson format`\n> >> +        # 1.7.0 for stdin input\n> >> +        # 1.9.0 for `--source-file-path`\n> >> +        VERSION_REQ = (1, 9, 0)\n> >> +\n> >> +        ret = subprocess.run(['meson', '--version'],\n> >> +                             stdin=subprocess.DEVNULL,\n> >> +                             stdout=subprocess.PIPE,\n> >> +                             stderr=subprocess.PIPE)\n> >> +\n> >> +        ver = tuple(map(int, ret.stdout.decode('utf-8').split('.')))\n> >> +        if ver < VERSION_REQ:\n> >> +            return [\n> >> +                CommitIssue(f'Missing meson {\".\".join(map(str, VERSION_REQ))} to run `meson format`')\n> >> +            ]\n> > \n> > 1.9.0 is very recent. Won't this cause failures in CI ?\n> \n> Yes indeed, debian 13 has 1.7.0. So this is very much a \"very rfc\".\n> I suppose `pip` could be used to get a newer version.\n\nPossibly, but I'm also a bit worried about the impact on developers.\nExperience has shown that people who were forced to install a newer\nmeson version through pip because their distribution was lagging often\nalso kept the meson system package, resulting in problems and bug\nreports.\n\nWe're not forcing users to support meson format, as far as I understand\nthis flags an issue but doesn't prevent checkstyle from running, so I\nsuppose this could be OK, but I wonder if we shouldn't start by\nsilently ignoring meson format if meson is too old, and only later flag\nan issue once meson 1.9.0 will be more widely available ?\n\n> >> +\n> >> +\n> >> +    dependencies = (('meson', _check_meson_version), )\n> >> +    patterns = ('meson.build', )\n> >> +\n> >> +    @classmethod\n> >> +    def format(cls, filename, data):\n> >> +        ret = subprocess.run(['meson', 'format', '-',\n> >> +                              '--source-file-path', filename],\n> >> +                             input=data.encode('utf-8'), stdout=subprocess.PIPE)\n> >> +        return ret.stdout.decode('utf-8')\n> >> +\n> >>\n> >>   # ------------------------------------------------------------------------------\n> >>   # Style checking","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 0A824C31E9\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  6 Feb 2026 09:51:22 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id CDD7562080;\n\tFri,  6 Feb 2026 10:51:20 +0100 (CET)","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 D48C561FC6\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  6 Feb 2026 10:51:19 +0100 (CET)","from killaraus.ideasonboard.com\n\t(2001-14ba-703d-e500--2a1.rev.dnainternet.fi\n\t[IPv6:2001:14ba:703d:e500::2a1])\n\tby perceval.ideasonboard.com (Postfix) with UTF8SMTPSA id 277912E0;\n\tFri,  6 Feb 2026 10:50:36 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"sqEbs7+b\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1770371436;\n\tbh=eS91fP227xdDxRHgTe246FGQX1yalj4EdGAS2/v7DJE=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=sqEbs7+bzIY4M+lppD2k9Onw9oDSbtL7Rmv1ad8RiSBmh2PCpdhOt9UJgolsvgCa9\n\tpqpXtYZdOfSGUIX5FE+pWvSPj27luhMiZPQhvk82+Re8ASXHS69mLZGRUFUhKoKNuD\n\t+VmdjmudbfEWYB7BKLujZ4StlDlUmjKbTUU771B4=","Date":"Fri, 6 Feb 2026 11:51:18 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Subject":"Re: [RFC PATCH v1 3/3] utils: checkstyle.py: Add `MesonFormatter`","Message-ID":"<20260206095118.GK1376807@killaraus.ideasonboard.com>","References":"<20260202112511.640320-1-barnabas.pocze@ideasonboard.com>\n\t<20260202112511.640320-4-barnabas.pocze@ideasonboard.com>\n\t<20260205233945.GB1376807@killaraus.ideasonboard.com>\n\t<aaf36197-0926-4fd6-ad21-545bc1dea68c@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<aaf36197-0926-4fd6-ad21-545bc1dea68c@ideasonboard.com>","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]