[PATCH] README.rst: remove unnecessary dependency for qcam
Quentin Schulz
quentin.schulz at cherry.de
Mon Mar 17 15:51:29 CET 2025
Hi Kieran,
On 3/17/25 2:10 PM, Kieran Bingham wrote:
> Quoting Quentin Schulz (2025-03-17 12:30:48)
>> Hi Kieran,
>>
>> On 3/17/25 1:21 PM, Kieran Bingham wrote:
>>> Quoting Quentin Schulz (2025-03-11 13:06:25)
>>>> +Cc Ricardo, the original commit author, in case I'm missing something
>>>>
>>>> On 3/11/25 2:01 PM, Quentin Schulz wrote:
>>>>> [foss+libcamera at 0leil.net appears similar to someone who previously sent you email, but may not be that person. Learn why this could be a risk at https://aka.ms/LearnAboutSenderIdentification ]
>>>>>
>>>>> From: Quentin Schulz <quentin.schulz at cherry.de>
>>>>>
>>>>> The introducing commit (dff416a84b78 ("README: Add missing package for
>>>>> Qt5 tools"); for Qt 5 originally) stated that without the dependency we
>>>>> would get the following messages:
>>>>>
>>>>> Program /usr/lib/x86_64-linux-gnu/qt5/bin/lrelease found: NO
>>>>> Program lrelease-qt5 found: NO
>>>>> Program lrelease found: NO found but need: '== 5.14.2'
>>>>>
>>>>> That is still the case but this actually is neither breaking the build
>>>>> nor is it doing anything to the outcome of the build as qcam is bit to
>>>>> bit identical with and without that package.
>>>>>
>>>>> Therefore, let's not mislead users to install an unnecessary package.
>>>>>
>>>>> Signed-off-by: Quentin Schulz <quentin.schulz at cherry.de>
>>>>> ---
>>>>> This was tested within a debian:bookworm container with and without the
>>>>> package, checked out both at master and introducing commit. qcam is bit
>>>>> to bit identical in both cases.
>>>
>>> That's the evidence I would look for in this, so
>>>
>>> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>>>
>>> Is this still the case on Qt6? I assume/infer that the reason you want
>>> to remove this dependency is because something has changed in qt6 ?
>>>
>>> If so - adding that to the commit message would help clarify things, as
>>> you are removing a qt6 package, but only discussing qt5 in the commit.
>>>
>>
>> This was tested for both qt5 and qt6, results are both bit to bit identical.
>>
>> I stated that in the Buildroot patch:
>> https://lore.kernel.org/buildroot/20250311-libcamera-qt6-v1-1-4897aadc6fe3@cherry.de/
>> but forgot to add it here before submitting the patch.
>>
>> I can reword the commit log to something like:
>>
>> """
>> The introducing commit (dff416a84b78 ("README: Add missing package for
>> Qt5 tools"); for Qt 5 originally) stated that without the dependency we
>> would get the following messages:
>>
>> Program /usr/lib/x86_64-linux-gnu/qt5/bin/lrelease found: NO
>> Program lrelease-qt5 found: NO
>> Program lrelease found: NO found but need: '== 5.14.2'
>>
>> That was the case for qt5 and is still true for qt6 but this actually
>> is neither breaking the build nor is it doing anything to the outcome
>> of the build (for both qt5 and qt6) as qcam is bit to bit identical
>> with and without that package.
>>
>> Therefore, let's not mislead users to install an unnecessary package.
>> """
>>
>> Would that work for you? Do you want me to send a v2 for that?
>
> No need for a v2 at the moment ... we can easily fix up the commit, it's
> just the justification I want to get right. Stating that this is still
> the case for Qt6 fixes my concern ;-)
>
> Especially as this will now cause users to have a warning reintroduced
> in their setup logs! Why is that now acceptable when it wasn't before?
>
"""
meson setup build
The Meson build system
Version: 1.0.1
Source dir: /home/qschulz/work/upstream/libcamera
Build dir: /home/qschulz/work/upstream/libcamera/build
Build type: native build
Project name: libcamera
Project version: 0.3.0
C compiler for the host machine: cc (gcc 12.2.0 "cc (Debian 12.2.0-14)
12.2.0")
C linker for the host machine: cc ld.bfd 2.40
C++ compiler for the host machine: c++ (gcc 12.2.0 "c++ (Debian
12.2.0-14) 12.2.0")
C++ linker for the host machine: c++ ld.bfd 2.40
Host machine cpu family: x86_64
Host machine cpu: x86_64
Header "fcntl.h" has symbol "F_ADD_SEALS" : YES
Header "unistd.h" has symbol "issetugid" : NO
Header "locale.h" has symbol "locale_t" : YES
Header "sys/mman.h" has symbol "memfd_create" : YES
Header "stdlib.h" has symbol "secure_getenv" : YES
Compiler for C supports arguments -Wno-c99-designator: NO
Found pkg-config: /usr/bin/pkg-config (1.8.1)
Did not find CMake 'cmake'
Found CMake: NO
Run-time dependency lttng-ust found: NO (tried pkgconfig and cmake)
Program ./parser.py found: YES
(/home/qschulz/work/upstream/libcamera/utils/ipc/./parser.py)
Program ./generate.py found: YES
(/home/qschulz/work/upstream/libcamera/utils/ipc/./generate.py)
Program ./extract-docs.py found: YES
(/home/qschulz/work/upstream/libcamera/utils/ipc/./extract-docs.py)
Program ./gen-tp-header.py found: YES
(/home/qschulz/work/upstream/libcamera/utils/tracepoints/./gen-tp-header.py)
Configuring version.h using configuration
Program openssl found: YES (/usr/bin/openssl)
Library atomic found: YES
Run-time dependency threads found: YES
Run-time dependency libdw found: NO (tried pkgconfig and cmake)
Run-time dependency libunwind found: NO (tried pkgconfig and cmake)
Header "execinfo.h" has symbol "backtrace" : YES
Checking for function "dlopen" : YES
Run-time dependency libudev found: NO (tried pkgconfig and cmake)
Run-time dependency yaml-0.1 found: YES 0.2.5
Run-time dependency gnutls found: YES 3.7.9
Dependency libexif skipped: feature android disabled
Dependency libjpeg skipped: feature android disabled
Run-time dependency libevent_pthreads found: NO (tried pkgconfig and cmake)
Run-time dependency libevent_pthreads found: NO (tried pkgconfig and cmake)
Run-time dependency libtiff-4 found: YES 4.5.0
Run-time dependency GTest found: NO (tried pkgconfig and system)
Looking for a fallback subproject for the dependency gtest
Executing subproject gtest
gtest| Project name: gtest
gtest| Project version: 1.11.0
gtest| C++ compiler for the host machine: c++ (gcc 12.2.0 "c++ (Debian
12.2.0-14) 12.2.0")
gtest| C++ linker for the host machine: c++ ld.bfd 2.40
gtest| Dependency threads found: YES unknown (cached)
gtest| Dependency threads found: YES unknown (cached)
gtest| Dependency threads found: YES unknown (cached)
gtest| Dependency threads found: YES unknown (cached)
gtest| Build targets in project: 35
gtest| Subproject gtest finished.
Dependency gtest from subproject subprojects/googletest-release-1.11.0
found: YES 1.11.0
Run-time dependency qt5 (modules: Core, Gui, Widgets) found: YES 5.15.8
(pkg-config)
Header "QOpenGLWidget" has symbol "QOpenGLWidget" with dependencies
Qt5Core, Qt5Core, Qt5Gui, Qt5Widgets: YES
Detecting Qt5 tools
Run-time dependency qt5 (modules: Core) found: YES 5.15.8 (pkg-config)
Program /usr/lib/x86_64-linux-gnu/qt5/bin/moc found: YES 5.15.8
(/usr/lib/x86_64-linux-gnu/qt5/bin/moc)
Program /usr/lib/x86_64-linux-gnu/qt5/bin/uic found: YES 5.15.8
(/usr/lib/x86_64-linux-gnu/qt5/bin/uic)
Program /usr/lib/x86_64-linux-gnu/qt5/bin/rcc found: YES 5.15.8
(/usr/lib/x86_64-linux-gnu/qt5/bin/rcc)
Program /usr/lib/x86_64-linux-gnu/qt5/bin/lrelease found: NO
Program lrelease5 found: NO
Program lrelease-qt5 found: NO
Program lrelease found: NO found but need: '== 5.15.8' (/usr/bin/lrelease)
Run-time dependency glib-2.0 found: NO (tried pkgconfig and cmake)
Run-time dependency gstreamer-video-1.0 found: NO (tried pkgconfig and
cmake)
Run-time dependency gstreamer-allocators-1.0 found: NO (tried pkgconfig
and cmake)
Run-time dependency python3 found: NO (tried pkgconfig and sysconfig)
Program doxygen found: NO
Program dot found: NO
Program sphinx-build-3 found: NO
Program sphinx-build found: NO
Configuring config.h using configuration
Program python3 (jinja2, ply, jinja2, yaml) found: YES
(/usr/bin/python3) modules: jinja2, ply, jinja2, yaml
Build targets in project: 39
libcamera 0.3.0
Versions
Sources : 0.3.0
Paths
LIBCAMERA_DATA_DIR : "/usr/local/share/libcamera"
LIBCAMERA_SYSCONF_DIR : "/usr/local/etc/libcamera"
IPA_PROXY_DIR : "/usr/local/libexec/libcamera"
IPA_CONFIG_DIR :
"/usr/local/etc/libcamera/ipa:/usr/local/share/libcamera/ipa"
IPA_MODULE_DIR : "/usr/local/lib/x86_64-linux-gnu/libcamera"
Configuration
SoftISP support : False
IPA modules signed with : gnutls
Enabled pipelines : ipu3
uvcvideo
Enabled IPA modules : ipu3
Controls files : control_ids_draft.yaml
control_ids_core.yaml
Properties files : property_ids_draft.yaml
property_ids_core.yaml
Hotplug support : NO
Tracing support : NO
Android support : NO
GStreamer support : NO
Python bindings : NO
V4L2 emulation support : NO
cam application : NO
qcam application : YES
lc-compliance application: NO
Unit tests : NO
Subprojects
gtest : YES
"""
There are plenty other "NO" printed during the setup detection. Does it
really matter if one gets a few other "NO" especially since they don't
impact anything?
> Is there anything we can do to stop meson from looking for lrelease-qt5?
Doesn't seem like it no.
I'm not familiar with meson nor qt build systems but it seems like
QtBaseModule in mesonbuild/modules/qt.py has a hardcoded list of tools
to check. In Debian Bookworm, meson 1.0.1 is used. QtBaseModule has
self.tools set to moc, uic, rcc and lrelease. The compilers_detect
method checks for all binaries listed in that list (c.f.
find_program()). That method is called when _detect_tools() method is
called. That method seems to be called whenever _compile_moc_impl(),
_compile_resources_impl, or _compile_ui_impl() is called. Those are
called when compile_resources(), compile_ui(), compile_moc() or
preprocess() is called. Which is what we do in
src/apps/qcam/meson.build, c.f.
"""
resources = qt5.preprocess(moc_headers : qcam_moc_headers,
qresources : qcam_resources,
dependencies : qt5_dep)
qcam = executable('qcam', qcam_sources, resources,
"""
Note that it seems meson v1.7.0 will also check for qmlcachegen and
qmltyperegistrar on the host, c.f. commit
4508622a34932d23e336392a8a3c71ed79af4e3f.
has_tools now allows to pass a list of tools to check, c.f. commit
6797f9bc1502609783a8fc465e2960819ab4f38f but that doesn't seem to change
the list of tools that are always checked, just a way to provide a way
to conditionally do things in meson, based on the return value of
has_tools for specific tools, my understanding is that all hardcoded
tools are still checked once.
> Who's looking for that in the build?
>
meson, based on the preprocess() call in the qt module. We need that
apparently for moc (header files with Q_OBJECT in there? c.f.
https://doc.qt.io/qt-6/moc.html) and rcc (handling .qrc files, c.f.
https://doc.qt.io/qt-6/rcc.html).
We may want to use qt.has_tools() with moc and rcc to manually check
those before we call preprocess() and fail otherwise? So people are
aware which qt tools are actually required? But that still wouldn't
remove the "NO" for lrelease, and other unneeded binaries. Note that moc
and rcc (and uic, another Qt tool that is required) are part of
qtbase5-dev-tools package on Debian (not to be confused with
qttools5-dev-tools which is bringing in lrelease (and lupdate, lconvert,
...)).
Cheers,
Quentin
More information about the libcamera-devel
mailing list