[PATCH v2] libcamera: meson: Fix libyuv detection

Kieran Bingham kieran.bingham at ideasonboard.com
Fri Feb 7 14:50:35 CET 2025


From: Dylan Aïssi <dylan.aissi at collabora.com>

We already fall back to a subproject to support the libyuv package when
it can not be discovered through the usual dependency() mechanism.

Unfortunately libyuv may be packaged without any corresponding
pkg-config support as can be seen at [0], so further extend the
dependency search by using an explicit cxx.find_library() call.

[0] https://packages.debian.org/bookworm/amd64/libyuv-dev/filelist

Signed-off-by: Dylan Aïssi <dylan.aissi at collabora.com>
Tested-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>

---
v2:
Handle review/suggestion from Barnabás:
 - include yuv.h explicitly as a header check
 - support the force_fallback_for option.

Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>

 src/meson.build | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/src/meson.build b/src/meson.build
index 76198e9535db..b664448699aa 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -27,10 +27,20 @@ else
     ipa_sign_module = false
 endif
 
-# libyuv, used by the Android adaptation layer and the virtual pipeline handler.
-# Fallback to a subproject if libyuv isn't found, as it's typically not provided
-# by distributions.
-libyuv_dep = dependency('libyuv', required : false)
+# libyuv, used by the Android adaptation layer and the virtual pipeline
+# handler. Fallback to a subproject if libyuv isn't found, as it's typically
+# not provided by distributions. Where libyuv is provided by a distribution, it
+# may not always supply a pkg-config implementation, requiring cxx.find_library()
+# to search for it.
+if not get_option('force_fallback_for').contains('libyuv')
+    libyuv_dep = dependency('libyuv', required : false)
+    if not libyuv_dep.found()
+        libyuv_dep = cxx.find_library('yuv', has_headers : 'libyuv.h',
+                                      required : false)
+    endif
+else
+    libyuv_dep = dependency('', required : false)
+endif
 
 if (pipelines.contains('virtual') or get_option('android').allowed()) and \
    not libyuv_dep.found()
-- 
2.47.1



More information about the libcamera-devel mailing list