Skip to content

[package] qt/6.4.1: cannot build qtwebengine with wayland #14884

Description

@EricAtORS

Description

See the log section. I describe why it fails and what I've tried.

Package and Environment Details

  • Package Name/Version: qt/6.4.1
  • Operating System+version: Alma Linux 8
  • Compiler+version: GCC 10
  • Conan version: conan 1.55.0
  • Python version: Python 3.10

Conan profile

[settings]
arch=x86_64
arch_build=x86_64
build_type=Release
compiler=gcc
compiler.libcxx=libstdc++11
compiler.version=10
os=Linux
os_build=Linux
[options]
[build_requires]
[env]
[conf]
tools.system.package_manager:mode=install
tools.cmake.cmaketoolchain:generator=Ninja

Steps to reproduce

I try to install qt/6.4.1.

Here's my conanfile that I use

conanfile.py
# import pydevd_pycharm
from conans import ConanFile
from conans.errors import ConanException
required_conan_version = ">=1.54.0"

class DragonflyConan(ConanFile):
    generators = "cmake", "cmake_find_package"
    settings = "os", "build_type"
    keep_imports = True

    def requirements(self):
        # pydevd_pycharm.settrace('localhost', port=62421, stdoutToServer=True, stderrToServer=True)
        self.requires("boost/1.78.0")
        self.requires("ffmpeg/2.3.6")
        self.requires("zlib/1.2.13")
        self.requires("eigen/3.4.0")
        self.requires("icu/70.1")
        self.requires("cpr/1.9.0")
        self.requires("glew/2.2.0")
        self.requires("catch2/3.2.0")
        self.requires("opencascade/7.6.2")
        self.requires("nlohmann_json/3.11.2")
        self.requires("spdlog/1.11.0")
        self.requires("qt/6.4.1")
        self.requires("ftgl/2.4.0")
        self.requires("glu/system")
        self.requires("pugixml/1.13")
        self.requires("dcmtk/3.6.6")
        self.requires("opencv/4.5.5")
        if not self._is_windows:
            self.requires("libtar/1.2.20")
            self.requires("libxml2/2.10.3")
            self.requires("xmlsec/1.2.32")

        self.requires("pybind11/2.10.0")
        self._add_requirements_to_manage_conflicts()

        self._add_python_dependencies()

    def _add_python_dependencies(self):
        self.requires("pyqt/6.4.0")

    def _add_requirements_to_manage_conflicts(self):
        # qt / cpr
        self.requires("zlib/1.2.13")
        # qt / cpr
        self.requires("zstd/1.5.2")
        # qt / cpr
        self.requires("openssl/1.1.1s")
        # freetype / dcmtk
        self.requires("libpng/1.6.39")
        # libtiff and opencv
        self.requires("libjpeg/9e")
        self.requires("libwebp/1.2.4")
        # qt / opencascade
        self.requires('freetype/2.12.1')


    @property
    def _current_python_version(self) -> str:
        return "3.10"

    @property
    def _is_windows(self) -> bool:
        return self.settings.get_safe("os") == 'Windows'

    @property
    def _is_linux(self) -> bool:
        return self.settings.get_safe("os") == 'Linux'

    @property
    def _is_debug_build(self) -> bool:
        return self.settings.get_safe("build_type") == "Debug"


    def configure(self):
    
        self.options["openjpeg"].shared = True
        self.options["libpng"].shared = True
        self.options["zlib"].shared = True
        self.options["freetype"].shared = True
        self.options["openssl"].shared = True
        self.options["spdlog"].shared = True
        self.options["cpr"].shared = True
        self.options["glew"].shared = True
        self.options["zstd"].shared = True
        self.options["zlib"].shared = True
        self.options["libcurl"].shared = True
        self.options["glew"].shared = True
        self.options["icu"].shared = True
        self.options["ftgl"].shared = True
        self.options["libtiff"].shared = True
        if not self._is_windows:
            self.options["libtar"].shared = True

        self.options["dcmtk"].shared = True
        self.options["dcmtk"].charset_conversion = "icu"
        self.options["dcmtk"].with_libxml2 = False
        self.options["dcmtk"].wide_io = True
        self.options["dcmtk"].external_dictionary = False
        self.options["dcmtk"].builtin_dictionary = True
        self.options["dcmtk"].with_openssl = False

        self.options["openssl"].shared = True
        self.options["openssl"].no_tests=True

           
        self.options["ffmpeg"].shared = True
        self.options["ffmpeg"].with_zlib = True
        self.options["ffmpeg"].with_libiconv = False
        self.options["ffmpeg"].postproc = False
        self.options["ffmpeg"].with_ssl = False

        self.options["harfbuzz"].with_glib = False # disable glib to prevent gpl dependencies
        # self.options["harfbuzz"].shared = False
        # self.options["harfbuzz"].with_icu = True

        self.options["icu"].shared = True
        #self.options["tk"].shared = True
        self.options["tcl"].shared = True

        self.options["opencascade"].shared = True
        self.options["opencascade"].with_tk =  False
        self.options["opencascade"].with_opengl =  False
        
        if not self._is_windows:
            self.options["icu"].data_packaging = "library"

        self.options["libpng"].shared = True
        self.options["libjpeg"].shared = True
        self.options["bzip2"].shared = True

        self.options["pugixml"].wchar_mode = True
        self.options["libxml2"].iconv = False
        self.options["libxml2"].icu = True
        self.options["libxml2"].python = True

        self.options["xmlsec"].with_xslt = True

        self.options["qt"].shared = True
        self.options["qt"].with_dbus = self._is_linux
        self.options["qt"].qttools = True
        self.options["qt"].qtwebchannel = True
        self.options["qt"].qtwebengine = True
        self.options["qt"].qtwebsockets = True
        self.options["qt"].qt5compat= True
        self.options["qt"].qtsvg= True
        self.options["qt"].qtimageformats= True
        self.options["qt"].qtscxml= True
        self.options["qt"].qtmultimedia= False
        self.options["qt"].qtactiveqt= False
        self.options["qt"].qtdatavis3d= False
        self.options["qt"].qtdeclarative= False
        self.options["qt"].qtlanguageserver= False
        self.options["qt"].qtshadertools= True  # needed for the web engine and for certain aspects of font rendering
        self.options["qt"].qtcoap= False
        self.options["qt"].qtcharts= False
        self.options["qt"].qtconnectivity= False
        self.options["qt"].qtvirtualkeyboard= False
        self.options["qt"].qtwayland= self._is_linux
        self.options["qt"].qtserialbus= False
        self.options["qt"].qtsensors= False
        self.options["qt"].with_sqlite3 = False
        self.options["qt"].with_mysql = False
        self.options["qt"].with_pq = False
        self.options["qt"].with_odbc = False
        self.options["qt"].with_libjpeg = "libjpeg"
        self.options["qt"].with_libpng = True
        self.options["qt"].with_zstd = True
        self.options["qt"].with_md4c= True
        self.options["qt"].with_freetype = True
        self.options["qt"].with_glib = False
        if not self._is_windows:
            self.options["qt"].with_icu  = True
        self.options["qt"].gui = True
        self.options["qt"].widgets = True                     

        self.options["opencv"].shared = True
        if self.settings.os == "Linux":
            self.options["opencv"].with_gtk = False
        self.options["opencv"].parallel = "openmp"
        self.options["opencv"].contrib = True
        self.options["opencv"].with_ffmpeg = False
        self.options["opencv"].with_quirc = False        
        self.options["opencv"].build_with_python_version = self._current_python_version

        self.options["boost"].shared = True
        self.options["boost"].zstd = True
        self.options["boost"].system_use_utf8 = True

        self.options["pyqt-sip"].build_with_python_version = self._current_python_version
        self.options["pyqt"].build_with_python_version = self._current_python_version


    def imports(self):
        self.copy("*", dst="bin", src="bin", folder=False)
        self.copy("*", dst="res", src="res", folder=False)
        self.copy("*", dst="lib/site-packages", src="lib/site-packages", folder=False) # for python code

    def package(self):
        self.copy("*.dll", folder=False)
        self.copy("*.pyd", folder=False)
        self.copy("*.so*", folder=False)

Logs

I have a number of issues:

First, I had to add m4 as a build requirement for qtwebengine on linux

Then, I get errors regarding the ninja executable.
Here's the full log: https://pastebin.com/UsRGfNQy
In the logs, it comes out as this:

Configuring submodule 'qtwebengine'
-- Checking 'ulimit -n'
 -- Open files limit 1048576
CMake Error at qtwebengine/configure.cmake:243 (file):
  file RELATIVE_PATH must be passed a full path to the file:
Call Stack (most recent call first):
  qtwebengine/configure.cmake:252 (qtwebengine_internal_is_file_inside_root_build_dir)
  qtwebengine/src/CMakeLists.txt:13 (include)

The cause of the error is that ${Ninja_EXECUTABLE} is blank.
If I manually edit $CONAN_HOME/data/qt/6.4.1/_/_/source/qt6/qtwebengine/configure.cmake
such that set(Ninja_INSIDE_WEBENGINE_ROOT_BUILD_DIR "OFF"), I run in to another error

Addtionally, in those logs, it's not able to find xshmfence, so qtwebengine will not build.
I get this warning that it will not be built:

WARNING: QtWebEngine won't be built. Could not find all necessary libraries for qpa-xcb support. X11:YES LIBDRM:YES XCOMPOSITE:YES XCURSOR:YES XRANDR:YES XI:YES XPROTO:YES XSHMFENCE:NO XTST:YES

I don't know why it's doing this,

Then, after fixing the ninja issue, when I rerun it again, it complains about wayland and libdrm targets not being found:

additional output
-- Configuring done
CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "KmsSupportPrivate" links to:

    Libdrm::Libdrm

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtModuleHelpers.cmake:558 (qt_internal_extend_target)
  qtbase/src/platformsupport/kmsconvenience/CMakeLists.txt:9 (qt_internal_add_module)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "EglFsKmsSupportPrivate" links to:

    Libdrm::Libdrm

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtModuleHelpers.cmake:558 (qt_internal_extend_target)
  qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/CMakeLists.txt:7 (qt_internal_add_module)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "QEglFSKmsEglDeviceIntegrationPlugin" links to:

    Libdrm::Libdrm

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtPluginHelpers.cmake:312 (qt_internal_extend_target)
  qtbase/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_egldevice/CMakeLists.txt:7 (qt_internal_add_plugin)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "WaylandClient" links to:

    Wayland::Client

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtModuleHelpers.cmake:558 (qt_internal_extend_target)
  qtwayland/src/client/CMakeLists.txt:7 (qt_internal_add_module)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "WaylandCompositor" links to:

    Wayland::Server

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtModuleHelpers.cmake:558 (qt_internal_extend_target)
  qtwayland/src/compositor/CMakeLists.txt:7 (qt_internal_add_module)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "WaylandEglClientHwIntegrationPrivate" links to:

    Wayland::Client

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtModuleHelpers.cmake:558 (qt_internal_extend_target)
  qtwayland/src/hardwareintegration/client/wayland-egl/CMakeLists.txt:8 (qt_internal_add_module)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "WaylandEglCompositorHwIntegrationPrivate" links to:

    Wayland::Egl

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtModuleHelpers.cmake:558 (qt_internal_extend_target)
  qtwayland/src/hardwareintegration/compositor/wayland-egl/CMakeLists.txt:6 (qt_internal_add_module)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "DrmEglServerBufferPlugin" links to:

    Wayland::Client

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtPluginHelpers.cmake:312 (qt_internal_extend_target)
  qtwayland/src/plugins/hardwareintegration/client/drm-egl-server/CMakeLists.txt:7 (qt_internal_add_plugin)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "ShmServerBufferPlugin" links to:

    Wayland::Client

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtPluginHelpers.cmake:312 (qt_internal_extend_target)
  qtwayland/src/plugins/hardwareintegration/client/shm-emulation-server/CMakeLists.txt:7 (qt_internal_add_plugin)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "QWaylandEglStreamClientBufferIntegrationPlugin" links to:

    Wayland::Egl

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtPluginHelpers.cmake:312 (qt_internal_extend_target)
  qtwayland/src/plugins/hardwareintegration/compositor/wayland-eglstream-controller/CMakeLists.txt:8 (qt_internal_add_plugin)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "DrmEglServerBufferIntegrationPlugin" links to:

    Wayland::Server

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtPluginHelpers.cmake:312 (qt_internal_extend_target)
  qtwayland/src/plugins/hardwareintegration/compositor/drm-egl-server/CMakeLists.txt:7 (qt_internal_add_plugin)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "ShmServerBufferIntegrationPlugin" links to:

    Wayland::Server

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtPluginHelpers.cmake:312 (qt_internal_extend_target)
  qtwayland/src/plugins/hardwareintegration/compositor/shm-emulation-server/CMakeLists.txt:7 (qt_internal_add_plugin)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "QWaylandBradientDecorationPlugin" links to:

    Wayland::Client

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtPluginHelpers.cmake:312 (qt_internal_extend_target)
  qtwayland/src/plugins/decorations/bradient/CMakeLists.txt:7 (qt_internal_add_plugin)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "QWaylandFullScreenShellV1IntegrationPlugin" links to:

    Wayland::Client

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtPluginHelpers.cmake:312 (qt_internal_extend_target)
  qtwayland/src/plugins/shellintegration/fullscreen-shell-v1/CMakeLists.txt:7 (qt_internal_add_plugin)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "QWaylandIviShellIntegrationPlugin" links to:

    Wayland::Client

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtPluginHelpers.cmake:312 (qt_internal_extend_target)
  qtwayland/src/plugins/shellintegration/ivi-shell/CMakeLists.txt:7 (qt_internal_add_plugin)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "WlShellIntegrationPrivate" links to:

    Wayland::Client

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtModuleHelpers.cmake:558 (qt_internal_extend_target)
  qtwayland/src/plugins/shellintegration/wl-shell/CMakeLists.txt:7 (qt_internal_add_module)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "QWaylandXdgShellIntegrationPlugin" links to:

    Wayland::Client

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtPluginHelpers.cmake:312 (qt_internal_extend_target)
  qtwayland/src/plugins/shellintegration/xdg-shell/CMakeLists.txt:7 (qt_internal_add_plugin)


CMake Error at qtbase/cmake/QtTargetHelpers.cmake:80 (target_link_libraries):
  Target "QWaylandQtShellIntegrationPlugin" links to:

    Wayland::Client

  but the target was not found.  Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

Call Stack (most recent call first):
  qtbase/cmake/QtPluginHelpers.cmake:312 (qt_internal_extend_target)
  qtwayland/src/plugins/shellintegration/qt-shell/CMakeLists.txt:5 (qt_internal_add_plugin)

It seems like what it's looking for is not the same as what's exported by conan.
Does that mean that for those places, we just need to replace, for example Wayland::Client to wayland::wayland-client ?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions