diff --git a/pkgs/development/libraries/qt-5/modules/qtbase.nix b/pkgs/development/libraries/qt-5/modules/qtbase.nix index 0102c2fd1b6f..44f72701854c 100644 --- a/pkgs/development/libraries/qt-5/modules/qtbase.nix +++ b/pkgs/development/libraries/qt-5/modules/qtbase.nix @@ -9,7 +9,7 @@ , dbus, fontconfig, freetype, glib, harfbuzz, icu, libdrm, libX11, libXcomposite , libXcursor, libXext, libXi, libXrender, libinput, libjpeg, libpng , libxcb -, libxkbcommon, libxml2, libxslt, openssl, pcre16, pcre2, sqlite, udev, xcbutil +, libxkbcommon, libxml2, libxslt, openssl, pcre2, sqlite, udev, xcbutil , xcbutilimage, xcbutilkeysyms, xcbutilrenderutil, xcbutilwm , zlib, at-spi2-core # optional dependencies @@ -27,8 +27,6 @@ }: let - compareVersion = v: builtins.compareVersions version v; - qmakeCacheName = if compareVersion "5.12.4" < 0 then ".qmake.cache" else ".qmake.stash"; debugSymbols = debug || developerBuild; in @@ -45,7 +43,7 @@ stdenv.mkDerivation { # Image formats libjpeg libpng - (if compareVersion "5.9.0" < 0 then pcre16 else pcre2) + pcre2 ] ++ ( if stdenv.isDarwin then [ # TODO: move to buildInputs, this should not be propagated. @@ -116,7 +114,7 @@ stdenv.mkDerivation { # https://bugs.gentoo.org/803470 sed -i 's/-lpthread/-pthread/' mkspecs/common/linux.conf src/corelib/configure.json - '' + lib.optionalString (compareVersion "5.15.0" >= 0) '' + patchShebangs ./bin '' + ( if stdenv.isDarwin then '' @@ -146,22 +144,18 @@ stdenv.mkDerivation { setOutputFlags = false; preConfigure = '' export LD_LIBRARY_PATH="$PWD/lib:$PWD/plugins/platforms''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH" - ${lib.optionalString (compareVersion "5.9.0" < 0) '' - # We need to set LD to CXX or otherwise we get nasty compile errors - export LD=$CXX - ''} NIX_CFLAGS_COMPILE+=" -DNIXPKGS_QT_PLUGIN_PREFIX=\"$qtPluginPrefix\"" # paralellize compilation of qtmake, which happens within ./configure export MAKEFLAGS+=" -j$NIX_BUILD_CORES" - '' + lib.optionalString (compareVersion "5.15.0" >= 0) '' + ./bin/syncqt.pl -version $version ''; postConfigure = '' qmakeCacheInjectNixOutputs() { - local cache="$1/${qmakeCacheName}" + local cache="$1/.qmake.stash" echo "qmakeCacheInjectNixOutputs: $cache" if ! [ -f "$cache" ]; then echo >&2 "qmakeCacheInjectNixOutputs: WARNING: $cache does not exist" @@ -184,7 +178,7 @@ stdenv.mkDerivation { NIX_CFLAGS_COMPILE = toString ([ "-Wno-error=sign-compare" # freetype-2.5.4 changed signedness of some struct fields ''-DNIXPKGS_QTCOMPOSE="${libX11.out}/share/X11/locale"'' - ''-D${if compareVersion "5.11.0" >= 0 then "LIBRESOLV_SO" else "NIXPKGS_LIBRESOLV"}="${stdenv.cc.libc.out}/lib/libresolv"'' + ''-DLIBRESOLV_SO="${stdenv.cc.libc.out}/lib/libresolv"'' ''-DNIXPKGS_LIBXCURSOR="${libXcursor.out}/lib/libXcursor"'' ] ++ lib.optional libGLSupported ''-DNIXPKGS_MESA_GL="${libGL.out}/lib/libGL"'' ++ lib.optional stdenv.isLinux "-DUSE_X11" @@ -192,14 +186,10 @@ stdenv.mkDerivation { # ignore "is only available on macOS 10.12.2 or newer" in obj-c code "-Wno-error=unguarded-availability" ] - ++ lib.optionals ((compareVersion "5.15.0" >= 0) && stdenv.isDarwin) [ - # .moc/moc_qprintdialog.cpp:96:31: error: no member named '_q_togglePageSetCombo' in 'QPrintDialogPrivate' - "-DQ_OS_MAC" - ] ++ lib.optionals withGtk3 [ + ++ lib.optionals withGtk3 [ ''-DNIXPKGS_QGTK3_XDG_DATA_DIRS="${gtk3}/share/gsettings-schemas/${gtk3.name}"'' ''-DNIXPKGS_QGTK3_GIO_EXTRA_MODULES="${dconf.lib}/lib/gio/modules"'' - ] - ++ lib.optional decryptSslTraffic "-DQT_DECRYPT_SSL_TRAFFIC"); + ] ++ lib.optional decryptSslTraffic "-DQT_DECRYPT_SSL_TRAFFIC"); prefixKey = "-prefix "; @@ -233,18 +223,14 @@ stdenv.mkDerivation { "-L" "${icu.out}/lib" "-I" "${icu.dev}/include" "-pch" - ] ++ lib.optional debugSymbols "-debug" - ++ lib.optionals (compareVersion "5.11.0" < 0) [ - "-qml-debug" - ] ++ lib.optionals (compareVersion "5.9.0" < 0) [ - "-c++11" - "-no-reduce-relocations" - ] ++ lib.optionals developerBuild [ + ] + ++ lib.optional debugSymbols "-debug" + ++ lib.optionals developerBuild [ "-developer-build" "-no-warnings-are-errors" ] ++ (if (!stdenv.hostPlatform.isx86_64) then [ "-no-sse2" - ] else lib.optionals (compareVersion "5.9.0" >= 0) [ + ] else [ "-sse2" "${lib.optionalString (!stdenv.hostPlatform.sse3Support) "-no"}-sse3" "${lib.optionalString (!stdenv.hostPlatform.ssse3Support) "-no"}-ssse3" @@ -278,7 +264,7 @@ stdenv.mkDerivation { "-make tools" ''-${lib.optionalString (!buildExamples) "no"}make examples'' ''-${lib.optionalString (!buildTests) "no"}make tests'' - ] ++ lib.optional (compareVersion "5.15.0" < 0) "-v" + ] ++ ( if stdenv.isDarwin then [ "-no-fontconfig" @@ -286,9 +272,8 @@ stdenv.mkDerivation { "-qt-libpng" "-no-framework" ] else [ - "-${lib.optionalString (compareVersion "5.9.0" < 0) "no-"}rpath" - ] ++ lib.optional (compareVersion "5.15.0" < 0) "-system-xcb" - ++ [ + "-rpath" + ] ++ [ "-xcb" "-qpa xcb" "-L" "${libX11.out}/lib" @@ -303,20 +288,11 @@ stdenv.mkDerivation { ''-${lib.optionalString (cups == null) "no-"}cups'' "-dbus-linked" "-glib" - ] ++ lib.optional (compareVersion "5.15.0" < 0) "-system-libjpeg" - ++ [ + ] ++ [ "-system-libpng" ] ++ lib.optional withGtk3 "-gtk" - ++ lib.optional (compareVersion "5.9.0" >= 0) "-inotify" - ++ lib.optionals (compareVersion "5.10.0" >= 0) [ - # Without these, Qt stops working on kernels < 3.17. See: - # https://github.com/NixOS/nixpkgs/issues/38832 - "-no-feature-renameat2" - "-no-feature-getentropy" - ] ++ lib.optionals (compareVersion "5.12.1" < 0) [ - # use -xkbcommon and -xkbcommon-evdev for versions before 5.12.1 - "-system-xkbcommon" - "-xkbcommon-evdev" + ++ [ + "-inotify" ] ++ lib.optionals (cups != null) [ "-L" "${cups.lib}/lib" "-I" "${cups.dev}/include" @@ -368,12 +344,6 @@ stdenv.mkDerivation { license = with licenses; [ fdl13Plus gpl2Plus lgpl21Plus lgpl3Plus ]; maintainers = with maintainers; [ qknight ttuegel periklis bkchr ]; platforms = platforms.unix; - # Qt5 is broken on aarch64-darwin - # the build ends up with the following error: - # error: unknown target CPU 'armv8.3-a+crypto+sha2+aes+crc+fp16+lse+simd+ras+rdm+rcpc' - # note: valid target CPU values are: nocona, core2, penryn, ..., znver1, znver2, x86-64 - # it seems the qmake/cmake passes x86_64 as preferred architecture somewhere - broken = stdenv.isDarwin && stdenv.isAarch64 && (compareVersion "5.15.3" < 0); }; } diff --git a/pkgs/development/libraries/qt-5/modules/qtwayland.nix b/pkgs/development/libraries/qt-5/modules/qtwayland.nix index 10e18b3b9844..c7b61ab11f4b 100644 --- a/pkgs/development/libraries/qt-5/modules/qtwayland.nix +++ b/pkgs/development/libraries/qt-5/modules/qtwayland.nix @@ -11,14 +11,14 @@ qtModule { # wrapped executables from `wrapQtAppsHook` (see comment in patch for further # context). Beware: shared among different Qt5 versions. ./qtwayland-app_id.patch - ] ++ lib.optional (lib.versionAtLeast qtbase.version "5.15") + # Backport of https://codereview.qt-project.org/c/qt/qtwayland/+/388338 # Pulled from Fedora as they modified it to not apply to KDE as Plasma 5.x # doesn't behave properly with the patch applied. See the discussion at # https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/39 for details - # This patch won't apply to versions before 5.15. (fetchpatch { url = "https://src.fedoraproject.org/rpms/qt5-qtwayland/raw/46376bb00d4c3dd3db2e82ad7ca5301ce16ea4ab/f/0080-Client-set-constraint-adjustments-for-popups-in-xdg.patch"; sha256 = "sha256-XP+noYCk8fUdA0ItCqMjV7lSXDlNdB7Az9q7NRpupHc="; - }); + }) + ]; } diff --git a/pkgs/development/libraries/qt-5/modules/qtwebengine.nix b/pkgs/development/libraries/qt-5/modules/qtwebengine.nix index d342996c67e7..3cf2fedbadde 100644 --- a/pkgs/development/libraries/qt-5/modules/qtwebengine.nix +++ b/pkgs/development/libraries/qt-5/modules/qtwebengine.nix @@ -80,30 +80,21 @@ qtModule { sed -i -e '/libpci_loader.*Load/s!"\(libpci\.so\)!"${pciutils}/lib/\1!' \ src/3rdparty/chromium/gpu/config/gpu_info_collector_linux.cc - '' + lib.optionalString stdenv.isDarwin ( - (if (lib.versionAtLeast qtCompatVersion "5.14") then '' + '' + lib.optionalString stdenv.isDarwin ('' substituteInPlace src/buildtools/config/mac_osx.pri \ --replace 'QMAKE_CLANG_DIR = "/usr"' 'QMAKE_CLANG_DIR = "${stdenv.cc}"' - '' else '' - substituteInPlace src/core/config/mac_osx.pri \ - --replace 'QMAKE_CLANG_DIR = "/usr"' 'QMAKE_CLANG_DIR = "${stdenv.cc}"' - '') - # Following is required to prevent a build error: - # ninja: error: '/nix/store/z8z04p0ph48w22rqzx7ql67gy8cyvidi-SDKs/MacOSX10.12.sdk/usr/include/mach/exc.defs', needed by 'gen/third_party/crashpad/crashpad/util/mach/excUser.c', missing and no known rule to make it - + '' + + # Following is required to prevent a build error: + # ninja: error: '/nix/store/z8z04p0ph48w22rqzx7ql67gy8cyvidi-SDKs/MacOSX10.12.sdk/usr/include/mach/exc.defs', needed by 'gen/third_party/crashpad/crashpad/util/mach/excUser.c', missing and no known rule to make it substituteInPlace src/3rdparty/chromium/third_party/crashpad/crashpad/util/BUILD.gn \ --replace '$sysroot/usr' "${xnu}" - '' - # Apple has some secret stuff they don't share with OpenBSM - + (if (lib.versionAtLeast qtCompatVersion "5.14") then '' - substituteInPlace src/3rdparty/chromium/base/mac/mach_port_rendezvous.cc \ - --replace "audit_token_to_pid(request.trailer.msgh_audit)" "request.trailer.msgh_audit.val[5]" - substituteInPlace src/3rdparty/chromium/third_party/crashpad/crashpad/util/mach/mach_message.cc \ - --replace "audit_token_to_pid(audit_trailer->msgh_audit)" "audit_trailer->msgh_audit.val[5]" - '' else '' - substituteInPlace src/3rdparty/chromium/base/mac/mach_port_broker.mm \ - --replace "audit_token_to_pid(msg.trailer.msgh_audit)" "msg.trailer.msgh_audit.val[5]" - '')) + postPatch; + + # Apple has some secret stuff they don't share with OpenBSM + substituteInPlace src/3rdparty/chromium/base/mac/mach_port_rendezvous.cc \ + --replace "audit_token_to_pid(request.trailer.msgh_audit)" "request.trailer.msgh_audit.val[5]" + substituteInPlace src/3rdparty/chromium/third_party/crashpad/crashpad/util/mach/mach_message.cc \ + --replace "audit_token_to_pid(audit_trailer->msgh_audit)" "audit_trailer->msgh_audit.val[5]" + '') + postPatch; NIX_CFLAGS_COMPILE = lib.optionals stdenv.cc.isGNU [ # with gcc8, -Wclass-memaccess became part of -Wall and this exceeds the logging limit @@ -115,8 +106,6 @@ qtModule { ] ++ lib.optionals stdenv.cc.isClang [ "-Wno-elaborated-enum-base" ] ++ lib.optionals stdenv.isDarwin [ - "-DMAC_OS_X_VERSION_MAX_ALLOWED=MAC_OS_X_VERSION_10_12" - "-DMAC_OS_X_VERSION_MIN_REQUIRED=MAC_OS_X_VERSION_10_12" "-Wno-elaborated-enum-base" ]; @@ -129,7 +118,7 @@ qtModule { ''; qmakeFlags = [ "--" "-system-ffmpeg" ] - ++ lib.optional (pipewireSupport && (lib.versionAtLeast qtCompatVersion "5.15")) "-webengine-webrtc-pipewire" + ++ lib.optional pipewireSupport "-webengine-webrtc-pipewire" ++ lib.optional enableProprietaryCodecs "-proprietary-codecs"; propagatedBuildInputs = [ @@ -163,7 +152,7 @@ qtModule { xorg.xrandr libXScrnSaver libXcursor libXrandr xorg.libpciaccess libXtst xorg.libXcomposite xorg.libXdamage libdrm xorg.libxkbfile - ] ++ lib.optionals (pipewireSupport && (lib.versionAtLeast qtCompatVersion "5.15")) [ + ] ++ lib.optionals pipewireSupport [ # Pipewire pipewire_0_2 ] @@ -221,7 +210,7 @@ qtModule { [Paths] Prefix = .. EOF - '' + lib.optionalString (lib.versions.majorMinor qtCompatVersion == "5.15") '' + # Fix for out-of-sync QtWebEngine and Qt releases (since 5.15.3) sed 's/${lib.head (lib.splitString "-" version)} /${qtCompatVersion} /' -i "$out"/lib/cmake/*/*Config.cmake ''; @@ -249,10 +238,5 @@ qtModule { # This build takes a long time; particularly on slow architectures timeout = 24 * 3600; - # we are still stuck with MacOS SDK 10.12 on x86_64-darwin - # and qtwebengine 5.14+ requires at least SDK 10.14 - # (qtwebengine 5.12 is fine with SDK 10.12) - # on aarch64-darwin we are already at MacOS SDK 11.0 - broken = stdenv.isDarwin; }; } diff --git a/pkgs/development/libraries/qt-5/modules/qtwebkit.nix b/pkgs/development/libraries/qt-5/modules/qtwebkit.nix index 76f3481386f3..cc2644edd4e6 100644 --- a/pkgs/development/libraries/qt-5/modules/qtwebkit.nix +++ b/pkgs/development/libraries/qt-5/modules/qtwebkit.nix @@ -19,35 +19,21 @@ let ''; buildInputs = [ perl ]; }; - usingAnnulenWebkitFork = lib.versionAtLeast qtbase.version "5.11.0"; in qtModule { pname = "qtwebkit"; - qtInputs = [ qtbase qtdeclarative qtlocation qtsensors ] - ++ lib.optional (stdenv.isDarwin && lib.versionAtLeast qtbase.version "5.9.0") qtmultimedia - ++ lib.optional usingAnnulenWebkitFork qtwebchannel; - buildInputs = [ fontconfig libwebp libxml2 libxslt sqlite glib gst_all_1.gstreamer gst_all_1.gst-plugins-base ] - ++ lib.optionals stdenv.isDarwin [ ICU OpenGL ] - ++ lib.optional usingAnnulenWebkitFork hyphen; - nativeBuildInputs = [ - bison flex gdb gperf perl pkg-config python38 ruby - ] ++ lib.optional usingAnnulenWebkitFork cmake; + qtInputs = [ qtbase qtdeclarative qtlocation qtsensors qtwebchannel ] + ++ lib.optional stdenv.isDarwin qtmultimedia; + buildInputs = [ fontconfig libwebp libxml2 libxslt sqlite glib gst_all_1.gstreamer gst_all_1.gst-plugins-base hyphen ] + ++ lib.optionals stdenv.isDarwin [ ICU OpenGL ]; + nativeBuildInputs = [ bison flex gdb gperf perl pkg-config python38 ruby cmake ]; - cmakeFlags = lib.optionals usingAnnulenWebkitFork ([ "-DPORT=Qt" ] + cmakeFlags = [ "-DPORT=Qt" ] ++ lib.optionals stdenv.isDarwin [ "-DQt5Multimedia_DIR=${lib.getDev qtmultimedia}/lib/cmake/Qt5Multimedia" "-DQt5MultimediaWidgets_DIR=${lib.getDev qtmultimedia}/lib/cmake/Qt5MultimediaWidgets" "-DMACOS_FORCE_SYSTEM_XML_LIBRARIES=OFF" - ]); - - # QtWebKit overrides qmake's default_pre and default_post features, - # so its custom qmake files must be found first at the front of QMAKEPATH. - preConfigure = lib.optionalString (!usingAnnulenWebkitFork) '' - QMAKEPATH="$PWD/Tools/qmake''${QMAKEPATH:+:}$QMAKEPATH" - fixQtBuiltinPaths . '*.pr?' - # Fix hydra's "Log limit exceeded" - export qmakeFlags="$qmakeFlags CONFIG+=silent" - ''; + ]; NIX_CFLAGS_COMPILE = [ # with gcc7 this warning blows the log over Hydra's limit