[libcamera-devel] [PATCH v2 1/3] apps: qcam: Port to Qt 6

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Jan 22 12:57:02 CET 2024


On Mon, Jan 22, 2024 at 06:38:25AM -0500, Neal Gompa wrote:
> On Mon, Jan 22, 2024 at 6:33 AM Laurent Pinchart wrote:
> > On Mon, Jan 22, 2024 at 06:12:08AM -0500, Neal Gompa wrote:
> > > On Mon, Jan 22, 2024 at 4:53 AM Laurent Pinchart via libcamera-devel wrote:
> > > > On Mon, Jan 22, 2024 at 09:38:33AM +0000, Kieran Bingham via libcamera-devel wrote:
> > > > > Aha, I missed that there was already a v2.
> > > > >
> > > > > Quoting Neal Gompa via libcamera-devel (2024-01-21 22:39:53)
> > > > > > Open source Qt 5 has been effectively end of life since the release
> > > > > > of Qt 6, and Qt 6 has current LTS releases now.
> > > > > >
> > > > > > This change ports qcam to Qt 6.2 and drops some of the baggage related
> > > > > > to Qt 5 that is no longer applicable.
> > > > > >
> > > > > > Signed-off-by: Neal Gompa <neal at gompa.dev>
> > > > > > ---
> > > > > >  README.rst                |  2 +-
> > > > > >  meson.build               |  2 +-
> > > > > >  src/apps/qcam/meson.build | 45 +++++++++++----------------------------
> > > > > >  3 files changed, 15 insertions(+), 34 deletions(-)
> > > > > >
> > > > > > diff --git a/README.rst b/README.rst
> > > > > > index 315738ee..6f1c9302 100644
> > > > > > --- a/README.rst
> > > > > > +++ b/README.rst
> > > > > > @@ -88,7 +88,7 @@ for cam: [optional]
> > > > > >          - libsdl2-dev: Enables the SDL sink
> > > > > >
> > > > > >  for qcam: [optional]
> > > > > > -        libtiff-dev qtbase5-dev qttools5-dev-tools
> > > > > > +        libtiff-dev qt6-base-dev qt6-tools-dev-tools
> > > > > >
> > > > > >  for tracing with lttng: [optional]
> > > > > >          liblttng-ust-dev python3-jinja2 lttng-tools
> > > > > > diff --git a/meson.build b/meson.build
> > > > > > index cb6b666a..4c315e2a 100644
> > > > > > --- a/meson.build
> > > > > > +++ b/meson.build
> > > > > > @@ -1,7 +1,7 @@
> > > > > >  # SPDX-License-Identifier: CC0-1.0
> > > > > >
> > > > > >  project('libcamera', 'c', 'cpp',
> > > > > > -    meson_version : '>= 0.60',
> > > > > > +    meson_version : '>= 0.63',
> > > > >
> > > > > Debian Bookworm: is currently at 1.0.1-5
> > > > > https://packages.debian.org/source/stable/meson
> > > > >
> > > > > Ubuntu 22.04.3 is currently at 0.61.2-1 :-(
> > > > > https://packages.ubuntu.com/jammy/meson
> > > > >
> > > > > We're about 3 months away from Ubuntu 24.04 ...
> > > > >
> > > > >
> > > > > Fedora is in a better shape, and all Fedora releases in support have a
> > > > > recent Meson at 1.2.3 or later:
> > > > >  https://src.fedoraproject.org/rpms/meson
> > > > >
> > > > > Redhat Enterprise linux looks more problematic - So I'm not sure if that
> > > > > should be included in fact.
> > > > >
> > > > > OpenSuse seems to be already at 1.3.1 too:
> > > > > https://software.opensuse.org/package/meson?locale=en
> > > > >
> > > > > So it's just Ubuntu/Canonical holding us back here ...
> > > > >
> > > > > Any thoughts anyone?
> > > >
> > > > I was hoping jammy-backports would help us, but that doesn't seem to be
> > > > the case :-(
> > > >
> > > > As there doesn't seem to be an urgency to switch to Qt 6 (unless I'm
> > > > missing something), I'm tempted to propose waiting until Ubuntu 24.04
> > > > gets released.
> > > >
> > > > > >      version : '0.2.0',
> > > > > >      default_options : [
> > > > > >          'werror=true',
> > > > > > diff --git a/src/apps/qcam/meson.build b/src/apps/qcam/meson.build
> > > > > > index 6cf4c171..c7fcfbeb 100644
> > > > > > --- a/src/apps/qcam/meson.build
> > > > > > +++ b/src/apps/qcam/meson.build
> > > > > > @@ -1,13 +1,13 @@
> > > > > >  # SPDX-License-Identifier: CC0-1.0
> > > > > >
> > > > > > -qt5 = import('qt5')
> > > > > > -qt5_dep = dependency('qt5',
> > > > > > +qt6 = import('qt6')
> > > > > > +qt6_dep = dependency('qt6',
> > > > > >                       method : 'pkg-config',
> > > > > > -                     modules : ['Core', 'Gui', 'Widgets'],
> > > > > > +                     modules : ['Core', 'Gui', 'OpenGL', 'OpenGLWidgets', 'Widgets'],
> > > > > >                       required : get_option('qcam'),
> > > > > > -                     version : '>=5.4')
> > > > > > +                     version : '>=6.2')
> > > > > >
> > > > > > -if not qt5_dep.found()
> > > > > > +if not qt6_dep.found()
> > > > > >      qcam_enabled = false
> > > > > >      subdir_done()
> > > > > >  endif
> > > > > > @@ -20,46 +20,27 @@ qcam_sources = files([
> > > > > >      'main.cpp',
> > > > > >      'main_window.cpp',
> > > > > >      'message_handler.cpp',
> > > > > > +    'viewfinder_gl.cpp',
> > > > > >      'viewfinder_qt.cpp',
> > > > > >  ])
> > > > > >
> > > > > >  qcam_moc_headers = files([
> > > > > >      'cam_select_dialog.h',
> > > > > >      'main_window.h',
> > > > > > +    'viewfinder_gl.h',
> > > > > >      'viewfinder_qt.h',
> > > > > >  ])
> > > > > >
> > > > > >  qcam_resources = files([
> > > > > >      'assets/feathericons/feathericons.qrc',
> > > > > > +    'assets/shader/shaders.qrc',
> > > > > >  ])
> > > > > >
> > > > > > -qt5_cpp_args = [apps_cpp_args, '-DQT_NO_KEYWORDS']
> > > > > > +qt6_cpp_args = [apps_cpp_args, '-DQT_NO_KEYWORDS']
> > > > > >
> > > > > > -if cxx.has_header_symbol('QOpenGLWidget', 'QOpenGLWidget',
> > > > > > -                         dependencies : qt5_dep, args : '-fPIC')
> > > > > > -    qcam_sources += files([
> > > > > > -        'viewfinder_gl.cpp',
> > > > > > -    ])
> > > > > > -    qcam_moc_headers += files([
> > > > > > -        'viewfinder_gl.h',
> > > > > > -    ])
> > > > > > -    qcam_resources += files([
> > > > > > -        'assets/shader/shaders.qrc'
> > > > > > -    ])
> > > > > > -endif
> > > > > > -
> > > > > > -# gcc 9 introduced a deprecated-copy warning that is triggered by Qt until
> > > > > > -# Qt 5.13. clang 10 introduced the same warning, but detects more issues
> > > > > > -# that are not fixed in Qt yet. Disable the warning manually in both cases.
> > > > > > -if ((cc.get_id() == 'gcc' and cc.version().version_compare('>=9.0') and
> > > > > > -     qt5_dep.version().version_compare('<5.13')) or
> > > > > > -    (cc.get_id() == 'clang' and cc.version().version_compare('>=10.0')))
> > > > > > -    qt5_cpp_args += ['-Wno-deprecated-copy']
> > > > > > -endif
> > > > > > -
> > > > > > -resources = qt5.preprocess(moc_headers : qcam_moc_headers,
> > > > > > +resources = qt6.preprocess(moc_headers : qcam_moc_headers,
> > > > > >                             qresources : qcam_resources,
> > > > > > -                           dependencies : qt5_dep)
> > > > > > +                           dependencies : qt6_dep)
> > > > > >
> > > > > >  qcam  = executable('qcam', qcam_sources, resources,
> > > > > >                     install : true,
> > > > > > @@ -69,6 +50,6 @@ qcam  = executable('qcam', qcam_sources, resources,
> > > > > >                         libatomic,
> > > > > >                         libcamera_public,
> > > > > >                         libtiff,
> > > > > > -                       qt5_dep,
> > > > > > +                       qt6_dep,
> > > > > >                     ],
> > > > > > -                   cpp_args : qt5_cpp_args)
> > > > > > +                   cpp_args : qt6_cpp_args)
> > >
> > > I'd like to have this in place for Fedora 40 as that's the release
> > > we're moving to KDE Plasma 6[1] and thus generally preferring
> > > everything to be Qt 6 whenever possible. Additionally, CentOS/RHEL 10
> > > (which forks from Fedora 40) will only have Qt 6. The freeze for
> > > Fedora is in two weeks[2], and I'd like to have this landed before
> > > then.
> >
> > That's a pretty short notice. Could you have a look at the toolbar icon
> > issue I've reported then ?
> 
> Yup. I cannot reproduce the issue. It works here. Here's a screenshot:
> https://i.imgur.com/zle2XbL.png

Here's how it looks like for me.

- With Qt5: https://postimg.cc/jC16fLh1
- With Qt6: https://postimg.cc/WtGY6mhy

I wonder if this could be caused by not having KDE 6 installed.

What's the default KDE environment for Debian Bookworm and Ubuntu 24.04,
is it KDE 5 or KDE 6 ?

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list