Patch Detail
Show a patch.
GET /api/1.1/patches/26432/?format=api
{ "id": 26432, "url": "https://patchwork.libcamera.org/api/1.1/patches/26432/?format=api", "web_url": "https://patchwork.libcamera.org/patch/26432/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/1.1/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20260405192211.1210985-5-laurent.pinchart@ideasonboard.com>", "date": "2026-04-05T19:22:08", "name": "[libcamera-ci,4/4] Add lint job to check licenses", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "d0b25b8504cb5ae54d73ed8f25ff4f2bc72e9ec6", "submitter": { "id": 2, "url": "https://patchwork.libcamera.org/api/1.1/people/2/?format=api", "name": "Laurent Pinchart", "email": "laurent.pinchart@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/26432/mbox/", "series": [ { "id": 5867, "url": "https://patchwork.libcamera.org/api/1.1/series/5867/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5867", "date": "2026-04-05T19:22:04", "name": "Catch missing license information in CI", "version": 1, "mbox": "https://patchwork.libcamera.org/series/5867/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/26432/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/26432/checks/", "tags": {}, "headers": { "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>", "X-Original-To": "parsemail@patchwork.libcamera.org", "Delivered-To": "parsemail@patchwork.libcamera.org", "Received": [ "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id BAADCBDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tSun, 5 Apr 2026 19:22:21 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 672C462D95;\n\tSun, 5 Apr 2026 21:22:21 +0200 (CEST)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id EDA3D62D79\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 5 Apr 2026 21:22:17 +0200 (CEST)", "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 C26CE144E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 5 Apr 2026 21:20:51 +0200 (CEST)" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"gLKN3PYM\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1775416851;\n\tbh=MIADzk8QKh9Z9dKulSHBn+rUc0k1quqkdSIMEo1Lw08=;\n\th=From:To:Subject:Date:In-Reply-To:References:From;\n\tb=gLKN3PYM9LuPLWMKjFsOnxABJFz+ldBbP3BvjEZ8PxDt4u8VlMVGjTP13UCNCz5vb\n\tVwkUXdAPOz450ch6+2Nt1bUnDfl+iiioisy7sWX/j50HmHecfUcbb5cLmMl/TjHJbv\n\tqoy3E40ZE+X1OTiF8wgYzp+tg2MA2cB5Dxae16NY=", "From": "Laurent Pinchart <laurent.pinchart@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Subject": "[libcamera-ci] [PATCH 4/4] Add lint job to check licenses", "Date": "Sun, 5 Apr 2026 22:22:08 +0300", "Message-ID": "<20260405192211.1210985-5-laurent.pinchart@ideasonboard.com>", "X-Mailer": "git-send-email 2.52.0", "In-Reply-To": "<20260405192211.1210985-1-laurent.pinchart@ideasonboard.com>", "References": "<20260405192211.1210985-1-laurent.pinchart@ideasonboard.com>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "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>" }, "content": "libcamera uses REUSE to hhelp with license compliance. Every file in the\nsource tree is required to have an SPDX license identifier, directly\nwithin the file or through REUSE.toml. Add a lint job that verifies this\nusing the reuse lint tool.\n\nWe need to add SPDX license identifiers to the meson native files as\nthey are being copied to the source tree and the reuse tool doesn't have\nan option to specify files to ignore. For the same reason, remove the\n.work/ci-config/ directory after setting up the build environment.\n\nSigned-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n .gitlab-ci/lint-reuse.sh | 26 ++++++++++++++++++++++++++\n .gitlab-ci/meson/libc++.native | 2 ++\n .gitlab-ci/meson/libstdc++.native | 2 ++\n .gitlab-ci/setup-container.sh | 2 +-\n gitlab-ci.yml | 15 ++++++++++++++-\n 5 files changed, 45 insertions(+), 2 deletions(-)\n create mode 100755 .gitlab-ci/lint-reuse.sh", "diff": "diff --git a/.gitlab-ci/lint-reuse.sh b/.gitlab-ci/lint-reuse.sh\nnew file mode 100755\nindex 000000000000..2439d47d2c78\n--- /dev/null\n+++ b/.gitlab-ci/lint-reuse.sh\n@@ -0,0 +1,26 @@\n+#!/bin/bash\n+\n+# SPDX-License-Identifier: GPL-2.0-or-later\n+# SPDX-FileCopyrightText: © 2026 Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n+#\n+# Verify that every file contains a valid license\n+\n+set -e\n+\n+source \"$(dirname \"$0\")/lib.sh\"\n+\n+libcamera_reuse() {\n+\techo \"Running reuse for $CI_COMMIT_REF_NAME ($CI_COMMIT_SHA)\"\n+\n+ local files=$(reuse lint -j | jq -r '.non_compliant.missing_licensing_info[]')\n+\n+ if [ -n \"$files\" ] ; then\n+ echo \"The following files are missing license information:\"\n+ echo \"$files\"\n+ exit 1\n+ fi\n+\n+ echo \"All files contain license information\"\n+}\n+\n+run libcamera_reuse\ndiff --git a/.gitlab-ci/meson/libc++.native b/.gitlab-ci/meson/libc++.native\nindex 9c99d5a7f8b2..c850a20b6903 100644\n--- a/.gitlab-ci/meson/libc++.native\n+++ b/.gitlab-ci/meson/libc++.native\n@@ -1,3 +1,5 @@\n+# SPDX-License-Identifier: CC0-1.0\n+\n [built-in options]\n cpp_args = ['-stdlib=libc++']\n cpp_link_args = ['-stdlib=libc++']\ndiff --git a/.gitlab-ci/meson/libstdc++.native b/.gitlab-ci/meson/libstdc++.native\nindex 3116043fc116..e7b596e76089 100644\n--- a/.gitlab-ci/meson/libstdc++.native\n+++ b/.gitlab-ci/meson/libstdc++.native\n@@ -1,3 +1,5 @@\n+# SPDX-License-Identifier: CC0-1.0\n+\n [built-in options]\n cpp_args = ['-stdlib=libstdc++']\n cpp_link_args = ['-stdlib=libstdc++']\ndiff --git a/.gitlab-ci/setup-container.sh b/.gitlab-ci/setup-container.sh\nindex 103cc61169c3..64cb7f2b9abe 100755\n--- a/.gitlab-ci/setup-container.sh\n+++ b/.gitlab-ci/setup-container.sh\n@@ -133,7 +133,7 @@ case $FDO_DISTRIBUTION_VERSION in\n \t\ttexlive-latex-extra\n \t)\n \t# Tools requires by the lint jobs.\n-\tPKGS_LIBCAMERA_RUNTIME+=( clang-format python3-autopep8 shellcheck )\n+\tPKGS_LIBCAMERA_RUNTIME+=( clang-format jq python3-autopep8 reuse shellcheck )\n \t# libclang-rt-dev for the clang ASan runtime.\n \tPKGS_LIBCAMERA_RUNTIME_MULTIARCH+=( libclang-rt-19-dev )\n \t# For the Android camera HAL and the virtual pipeline handler.\ndiff --git a/gitlab-ci.yml b/gitlab-ci.yml\nindex 6679cf853c7a..96dc7600c9b1 100644\n--- a/gitlab-ci.yml\n+++ b/gitlab-ci.yml\n@@ -74,7 +74,7 @@ include:\n .libcamera-ci.debian:13:\n variables:\n FDO_DISTRIBUTION_VERSION: 'trixie'\n- FDO_DISTRIBUTION_TAG: '2026-04-05.0'\n+ FDO_DISTRIBUTION_TAG: '2026-04-05.1'\n \n .container-debian:\n extends:\n@@ -122,6 +122,7 @@ container-debian:13:\n - LIBCAMERA_CI_URL=\"${CI_SERVER_URL}/${CI_CONFIG_PATH/*@/}\"\n - git clone --depth 1 --single-branch $LIBCAMERA_CI_URL .work/ci-config\n - mv .work/ci-config/.gitlab-ci/ $CI_PROJECT_DIR\n+ - rm -rf .work/ci-config/\n \n #\n # Build libcamera with a different compilers, using stock Debian images to\n@@ -305,6 +306,18 @@ build-package:debug:\n # Lint stage - Run checkstyle.py and check merge suitability\n # ------------------------------------------------------------------------------\n \n+license:\n+ extends:\n+ - .fdo.distribution-image@debian\n+ - .libcamera-ci.debian:13\n+ - .libcamera-ci.scripts\n+ stage: lint\n+ needs:\n+ - job: container-debian:13\n+ artifacts: false\n+ script:\n+ - $CI_PROJECT_DIR/.gitlab-ci/lint-reuse.sh\n+\n lint:\n extends:\n - .fdo.distribution-image@debian\n", "prefixes": [ "libcamera-ci", "4/4" ] }