[{"id":37394,"web_url":"https://patchwork.libcamera.org/comment/37394/","msgid":"<176582188534.1098171.9509916352876289913@ping.linuxembedded.co.uk>","date":"2025-12-15T18:04:45","subject":"Re: [libcamera-ci] [PATCH v1] Add job to build libcamera as\n\tsubproject","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Barnabás Pőcze (2025-12-15 09:37:19)\n> Building libcamera as a meson subproject is currently not well tested,\n> and it is a good way to confirm that no improper assumptions are made\n> about where and how commands run, and to test any kind of path\n> manipulation happening during the build.\n> \n> So add a job that builds libcamera as a subproject.\n\nExcellent plan!\n\n\nAcked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\n> \n> Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n> ---\n>  .gitlab-ci/build-libcamera-subproject.sh | 59 ++++++++++++++++++++++++\n>  gitlab-ci.yml                            | 24 ++++++++++\n>  2 files changed, 83 insertions(+)\n>  create mode 100755 .gitlab-ci/build-libcamera-subproject.sh\n> \n> diff --git a/.gitlab-ci/build-libcamera-subproject.sh b/.gitlab-ci/build-libcamera-subproject.sh\n> new file mode 100755\n> index 0000000..ae59ac3\n> --- /dev/null\n> +++ b/.gitlab-ci/build-libcamera-subproject.sh\n> @@ -0,0 +1,59 @@\n> +#!/bin/bash\n> +\n> +# SPDX-License-Identifier: GPL-2.0-or-later\n> +# SPDX-FileCopyrightText: © 2025 Ideas on Board Oy\n> +#\n> +# Build libcamera as a meson subproject\n> +\n> +set -e\n> +\n> +source \"$(dirname \"$0\")/lib.sh\"\n> +source \"$(dirname \"$0\")/build-libcamera-common.sh\"\n> +\n> +PROJECT_ROOT=$(mktemp -d ./subproject-test.XXXXXX)\n> +\n> +libcamera_setup_as_subproject() {\n> +       echo \"Setting up libcamera build with meson options $MESON_OPTIONS\"\n> +\n> +       mkdir -p \"$PROJECT_ROOT/subprojects\"\n> +       ln -s ../../ \"$PROJECT_ROOT/subprojects/libcamera\"\n> +\n> +       # Convert options suitable for the `default_options` parameter of `subproject()`\n> +       echo \"$MESON_OPTIONS\" \\\n> +               | sed 's/-D[[:space:]]*//g' \\\n> +               | tr ' ' '\\n' \\\n> +               | sed \"s/'/\\\"/g\" \\\n> +               | sed \"s/^\\(.*\\)$/\\t\\t'\\1',/\" \\\n> +               > \"$PROJECT_ROOT/meson-options\"\n> +\n> +       cat > \"$PROJECT_ROOT/meson.build\" <<EOF\n> +project('libcamera-as-subproject-test')\n> +subproject(\n> +       'libcamera',\n> +       default_options : [\n> +EOF\n> +       cat \"$PROJECT_ROOT/meson-options\" >> \"$PROJECT_ROOT/meson.build\"\n> +       cat >> \"$PROJECT_ROOT/meson.build\" <<EOF\n> +       ],\n> +)\n> +EOF\n> +\n> +       cat \"$PROJECT_ROOT/meson.build\"\n> +\n> +       meson setup build \"$PROJECT_ROOT\" \\\n> +               --wrap-mode=nofallback \\\n> +               -D buildtype=$BUILD_TYPE\n> +}\n> +\n> +libcamera_build_as_subproject() {\n> +       echo \"Building libcamera as subproject\"\n> +\n> +       meson compile \\\n> +               -C build \\\n> +               -j$BUILD_CONCURRENT_JOBS \\\n> +               --ninja-args=\"-k0\"\n> +}\n> +\n> +run libcamera_install_pkgs\n> +run libcamera_setup_as_subproject\n> +run libcamera_build_as_subproject collapsed\n> diff --git a/gitlab-ci.yml b/gitlab-ci.yml\n> index c751973..fd837f5 100644\n> --- a/gitlab-ci.yml\n> +++ b/gitlab-ci.yml\n> @@ -212,6 +212,30 @@ build-full:debian:12:\n>        - ARCH: armhf\n>        - ARCH: arm64\n> \n> +build-full:debian:12:as-subproject:\n> +  extends:\n> +    - .fdo.distribution-image@debian\n> +    - .libcamera-ci.debian:12\n> +    - .libcamera-ci.scripts\n> +  variables:\n> +    BUILD_TYPE: debug\n> +    MESON_OPTIONS: >-\n> +      ${MESON_ALL_OPTIONS}\n> +      -D documentation=enabled\n> +  needs:\n> +    - job: container-debian:12\n> +      artifacts: false\n> +  stage: build\n> +  script:\n> +    - $CI_PROJECT_DIR/.gitlab-ci/build-libcamera-subproject.sh\n> +  artifacts:\n> +    when: always\n> +    expire_in: 1 week\n> +    paths:\n> +      - build/meson-logs/\n> +      - build/meson-intro/\n> +      - build/build.ninja\n> +\n>  build-full:debian:13:\n>    extends:\n>      - .libcamera-ci.debian:13\n> --\n> 2.52.0","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 23D34BD7D8\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 15 Dec 2025 18:04:52 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0264C619F9;\n\tMon, 15 Dec 2025 19:04:51 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0E93D61979\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 15 Dec 2025 19:04:49 +0100 (CET)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C4D52C66;\n\tMon, 15 Dec 2025 19:04:43 +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=\"iV/7UEbS\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1765821883;\n\tbh=IpCpWgKJkO3yP6DnRpGayW0jFRU5WSmiBKEXbU9XNx0=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=iV/7UEbSkWnKe3fX6gfeg1AcGxExxjX0dcXgq6Gj1D4ktHBW3ryLVQB3XID5McwI9\n\tZ8P0ERwKPWRaZ2gRUoPCWIIzhGgp4KNM4g3vpM0D6/iDDnsRZUZhrz0ygK4OXRCKda\n\tSiEnbcyXjfB9zFluH1QlC/Ko8QrHJux8s7yrG/ok=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20251215093719.574058-1-barnabas.pocze@ideasonboard.com>","References":"<20251215093719.574058-1-barnabas.pocze@ideasonboard.com>","Subject":"Re: [libcamera-ci] [PATCH v1] Add job to build libcamera as\n\tsubproject","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","To":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Mon, 15 Dec 2025 18:04:45 +0000","Message-ID":"<176582188534.1098171.9509916352876289913@ping.linuxembedded.co.uk>","User-Agent":"alot/0.9.1","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>"}}]