Show a cover letter.

GET /api/1.1/covers/20850/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 20850,
    "url": "https://patchwork.libcamera.org/api/1.1/covers/20850/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/20850/",
    "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": "<20240809005914.20662-1-laurent.pinchart@ideasonboard.com>",
    "date": "2024-08-09T00:59:04",
    "name": "[00/10] libcamera: Improve code generation for controls",
    "submitter": {
        "id": 2,
        "url": "https://patchwork.libcamera.org/api/1.1/people/2/?format=api",
        "name": "Laurent Pinchart",
        "email": "laurent.pinchart@ideasonboard.com"
    },
    "mbox": "https://patchwork.libcamera.org/cover/20850/mbox/",
    "series": [
        {
            "id": 4506,
            "url": "https://patchwork.libcamera.org/api/1.1/series/4506/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4506",
            "date": "2024-08-09T00:59:04",
            "name": "libcamera: Improve code generation for controls",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/4506/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/20850/comments/",
    "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 6E533BE173\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  9 Aug 2024 00:59:43 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E0AF0633B4;\n\tFri,  9 Aug 2024 02:59:41 +0200 (CEST)",
            "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E44356337E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  9 Aug 2024 02:59:38 +0200 (CEST)",
            "from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi\n\t[81.175.209.231])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id BAEF383F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  9 Aug 2024 02:58:44 +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=\"ZaDg2EMA\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1723165124;\n\tbh=KGF/ngWMPuNzkAxPzCrMS/T2hzF/2oZAdb/3jTQ3GVQ=;\n\th=From:To:Subject:Date:From;\n\tb=ZaDg2EMAVw2R/rAoJiwB0R3Ekfj5gU8ES/Bm85fFyX14IfJzYrLfLtqHII7SabqMu\n\tsAAMIM6KJiXqFw/WptZTphjV4CpdT5uSbvYfxpoJSpQLzz/U3VAy7JiJq8Wr6jrY91\n\tp2y/jz7RSKzpmTvEjXGg1VVMwTBx4SCal8qBHD1I=",
        "From": "Laurent Pinchart <laurent.pinchart@ideasonboard.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Subject": "[PATCH 00/10] libcamera: Improve code generation for controls",
        "Date": "Fri,  9 Aug 2024 03:59:04 +0300",
        "Message-ID": "<20240809005914.20662-1-laurent.pinchart@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.44.2",
        "MIME-Version": "1.0",
        "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": "Hello,\n\nThis patch series started small by scratching an itch and wanting to\nhave the ability to share some of the code generation code for controls\nwith the upcoming controls support in libcamerasrc. As is too often the\ncase, it then grew to 10 patches long, with a conversion of the\ntemplates to jinja2.\n\nI don't have much else to add here, the diffstat will hopefully speak by\nitself.\n\nLaurent Pinchart (10):\n  meson: Store controls and properties YAML files in variables\n  meson: Fix mismatch in controls and properties generated file names\n  libcamera: Drop remaining file names from header comment blocks\n  meson: Move all code generation scripts to utils/codegen/\n  meson: utils: Provide environment for Python scripts\n  utils: codegen: gen-header.sh: Generate libcamera.h based on\n    meson.build\n  utils: codegen: gen-controls.py: Convert to jinja2 templates\n  utils: codegen: gen-controls.py: Move helper classes to separate file\n  py: gen-py-controls: Use Control class\n  py: gen-py-controls: Convert to jinja2 templates\n\n include/libcamera/control_ids.h.in            |  40 +-\n include/libcamera/internal/meson.build        |   2 +-\n include/libcamera/ipa/meson.build             |  21 +-\n include/libcamera/meson.build                 |  31 +-\n include/libcamera/property_ids.h.in           |  34 --\n meson.build                                   |   4 +-\n src/libcamera/control_ids.cpp.in              | 101 ++++-\n src/libcamera/meson.build                     |  30 +-\n src/libcamera/property_ids.cpp.in             |  48 ---\n src/libcamera/proxy/meson.build               |   3 +-\n src/libcamera/proxy/worker/meson.build        |   3 +-\n src/py/libcamera/gen-py-controls.py           | 122 +++---\n src/py/libcamera/meson.build                  |  27 +-\n src/py/libcamera/py_controls_generated.cpp.in |  35 +-\n .../libcamera/py_properties_generated.cpp.in  |  30 --\n .../include/libcamera/ipa/meson.build         |   9 +-\n utils/codegen/controls.py                     | 112 +++++\n utils/codegen/gen-controls.py                 | 111 +++++\n utils/{ => codegen}/gen-formats.py            |   0\n utils/{ => codegen}/gen-header.sh             |   7 +-\n utils/{ => codegen}/gen-ipa-pub-key.py        |   0\n .../{tracepoints => codegen}/gen-tp-header.py |   0\n utils/{ => codegen}/ipc/extract-docs.py       |   0\n utils/{ => codegen}/ipc/generate.py           |   3 -\n .../{ => codegen}/ipc/generators/__init__.py  |   0\n .../core_ipa_interface.h.tmpl                 |   0\n .../core_ipa_serializer.h.tmpl                |   0\n .../definition_functions.tmpl                 |   0\n .../libcamera_templates/meson.build           |   0\n .../module_ipa_interface.h.tmpl               |   0\n .../module_ipa_proxy.cpp.tmpl                 |   0\n .../module_ipa_proxy.h.tmpl                   |   0\n .../module_ipa_proxy_worker.cpp.tmpl          |   0\n .../module_ipa_serializer.h.tmpl              |   0\n .../libcamera_templates/proxy_functions.tmpl  |   0\n .../libcamera_templates/serializer.tmpl       |   0\n .../{ => codegen}/ipc/generators/meson.build  |   0\n .../generators/mojom_libcamera_generator.py   |   0\n utils/{ => codegen}/ipc/meson.build           |   3 +-\n utils/{ => codegen}/ipc/mojo/README           |   0\n utils/{ => codegen}/ipc/mojo/public/LICENSE   |   0\n .../ipc/mojo/public/tools/.style.yapf         |   0\n .../ipc/mojo/public/tools/BUILD.gn            |   0\n .../ipc/mojo/public/tools/bindings/BUILD.gn   |   0\n .../ipc/mojo/public/tools/bindings/README.md  |   0\n .../public/tools/bindings/checks/__init__.py  |   0\n .../bindings/checks/mojom_attributes_check.py |   0\n .../checks/mojom_attributes_check_unittest.py |   0\n .../checks/mojom_definitions_check.py         |   0\n .../checks/mojom_interface_feature_check.py   |   0\n .../mojom_interface_feature_check_unittest.py |   0\n .../checks/mojom_restrictions_check.py        |   0\n .../mojom_restrictions_checks_unittest.py     |   0\n .../tools/bindings/concatenate-files.py       |   0\n ...concatenate_and_replace_closure_exports.py |   0\n .../tools/bindings/gen_data_files_list.py     |   0\n .../tools/bindings/generate_type_mappings.py  |   0\n .../tools/bindings/minify_with_terser.py      |   0\n .../ipc/mojo/public/tools/bindings/mojom.gni  |   0\n .../bindings/mojom_bindings_generator.py      |   0\n .../mojom_bindings_generator_unittest.py      |   0\n .../tools/bindings/validate_typemap_config.py |   0\n .../ipc/mojo/public/tools/mojom/BUILD.gn      |   0\n .../ipc/mojo/public/tools/mojom/README.md     |   0\n .../mojom/check_stable_mojom_compatibility.py |   0\n ...eck_stable_mojom_compatibility_unittest.py |   0\n .../mojo/public/tools/mojom/const_unittest.py |   0\n .../mojo/public/tools/mojom/enum_unittest.py  |   0\n .../public/tools/mojom/feature_unittest.py    |   0\n .../mojo/public/tools/mojom/mojom/BUILD.gn    |   0\n .../mojo/public/tools/mojom/mojom/__init__.py |   0\n .../mojo/public/tools/mojom/mojom/error.py    |   0\n .../mojo/public/tools/mojom/mojom/fileutil.py |   0\n .../tools/mojom/mojom/fileutil_unittest.py    |   0\n .../tools/mojom/mojom/generate/__init__.py    |   0\n .../tools/mojom/mojom/generate/check.py       |   0\n .../tools/mojom/mojom/generate/generator.py   |   0\n .../mojom/generate/generator_unittest.py      |   0\n .../tools/mojom/mojom/generate/module.py      |   0\n .../mojom/mojom/generate/module_unittest.py   |   0\n .../public/tools/mojom/mojom/generate/pack.py |   0\n .../mojom/mojom/generate/pack_unittest.py     |   0\n .../mojom/mojom/generate/template_expander.py |   0\n .../tools/mojom/mojom/generate/translate.py   |   0\n .../mojom/generate/translate_unittest.py      |   0\n .../tools/mojom/mojom/parse/__init__.py       |   0\n .../public/tools/mojom/mojom/parse/ast.py     |   0\n .../tools/mojom/mojom/parse/ast_unittest.py   |   0\n .../mojom/mojom/parse/conditional_features.py |   0\n .../parse/conditional_features_unittest.py    |   0\n .../public/tools/mojom/mojom/parse/lexer.py   |   0\n .../tools/mojom/mojom/parse/lexer_unittest.py |   0\n .../public/tools/mojom/mojom/parse/parser.py  |   0\n .../mojom/mojom/parse/parser_unittest.py      |   0\n .../mojo/public/tools/mojom/mojom_parser.py   |   0\n .../tools/mojom/mojom_parser_test_case.py     |   0\n .../tools/mojom/mojom_parser_unittest.py      |   0\n .../tools/mojom/stable_attribute_unittest.py  |   0\n .../mojo/public/tools/mojom/union_unittest.py |   0\n .../mojom/version_compatibility_unittest.py   |   0\n .../public/tools/run_all_python_unittests.py  |   0\n utils/{ => codegen}/ipc/parser.py             |   3 -\n utils/{ => codegen}/ipc/tools/README          |   0\n .../ipc/tools/diagnosis/crbug_1001171.py      |   0\n utils/codegen/meson.build                     |  18 +\n utils/gen-controls.py                         | 389 ------------------\n utils/meson.build                             |  10 +-\n utils/tracepoints/meson.build                 |   5 -\n 108 files changed, 513 insertions(+), 688 deletions(-)\n delete mode 100644 include/libcamera/property_ids.h.in\n delete mode 100644 src/libcamera/property_ids.cpp.in\n delete mode 100644 src/py/libcamera/py_properties_generated.cpp.in\n create mode 100644 utils/codegen/controls.py\n create mode 100755 utils/codegen/gen-controls.py\n rename utils/{ => codegen}/gen-formats.py (100%)\n rename utils/{ => codegen}/gen-header.sh (76%)\n rename utils/{ => codegen}/gen-ipa-pub-key.py (100%)\n rename utils/{tracepoints => codegen}/gen-tp-header.py (100%)\n rename utils/{ => codegen}/ipc/extract-docs.py (100%)\n rename utils/{ => codegen}/ipc/generate.py (94%)\n rename utils/{ => codegen}/ipc/generators/__init__.py (100%)\n rename utils/{ => codegen}/ipc/generators/libcamera_templates/core_ipa_interface.h.tmpl (100%)\n rename utils/{ => codegen}/ipc/generators/libcamera_templates/core_ipa_serializer.h.tmpl (100%)\n rename utils/{ => codegen}/ipc/generators/libcamera_templates/definition_functions.tmpl (100%)\n rename utils/{ => codegen}/ipc/generators/libcamera_templates/meson.build (100%)\n rename utils/{ => codegen}/ipc/generators/libcamera_templates/module_ipa_interface.h.tmpl (100%)\n rename utils/{ => codegen}/ipc/generators/libcamera_templates/module_ipa_proxy.cpp.tmpl (100%)\n rename utils/{ => codegen}/ipc/generators/libcamera_templates/module_ipa_proxy.h.tmpl (100%)\n rename utils/{ => codegen}/ipc/generators/libcamera_templates/module_ipa_proxy_worker.cpp.tmpl (100%)\n rename utils/{ => codegen}/ipc/generators/libcamera_templates/module_ipa_serializer.h.tmpl (100%)\n rename utils/{ => codegen}/ipc/generators/libcamera_templates/proxy_functions.tmpl (100%)\n rename utils/{ => codegen}/ipc/generators/libcamera_templates/serializer.tmpl (100%)\n rename utils/{ => codegen}/ipc/generators/meson.build (100%)\n rename utils/{ => codegen}/ipc/generators/mojom_libcamera_generator.py (100%)\n rename utils/{ => codegen}/ipc/meson.build (86%)\n rename utils/{ => codegen}/ipc/mojo/README (100%)\n rename utils/{ => codegen}/ipc/mojo/public/LICENSE (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/.style.yapf (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/BUILD.gn (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/BUILD.gn (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/README.md (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/checks/__init__.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/checks/mojom_attributes_check.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/checks/mojom_attributes_check_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/checks/mojom_definitions_check.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/checks/mojom_interface_feature_check.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/checks/mojom_interface_feature_check_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/checks/mojom_restrictions_check.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/checks/mojom_restrictions_checks_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/concatenate-files.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/concatenate_and_replace_closure_exports.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/gen_data_files_list.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/generate_type_mappings.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/minify_with_terser.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/mojom.gni (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/mojom_bindings_generator.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/mojom_bindings_generator_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/bindings/validate_typemap_config.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/BUILD.gn (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/README.md (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/check_stable_mojom_compatibility.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/check_stable_mojom_compatibility_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/const_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/enum_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/feature_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/BUILD.gn (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/__init__.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/error.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/fileutil.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/fileutil_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/generate/__init__.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/generate/check.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/generate/generator.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/generate/generator_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/generate/module.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/generate/module_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/generate/pack.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/generate/pack_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/generate/template_expander.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/generate/translate.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/generate/translate_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/parse/__init__.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/parse/ast.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/parse/ast_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/parse/conditional_features.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/parse/conditional_features_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/parse/lexer.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/parse/lexer_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/parse/parser.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom/parse/parser_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom_parser.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom_parser_test_case.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/mojom_parser_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/stable_attribute_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/union_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/mojom/version_compatibility_unittest.py (100%)\n rename utils/{ => codegen}/ipc/mojo/public/tools/run_all_python_unittests.py (100%)\n rename utils/{ => codegen}/ipc/parser.py (83%)\n rename utils/{ => codegen}/ipc/tools/README (100%)\n rename utils/{ => codegen}/ipc/tools/diagnosis/crbug_1001171.py (100%)\n create mode 100644 utils/codegen/meson.build\n delete mode 100755 utils/gen-controls.py\n delete mode 100644 utils/tracepoints/meson.build\n\n\nbase-commit: 1045522af99c9f26e0f583aa2310174f7ff42178"
}