{"id":12704,"url":"https://patchwork.libcamera.org/api/1.1/patches/12704/?format=json","web_url":"https://patchwork.libcamera.org/patch/12704/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20210625013539.625803-13-kieran.bingham@ideasonboard.com>","date":"2021-06-25T01:35:35","name":"[libcamera-devel,12/16] libcamera/base: Validate internal headers as private","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"57e8714eced6d6fa0fa0aab99df05461ffd4c577","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/1.1/people/4/?format=json","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/12704/mbox/","series":[{"id":2173,"url":"https://patchwork.libcamera.org/api/1.1/series/2173/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=2173","date":"2021-06-25T01:35:23","name":"libcamera-base: A new split on libcamera","version":1,"mbox":"https://patchwork.libcamera.org/series/2173/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/12704/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/12704/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 F07EBC321E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 25 Jun 2021 01:35:57 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A65B1684CD;\n\tFri, 25 Jun 2021 03:35:57 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7843B684D1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 25 Jun 2021 03:35:48 +0200 (CEST)","from Monstersaurus.local\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 CFC738B6;\n\tFri, 25 Jun 2021 03:35:47 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"FwWsgimm\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1624584948;\n\tbh=vm72qb8rgx6f/QH8YR8xr9Q1XUznTD6B+HTe2m83g5k=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=FwWsgimmUn+BwSTSMeHZujUMzPzaTe5zMCw4XKMjE05jE5N6SbxQ+VdpRG40WJcjf\n\tvdQ7Bz3MOP0espfuJh+r2W8jAK3YlypgKF2JwMNmOlrq3B3fL1SrKpmXEk0TLV58TI\n\tMbmjXOYaMhwGStQVyxhTJt8R1z8blCkFeKdgvhMg=","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","To":"libcamera devel <libcamera-devel@lists.libcamera.org>","Date":"Fri, 25 Jun 2021 02:35:35 +0100","Message-Id":"<20210625013539.625803-13-kieran.bingham@ideasonboard.com>","X-Mailer":"git-send-email 2.30.2","In-Reply-To":"<20210625013539.625803-1-kieran.bingham@ideasonboard.com>","References":"<20210625013539.625803-1-kieran.bingham@ideasonboard.com>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Subject":"[libcamera-devel] [PATCH 12/16] libcamera/base: Validate internal\n\theaders as private","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":"Headers which must not be exposed as part of the public libcamera API\ncan include base/private.h.\n\nAny interface which includes the private.h header will only be able to\nbuild if the libcamera_private dependency is used (or the\nlibcamera_base_private dependency directly)\n\nSigned-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n---\n include/libcamera/base/event_dispatcher.h     |  2 ++\n .../libcamera/base/event_dispatcher_poll.h    |  2 ++\n include/libcamera/base/event_notifier.h       |  1 +\n include/libcamera/base/file.h                 |  1 +\n include/libcamera/base/log.h                  |  1 +\n include/libcamera/base/meson.build            |  1 +\n include/libcamera/base/private.h              | 22 +++++++++++++++++++\n include/libcamera/base/semaphore.h            |  1 +\n include/libcamera/base/thread.h               |  1 +\n include/libcamera/base/timer.h                |  1 +\n include/libcamera/base/utils.h                |  2 ++\n src/android/meson.build                       |  2 +-\n src/ipa/ipu3/meson.build                      |  2 +-\n src/ipa/libipa/meson.build                    |  2 +-\n src/ipa/raspberrypi/meson.build               |  2 +-\n src/ipa/rkisp1/meson.build                    |  2 +-\n src/ipa/vimc/meson.build                      |  2 +-\n src/libcamera/base/meson.build                |  8 +++++++\n src/libcamera/meson.build                     | 10 +++++++--\n src/libcamera/proxy/worker/meson.build        |  2 +-\n src/v4l2/meson.build                          |  2 +-\n test/camera/meson.build                       |  2 +-\n test/ipa/meson.build                          |  2 +-\n test/ipc/meson.build                          |  2 +-\n test/libtest/meson.build                      |  2 +-\n test/log/meson.build                          |  2 +-\n test/media_device/meson.build                 |  4 ++--\n test/meson.build                              |  2 +-\n test/pipeline/ipu3/meson.build                |  2 +-\n test/pipeline/rkisp1/meson.build              |  2 +-\n test/process/meson.build                      |  2 +-\n .../generated_serializer/meson.build          |  2 +-\n test/serialization/meson.build                |  2 +-\n test/v4l2_subdevice/meson.build               |  2 +-\n test/v4l2_videodevice/meson.build             |  2 +-\n 35 files changed, 74 insertions(+), 25 deletions(-)\n create mode 100644 include/libcamera/base/private.h","diff":"diff --git a/include/libcamera/base/event_dispatcher.h b/include/libcamera/base/event_dispatcher.h\nindex 045df27fff16..825af7a33919 100644\n--- a/include/libcamera/base/event_dispatcher.h\n+++ b/include/libcamera/base/event_dispatcher.h\n@@ -9,6 +9,8 @@\n \n #include <vector>\n \n+#include <libcamera/base/private.h>\n+\n namespace libcamera {\n \n class EventNotifier;\ndiff --git a/include/libcamera/base/event_dispatcher_poll.h b/include/libcamera/base/event_dispatcher_poll.h\nindex ae2a3f04e4b9..88835902980c 100644\n--- a/include/libcamera/base/event_dispatcher_poll.h\n+++ b/include/libcamera/base/event_dispatcher_poll.h\n@@ -13,6 +13,8 @@\n \n #include <libcamera/base/event_dispatcher.h>\n \n+#include <libcamera/base/private.h>\n+\n struct pollfd;\n \n namespace libcamera {\ndiff --git a/include/libcamera/base/event_notifier.h b/include/libcamera/base/event_notifier.h\nindex 8a6419f23004..6bb4e5143aa6 100644\n--- a/include/libcamera/base/event_notifier.h\n+++ b/include/libcamera/base/event_notifier.h\n@@ -8,6 +8,7 @@\n #define __LIBCAMERA_INTERNAL_EVENT_NOTIFIER_H__\n \n #include <libcamera/base/object.h>\n+#include <libcamera/base/private.h>\n #include <libcamera/base/signal.h>\n \n namespace libcamera {\ndiff --git a/include/libcamera/base/file.h b/include/libcamera/base/file.h\nindex e8e4b76e1a4e..cecbb254591f 100644\n--- a/include/libcamera/base/file.h\n+++ b/include/libcamera/base/file.h\n@@ -12,6 +12,7 @@\n #include <sys/types.h>\n \n #include <libcamera/base/class.h>\n+#include <libcamera/base/private.h>\n \n #include <libcamera/span.h>\n \ndiff --git a/include/libcamera/base/log.h b/include/libcamera/base/log.h\nindex b93c947ae7db..70582cd47902 100644\n--- a/include/libcamera/base/log.h\n+++ b/include/libcamera/base/log.h\n@@ -11,6 +11,7 @@\n #include <sstream>\n \n #include <libcamera/base/class.h>\n+#include <libcamera/base/private.h>\n #include <libcamera/base/utils.h>\n \n namespace libcamera {\ndiff --git a/include/libcamera/base/meson.build b/include/libcamera/base/meson.build\nindex 83c664affc88..aaac324d7149 100644\n--- a/include/libcamera/base/meson.build\n+++ b/include/libcamera/base/meson.build\n@@ -12,6 +12,7 @@ libcamera_base_headers = files([\n     'log.h',\n     'message.h',\n     'object.h',\n+    'private.h',\n     'semaphore.h',\n     'signal.h',\n     'thread.h',\ndiff --git a/include/libcamera/base/private.h b/include/libcamera/base/private.h\nnew file mode 100644\nindex 000000000000..b54ad076688e\n--- /dev/null\n+++ b/include/libcamera/base/private.h\n@@ -0,0 +1,22 @@\n+/* SPDX-License-Identifier: LGPL-2.1-or-later */\n+/*\n+ * Copyright (C) 2021, Google Inc.\n+ *\n+ * private.h - Private Header Validation\n+ *\n+ * A selection of internal libcamera headers are installed as part\n+ * of the libcamera package to allow sharing of a select subset of\n+ * internal functionality with IPA module developers only.\n+ *\n+ * This functionality is not considered part of the public libcamera\n+ * API, and can therefore potentially face ABI instabilities which\n+ * should not be exposed to applications. IPA modules however should be\n+ * versioned and more closely matched to the libcamera installation.\n+ *\n+ * Components which include this file can not be included in any file\n+ * which forms part of the libcamera API.\n+ */\n+\n+#ifndef LIBCAMERA_BASE_PRIVATE\n+#error \"Private headers must not be included in the libcamera API\"\n+#endif\ndiff --git a/include/libcamera/base/semaphore.h b/include/libcamera/base/semaphore.h\nindex c8e62e3ee68b..d8146eb8060b 100644\n--- a/include/libcamera/base/semaphore.h\n+++ b/include/libcamera/base/semaphore.h\n@@ -9,6 +9,7 @@\n \n #include <condition_variable>\n \n+#include <libcamera/base/private.h>\n #include <libcamera/base/thread.h>\n \n namespace libcamera {\ndiff --git a/include/libcamera/base/thread.h b/include/libcamera/base/thread.h\nindex 2ed18d49c978..b30ed12715a2 100644\n--- a/include/libcamera/base/thread.h\n+++ b/include/libcamera/base/thread.h\n@@ -13,6 +13,7 @@\n #include <thread>\n \n #include <libcamera/base/message.h>\n+#include <libcamera/base/private.h>\n #include <libcamera/base/signal.h>\n #include <libcamera/base/utils.h>\n \ndiff --git a/include/libcamera/base/timer.h b/include/libcamera/base/timer.h\nindex e79e85f1ef0d..f762e8767d97 100644\n--- a/include/libcamera/base/timer.h\n+++ b/include/libcamera/base/timer.h\n@@ -11,6 +11,7 @@\n #include <stdint.h>\n \n #include <libcamera/base/object.h>\n+#include <libcamera/base/private.h>\n #include <libcamera/base/signal.h>\n \n namespace libcamera {\ndiff --git a/include/libcamera/base/utils.h b/include/libcamera/base/utils.h\nindex d1aaff65211a..07685045aa05 100644\n--- a/include/libcamera/base/utils.h\n+++ b/include/libcamera/base/utils.h\n@@ -19,6 +19,8 @@\n #include <utility>\n #include <vector>\n \n+#include <libcamera/base/private.h>\n+\n #ifndef __DOXYGEN__\n \n /* uClibc and uClibc-ng don't provide O_TMPFILE */\ndiff --git a/src/android/meson.build b/src/android/meson.build\nindex bd58ef964c2a..7d1e7e85f16e 100644\n--- a/src/android/meson.build\n+++ b/src/android/meson.build\n@@ -4,7 +4,7 @@ android_deps = [\n     dependency('libexif', required : get_option('android')),\n     dependency('libjpeg', required : get_option('android')),\n     dependency('yaml-0.1', required : get_option('android')),\n-    libcamera_dep,\n+    libcamera_private,\n ]\n \n android_enabled = true\ndiff --git a/src/ipa/ipu3/meson.build b/src/ipa/ipu3/meson.build\nindex 0d843846acde..b63641908710 100644\n--- a/src/ipa/ipu3/meson.build\n+++ b/src/ipa/ipu3/meson.build\n@@ -12,7 +12,7 @@ mod = shared_module(ipa_name,\n                     [ipu3_ipa_sources, libcamera_generated_ipa_headers],\n                     name_prefix : '',\n                     include_directories : [ipa_includes, libipa_includes],\n-                    dependencies : libcamera_dep,\n+                    dependencies : libcamera_private,\n                     link_with : libipa,\n                     install : true,\n                     install_dir : ipa_install_dir)\ndiff --git a/src/ipa/libipa/meson.build b/src/ipa/libipa/meson.build\nindex 038fc49060ef..ca541a5aafd7 100644\n--- a/src/ipa/libipa/meson.build\n+++ b/src/ipa/libipa/meson.build\n@@ -14,4 +14,4 @@ libipa_includes = include_directories('..')\n \n libipa = static_library('ipa', [libipa_sources, libipa_headers],\n                         include_directories : ipa_includes,\n-                        dependencies : libcamera_dep)\n+                        dependencies : libcamera_private)\ndiff --git a/src/ipa/raspberrypi/meson.build b/src/ipa/raspberrypi/meson.build\nindex 230356d3ce3a..d7203aa042cd 100644\n--- a/src/ipa/raspberrypi/meson.build\n+++ b/src/ipa/raspberrypi/meson.build\n@@ -3,7 +3,7 @@\n ipa_name = 'ipa_rpi'\n \n rpi_ipa_deps = [\n-    libcamera_dep,\n+    libcamera_private,\n     dependency('boost'),\n     libatomic,\n ]\ndiff --git a/src/ipa/rkisp1/meson.build b/src/ipa/rkisp1/meson.build\nindex 1a1c71591039..f76b37f5af50 100644\n--- a/src/ipa/rkisp1/meson.build\n+++ b/src/ipa/rkisp1/meson.build\n@@ -6,7 +6,7 @@ mod = shared_module(ipa_name,\n                     ['rkisp1.cpp', libcamera_generated_ipa_headers],\n                     name_prefix : '',\n                     include_directories : [ipa_includes, libipa_includes],\n-                    dependencies : libcamera_dep,\n+                    dependencies : libcamera_private,\n                     link_with : libipa,\n                     install : true,\n                     install_dir : ipa_install_dir)\ndiff --git a/src/ipa/vimc/meson.build b/src/ipa/vimc/meson.build\nindex a35825ae25a6..ecbeee136451 100644\n--- a/src/ipa/vimc/meson.build\n+++ b/src/ipa/vimc/meson.build\n@@ -6,7 +6,7 @@ mod = shared_module(ipa_name,\n                     ['vimc.cpp', libcamera_generated_ipa_headers],\n                     name_prefix : '',\n                     include_directories : [ipa_includes, libipa_includes],\n-                    dependencies : libcamera_dep,\n+                    dependencies : libcamera_private,\n                     link_with : libipa,\n                     install : true,\n                     install_dir : ipa_install_dir)\ndiff --git a/src/libcamera/base/meson.build b/src/libcamera/base/meson.build\nindex a8b04cfc8a5f..871721571e98 100644\n--- a/src/libcamera/base/meson.build\n+++ b/src/libcamera/base/meson.build\n@@ -21,10 +21,15 @@ libcamera_base_deps = [\n     dependency('threads'),\n ]\n \n+# Internal components must use the libcamera_base_private dependency to enable\n+# the use of headers which must not be exposed to the libcamera public api.\n+libcamera_base_args = [ '-DLIBCAMERA_BASE_PRIVATE' ]\n+\n libcamera_base_lib = shared_library('libcamera-base',\n                                     [libcamera_base_sources, libcamera_base_headers],\n                                     name_prefix : '',\n                                     install : true,\n+                                    cpp_args : libcamera_base_args,\n                                     include_directories : libcamera_includes,\n                                     dependencies : libcamera_base_deps)\n \n@@ -39,3 +44,6 @@ pkg_mod.generate(libcamera_base_lib,\n                  version : '1.0',\n                  description : 'Camera support base utility library',\n                  subdirs : 'libcamera')\n+\n+libcamera_base_private = declare_dependency(dependencies : libcamera_base,\n+                                            compile_args : libcamera_base_args)\ndiff --git a/src/libcamera/meson.build b/src/libcamera/meson.build\nindex 1f163cfe1225..64c7475f1a2e 100644\n--- a/src/libcamera/meson.build\n+++ b/src/libcamera/meson.build\n@@ -115,7 +115,7 @@ libcamera_deps = [\n     libgnutls,\n     liblttng,\n     libudev,\n-    libcamera_base,\n+    libcamera_base_private,\n ]\n \n # We add '/' to the build_rpath as a 'safe' path to act as a boolean flag.\n@@ -143,9 +143,15 @@ libcamera_dep = declare_dependency(sources : [\n                                        libcamera_generated_ipa_headers,\n                                    ],\n                                    include_directories : libcamera_includes,\n-                                   dependencies: libcamera_base,\n+                                   dependencies : libcamera_base,\n                                    link_with : libcamera)\n \n+# Internal dependancy for components and plugins which can use Private APIs\n+libcamera_private = declare_dependency(dependencies : [\n+                                           libcamera_dep,\n+                                           libcamera_base_private,\n+                                       ])\n+\n pkg_mod = import('pkgconfig')\n pkg_mod.generate(libcamera,\n                  libraries : libcamera_base_lib,\ndiff --git a/src/libcamera/proxy/worker/meson.build b/src/libcamera/proxy/worker/meson.build\nindex 28fe5f1fd6b2..70c8760a3d42 100644\n--- a/src/libcamera/proxy/worker/meson.build\n+++ b/src/libcamera/proxy/worker/meson.build\n@@ -21,7 +21,7 @@ foreach mojom : ipa_mojoms\n                        [worker, libcamera_generated_ipa_headers],\n                        install : true,\n                        install_dir : proxy_install_dir,\n-                       dependencies : libcamera_dep)\n+                       dependencies : libcamera_private)\n endforeach\n \n config_h.set('IPA_PROXY_DIR',\ndiff --git a/src/v4l2/meson.build b/src/v4l2/meson.build\nindex 0accac194be4..f78497b6799b 100644\n--- a/src/v4l2/meson.build\n+++ b/src/v4l2/meson.build\n@@ -31,5 +31,5 @@ v4l2_compat = shared_library('v4l2-compat',\n                              v4l2_compat_sources,\n                              name_prefix : '',\n                              install : true,\n-                             dependencies : [libcamera_dep, libdl],\n+                             dependencies : [libcamera_private, libdl],\n                              cpp_args : v4l2_compat_cpp_args)\ndiff --git a/test/camera/meson.build b/test/camera/meson.build\nindex 9cb95affffab..002a87b594e0 100644\n--- a/test/camera/meson.build\n+++ b/test/camera/meson.build\n@@ -12,7 +12,7 @@ camera_tests = [\n \n foreach t : camera_tests\n     exe = executable(t[0], t[1],\n-                     dependencies : libcamera_dep,\n+                     dependencies : libcamera_private,\n                      link_with : test_libraries,\n                      include_directories : test_includes_internal)\n     test(t[0], exe, suite : 'camera', is_parallel : false)\ndiff --git a/test/ipa/meson.build b/test/ipa/meson.build\nindex e8a041b5bbd2..7938633e54ab 100644\n--- a/test/ipa/meson.build\n+++ b/test/ipa/meson.build\n@@ -7,7 +7,7 @@ ipa_test = [\n \n foreach t : ipa_test\n     exe = executable(t[0], [t[1], libcamera_generated_ipa_headers],\n-                     dependencies : libcamera_dep,\n+                     dependencies : libcamera_private,\n                      link_with : [libipa, test_libraries],\n                      include_directories : [libipa_includes, test_includes_internal])\n \ndiff --git a/test/ipc/meson.build b/test/ipc/meson.build\nindex ad47b2feb718..2a6cd7fb8433 100644\n--- a/test/ipc/meson.build\n+++ b/test/ipc/meson.build\n@@ -7,7 +7,7 @@ ipc_tests = [\n \n foreach t : ipc_tests\n     exe = executable(t[0], t[1],\n-                     dependencies : libcamera_dep,\n+                     dependencies : libcamera_private,\n                      link_with : test_libraries,\n                      include_directories : test_includes_internal)\n \ndiff --git a/test/libtest/meson.build b/test/libtest/meson.build\nindex 542335ea5e7c..351629f3ce73 100644\n--- a/test/libtest/meson.build\n+++ b/test/libtest/meson.build\n@@ -18,7 +18,7 @@ test_includes_internal = [\n ]\n \n libtest = static_library('libtest', libtest_sources,\n-                         dependencies : libcamera_dep,\n+                         dependencies : libcamera_private,\n                          include_directories : test_includes_internal)\n \n test_libraries = [libtest]\ndiff --git a/test/log/meson.build b/test/log/meson.build\nindex 8cd664e04a00..ac87841a24e1 100644\n--- a/test/log/meson.build\n+++ b/test/log/meson.build\n@@ -7,7 +7,7 @@ log_test = [\n \n foreach t : log_test\n     exe = executable(t[0], t[1],\n-                     dependencies : libcamera_dep,\n+                     dependencies : libcamera_private,\n                      link_with : test_libraries,\n                      include_directories : test_includes_internal)\n \ndiff --git a/test/media_device/meson.build b/test/media_device/meson.build\nindex 1dfcdd8bd744..83dfe8f11d2f 100644\n--- a/test/media_device/meson.build\n+++ b/test/media_device/meson.build\n@@ -11,12 +11,12 @@ media_device_tests = [\n ]\n \n lib_mdev_test = static_library('lib_mdev_test', lib_mdev_test_sources,\n-                               dependencies : libcamera_dep,\n+                               dependencies : libcamera_private,\n                                include_directories : test_includes_internal)\n \n foreach t : media_device_tests\n     exe = executable(t[0], t[1],\n-                     dependencies : libcamera_dep,\n+                     dependencies : libcamera_private,\n                      link_with : [test_libraries, lib_mdev_test],\n                      include_directories : test_includes_internal)\n \ndiff --git a/test/meson.build b/test/meson.build\nindex 045ad2a2d7c9..b8615e0fd3e6 100644\n--- a/test/meson.build\n+++ b/test/meson.build\n@@ -64,7 +64,7 @@ endforeach\n \n foreach t : internal_tests\n     exe = executable(t[0], t[1],\n-                     dependencies : libcamera_dep,\n+                     dependencies : libcamera_private,\n                      link_with : test_libraries,\n                      include_directories : test_includes_internal)\n \ndiff --git a/test/pipeline/ipu3/meson.build b/test/pipeline/ipu3/meson.build\nindex d062ecd269f2..16701080ca2b 100644\n--- a/test/pipeline/ipu3/meson.build\n+++ b/test/pipeline/ipu3/meson.build\n@@ -6,7 +6,7 @@ ipu3_test = [\n \n foreach t : ipu3_test\n     exe = executable(t[0], t[1],\n-                     dependencies : libcamera_dep,\n+                     dependencies : libcamera_private,\n                      link_with : test_libraries,\n                      include_directories : test_includes_internal)\n \ndiff --git a/test/pipeline/rkisp1/meson.build b/test/pipeline/rkisp1/meson.build\nindex ece147b054e4..364b5711a0f9 100644\n--- a/test/pipeline/rkisp1/meson.build\n+++ b/test/pipeline/rkisp1/meson.build\n@@ -6,7 +6,7 @@ rkisp1_test = [\n \n foreach t : rkisp1_test\n     exe = executable(t[0], t[1],\n-                     dependencies : libcamera_dep,\n+                     dependencies : libcamera_private,\n                      link_with : test_libraries,\n                      include_directories : test_includes_internal)\n \ndiff --git a/test/process/meson.build b/test/process/meson.build\nindex d2272d509db3..af86b277db63 100644\n--- a/test/process/meson.build\n+++ b/test/process/meson.build\n@@ -6,7 +6,7 @@ process_tests = [\n \n foreach t : process_tests\n     exe = executable(t[0], t[1],\n-                     dependencies : libcamera_dep,\n+                     dependencies : libcamera_private,\n                      link_with : test_libraries,\n                      include_directories : test_includes_internal)\n \ndiff --git a/test/serialization/generated_serializer/meson.build b/test/serialization/generated_serializer/meson.build\nindex 2460e0b114b3..9fb9cd1db968 100644\n--- a/test/serialization/generated_serializer/meson.build\n+++ b/test/serialization/generated_serializer/meson.build\n@@ -8,7 +8,7 @@ exe = executable('generated_serializer_test',\n                      generated_test_header,\n                      generated_test_serializer,\n                  ],\n-                 dependencies : libcamera_dep,\n+                 dependencies : libcamera_private,\n                  link_with : test_libraries,\n                  include_directories : [\n                      test_includes_internal,\ndiff --git a/test/serialization/meson.build b/test/serialization/meson.build\nindex 60ebf3255b28..5446e4907f33 100644\n--- a/test/serialization/meson.build\n+++ b/test/serialization/meson.build\n@@ -9,7 +9,7 @@ serialization_tests = [\n \n foreach t : serialization_tests\n     exe = executable(t[0], [t[1], 'serialization_test.cpp'],\n-                     dependencies : libcamera_dep,\n+                     dependencies : libcamera_private,\n                      link_with : test_libraries,\n                      include_directories : test_includes_internal)\n     test(t[0], exe, suite : 'serialization', is_parallel : true)\ndiff --git a/test/v4l2_subdevice/meson.build b/test/v4l2_subdevice/meson.build\nindex 40d39766af9b..d82be3c60b75 100644\n--- a/test/v4l2_subdevice/meson.build\n+++ b/test/v4l2_subdevice/meson.build\n@@ -7,7 +7,7 @@ v4l2_subdevice_tests = [\n \n foreach t : v4l2_subdevice_tests\n     exe = executable(t[0], [t[1], 'v4l2_subdevice_test.cpp'],\n-        dependencies : libcamera_dep,\n+        dependencies : libcamera_private,\n         link_with : test_libraries,\n         include_directories : test_includes_internal)\n     test(t[0], exe, suite : 'v4l2_subdevice', is_parallel : false)\ndiff --git a/test/v4l2_videodevice/meson.build b/test/v4l2_videodevice/meson.build\nindex e733518c0185..643f82edce5e 100644\n--- a/test/v4l2_videodevice/meson.build\n+++ b/test/v4l2_videodevice/meson.build\n@@ -16,7 +16,7 @@ v4l2_videodevice_tests = [\n \n foreach t : v4l2_videodevice_tests\n     exe = executable(t[0], [t[1], 'v4l2_videodevice_test.cpp'],\n-                     dependencies : libcamera_dep,\n+                     dependencies : libcamera_private,\n                      link_with : test_libraries,\n                      include_directories : test_includes_internal)\n     test(t[0], exe, suite : 'v4l2_videodevice', is_parallel : false)\n","prefixes":["libcamera-devel","12/16"]}