[{"id":25494,"web_url":"https://patchwork.libcamera.org/comment/25494/","msgid":"<20221020071203.GK3874866@pyrite.rasen.tech>","date":"2022-10-20T07:12:03","subject":"Re: [libcamera-devel] [PATCH v1 6/6] apps: Shared common source\n\tbetween applications","submitter":{"id":97,"url":"https://patchwork.libcamera.org/api/people/97/","name":"Nicolas Dufresne via libcamera-devel","email":"libcamera-devel@lists.libcamera.org"},"content":"On Thu, Oct 20, 2022 at 02:15:37AM +0300, Laurent Pinchart via libcamera-devel wrote:\n> Multiple source files in the src/apps/cam/ directory are used by cam,\n> qcam and lc-compliance. They are compiled separately for each\n> application. Move them to the src/apps/ directory and compile them in a\n> static library to decrease the number of compilation operations.\n\nIn the subject, s/Shared/Share/\n\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  src/apps/cam/camera_session.cpp         |  5 +++--\n>  src/apps/cam/camera_session.h           |  2 +-\n>  src/apps/cam/drm.cpp                    |  2 +-\n>  src/apps/cam/file_sink.cpp              |  5 +++--\n>  src/apps/cam/main.cpp                   |  7 ++++---\n>  src/apps/cam/meson.build                | 14 ++------------\n>  src/apps/cam/sdl_sink.cpp               |  5 +++--\n>  src/apps/cam/sdl_texture.h              |  2 +-\n>  src/apps/{cam => }/dng_writer.cpp       |  0\n>  src/apps/{cam => }/dng_writer.h         |  0\n>  src/apps/{cam => }/event_loop.cpp       |  0\n>  src/apps/{cam => }/event_loop.h         |  0\n>  src/apps/{cam => }/image.cpp            |  0\n>  src/apps/{cam => }/image.h              |  0\n>  src/apps/lc-compliance/main.cpp         |  2 +-\n>  src/apps/lc-compliance/meson.build      |  3 +--\n>  src/apps/lc-compliance/simple_capture.h |  2 +-\n>  src/apps/meson.build                    | 25 +++++++++++++++++++++++++\n>  src/apps/{cam => }/options.cpp          |  0\n>  src/apps/{cam => }/options.h            |  0\n>  src/apps/qcam/format_converter.cpp      |  2 +-\n>  src/apps/qcam/main.cpp                  |  4 ++--\n>  src/apps/qcam/main_window.cpp           |  4 ++--\n>  src/apps/qcam/main_window.h             |  2 +-\n>  src/apps/qcam/meson.build               | 13 ++-----------\n>  src/apps/qcam/viewfinder_gl.cpp         |  2 +-\n>  src/apps/qcam/viewfinder_qt.cpp         |  2 +-\n>  src/apps/{cam => }/stream_options.cpp   |  0\n>  src/apps/{cam => }/stream_options.h     |  0\n>  29 files changed, 56 insertions(+), 47 deletions(-)\n>  rename src/apps/{cam => }/dng_writer.cpp (100%)\n>  rename src/apps/{cam => }/dng_writer.h (100%)\n>  rename src/apps/{cam => }/event_loop.cpp (100%)\n>  rename src/apps/{cam => }/event_loop.h (100%)\n>  rename src/apps/{cam => }/image.cpp (100%)\n>  rename src/apps/{cam => }/image.h (100%)\n>  rename src/apps/{cam => }/options.cpp (100%)\n>  rename src/apps/{cam => }/options.h (100%)\n>  rename src/apps/{cam => }/stream_options.cpp (100%)\n>  rename src/apps/{cam => }/stream_options.h (100%)\n\nEeeh I think it would be cleaner with a libapps directory. Otherwise in\nsrc/apps we have apps... and a bunch of loose-ish source files.\n\n<snip>\n\n\nPaul","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 90EFDBD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 20 Oct 2022 07:12:14 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 31AF562E95;\n\tThu, 20 Oct 2022 09:12:13 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 9C6EF62DFF\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 20 Oct 2022 09:12:11 +0200 (CEST)","from pyrite.rasen.tech (h175-177-042-159.catv02.itscom.jp\n\t[175.177.42.159])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 196A5570;\n\tThu, 20 Oct 2022 09:12:09 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1666249933;\n\tbh=RoDfo0esR8cToQl8DUzVodMqjlxr5LQTP/Xja64+YQo=;\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=JotaBkwPNTHUOrdWQ169yMfAE1AJ92Abd2E0h/ZicdnfV/gTS4raRIQME2UeoIlu5\n\tTXIDYK+MkpNDpTJd1pexncEbByJbqbOfsZlvEJC0QTeWwzdFxbPuu3Kg0zeh2YtPm5\n\t7kZnQyUsLGxg7o69EJl+oDvZGuVwMA4IvGeBYERAgBB2r4W/CN9+C6pN1afrfJXV8M\n\tiS+eU3cwBPJfONEtiQzADo98kyI80YqaSukW6zyWQL7gRPi5yoQTWwopn8Ca10P8Vi\n\tx3tRHn7Y+ztmf66Ttzgm05gn8ymNf5ePWziUPS/xSnk/1mwgIHNDMf91smopKVuwQD\n\t1yIqLDeEmlnEw==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1666249931;\n\tbh=RoDfo0esR8cToQl8DUzVodMqjlxr5LQTP/Xja64+YQo=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=sU5MYiTHjX62pncPpJcoX1ZNcX//MMHS7U/H+dv6wL9Hl9Jw7KQOhOn0MpJ9wucb+\n\tj8QbXJ0cBq1o94v6xbwvbPZrep8bjzWz2xmUs73BrxHeoPCvU+H0pgD1DmJd8AiMUz\n\tetVzl29GljoagfYrVV4U5s1Am/WCwbQb907y3ui0="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"sU5MYiTH\"; dkim-atps=neutral","Date":"Thu, 20 Oct 2022 16:12:03 +0900","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Message-ID":"<20221020071203.GK3874866@pyrite.rasen.tech>","References":"<20221019231537.26880-1-laurent.pinchart@ideasonboard.com>\n\t<20221019231537.26880-7-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20221019231537.26880-7-laurent.pinchart@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v1 6/6] apps: Shared common source\n\tbetween applications","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":"Paul Elder via libcamera-devel <libcamera-devel@lists.libcamera.org>","Reply-To":"paul.elder@ideasonboard.com","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":25515,"web_url":"https://patchwork.libcamera.org/comment/25515/","msgid":"<166626274030.2560709.10686135156832428285@Monstersaurus>","date":"2022-10-20T10:45:40","subject":"Re: [libcamera-devel] [PATCH v1 6/6] apps: Shared common source\n\tbetween applications","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Quoting Laurent Pinchart via libcamera-devel (2022-10-20 00:15:37)\n> Multiple source files in the src/apps/cam/ directory are used by cam,\n> qcam and lc-compliance. They are compiled separately for each\n> application. Move them to the src/apps/ directory and compile them in a\n> static library to decrease the number of compilation operations.\n> \n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n>  src/apps/cam/camera_session.cpp         |  5 +++--\n>  src/apps/cam/camera_session.h           |  2 +-\n>  src/apps/cam/drm.cpp                    |  2 +-\n>  src/apps/cam/file_sink.cpp              |  5 +++--\n>  src/apps/cam/main.cpp                   |  7 ++++---\n>  src/apps/cam/meson.build                | 14 ++------------\n>  src/apps/cam/sdl_sink.cpp               |  5 +++--\n>  src/apps/cam/sdl_texture.h              |  2 +-\n>  src/apps/{cam => }/dng_writer.cpp       |  0\n>  src/apps/{cam => }/dng_writer.h         |  0\n>  src/apps/{cam => }/event_loop.cpp       |  0\n>  src/apps/{cam => }/event_loop.h         |  0\n>  src/apps/{cam => }/image.cpp            |  0\n>  src/apps/{cam => }/image.h              |  0\n>  src/apps/lc-compliance/main.cpp         |  2 +-\n>  src/apps/lc-compliance/meson.build      |  3 +--\n>  src/apps/lc-compliance/simple_capture.h |  2 +-\n>  src/apps/meson.build                    | 25 +++++++++++++++++++++++++\n>  src/apps/{cam => }/options.cpp          |  0\n>  src/apps/{cam => }/options.h            |  0\n>  src/apps/qcam/format_converter.cpp      |  2 +-\n>  src/apps/qcam/main.cpp                  |  4 ++--\n>  src/apps/qcam/main_window.cpp           |  4 ++--\n>  src/apps/qcam/main_window.h             |  2 +-\n>  src/apps/qcam/meson.build               | 13 ++-----------\n>  src/apps/qcam/viewfinder_gl.cpp         |  2 +-\n>  src/apps/qcam/viewfinder_qt.cpp         |  2 +-\n>  src/apps/{cam => }/stream_options.cpp   |  0\n>  src/apps/{cam => }/stream_options.h     |  0\n>  29 files changed, 56 insertions(+), 47 deletions(-)\n>  rename src/apps/{cam => }/dng_writer.cpp (100%)\n>  rename src/apps/{cam => }/dng_writer.h (100%)\n>  rename src/apps/{cam => }/event_loop.cpp (100%)\n>  rename src/apps/{cam => }/event_loop.h (100%)\n>  rename src/apps/{cam => }/image.cpp (100%)\n>  rename src/apps/{cam => }/image.h (100%)\n>  rename src/apps/{cam => }/options.cpp (100%)\n>  rename src/apps/{cam => }/options.h (100%)\n>  rename src/apps/{cam => }/stream_options.cpp (100%)\n>  rename src/apps/{cam => }/stream_options.h (100%)\n> \n> diff --git a/src/apps/cam/camera_session.cpp b/src/apps/cam/camera_session.cpp\n> index 6b409c983b86..c581410e4dec 100644\n> --- a/src/apps/cam/camera_session.cpp\n> +++ b/src/apps/cam/camera_session.cpp\n> @@ -13,9 +13,11 @@\n>  #include <libcamera/control_ids.h>\n>  #include <libcamera/property_ids.h>\n>  \n> +#include \"../event_loop.h\"\n> +#include \"../stream_options.h\"\n> +\n>  #include \"camera_session.h\"\n>  #include \"capture_script.h\"\n> -#include \"event_loop.h\"\n>  #include \"file_sink.h\"\n>  #ifdef HAVE_KMS\n>  #include \"kms_sink.h\"\n> @@ -24,7 +26,6 @@\n>  #ifdef HAVE_SDL\n>  #include \"sdl_sink.h\"\n>  #endif\n> -#include \"stream_options.h\"\n>  \n>  using namespace libcamera;\n>  \n> diff --git a/src/apps/cam/camera_session.h b/src/apps/cam/camera_session.h\n> index d562caae0794..46748d5c98ac 100644\n> --- a/src/apps/cam/camera_session.h\n> +++ b/src/apps/cam/camera_session.h\n> @@ -21,7 +21,7 @@\n>  #include <libcamera/request.h>\n>  #include <libcamera/stream.h>\n>  \n> -#include \"options.h\"\n> +#include \"../options.h\"\n>  \n>  class CaptureScript;\n>  class FrameSink;\n> diff --git a/src/apps/cam/drm.cpp b/src/apps/cam/drm.cpp\n> index 2e4d7985245d..3ad33175fdd3 100644\n> --- a/src/apps/cam/drm.cpp\n> +++ b/src/apps/cam/drm.cpp\n> @@ -24,7 +24,7 @@\n>  \n>  #include <libdrm/drm_mode.h>\n>  \n> -#include \"event_loop.h\"\n> +#include \"../event_loop.h\"\n>  \n>  namespace DRM {\n>  \n> diff --git a/src/apps/cam/file_sink.cpp b/src/apps/cam/file_sink.cpp\n> index 9d60c04e1cf4..dc109af729fe 100644\n> --- a/src/apps/cam/file_sink.cpp\n> +++ b/src/apps/cam/file_sink.cpp\n> @@ -15,9 +15,10 @@\n>  \n>  #include <libcamera/camera.h>\n>  \n> -#include \"dng_writer.h\"\n> +#include \"../dng_writer.h\"\n> +#include \"../image.h\"\n> +\n>  #include \"file_sink.h\"\n> -#include \"image.h\"\n>  \n>  using namespace libcamera;\n>  \n> diff --git a/src/apps/cam/main.cpp b/src/apps/cam/main.cpp\n> index d70130e2ab81..85a678f86819 100644\n> --- a/src/apps/cam/main.cpp\n> +++ b/src/apps/cam/main.cpp\n> @@ -14,11 +14,12 @@\n>  #include <libcamera/libcamera.h>\n>  #include <libcamera/property_ids.h>\n>  \n> +#include \"../event_loop.h\"\n> +#include \"../options.h\"\n> +#include \"../stream_options.h\"\n> +\n>  #include \"camera_session.h\"\n> -#include \"event_loop.h\"\n>  #include \"main.h\"\n> -#include \"options.h\"\n> -#include \"stream_options.h\"\n>  \n>  using namespace libcamera;\n>  \n> diff --git a/src/apps/cam/meson.build b/src/apps/cam/meson.build\n> index 297de64fbdd9..48c834ace71b 100644\n> --- a/src/apps/cam/meson.build\n> +++ b/src/apps/cam/meson.build\n> @@ -10,16 +10,12 @@ cam_enabled = true\n>  cam_sources = files([\n>      'camera_session.cpp',\n>      'capture_script.cpp',\n> -    'event_loop.cpp',\n>      'file_sink.cpp',\n>      'frame_sink.cpp',\n> -    'image.cpp',\n>      'main.cpp',\n> -    'options.cpp',\n> -    'stream_options.cpp',\n>  ])\n>  \n> -cam_cpp_args = []\n> +cam_cpp_args = [apps_cpp_args]\n>  \n>  libdrm = dependency('libdrm', required : false)\n>  libjpeg = dependency('libjpeg', required : false)\n> @@ -49,14 +45,8 @@ if libsdl2.found()\n>      endif\n>  endif\n>  \n> -if libtiff.found()\n> -    cam_cpp_args += ['-DHAVE_TIFF']\n> -    cam_sources += files([\n> -        'dng_writer.cpp',\n> -    ])\n> -endif\n> -\n>  cam  = executable('cam', cam_sources,\n> +                  link_with : apps_lib,\n>                    dependencies : [\n>                        libatomic,\n>                        libcamera_public,\n> diff --git a/src/apps/cam/sdl_sink.cpp b/src/apps/cam/sdl_sink.cpp\n> index ee177227dbca..ec9dd1868332 100644\n> --- a/src/apps/cam/sdl_sink.cpp\n> +++ b/src/apps/cam/sdl_sink.cpp\n> @@ -19,8 +19,9 @@\n>  #include <libcamera/camera.h>\n>  #include <libcamera/formats.h>\n>  \n> -#include \"event_loop.h\"\n> -#include \"image.h\"\n> +#include \"../event_loop.h\"\n> +#include \"../image.h\"\n\nincluding a fixed parent path like that is a bit awkard, but\nunderstandable.\n\n\nIf we move the shared code and headers to src/apps/lib/ I'd rather see\nthe directory with the shared headers on the include path, as either:\n\n#include \"event_loop.h\"\n\nor \n\n#include \"lib/event_loop.h\"\n\n\nor \n\nsrc/apps/helpers\n#include \"helpers/event_loop.h\"\n\n... or ... $(BIKESHEDDED SUPPORT LIBRARY NAME HERE).\n\nthe support library name is tougher than it should be ;-) It can't\ninclude 'libcamera-apps' or 'boost' or ...\n\n\nOk - I saw you've also proposed common, and I like that ;-)\n\n\n> +\n>  #ifdef HAVE_LIBJPEG\n>  #include \"sdl_texture_mjpg.h\"\n>  #endif\n> diff --git a/src/apps/cam/sdl_texture.h b/src/apps/cam/sdl_texture.h\n> index 6ccd85eab390..6890f239ddd6 100644\n> --- a/src/apps/cam/sdl_texture.h\n> +++ b/src/apps/cam/sdl_texture.h\n> @@ -11,7 +11,7 @@\n>  \n>  #include <SDL2/SDL.h>\n>  \n> -#include \"image.h\"\n> +#include \"../image.h\"\n>  \n>  class SDLTexture\n>  {\n> diff --git a/src/apps/cam/dng_writer.cpp b/src/apps/dng_writer.cpp\n> similarity index 100%\n> rename from src/apps/cam/dng_writer.cpp\n> rename to src/apps/dng_writer.cpp\n> diff --git a/src/apps/cam/dng_writer.h b/src/apps/dng_writer.h\n> similarity index 100%\n> rename from src/apps/cam/dng_writer.h\n> rename to src/apps/dng_writer.h\n> diff --git a/src/apps/cam/event_loop.cpp b/src/apps/event_loop.cpp\n> similarity index 100%\n> rename from src/apps/cam/event_loop.cpp\n> rename to src/apps/event_loop.cpp\n> diff --git a/src/apps/cam/event_loop.h b/src/apps/event_loop.h\n> similarity index 100%\n> rename from src/apps/cam/event_loop.h\n> rename to src/apps/event_loop.h\n> diff --git a/src/apps/cam/image.cpp b/src/apps/image.cpp\n> similarity index 100%\n> rename from src/apps/cam/image.cpp\n> rename to src/apps/image.cpp\n> diff --git a/src/apps/cam/image.h b/src/apps/image.h\n> similarity index 100%\n> rename from src/apps/cam/image.h\n> rename to src/apps/image.h\n> diff --git a/src/apps/lc-compliance/main.cpp b/src/apps/lc-compliance/main.cpp\n> index 7eb52ae4c094..2cc6b77fc78e 100644\n> --- a/src/apps/lc-compliance/main.cpp\n> +++ b/src/apps/lc-compliance/main.cpp\n> @@ -15,7 +15,7 @@\n>  #include <libcamera/libcamera.h>\n>  \n>  #include \"environment.h\"\n> -#include \"../cam/options.h\"\n> +#include \"../options.h\"\n>  \n>  using namespace libcamera;\n>  \n> diff --git a/src/apps/lc-compliance/meson.build b/src/apps/lc-compliance/meson.build\n> index 05d622be0a40..51d9075ac30b 100644\n> --- a/src/apps/lc-compliance/meson.build\n> +++ b/src/apps/lc-compliance/meson.build\n> @@ -11,8 +11,6 @@ endif\n>  lc_compliance_enabled = true\n>  \n>  lc_compliance_sources = files([\n> -    '../cam/event_loop.cpp',\n> -    '../cam/options.cpp',\n>      'environment.cpp',\n>      'main.cpp',\n>      'simple_capture.cpp',\n> @@ -21,6 +19,7 @@ lc_compliance_sources = files([\n>  \n>  lc_compliance  = executable('lc-compliance', lc_compliance_sources,\n>                              cpp_args : [ '-fexceptions' ],\n> +                            link_with : apps_lib,\n>                              dependencies : [\n>                                  libatomic,\n>                                  libcamera_public,\n> diff --git a/src/apps/lc-compliance/simple_capture.h b/src/apps/lc-compliance/simple_capture.h\n> index 9d31f7cb2e53..5a64395d986c 100644\n> --- a/src/apps/lc-compliance/simple_capture.h\n> +++ b/src/apps/lc-compliance/simple_capture.h\n> @@ -11,7 +11,7 @@\n>  \n>  #include <libcamera/libcamera.h>\n>  \n> -#include \"../cam/event_loop.h\"\n> +#include \"../event_loop.h\"\n>  \n>  class SimpleCapture\n>  {\n> diff --git a/src/apps/meson.build b/src/apps/meson.build\n> index 95f1f5190c7a..e1879806c99e 100644\n> --- a/src/apps/meson.build\n> +++ b/src/apps/meson.build\n> @@ -10,6 +10,31 @@ endif\n>  \n>  libtiff = dependency('libtiff-4', required : false)\n>  \n> +apps_sources = files([\n> +    'image.cpp',\n> +    'options.cpp',\n> +    'stream_options.cpp',\n> +])\n> +\n> +apps_cpp_args = []\n> +\n> +if libevent.found()\n> +    apps_sources += files([\n> +        'event_loop.cpp',\n> +    ])\n> +endif\n> +\n> +if libtiff.found()\n> +    apps_cpp_args += ['-DHAVE_TIFF']\n> +    apps_sources += files([\n> +        'dng_writer.cpp',\n> +    ])\n> +endif\n> +\n> +apps_lib = static_library('apps', apps_sources,\n> +                          cpp_args : apps_cpp_args,\n> +                          dependencies : [libcamera_public])\n\nShould we create a common = dependency(...) to easily reference in the\ntest apps?\n\n> +\n>  subdir('lc-compliance')\n>  \n>  subdir('cam')\n> diff --git a/src/apps/cam/options.cpp b/src/apps/options.cpp\n> similarity index 100%\n> rename from src/apps/cam/options.cpp\n> rename to src/apps/options.cpp\n> diff --git a/src/apps/cam/options.h b/src/apps/options.h\n> similarity index 100%\n> rename from src/apps/cam/options.h\n> rename to src/apps/options.h\n> diff --git a/src/apps/qcam/format_converter.cpp b/src/apps/qcam/format_converter.cpp\n> index 9331da0ce7a3..0390e0184454 100644\n> --- a/src/apps/qcam/format_converter.cpp\n> +++ b/src/apps/qcam/format_converter.cpp\n> @@ -14,7 +14,7 @@\n>  \n>  #include <libcamera/formats.h>\n>  \n> -#include \"../cam/image.h\"\n> +#include \"../image.h\"\n>  \n>  #define RGBSHIFT               8\n>  #ifndef MAX\n> diff --git a/src/apps/qcam/main.cpp b/src/apps/qcam/main.cpp\n> index d3f01a85f1fb..0373c78d53c8 100644\n> --- a/src/apps/qcam/main.cpp\n> +++ b/src/apps/qcam/main.cpp\n> @@ -13,8 +13,8 @@\n>  \n>  #include <libcamera/camera_manager.h>\n>  \n> -#include \"../cam/options.h\"\n> -#include \"../cam/stream_options.h\"\n> +#include \"../options.h\"\n> +#include \"../stream_options.h\"\n>  #include \"main_window.h\"\n>  #include \"message_handler.h\"\n>  \n> diff --git a/src/apps/qcam/main_window.cpp b/src/apps/qcam/main_window.cpp\n> index f553ccb01805..a90e95d545e1 100644\n> --- a/src/apps/qcam/main_window.cpp\n> +++ b/src/apps/qcam/main_window.cpp\n> @@ -26,8 +26,8 @@\n>  #include <QToolButton>\n>  #include <QtDebug>\n>  \n> -#include \"../cam/dng_writer.h\"\n> -#include \"../cam/image.h\"\n> +#include \"../dng_writer.h\"\n> +#include \"../image.h\"\n>  \n>  #include \"cam_select_dialog.h\"\n>  #ifndef QT_NO_OPENGL\n> diff --git a/src/apps/qcam/main_window.h b/src/apps/qcam/main_window.h\n> index 95b64124336f..8d378a1ff768 100644\n> --- a/src/apps/qcam/main_window.h\n> +++ b/src/apps/qcam/main_window.h\n> @@ -27,7 +27,7 @@\n>  #include <QQueue>\n>  #include <QTimer>\n>  \n> -#include \"../cam/stream_options.h\"\n> +#include \"../stream_options.h\"\n>  \n>  #include \"viewfinder.h\"\n>  \n> diff --git a/src/apps/qcam/meson.build b/src/apps/qcam/meson.build\n> index e298101e2c43..eb0712d91351 100644\n> --- a/src/apps/qcam/meson.build\n> +++ b/src/apps/qcam/meson.build\n> @@ -15,9 +15,6 @@ endif\n>  qcam_enabled = true\n>  \n>  qcam_sources = files([\n> -    '../cam/image.cpp',\n> -    '../cam/options.cpp',\n> -    '../cam/stream_options.cpp',\n>      'cam_select_dialog.cpp',\n>      'format_converter.cpp',\n>      'main.cpp',\n> @@ -36,14 +33,7 @@ qcam_resources = files([\n>      'assets/feathericons/feathericons.qrc',\n>  ])\n>  \n> -qt5_cpp_args = ['-DQT_NO_KEYWORDS']\n> -\n> -if libtiff.found()\n> -    qt5_cpp_args += ['-DHAVE_TIFF']\n> -    qcam_sources += files([\n> -        '../cam/dng_writer.cpp',\n> -    ])\n> -endif\n> +qt5_cpp_args = [apps_cpp_args, '-DQT_NO_KEYWORDS']\n>  \n>  if cxx.has_header_symbol('QOpenGLWidget', 'QOpenGLWidget',\n>                           dependencies : qt5_dep, args : '-fPIC')\n> @@ -73,6 +63,7 @@ resources = qt5.preprocess(moc_headers: qcam_moc_headers,\n>  \n>  qcam  = executable('qcam', qcam_sources, resources,\n>                     install : true,\n> +                   link_with : apps_lib,\n\nDoes the fact that it's a static lib mean we can't create a dependency\nand reference it like the other libraries?\n\n\n>                     dependencies : [\n>                         libatomic,\n>                         libcamera_public,\n> diff --git a/src/apps/qcam/viewfinder_gl.cpp b/src/apps/qcam/viewfinder_gl.cpp\n> index 38ddad58e09e..7b791765734e 100644\n> --- a/src/apps/qcam/viewfinder_gl.cpp\n> +++ b/src/apps/qcam/viewfinder_gl.cpp\n> @@ -16,7 +16,7 @@\n>  \n>  #include <libcamera/formats.h>\n>  \n> -#include \"../cam/image.h\"\n> +#include \"../image.h\"\n>  \n>  static const QList<libcamera::PixelFormat> supportedFormats{\n>         /* YUV - packed (single plane) */\n> diff --git a/src/apps/qcam/viewfinder_qt.cpp b/src/apps/qcam/viewfinder_qt.cpp\n> index c20fd6bc8fc2..e4efc587c759 100644\n> --- a/src/apps/qcam/viewfinder_qt.cpp\n> +++ b/src/apps/qcam/viewfinder_qt.cpp\n> @@ -20,7 +20,7 @@\n>  #include <QPainter>\n>  #include <QtDebug>\n>  \n> -#include \"../cam/image.h\"\n> +#include \"../image.h\"\n>  \n>  #include \"format_converter.h\"\n>  \n> diff --git a/src/apps/cam/stream_options.cpp b/src/apps/stream_options.cpp\n> similarity index 100%\n> rename from src/apps/cam/stream_options.cpp\n> rename to src/apps/stream_options.cpp\n> diff --git a/src/apps/cam/stream_options.h b/src/apps/stream_options.h\n> similarity index 100%\n> rename from src/apps/cam/stream_options.h\n> rename to src/apps/stream_options.h\n> -- \n> Regards,\n> \n> Laurent Pinchart\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 E356FBD16B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 20 Oct 2022 10:45:45 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4D26662EAA;\n\tThu, 20 Oct 2022 12:45:45 +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 0C3DF604DB\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 20 Oct 2022 12:45:43 +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 98CAA30A;\n\tThu, 20 Oct 2022 12:45:42 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1666262745;\n\tbh=gNDWT0mwPSrbnTfcJuk3LDlbEoeEpasTy0Cnc1pCxhU=;\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:\n\tFrom;\n\tb=ZZQxg+JI+0PTpy4A+Ah+vMTreFtax+b08UPXPhONpiO666oSo2x0HjWezYnkZVVIW\n\t6KHOHeaDph+LdOMcvLXIvGMlgPPuxHkw+dm52k8+ZgJCL0vMCnvpGJAV4m7BK8T4Jx\n\tJcUiSKBondW4gw8cqEWPLM+4BcJgL/A+BltN/9XwFk55AByaeJlWe4TVu/7Xlgdak6\n\tRJ+79TiFXa61/b8Pk1kSpf4Q2A7ItsOCvPTPzH6AxIknUbdVaQU+lwcNS6/KP7TKUn\n\tUpyhZKfe590Gfuhj10QhCrK884Gr5TQ+qhkEwCG/P2yeqIflXWTrU4747TZp9nW2jd\n\tlVehZ4sIZE41g==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1666262742;\n\tbh=gNDWT0mwPSrbnTfcJuk3LDlbEoeEpasTy0Cnc1pCxhU=;\n\th=In-Reply-To:References:Subject:From:To:Date:From;\n\tb=ZkekKCxzT3wDyTJ4UXhe2BoZcJd6c7QVyLxxkMpc6YP0MEJa3sVdzkPhEr0Oq7O4P\n\tr03pC6JlLjASli0UJ8lORw6YrYQ2DRgoWQTaDPRqAn0kugP/g3PmyHniVkUtbrlBIF\n\t15SLDzveVJ4XdcCQUPs/VbaSaffZlc15awLESjuw="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"ZkekKCxz\"; dkim-atps=neutral","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20221019231537.26880-7-laurent.pinchart@ideasonboard.com>","References":"<20221019231537.26880-1-laurent.pinchart@ideasonboard.com>\n\t<20221019231537.26880-7-laurent.pinchart@ideasonboard.com>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Thu, 20 Oct 2022 11:45:40 +0100","Message-ID":"<166626274030.2560709.10686135156832428285@Monstersaurus>","User-Agent":"alot/0.10","Subject":"Re: [libcamera-devel] [PATCH v1 6/6] apps: Shared common source\n\tbetween applications","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>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]