diff --git a/doc/languages-frameworks/qt.xml b/doc/languages-frameworks/qt.xml index b9b605b81da1..032cdd9945b3 100644 --- a/doc/languages-frameworks/qt.xml +++ b/doc/languages-frameworks/qt.xml @@ -4,71 +4,173 @@ Qt - Qt is a comprehensive desktop and mobile application development toolkit for - C++. Legacy support is available for Qt 3 and Qt 4, but all current - development uses Qt 5. The Qt 5 packages in Nixpkgs are updated frequently to - take advantage of new features, but older versions are typically retained - until their support window ends. The most important consideration in - packaging Qt-based software is ensuring that each package and all its - dependencies use the same version of Qt 5; this consideration motivates most - of the tools described below. + This section describes the differences between Nix expressions for Qt + libraries and applications and Nix expressions for other C++ software. Some + knowledge of the latter is assumed. There are primarily two problems which + the Qt infrastructure is designed to address: ensuring consistent versioning + of all dependencies and finding dependencies at runtime. -
- Packaging Libraries for Nixpkgs + + Nix expression for a Qt package (<filename>default.nix</filename>) + +{ mkDerivation, lib, qtbase }: - - Whenever possible, libraries that use Qt 5 should be built with each - available version. Packages providing libraries should be added to the - top-level function mkLibsForQt5, which is used to build a - set of libraries for every Qt 5 version. A special - callPackage function is used in this scope to ensure that - the entire dependency tree uses the same Qt 5 version. Import dependencies - unqualified, i.e., qtbase not - qt5.qtbase. Do not import a package - set such as qt5 or libsForQt5. - +mkDerivation { + pname = "myapp"; + version = "1.0"; - - If a library does not support a particular version of Qt 5, it is best to - mark it as broken by setting its meta.broken attribute. A - package may be marked broken for certain versions by testing the - qtbase.version attribute, which will always give the - current Qt 5 version. - -
+ buildInputs = [ qtbase ]; +} + + -
- Packaging Applications for Nixpkgs + + + + Import mkDerivation and Qt (such as + qtbase modules directly. Do not + import Qt package sets; the Qt versions of dependencies may not be + coherent, causing build and runtime failures. + + + + + Use mkDerivation instead of + stdenv.mkDerivation. mkDerivation + is a wrapper around stdenv.mkDerivation which + applies some Qt-specific settings. + This deriver accepts the same arguments as + stdenv.mkDerivation; refer to + for details. + + + To use another deriver instead of + stdenv.mkDerivation, use + mkDerivationWith: + +mkDerivationWith myDeriver { + # ... +} + + If you cannot use mkDerivationWith, please refer to + . + + + + + mkDerivation accepts the same arguments as + stdenv.mkDerivation, such as + buildInputs. + + + - - Call your application expression using - libsForQt5.callPackage instead of - callPackage. Import dependencies unqualified, i.e., - qtbase not qt5.qtbase. Do - not import a package set such as qt5 or - libsForQt5. - + + Locating runtime dependencies + + Qt applications need to be wrapped to find runtime dependencies. If you + cannot use mkDerivation or + mkDerivationWith above, include + wrapQtAppsHook in nativeBuildInputs: + +stdenv.mkDerivation { + # ... - - Qt 5 maintains strict backward compatibility, so it is generally best to - build an application package against the latest version using the - libsForQt5 library set. In case a package does not build - with the latest Qt version, it is possible to pick a set pinned to a - particular version, e.g. libsForQt55 for Qt 5.5, if that - is the latest version the package supports. If a package must be pinned to - an older Qt version, be sure to file a bug upstream; because Qt is strictly - backwards-compatible, any incompatibility is by definition a bug in the - application. - + nativeBuildInputs = [ wrapQtAppsHook ]; +} + + + + + + Entries added to qtWrapperArgs are used to modify the + wrappers created by wrapQtAppsHook. The entries are + passed as arguments to . + +mkDerivation { + # ... + + qtWrapperArgs = [ ''--prefix PATH : /path/to/bin'' ]; +} + + + + + Set dontWrapQtApps to stop applications from being + wrapped automatically. It is required to wrap applications manually with + wrapQtApp, using the syntax of + : + +mkDerivation { + # ... + + dontWrapQtApps = true; + preFixup = '' + wrapQtApp "$out/bin/myapp" --prefix PATH : /path/to/bin + ''; +} + + + + + Libraries are built with every available version of Qt. Use the meta.broken + attribute to disable the package for unsupported Qt versions: + +mkDerivation { + # ... + + # Disable this library with Qt < 5.9.0 + meta.broken = builtins.compareVersions qtbase.version "5.9.0" < 0; +} + + + + + Adding a library to Nixpkgs + + Add a Qt library to all-packages.nix by adding it to the + collection inside mkLibsForQt5. This ensures that the + library is built with every available version of Qt as needed. + + Adding a Qt library to <filename>all-packages.nix</filename> + +{ + # ... + + mkLibsForQt5 = self: with self; { + # ... + + mylib = callPackage ../path/to/mylib {}; + }; + + # ... +} + + + + + + + Adding an application to Nixpkgs + + Add a Qt application to all-packages.nix using + libsForQt5.callPackage instead of the usual + callPackage. The former ensures that all dependencies + are built with the same version of Qt. + + Adding a Qt application to <filename>all-packages.nix</filename> + +{ + # ... + + myapp = libsForQt5.callPackage ../path/to/myapp/ {}; + + # ... +} + + + + - - When testing applications in Nixpkgs, it is a common practice to build the - package with nix-build and run it using the created - symbolic link. This will not work with Qt applications, however, because - they have many hard runtime requirements that can only be guaranteed if the - package is actually installed. To test a Qt application, install it with - nix-env or run it inside nix-shell. - -
diff --git a/nixos/modules/services/x11/desktop-managers/plasma5.nix b/nixos/modules/services/x11/desktop-managers/plasma5.nix index dc8bfc7dc172..4b7773c4c6d0 100644 --- a/nixos/modules/services/x11/desktop-managers/plasma5.nix +++ b/nixos/modules/services/x11/desktop-managers/plasma5.nix @@ -64,8 +64,8 @@ in }; security.wrappers = { - kcheckpass.source = "${lib.getBin plasma5.kscreenlocker}/lib/libexec/kcheckpass"; - "start_kdeinit".source = "${lib.getBin pkgs.kinit}/lib/libexec/kf5/start_kdeinit"; + kcheckpass.source = "${lib.getBin plasma5.kscreenlocker}/libexec/kcheckpass"; + "start_kdeinit".source = "${lib.getBin pkgs.kinit}/libexec/kf5/start_kdeinit"; kwin_wayland = { source = "${lib.getBin plasma5.kwin}/bin/kwin_wayland"; capabilities = "cap_sys_nice+ep"; diff --git a/pkgs/applications/altcoins/bitcoin.nix b/pkgs/applications/altcoins/bitcoin.nix index d1802f774f28..ce0a31dfe68b 100644 --- a/pkgs/applications/altcoins/bitcoin.nix +++ b/pkgs/applications/altcoins/bitcoin.nix @@ -1,5 +1,5 @@ { stdenv, fetchurl, pkgconfig, autoreconfHook, openssl, db48, boost, zeromq, rapidcheck -, zlib, miniupnpc, qtbase ? null, qttools ? null, utillinux, protobuf, python3, qrencode, libevent +, zlib, miniupnpc, qtbase ? null, qttools ? null, wrapQtAppsHook ? null, utillinux, protobuf, python3, qrencode, libevent , withGui }: with stdenv.lib; @@ -14,7 +14,9 @@ stdenv.mkDerivation rec{ sha256 = "5e4e6890e07b620a93fdb24605dae2bb53e8435b2a93d37558e1db1913df405f"; }; - nativeBuildInputs = [ pkgconfig autoreconfHook ]; + nativeBuildInputs = + [ pkgconfig autoreconfHook ] + ++ optional withGui wrapQtAppsHook; buildInputs = [ openssl db48 boost zlib zeromq miniupnpc protobuf libevent] ++ optionals stdenv.isLinux [ utillinux ] @@ -34,10 +36,11 @@ stdenv.mkDerivation rec{ doCheck = true; - # QT_PLUGIN_PATH needs to be set when executing QT, which is needed when testing Bitcoin's GUI. - # See also https://github.com/NixOS/nixpkgs/issues/24256 - checkFlags = optionals withGui [ "QT_PLUGIN_PATH=${qtbase}/lib/qt-5.${versions.minor qtbase.version}/plugins" ] - ++ [ "LC_ALL=C.UTF-8" ]; + checkFlags = + [ "LC_ALL=C.UTF-8" ] + # QT_PLUGIN_PATH needs to be set when executing QT, which is needed when testing Bitcoin's GUI. + # See also https://github.com/NixOS/nixpkgs/issues/24256 + ++ optional withGui "QT_PLUGIN_PATH=${qtbase}/${qtbase.qtPluginPrefix}"; enableParallelBuilding = true; diff --git a/pkgs/applications/altcoins/monero-gui/default.nix b/pkgs/applications/altcoins/monero-gui/default.nix index f597d6b6527c..986dd2b9e5d7 100644 --- a/pkgs/applications/altcoins/monero-gui/default.nix +++ b/pkgs/applications/altcoins/monero-gui/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchFromGitHub -, makeWrapper, makeDesktopItem +, wrapQtAppsHook, makeDesktopItem , qtbase, qmake, qtmultimedia, qttools , qtgraphicaleffects, qtdeclarative , qtlocation, qtquickcontrols, qtquickcontrols2 @@ -34,7 +34,7 @@ stdenv.mkDerivation rec { sha256 = "1l4kx2vidr7bpds43jdbwyaz0q1dy7sricpz061ff1fkappbxdh8"; }; - nativeBuildInputs = [ qmake pkgconfig ]; + nativeBuildInputs = [ qmake pkgconfig wrapQtAppsHook ]; buildInputs = [ qtbase qtmultimedia qtgraphicaleffects @@ -43,7 +43,7 @@ stdenv.mkDerivation rec { qtwebchannel qtwebengine qtx11extras qtxmlpatterns monero unbound readline boost libunwind libsodium pcsclite zeromq - cppzmq makeWrapper hidapi + cppzmq hidapi ]; patches = [ @@ -94,11 +94,6 @@ stdenv.mkDerivation rec { cp $src/images/appicons/$size.png \ $out/share/icons/hicolor/$size/apps/monero.png done; - - # wrap runtime dependencies - wrapProgram $out/bin/monero-wallet-gui \ - --set QML2_IMPORT_PATH "${qml2ImportPath}" \ - --set QT_PLUGIN_PATH "${qtbase.bin}/${qtbase.qtPluginPrefix}" ''; meta = { diff --git a/pkgs/applications/audio/carla/default.nix b/pkgs/applications/audio/carla/default.nix index 6e623a69919d..98a4ddd29d6e 100644 --- a/pkgs/applications/audio/carla/default.nix +++ b/pkgs/applications/audio/carla/default.nix @@ -1,7 +1,7 @@ { stdenv, fetchFromGitHub, alsaLib, file, fluidsynth, ffmpeg, jack2, liblo, libpulseaudio, libsndfile, pkgconfig, python3Packages, which, withFrontend ? true, - withQt ? true, qtbase ? null, + withQt ? true, qtbase ? null, wrapQtAppsHook ? null, withGtk2 ? true, gtk2 ? null, withGtk3 ? true, gtk3 ? null }: @@ -9,6 +9,7 @@ with stdenv.lib; assert withFrontend -> python3Packages ? pyqt5; assert withQt -> qtbase != null; +assert withQt -> wrapQtAppsHook != null; assert withGtk2 -> gtk2 != null; assert withGtk3 -> gtk3 != null; @@ -23,7 +24,9 @@ stdenv.mkDerivation rec { sha256 = "0fqgncqlr86n38yy7pa118mswfacmfczj7w9xx6c6k0jav3wk29k"; }; - nativeBuildInputs = [ python3Packages.wrapPython pkgconfig which ]; + nativeBuildInputs = [ + python3Packages.wrapPython pkgconfig which wrapQtAppsHook + ]; pythonPath = with python3Packages; [ rdflib pyliblo @@ -38,6 +41,7 @@ stdenv.mkDerivation rec { installFlags = [ "PREFIX=$(out)" ]; + dontWrapQtApps = true; postFixup = '' # Also sets program_PYTHONPATH and program_PATH variables wrapPythonPrograms @@ -48,10 +52,9 @@ stdenv.mkDerivation rec { patchPythonScript "$out/share/carla/carla_settings.py" for program in $out/bin/*; do - wrapProgram "$program" \ + wrapQtApp "$program" \ --prefix PATH : "$program_PATH:${which}/bin" \ - --set PYTHONNOUSERSITE true \ - --prefix QT_PLUGIN_PATH : "${qtbase.bin}/${qtbase.qtPluginPrefix}" + --set PYTHONNOUSERSITE true done ''; diff --git a/pkgs/applications/audio/kid3/default.nix b/pkgs/applications/audio/kid3/default.nix index b4406dab70eb..04d0349c88f6 100644 --- a/pkgs/applications/audio/kid3/default.nix +++ b/pkgs/applications/audio/kid3/default.nix @@ -3,7 +3,7 @@ , chromaprint, docbook_xml_dtd_45, docbook_xsl, libxslt , id3lib, taglib, mp4v2, flac, libogg, libvorbis , zlib, readline , qtbase, qttools, qtmultimedia, qtquickcontrols -, makeWrapper +, wrapQtAppsHook }: stdenv.mkDerivation rec { @@ -16,11 +16,12 @@ stdenv.mkDerivation rec { sha256 = "0xkrsjrbr3z8cn8hjf623l28r3b755gr11i0clv8d8i3s10vhbd8"; }; + nativeBuildInputs = [ wrapQtAppsHook ]; buildInputs = with stdenv.lib; [ pkgconfig cmake python ffmpeg phonon automoc4 chromaprint docbook_xml_dtd_45 docbook_xsl libxslt id3lib taglib mp4v2 flac libogg libvorbis zlib readline - qtbase qttools qtmultimedia qtquickcontrols makeWrapper ]; + qtbase qttools qtmultimedia qtquickcontrols ]; cmakeFlags = [ "-DWITH_APPS=Qt;CLI" ]; NIX_LDFLAGS = "-lm -lpthread"; @@ -29,10 +30,6 @@ stdenv.mkDerivation rec { export DOCBOOKDIR="${docbook_xsl}/xml/xsl/docbook/" ''; - postInstall = '' - wrapProgram $out/bin/kid3-qt --prefix QT_PLUGIN_PATH : $out/lib/qt5/plugins - ''; - enableParallelBuilding = true; meta = with stdenv.lib; { diff --git a/pkgs/applications/editors/kdevelop5/kdevelop.nix b/pkgs/applications/editors/kdevelop5/kdevelop.nix index 23ec887ad621..c17239d4fd91 100644 --- a/pkgs/applications/editors/kdevelop5/kdevelop.nix +++ b/pkgs/applications/editors/kdevelop5/kdevelop.nix @@ -43,6 +43,8 @@ mkDerivation rec { "-DCLANG_BUILTIN_DIR=${llvmPackages.clang-unwrapped}/lib/clang/${(builtins.parseDrvName llvmPackages.clang.name).version}/include" ]; + dontWrapQtApps = true; + postPatch = '' # FIXME: temporary until https://invent.kde.org/kde/kdevelop/merge_requests/8 is merged substituteInPlace kdevplatform/language/backgroundparser/parsejob.cpp --replace \ @@ -55,8 +57,7 @@ mkDerivation rec { wrapProgram "$out/bin/kdevelop!" \ --prefix PATH ":" "${lib.makeBinPath [ qttools kde-cli-tools ]}" - wrapProgram "$out/bin/kdevelop" \ - --prefix QT_PLUGIN_PATH : $out/lib/qt-${qtVersion}/plugins + wrapQtApp "$out/bin/kdevelop" # Fix the (now wrapped) kdevelop! to find things in right places: # - Fixup the one use where KDEV_BASEDIR is assumed to contain kdevelop. diff --git a/pkgs/applications/gis/openorienteering-mapper/default.nix b/pkgs/applications/gis/openorienteering-mapper/default.nix index a5a0492ab876..063e997fec19 100644 --- a/pkgs/applications/gis/openorienteering-mapper/default.nix +++ b/pkgs/applications/gis/openorienteering-mapper/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchFromGitHub, gdal, cmake, ninja, proj, clipper, zlib, qtbase, qttools - , qtlocation, qtsensors, doxygen, cups, makeWrapper, qtimageformats +, qtlocation, qtsensors, doxygen, cups, wrapQtAppsHook, qtimageformats }: stdenv.mkDerivation rec { @@ -9,7 +9,7 @@ stdenv.mkDerivation rec { buildInputs = [ gdal qtbase qttools qtlocation qtimageformats qtsensors clipper zlib proj doxygen cups]; - nativeBuildInputs = [ cmake makeWrapper ninja ]; + nativeBuildInputs = [ cmake wrapQtAppsHook ninja ]; src = fetchFromGitHub { owner = "OpenOrienteering"; @@ -48,9 +48,7 @@ stdenv.mkDerivation rec { stdenv.lib.optionalString stdenv.isDarwin '' # Fixes "This application failed to start because it could not find or load the Qt # platform plugin "cocoa"." - wrapProgram $out/Mapper.app/Contents/MacOS/Mapper \ - --set QT_QPA_PLATFORM_PLUGIN_PATH ${qtbase.bin}/lib/qt-*/plugins/platforms \ - --set QT_PLUGIN_PATH ${qtbase.bin}/${qtbase.qtPluginPrefix}:${qtimageformats}/${qtbase.qtPluginPrefix} + wrapQtApp $out/Mapper.app/Contents/MacOS/Mapper mkdir -p $out/bin ln -s $out/Mapper.app/Contents/MacOS/Mapper $out/bin/mapper ''; diff --git a/pkgs/applications/graphics/ktikz/default.nix b/pkgs/applications/graphics/ktikz/default.nix index c53c70888b2c..4ddc2074f2f4 100644 --- a/pkgs/applications/graphics/ktikz/default.nix +++ b/pkgs/applications/graphics/ktikz/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchFromGitHub, fetchpatch -, pkgconfig, makeWrapper +, pkgconfig, wrapQtAppsHook , poppler, qt5, gnuplot }: @@ -36,9 +36,9 @@ stdenv.mkDerivation rec { }) ]; + nativeBuildInputs = [ pkgconfig qt5.qttools qt5.qmake wrapQtAppsHook ]; QT_PLUGIN_PATH = "${qt5.qtbase}/${qt5.qtbase.qtPluginPrefix}"; - nativeBuildInputs = [ pkgconfig qt5.qttools qt5.qmake makeWrapper ]; buildInputs = [ qt5.qtbase poppler ]; enableParallelBuilding = true; @@ -50,9 +50,5 @@ stdenv.mkDerivation rec { "QCOLLECTIONGENERATORCOMMAND=qhelpgenerator" ]; - postFixup = '' - wrapProgram "$out/bin/qtikz" \ - --prefix QT_PLUGIN_PATH : "${qt5.qtbase}/${qt5.qtbase.qtPluginPrefix}" \ - --prefix PATH : "${gnuplot}/bin" - ''; + qtWrapperArgs = [ ''--prefix PATH : "${gnuplot}/bin"'' ]; } diff --git a/pkgs/applications/kde/ark/default.nix b/pkgs/applications/kde/ark/default.nix index 598857f2e70d..6015cb69d778 100644 --- a/pkgs/applications/kde/ark/default.nix +++ b/pkgs/applications/kde/ark/default.nix @@ -1,37 +1,39 @@ { - mkDerivation, lib, makeWrapper, + mkDerivation, lib, config, extra-cmake-modules, kdoctools, - karchive, kconfig, kcrash, kdbusaddons, ki18n, kiconthemes, kitemmodels, - khtml, kio, kparts, kpty, kservice, kwidgetsaddons, libarchive, + breeze-icons, karchive, kconfig, kcrash, kdbusaddons, ki18n, + kiconthemes, kitemmodels, khtml, kio, kparts, kpty, kservice, kwidgetsaddons, + + libarchive, libzip, # Archive tools - p7zip, unzip, zip, + p7zip, lrzip, # Unfree tools unfreeEnableUnrar ? false, unrar, }: +let + extraTools = [ p7zip lrzip ] ++ lib.optional unfreeEnableUnrar unrar; +in + mkDerivation { name = "ark"; - nativeBuildInputs = [ extra-cmake-modules kdoctools makeWrapper ]; - propagatedBuildInputs = [ - karchive kconfig kcrash kdbusaddons khtml ki18n kiconthemes kio kitemmodels - kparts kpty kservice kwidgetsaddons libarchive - ]; - outputs = [ "out" "dev" ]; - postFixup = - let - PATH = - lib.makeBinPath - ([ p7zip unzip zip ] ++ lib.optional unfreeEnableUnrar unrar); - in '' - wrapProgram "$out/bin/ark" --prefix PATH : "${PATH}" - ''; meta = { license = with lib.licenses; [ gpl2 lgpl3 ] ++ lib.optional unfreeEnableUnrar unfree; maintainers = [ lib.maintainers.ttuegel ]; }; + + outputs = [ "out" "dev" ]; + nativeBuildInputs = [ extra-cmake-modules kdoctools ]; + buildInputs = [ libarchive libzip ] ++ extraTools; + propagatedBuildInputs = [ + breeze-icons karchive kconfig kcrash kdbusaddons khtml ki18n kiconthemes kio + kitemmodels kparts kpty kservice kwidgetsaddons + ]; + + qtWrapperArgs = [ "--prefix" "PATH" ":" (lib.makeBinPath extraTools) ]; } diff --git a/pkgs/applications/kde/okular.nix b/pkgs/applications/kde/okular.nix index 39fb232b3421..377fbe3339a7 100644 --- a/pkgs/applications/kde/okular.nix +++ b/pkgs/applications/kde/okular.nix @@ -1,18 +1,18 @@ { stdenv, mkDerivation, lib, extra-cmake-modules, kdoctools, - chmlib ? null, discount, djvulibre, ebook_tools, kactivities, karchive, kbookmarks, - kcompletion, kconfig, kconfigwidgets, kcoreaddons, kdbusaddons, - kdegraphics-mobipocket, kiconthemes, kjs, khtml, kio, kparts, kpty, kwallet, - kwindowsystem, libkexiv2, libspectre, libzip, phonon, poppler, qca-qt5, - qtdeclarative, qtsvg, threadweaver, kcrash + breeze-icons, chmlib ? null, discount, djvulibre, ebook_tools, kactivities, + karchive, kbookmarks, kcompletion, kconfig, kconfigwidgets, kcoreaddons, + kdbusaddons, kdegraphics-mobipocket, kiconthemes, kjs, khtml, kio, kparts, + kpty, kwallet, kwindowsystem, libkexiv2, libspectre, libzip, phonon, poppler, + qca-qt5, qtdeclarative, qtsvg, threadweaver, kcrash }: mkDerivation { name = "okular"; nativeBuildInputs = [ extra-cmake-modules kdoctools ]; buildInputs = [ - discount djvulibre ebook_tools kactivities karchive kbookmarks + breeze-icons discount djvulibre ebook_tools kactivities karchive kbookmarks kcompletion kconfig kconfigwidgets kcoreaddons kdbusaddons kdegraphics-mobipocket kiconthemes kjs khtml kio kparts kpty kwallet kwindowsystem libkexiv2 libspectre libzip phonon poppler qca-qt5 diff --git a/pkgs/applications/misc/albert/default.nix b/pkgs/applications/misc/albert/default.nix index 2dda615081c0..6fc5f9514651 100644 --- a/pkgs/applications/misc/albert/default.nix +++ b/pkgs/applications/misc/albert/default.nix @@ -37,11 +37,6 @@ mkDerivation rec { rm "$out/lib" ''; - postInstall = '' - wrapProgram $out/bin/albert \ - --prefix XDG_DATA_DIRS : $out/share - ''; - meta = with lib; { homepage = https://albertlauncher.github.io/; description = "Desktop agnostic launcher"; diff --git a/pkgs/applications/misc/electron-cash/default.nix b/pkgs/applications/misc/electron-cash/default.nix index cc7b9cf27c2a..9607f428ab9e 100644 --- a/pkgs/applications/misc/electron-cash/default.nix +++ b/pkgs/applications/misc/electron-cash/default.nix @@ -1,4 +1,4 @@ -{ lib, fetchurl, python3Packages, qtbase, makeWrapper }: +{ lib, fetchurl, python3Packages, qtbase, wrapQtAppsHook }: python3Packages.buildPythonApplication rec { pname = "electron-cash"; @@ -32,7 +32,7 @@ python3Packages.buildPythonApplication rec { btchip ]; - nativeBuildInputs = [ makeWrapper ]; + nativeBuildInputs = [ wrapQtAppsHook ]; postPatch = '' substituteInPlace contrib/requirements/requirements.txt \ @@ -54,10 +54,6 @@ python3Packages.buildPythonApplication rec { postInstall = '' substituteInPlace $out/share/applications/electron-cash.desktop \ --replace "Exec=electron-cash" "Exec=$out/bin/electron-cash" - - # Please remove this when #44047 is fixed - wrapProgram $out/bin/electron-cash \ - --prefix QT_PLUGIN_PATH : ${qtbase}/lib/qt-5.${lib.versions.minor qtbase.version}/plugins ''; doInstallCheck = true; diff --git a/pkgs/applications/misc/keepassx/community.nix b/pkgs/applications/misc/keepassx/community.nix index b52cff784e5f..7a154e85a6e7 100644 --- a/pkgs/applications/misc/keepassx/community.nix +++ b/pkgs/applications/misc/keepassx/community.nix @@ -17,6 +17,7 @@ , qtsvg , qtx11extras , quazip +, wrapQtAppsHook , yubikey-personalization , zlib @@ -73,12 +74,11 @@ stdenv.mkDerivation rec { doCheck = true; checkPhase = '' export LC_ALL="en_US.UTF-8" - export QT_PLUGIN_PATH="${qtbase.bin}/${qtbase.qtPluginPrefix}" export QT_QPA_PLATFORM=offscreen make test ARGS+="-E testgui --output-on-failure" ''; - nativeBuildInputs = [ cmake makeWrapper qttools ]; + nativeBuildInputs = [ cmake wrapQtAppsHook qttools ]; buildInputs = [ curl @@ -102,10 +102,9 @@ stdenv.mkDerivation rec { ++ stdenv.lib.optional withKeePassKeeShareSecure quazip ++ stdenv.lib.optional stdenv.isDarwin qtmacextras; - postInstall = optionalString stdenv.isDarwin '' + preFixup = optionalString stdenv.isDarwin '' # Make it work without Qt in PATH. - wrapProgram $out/Applications/KeePassXC.app/Contents/MacOS/KeePassXC \ - --set QT_PLUGIN_PATH ${qtbase.bin}/${qtbase.qtPluginPrefix} + wrapQtApp $out/Applications/KeePassXC.app/Contents/MacOS/KeePassXC ''; meta = { diff --git a/pkgs/applications/misc/masterpdfeditor/default.nix b/pkgs/applications/misc/masterpdfeditor/default.nix index 7acebfad488b..eb0e61ba6d73 100644 --- a/pkgs/applications/misc/masterpdfeditor/default.nix +++ b/pkgs/applications/misc/masterpdfeditor/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, sane-backends, qtbase, qtsvg, nss, autoPatchelfHook, lib, makeWrapper }: +{ stdenv, fetchurl, sane-backends, qtbase, qtsvg, nss, autoPatchelfHook, lib, wrapQtAppsHook }: let version = "5.4.10"; @@ -11,17 +11,12 @@ in stdenv.mkDerivation { sha256 = "1902ahb2g9xanrip1n0ihr31az8sv9fsvzddnzf70kbwlfclnqf7"; }; - nativeBuildInputs = [ autoPatchelfHook makeWrapper ]; + nativeBuildInputs = [ autoPatchelfHook wrapQtAppsHook ]; buildInputs = [ nss qtbase qtsvg sane-backends stdenv.cc.cc ]; dontStrip = true; - # Please remove this when #44047 is fixed - postInstall = '' - wrapProgram $out/bin/masterpdfeditor5 --prefix QT_PLUGIN_PATH : ${lib.getBin qtbase}/${qtbase.qtPluginPrefix} - ''; - installPhase = '' runHook preInstall diff --git a/pkgs/applications/misc/subsurface/default.nix b/pkgs/applications/misc/subsurface/default.nix index 50bb1df2eef2..7bac1db813f4 100644 --- a/pkgs/applications/misc/subsurface/default.nix +++ b/pkgs/applications/misc/subsurface/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, fetchFromGitHub, autoreconfHook, cmake, makeWrapper, pkgconfig, qmake +{ stdenv, fetchurl, fetchFromGitHub, autoreconfHook, cmake, wrapQtAppsHook, pkgconfig, qmake , curl, grantlee, libgit2, libusb, libssh2, libxml2, libxslt, libzip, zlib , qtbase, qtconnectivity, qtlocation, qtsvg, qttools, qtwebkit, libXcomposite }: @@ -79,18 +79,13 @@ in stdenv.mkDerivation rec { qtbase qtconnectivity qtsvg qttools qtwebkit ]; - nativeBuildInputs = [ cmake makeWrapper pkgconfig ]; + nativeBuildInputs = [ cmake wrapQtAppsHook pkgconfig ]; cmakeFlags = [ "-DLIBDC_FROM_PKGCONFIG=ON" "-DNO_PRINTING=OFF" ]; - postInstall = '' - wrapProgram $out/bin/subsurface \ - --prefix QT_PLUGIN_PATH : "${googlemaps}/${googlemaps.pluginsSubdir}" - ''; - enableParallelBuilding = true; passthru = { inherit version libdc googlemaps; }; diff --git a/pkgs/applications/misc/xpdf/default.nix b/pkgs/applications/misc/xpdf/default.nix index eb76448391e3..d524482dee70 100644 --- a/pkgs/applications/misc/xpdf/default.nix +++ b/pkgs/applications/misc/xpdf/default.nix @@ -1,6 +1,6 @@ { enableGUI ? true, enablePDFtoPPM ? true, useT1Lib ? false , stdenv, fetchurl, zlib, libpng, freetype ? null, t1lib ? null -, cmake, qtbase ? null, qtsvg ? null, makeWrapper +, cmake, qtbase ? null, qtsvg ? null, wrapQtAppsHook }: assert enableGUI -> qtbase != null && qtsvg != null && freetype != null; @@ -22,7 +22,9 @@ stdenv.mkDerivation { # https://cmake.org/cmake/help/v3.10/command/cmake_minimum_required.html patches = stdenv.lib.optional stdenv.isDarwin ./cmake_version.patch; - nativeBuildInputs = [ cmake makeWrapper ]; + nativeBuildInputs = + [ cmake ] + ++ stdenv.lib.optional enableGUI wrapQtAppsHook; cmakeFlags = ["-DSYSTEM_XPDFRC=/etc/xpdfrc" "-DA4_PAPER=ON"]; @@ -36,11 +38,6 @@ stdenv.mkDerivation { hardeningDisable = [ "format" ]; - postInstall = stdenv.lib.optionalString (stdenv.isDarwin && enableGUI) '' - wrapProgram $out/bin/xpdf \ - --set QT_PLUGIN_PATH ${qtbase.bin}/${qtbase.qtPluginPrefix}:${qtsvg.bin}/${qtbase.qtPluginPrefix} - ''; - meta = with stdenv.lib; { homepage = https://www.xpdfreader.com; description = "Viewer for Portable Document Format (PDF) files"; diff --git a/pkgs/applications/networking/browsers/qtchan/default.nix b/pkgs/applications/networking/browsers/qtchan/default.nix index df956addf5cc..1519c382ebb5 100644 --- a/pkgs/applications/networking/browsers/qtchan/default.nix +++ b/pkgs/applications/networking/browsers/qtchan/default.nix @@ -19,7 +19,7 @@ stdenv.mkDerivation rec { ]; enableParallelBuilding = true; - nativeBuildInputs = [ qt.qmake makeWrapper ]; + nativeBuildInputs = [ qt.qmake qt.wrapQtAppsHook ]; buildInputs = [ qt.qtbase ]; qmakeFlags = [ "CONFIG-=app_bundle" ]; @@ -29,11 +29,6 @@ stdenv.mkDerivation rec { cp qtchan $out/bin ''; - preFixup = '' - wrapProgram $out/bin/qtchan \ - --suffix QT_PLUGIN_PATH : ${qt.qtbase.bin}/${qt.qtbase.qtPluginPrefix} - ''; - meta = with stdenv.lib; { description = "4chan browser in qt5"; homepage = "https://github.com/siavash119/qtchan"; diff --git a/pkgs/applications/networking/instant-messengers/telegram/tdesktop/generic.nix b/pkgs/applications/networking/instant-messengers/telegram/tdesktop/generic.nix index 8276e839940f..0ae8d0bd3d68 100644 --- a/pkgs/applications/networking/instant-messengers/telegram/tdesktop/generic.nix +++ b/pkgs/applications/networking/instant-messengers/telegram/tdesktop/generic.nix @@ -1,7 +1,7 @@ { stable, version, sha256Hash, archPatchesRevision, archPatchesHash }: { mkDerivation, lib, fetchFromGitHub, fetchsvn -, pkgconfig, pythonPackages, cmake, wrapGAppsHook, gcc8 +, pkgconfig, pythonPackages, cmake, wrapGAppsHook, wrapQtAppsHook, gcc8 , qtbase, qtimageformats, gtk3, libappindicator-gtk3, libnotify, xdg_utils , dee, ffmpeg, openalSoft, minizip, libopus, alsaLib, libpulseaudio, range-v3 }: @@ -39,7 +39,7 @@ mkDerivation rec { --replace '"notify"' '"${libnotify}/lib/libnotify.so"' ''; - nativeBuildInputs = [ pkgconfig pythonPackages.gyp cmake wrapGAppsHook gcc8 ]; + nativeBuildInputs = [ pkgconfig pythonPackages.gyp cmake wrapGAppsHook wrapQtAppsHook gcc8 ]; # We want to run wrapProgram manually (with additional parameters) dontWrapGApps = true; @@ -129,12 +129,13 @@ mkDerivation rec { done ''; + dontWrapQtApps = true; postFixup = '' # This is necessary to run Telegram in a pure environment. # We also use gappsWrapperArgs from wrapGAppsHook. wrapProgram $out/bin/telegram-desktop \ "''${gappsWrapperArgs[@]}" \ - --prefix QT_PLUGIN_PATH : "${qtbase}/${qtbase.qtPluginPrefix}" \ + "''${qtWrapperArgs[@]}" \ --prefix PATH : ${xdg_utils}/bin \ --set XDG_RUNTIME_DIR "XDG-RUNTIME-DIR" sed -i $out/bin/telegram-desktop \ diff --git a/pkgs/applications/networking/linssid/default.nix b/pkgs/applications/networking/linssid/default.nix index be010c471790..14ee8095247e 100644 --- a/pkgs/applications/networking/linssid/default.nix +++ b/pkgs/applications/networking/linssid/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, qtbase, qtsvg, qmake, pkgconfig, boost, wirelesstools, iw, qwt, makeWrapper }: +{ stdenv, fetchurl, qtbase, qtsvg, qmake, pkgconfig, boost, wirelesstools, iw, qwt, wrapQtAppsHook }: stdenv.mkDerivation rec { name = "linssid-${version}"; @@ -9,7 +9,7 @@ stdenv.mkDerivation rec { sha256 = "13d35rlcjncd8lx3khkgn9x8is2xjd5fp6ns5xsn3w6l4xj9b4gl"; }; - nativeBuildInputs = [ pkgconfig qmake makeWrapper ]; + nativeBuildInputs = [ pkgconfig qmake wrapQtAppsHook ]; buildInputs = [ qtbase qtsvg boost qwt ]; patches = [ ./0001-unbundled-qwt.patch ]; @@ -26,11 +26,8 @@ stdenv.mkDerivation rec { rm -fr qwt-lib ''; - postInstall = '' - wrapProgram $out/bin/linssid \ - --prefix QT_PLUGIN_PATH : ${qtbase}/${qtbase.qtPluginPrefix} \ - --prefix PATH : ${stdenv.lib.makeBinPath [ wirelesstools iw ]} - ''; + qtWrapperArgs = + [ ''--prefix PATH : ${stdenv.lib.makeBinPath [ wirelesstools iw ]}'' ]; meta = with stdenv.lib; { description = "Graphical wireless scanning for Linux"; diff --git a/pkgs/applications/networking/mumble/default.nix b/pkgs/applications/networking/mumble/default.nix index 321493682302..56e98e880f7a 100644 --- a/pkgs/applications/networking/mumble/default.nix +++ b/pkgs/applications/networking/mumble/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, fetchFromGitHub, fetchpatch, makeWrapper, pkgconfig +{ stdenv, fetchurl, fetchFromGitHub, fetchpatch, pkgconfig , qt4, qmake4Hook, qt5, avahi, boost, libopus, libsndfile, protobuf3_6, speex, libcap , alsaLib, python , jackSupport ? false, libjack2 ? null @@ -158,11 +158,6 @@ in { murmur_git = (server gitSource).overrideAttrs (old: { meta = old.meta // { broken = iceSupport; }; - nativeBuildInputs = old.nativeBuildInputs or [] ++ [ makeWrapper ]; - - installPhase = old.installPhase or "" + '' - wrapProgram $out/bin/murmurd --suffix QT_PLUGIN_PATH : \ - ${getBin qt5.qtbase}/${qt5.qtbase.qtPluginPrefix} - ''; + nativeBuildInputs = old.nativeBuildInputs or [] ++ [ qt5.wrapQtAppsHook ]; }); } diff --git a/pkgs/applications/networking/newsreaders/quiterss/default.nix b/pkgs/applications/networking/newsreaders/quiterss/default.nix index b0bc5edba844..898b7706bd61 100644 --- a/pkgs/applications/networking/newsreaders/quiterss/default.nix +++ b/pkgs/applications/networking/newsreaders/quiterss/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchFromGitHub, qmake, pkgconfig, makeWrapper +{ stdenv, fetchFromGitHub, qmake, pkgconfig, wrapQtAppsHook , qtbase, qttools, qtwebkit, sqlite }: @@ -13,14 +13,9 @@ stdenv.mkDerivation rec { sha256 = "0xav9qr8n6310636nfbgx4iix65fs3ya5rz2isxsf38bkjm7r3pa"; }; - nativeBuildInputs = [ qmake pkgconfig makeWrapper ]; + nativeBuildInputs = [ qmake pkgconfig wrapQtAppsHook ]; buildInputs = [ qtbase qttools qtwebkit sqlite.dev ]; - postFixup = '' - wrapProgram $out/bin/quiterss \ - --prefix QT_PLUGIN_PATH : "${qtbase}/${qtbase.qtPluginPrefix}" - ''; - meta = with stdenv.lib; { description = "A Qt-based RSS/Atom news feed reader"; longDescription = '' diff --git a/pkgs/applications/networking/nextcloud-client/default.nix b/pkgs/applications/networking/nextcloud-client/default.nix index 7aa7d88149fe..37eb248fb486 100644 --- a/pkgs/applications/networking/nextcloud-client/default.nix +++ b/pkgs/applications/networking/nextcloud-client/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchgit, cmake, pkgconfig, qtbase, qtwebkit, qtkeychain, qttools, sqlite -, inotify-tools, makeWrapper, openssl_1_1, pcre, qtwebengine, libsecret +, inotify-tools, wrapQtAppsHook, openssl_1_1, pcre, qtwebengine, libsecret , libcloudproviders }: @@ -14,7 +14,7 @@ stdenv.mkDerivation rec { fetchSubmodules = true; }; - nativeBuildInputs = [ pkgconfig cmake makeWrapper ]; + nativeBuildInputs = [ pkgconfig cmake wrapQtAppsHook ]; buildInputs = [ qtbase qtwebkit qtkeychain qttools qtwebengine sqlite openssl_1_1.out pcre inotify-tools libcloudproviders ]; @@ -31,13 +31,13 @@ stdenv.mkDerivation rec { "-DINOTIFY_INCLUDE_DIR=${inotify-tools}/include" ]; + qtWrapperArgs = [ + ''--prefix LD_LIBRARY_PATH : ${stdenv.lib.makeLibraryPath [ libsecret ]}'' + ]; + postInstall = '' sed -i 's/\(Icon.*\)=nextcloud/\1=Nextcloud/g' \ $out/share/applications/nextcloud.desktop - - wrapProgram "$out/bin/nextcloud" \ - --prefix LD_LIBRARY_PATH : ${stdenv.lib.makeLibraryPath [ libsecret ]} \ - --prefix QT_PLUGIN_PATH : ${qtbase}/${qtbase.qtPluginPrefix} ''; meta = with stdenv.lib; { diff --git a/pkgs/applications/networking/protonmail-bridge/default.nix b/pkgs/applications/networking/protonmail-bridge/default.nix index 2870f3158fb6..807b8116b46f 100644 --- a/pkgs/applications/networking/protonmail-bridge/default.nix +++ b/pkgs/applications/networking/protonmail-bridge/default.nix @@ -1,5 +1,5 @@ -{ stdenv, fetchurl, lib, qtbase, qtmultimedia, qtsvg, qtdeclarative, qttools, full, - libsecret, libGL, libpulseaudio, glib, makeWrapper, makeDesktopItem }: +{ stdenv, fetchurl, lib, qtbase, qtmultimedia, qtsvg, qtdeclarative, qttools, full +, libsecret, libGL, libpulseaudio, glib, wrapQtAppsHook, makeDesktopItem }: let version = "1.1.5-1"; @@ -28,7 +28,7 @@ in stdenv.mkDerivation rec { sha256 = "1y5mphrs60zd6km9z64vskk70q9zzw4g6js7qvgl572wv81w2l75"; }; - nativeBuildInputs = [ makeWrapper ]; + nativeBuildInputs = [ wrapQtAppsHook ]; sourceRoot = "."; @@ -60,18 +60,11 @@ in stdenv.mkDerivation rec { libpulseaudio glib ]; - - qtPath = prefix: "${full}/${prefix}"; in '' patchelf \ --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ --set-rpath "${rpath}" \ $out/lib/protonmail-bridge - - wrapProgram $out/lib/protonmail-bridge \ - --set QT_PLUGIN_PATH "${qtPath qtbase.qtPluginPrefix}" \ - --set QML_IMPORT_PATH "${qtPath qtbase.qtQmlPrefix}" \ - --set QML2_IMPORT_PATH "${qtPath qtbase.qtQmlPrefix}" \ ''; meta = with stdenv.lib; { diff --git a/pkgs/applications/networking/sniffers/wireshark/default.nix b/pkgs/applications/networking/sniffers/wireshark/default.nix index 401e49648013..ac9fa8f4ce88 100644 --- a/pkgs/applications/networking/sniffers/wireshark/default.nix +++ b/pkgs/applications/networking/sniffers/wireshark/default.nix @@ -30,7 +30,7 @@ in stdenv.mkDerivation { nativeBuildInputs = [ bison cmake extra-cmake-modules flex pkgconfig - ]; + ] ++ optional withQt qt5.wrapQtAppsHook; buildInputs = [ gettext pcre perl libpcap lua5 libssh nghttp2 openssl libgcrypt @@ -70,12 +70,9 @@ in stdenv.mkDerivation { done done - wrapProgram $out/Applications/Wireshark.app/Contents/MacOS/Wireshark \ - --set QT_PLUGIN_PATH ${qt5.qtbase.bin}/${qt5.qtbase.qtPluginPrefix} + wrapQtApp $out/Applications/Wireshark.app/Contents/MacOS/Wireshark '' else optionalString withQt '' install -Dm644 -t $out/share/applications ../wireshark.desktop - wrapProgram $out/bin/wireshark \ - --set QT_PLUGIN_PATH ${qt5.qtbase.bin}/${qt5.qtbase.qtPluginPrefix} substituteInPlace $out/share/applications/*.desktop \ --replace "Exec=wireshark" "Exec=$out/bin/wireshark" diff --git a/pkgs/applications/office/kmymoney/default.nix b/pkgs/applications/office/kmymoney/default.nix index a29e256675f8..d3a216fb71a5 100644 --- a/pkgs/applications/office/kmymoney/default.nix +++ b/pkgs/applications/office/kmymoney/default.nix @@ -1,4 +1,5 @@ { stdenv, lib, fetchurl, doxygen, extra-cmake-modules, graphviz, kdoctools +, wrapQtAppsHook , akonadi, alkimia, aqbanking, gmp, gwenhywfar, kactivities, karchive , kcmutils, kcontacts, kdewebkit, kdiagram, kholidays, kidentitymanagement @@ -29,6 +30,7 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ doxygen extra-cmake-modules graphviz kdoctools python2Packages.wrapPython + wrapQtAppsHook ]; buildInputs = [ @@ -57,13 +59,11 @@ stdenv.mkDerivation rec { doInstallCheck = stdenv.hostPlatform == stdenv.buildPlatform; installCheckInputs = [ xvfb_run ]; - installCheckPhase = let - pluginPath = "${qtbase.bin}/${qtbase.qtPluginPrefix}"; - in lib.optionalString doInstallCheck '' - QT_PLUGIN_PATH=${lib.escapeShellArg pluginPath} \ + installCheckPhase = + lib.optionalString doInstallCheck '' xvfb-run -s '-screen 0 1024x768x24' make test \ - ARGS="-E '(reports-chart-test)'" # Test fails, so exclude it for now. - ''; + ARGS="-E '(reports-chart-test)'" # Test fails, so exclude it for now. + ''; meta = { description = "Personal finance manager for KDE"; diff --git a/pkgs/applications/office/scribus/unstable.nix b/pkgs/applications/office/scribus/unstable.nix index 32758b462f75..eb2bebb39934 100644 --- a/pkgs/applications/office/scribus/unstable.nix +++ b/pkgs/applications/office/scribus/unstable.nix @@ -1,11 +1,11 @@ -{ stdenv, fetchsvn, makeWrapper, pkgconfig, cmake, qtbase, cairo, pixman, +{ stdenv, fetchsvn, wrapQtAppsHook, pkgconfig, cmake, qtbase, cairo, pixman, boost, cups, fontconfig, freetype, hunspell, libjpeg, libtiff, libxml2, lcms2, podofo, poppler, poppler_data, python2, harfbuzz, qtimageformats, qttools }: let pythonEnv = python2.withPackages(ps: [ps.tkinter ps.pillow]); revision = "22806"; -in +in stdenv.mkDerivation rec { name = "scribus-unstable-${version}"; version = "2019-01-16"; @@ -18,17 +18,13 @@ stdenv.mkDerivation rec { enableParallelBuilding = true; + nativeBuildInputs = [ wrapQtAppsHook ]; buildInputs = [ - makeWrapper pkgconfig cmake qtbase cairo pixman boost cups fontconfig + pkgconfig cmake qtbase cairo pixman boost cups fontconfig freetype hunspell libjpeg libtiff libxml2 lcms2 podofo poppler poppler_data pythonEnv harfbuzz qtimageformats qttools ]; - postFixup = '' - wrapProgram $out/bin/scribus \ - --prefix QT_PLUGIN_PATH : "${qtbase}/${qtbase.qtPluginPrefix}" - ''; - meta = { maintainers = [ stdenv.lib.maintainers.erictapen ]; platforms = stdenv.lib.platforms.linux; diff --git a/pkgs/applications/science/astronomy/stellarium/default.nix b/pkgs/applications/science/astronomy/stellarium/default.nix index 2480b80316eb..e3c66199f11c 100644 --- a/pkgs/applications/science/astronomy/stellarium/default.nix +++ b/pkgs/applications/science/astronomy/stellarium/default.nix @@ -1,7 +1,7 @@ { mkDerivation, lib, fetchFromGitHub , cmake, freetype, libpng, libGLU_combined, openssl, perl, libiconv , qtscript, qtserialport, qttools -, qtmultimedia, qtlocation, makeWrapper, qtbase +, qtmultimedia, qtlocation, qtbase, wrapQtAppsHook }: mkDerivation rec { @@ -15,18 +15,13 @@ mkDerivation rec { sha256 = "0hf1wv2bb5j7ny2xh29mj9m4hjblhn02zylay8gl85w7xlqs7s5r"; }; - nativeBuildInputs = [ cmake perl ]; + nativeBuildInputs = [ cmake perl wrapQtAppsHook ]; buildInputs = [ freetype libpng libGLU_combined openssl libiconv qtscript qtserialport qttools - qtmultimedia qtlocation qtbase makeWrapper + qtmultimedia qtlocation qtbase ]; - postInstall = '' - wrapProgram $out/bin/stellarium \ - --prefix QT_PLUGIN_PATH : "${qtbase}/lib/qt-5.${lib.versions.minor qtbase.version}/plugins" - ''; - meta = with lib; { description = "Free open-source planetarium"; homepage = http://stellarium.org/; diff --git a/pkgs/applications/science/electronics/dsview/default.nix b/pkgs/applications/science/electronics/dsview/default.nix index ecbbeff108d2..55e8a7b4ffe9 100644 --- a/pkgs/applications/science/electronics/dsview/default.nix +++ b/pkgs/applications/science/electronics/dsview/default.nix @@ -1,6 +1,6 @@ { stdenv, fetchFromGitHub, pkgconfig, cmake, libzip, boost, fftw, qtbase, -libusb, makeWrapper, libsigrok4dsl, libsigrokdecode4dsl +libusb, wrapQtAppsHook, libsigrok4dsl, libsigrokdecode4dsl }: stdenv.mkDerivation rec { @@ -24,7 +24,7 @@ stdenv.mkDerivation rec { ./install.patch ]; - nativeBuildInputs = [ cmake pkgconfig makeWrapper ]; + nativeBuildInputs = [ cmake pkgconfig wrapQtAppsHook ]; buildInputs = [ boost fftw qtbase libusb libzip libsigrokdecode4dsl libsigrok4dsl @@ -32,11 +32,6 @@ stdenv.mkDerivation rec { enableParallelBuilding = true; - postFixup = '' - wrapProgram $out/bin/DSView --suffix QT_PLUGIN_PATH : \ - ${qtbase.bin}/${qtbase.qtPluginPrefix} - ''; - meta = with stdenv.lib; { description = "A GUI program for supporting various instruments from DreamSourceLab, including logic analyzer, oscilloscope, etc"; homepage = https://www.dreamsourcelab.com/; diff --git a/pkgs/applications/version-management/p4v/default.nix b/pkgs/applications/version-management/p4v/default.nix index f82b80067bf2..314c379c4e6d 100644 --- a/pkgs/applications/version-management/p4v/default.nix +++ b/pkgs/applications/version-management/p4v/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, lib, qtbase, qtmultimedia, qtscript, qtsensors, qtwebkit, openssl, xkeyboard_config, makeWrapper }: +{ stdenv, fetchurl, lib, qtbase, qtmultimedia, qtscript, qtsensors, qtwebkit, openssl, xkeyboard_config, wrapQtAppsHook }: stdenv.mkDerivation rec { name = "p4v-${version}"; @@ -10,7 +10,7 @@ stdenv.mkDerivation rec { }; dontBuild = true; - nativeBuildInputs = [makeWrapper]; + nativeBuildInputs = [ wrapQtAppsHook ]; ldLibraryPath = lib.makeLibraryPath [ stdenv.cc.cc.lib @@ -22,6 +22,7 @@ stdenv.mkDerivation rec { openssl ]; + dontWrapQtApps = true; installPhase = '' mkdir $out cp -r bin $out @@ -31,10 +32,9 @@ stdenv.mkDerivation rec { for f in $out/bin/*.bin ; do patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $f - wrapProgram $f \ + wrapQtApp $f \ --suffix LD_LIBRARY_PATH : ${ldLibraryPath} \ - --suffix QT_XKB_CONFIG_ROOT : ${xkeyboard_config}/share/X11/xkb \ - --suffix QT_PLUGIN_PATH : ${qtbase.bin}/${qtbase.qtPluginPrefix} + --suffix QT_XKB_CONFIG_ROOT : ${xkeyboard_config}/share/X11/xkb done ''; diff --git a/pkgs/applications/video/avidemux/default.nix b/pkgs/applications/video/avidemux/default.nix index 7912fe60bbc8..8e87a0589c59 100644 --- a/pkgs/applications/video/avidemux/default.nix +++ b/pkgs/applications/video/avidemux/default.nix @@ -1,7 +1,7 @@ { stdenv, lib, fetchurl, cmake, pkgconfig , zlib, gettext, libvdpau, libva, libXv, sqlite , yasm, freetype, fontconfig, fribidi -, makeWrapper, libXext, libGLU, qttools, qtbase +, makeWrapper, libXext, libGLU, qttools, qtbase, wrapQtAppsHook , alsaLib , withX265 ? true, x265 , withX264 ? true, x264 @@ -37,7 +37,9 @@ stdenv.mkDerivation rec { ./bootstrap_logging.patch ]; - nativeBuildInputs = [ yasm cmake pkgconfig ]; + nativeBuildInputs = + [ yasm cmake pkgconfig ] + ++ lib.optional withQT wrapQtAppsHook; buildInputs = [ zlib gettext libvdpau libva libXv sqlite fribidi fontconfig freetype alsaLib libXext libGLU makeWrapper @@ -55,7 +57,10 @@ stdenv.mkDerivation rec { buildCommand = let qtVersion = "5.${stdenv.lib.versions.minor qtbase.version}"; - wrapProgram = f: "wrapProgram ${f} --set ADM_ROOT_DIR $out --prefix LD_LIBRARY_PATH : ${libXext}/lib"; + wrapWith = makeWrapper: filename: + "${makeWrapper} ${filename} --set ADM_ROOT_DIR $out --prefix LD_LIBRARY_PATH : ${libXext}/lib"; + wrapQtApp = wrapWith "wrapQtApp"; + wrapProgram = wrapWith "wrapProgram"; in '' unpackPhase cd "$sourceRoot" @@ -74,8 +79,8 @@ stdenv.mkDerivation rec { ${wrapProgram "$out/bin/avidemux3_cli"} ${stdenv.lib.optionalString withQT '' - ${wrapProgram "$out/bin/avidemux3_qt5"} --prefix QT_PLUGIN_PATH : ${qtbase}/lib/qt-${qtVersion}/plugins - ${wrapProgram "$out/bin/avidemux3_jobs_qt5"} --prefix QT_PLUGIN_PATH : ${qtbase}/lib/qt-${qtVersion}/plugins + ${wrapQtApp "$out/bin/avidemux3_qt5"} + ${wrapQtApp "$out/bin/avidemux3_jobs_qt5"} ''} ln -s "$out/bin/avidemux3_${default}" "$out/bin/avidemux" diff --git a/pkgs/applications/video/minitube/default.nix b/pkgs/applications/video/minitube/default.nix index 3b8dce90243b..5ee437a19be5 100644 --- a/pkgs/applications/video/minitube/default.nix +++ b/pkgs/applications/video/minitube/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchFromGitHub, makeWrapper, phonon, phonon-backend-vlc, qtbase, qmake +{ stdenv, fetchFromGitHub, wrapQtAppsHook, phonon, phonon-backend-vlc, qtbase, qmake , qtdeclarative, qttools # "Free" key generated by nckx . I no longer have a Google @@ -17,17 +17,12 @@ stdenv.mkDerivation rec { }; buildInputs = [ phonon phonon-backend-vlc qtbase qtdeclarative qttools ]; - nativeBuildInputs = [ makeWrapper qmake ]; + nativeBuildInputs = [ wrapQtAppsHook qmake ]; qmakeFlags = [ "DEFINES+=APP_GOOGLE_API_KEY=${withAPIKey}" ]; enableParallelBuilding = true; - postInstall = '' - wrapProgram $out/bin/minitube \ - --prefix QT_PLUGIN_PATH : "${phonon-backend-vlc}/lib/qt-5.${stdenv.lib.versions.minor qtbase.version}/plugins" - ''; - meta = with stdenv.lib; { description = "Stand-alone YouTube video player"; longDescription = '' diff --git a/pkgs/desktops/plasma-5/plasma-workspace/default.nix b/pkgs/desktops/plasma-5/plasma-workspace/default.nix index 680021e350b7..1403c9e4c8b7 100644 --- a/pkgs/desktops/plasma-5/plasma-workspace/default.nix +++ b/pkgs/desktops/plasma-5/plasma-workspace/default.nix @@ -34,7 +34,8 @@ mkDerivation { qtgraphicaleffects qtquickcontrols qtquickcontrols2 qtscript qtwayland qtx11extras ]; - outputs = [ "bin" "dev" "out" ]; + propagatedUserEnvPkgs = [ qtgraphicaleffects ]; + outputs = [ "out" "dev" ]; cmakeFlags = [ "-DNIXPKGS_XMESSAGE=${getBin xmessage}/bin/xmessage" @@ -45,7 +46,7 @@ mkDerivation { "-DNIXPKGS_XPROP=${getBin xprop}/bin/xprop" "-DNIXPKGS_ID=${getBin coreutils}/bin/id" "-DNIXPKGS_DBUS_UPDATE_ACTIVATION_ENVIRONMENT=${getBin dbus}/bin/dbus-update-activation-environment" - "-DNIXPKGS_START_KDEINIT_WRAPPER=${getLib kinit}/lib/libexec/kf5/start_kdeinit_wrapper" + "-DNIXPKGS_START_KDEINIT_WRAPPER=${getLib kinit}/libexec/kf5/start_kdeinit_wrapper" "-DNIXPKGS_QDBUS=${getBin qttools}/bin/qdbus" "-DNIXPKGS_KWRAPPER5=${getBin kinit}/bin/kwrapper5" "-DNIXPKGS_KREADCONFIG5=${getBin kconfig}/bin/kreadconfig5" @@ -72,10 +73,6 @@ mkDerivation { preConfigure = '' NIX_CFLAGS_COMPILE+=" -DNIXPKGS_KDOSTARTUPCONFIG5=\"''${!outputBin}/bin/kdostartupconfig5\"" - cmakeFlags+=" -DNIXPKGS_STARTPLASMA=''${!outputBin}/lib/libexec/startplasma" - ''; - - postInstall = '' - moveToOutput lib/libexec/startplasma ''${!outputBin} + cmakeFlags+=" -DNIXPKGS_STARTPLASMA=''${!outputBin}/libexec/startplasma" ''; } diff --git a/pkgs/development/compilers/nextpnr/default.nix b/pkgs/development/compilers/nextpnr/default.nix index ec5deb4e22aa..d1c0db25351c 100644 --- a/pkgs/development/compilers/nextpnr/default.nix +++ b/pkgs/development/compilers/nextpnr/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchFromGitHub, cmake, makeWrapper +{ stdenv, fetchFromGitHub, cmake , boost, python3, eigen , icestorm, trellis @@ -6,7 +6,7 @@ # laptop (and over a remote X server on my server...), so mark it broken for # now, with intent to fix later. , enableGui ? false -, qtbase +, qtbase, wrapQtAppsHook }: let @@ -36,7 +36,9 @@ stdenv.mkDerivation rec { sha256 = "1y14jpa948cwk0i19bsfqh7yxsxkgskm4xym4z179sjcvcdvrn3a"; }; - nativeBuildInputs = [ cmake makeWrapper ]; + nativeBuildInputs + = [ cmake ] + ++ (stdenv.lib.optional enableGui wrapQtAppsHook); buildInputs = [ boostPython python3 eigen ] ++ (stdenv.lib.optional enableGui qtbase); @@ -56,13 +58,6 @@ stdenv.mkDerivation rec { --replace 'git log -1 --format=%h' 'echo ${substring 0 11 src.rev}' ''; - postInstall = stdenv.lib.optionalString enableGui '' - for x in generic ice40 ecp5; do - wrapProgram $out/bin/nextpnr-$x \ - --prefix QT_PLUGIN_PATH : "${qtbase}/${qtbase.qtPluginPrefix}" - done - ''; - meta = with stdenv.lib; { description = "Place and route tool for FPGAs"; homepage = https://github.com/yosyshq/nextpnr; diff --git a/pkgs/development/libraries/cutelyst/default.nix b/pkgs/development/libraries/cutelyst/default.nix index 784a282f6b24..c4778e5b0301 100644 --- a/pkgs/development/libraries/cutelyst/default.nix +++ b/pkgs/development/libraries/cutelyst/default.nix @@ -1,4 +1,4 @@ -{ stdenv, lib, fetchFromGitHub, cmake, pkgconfig, makeWrapper +{ stdenv, lib, fetchFromGitHub, cmake, pkgconfig, wrapQtAppsHook , qtbase, libuuid, libcap, uwsgi, grantlee, pcre }: @@ -13,7 +13,7 @@ stdenv.mkDerivation rec { sha256 = "09cgfpr2k1jp98h1ahxqm5lmv3qbk0bcxpqpill6n5wmq2c8kl8b"; }; - nativeBuildInputs = [ cmake pkgconfig makeWrapper ]; + nativeBuildInputs = [ cmake pkgconfig wrapQtAppsHook ]; buildInputs = [ qtbase libuuid libcap uwsgi grantlee pcre ]; cmakeFlags = [ @@ -31,12 +31,6 @@ stdenv.mkDerivation rec { unset LD_LIBRARY_PATH ''; - postInstall = '' - for prog in $out/bin/*; do - wrapProgram "$prog" --set QT_PLUGIN_PATH '${qtbase}/${qtbase.qtPluginPrefix}' - done - ''; - meta = with lib; { description = "C++ Web Framework built on top of Qt"; homepage = https://cutelyst.org/; diff --git a/pkgs/development/libraries/gsettings-qt/default.nix b/pkgs/development/libraries/gsettings-qt/default.nix index 3f9cd8120d89..744d9eb6de90 100644 --- a/pkgs/development/libraries/gsettings-qt/default.nix +++ b/pkgs/development/libraries/gsettings-qt/default.nix @@ -1,4 +1,7 @@ -{ stdenv, fetchbzr, pkgconfig, qmake, qtbase, qtdeclarative, glib, gobject-introspection }: +{ stdenv, fetchbzr, pkgconfig +, qmake, qtbase, qtdeclarative, wrapQtAppsHook +, glib, gobject-introspection +}: stdenv.mkDerivation rec { name = "gsettings-qt-${version}"; @@ -14,6 +17,7 @@ stdenv.mkDerivation rec { pkgconfig qmake gobject-introspection + wrapQtAppsHook ]; buildInputs = [ diff --git a/pkgs/development/libraries/kde-frameworks/default.nix b/pkgs/development/libraries/kde-frameworks/default.nix index 62ae433ff710..7745d78f8fca 100644 --- a/pkgs/development/libraries/kde-frameworks/default.nix +++ b/pkgs/development/libraries/kde-frameworks/default.nix @@ -45,17 +45,9 @@ let if [ "$hookName" != postHook ]; then postHooks+=("source @dev@/nix-support/setup-hook") else - # Propagate $${out} output - propagatedUserEnvPkgs="$propagatedUserEnvPkgs @${out}@" - - if [ -z "$outputDev" ]; then - echo "error: \$outputDev is unset!" >&2 - exit 1 - fi - # Propagate $dev so that this setup hook is propagated # But only if there is a separate $dev output - if [ "$outputDev" != out ]; then + if [ "''${outputDev:?}" != out ]; then propagatedBuildInputs="$propagatedBuildInputs @dev@" fi fi @@ -75,10 +67,9 @@ let inherit (srcs."${name}") src version; outputs = args.outputs or [ "bin" "dev" "out" ]; - hasBin = lib.elem "bin" outputs; - hasDev = lib.elem "dev" outputs; + hasSeparateDev = lib.elem "dev" outputs; - defaultSetupHook = if hasBin && hasDev then propagateBin else null; + defaultSetupHook = if hasSeparateDev then propagateBin else null; setupHook = args.setupHook or defaultSetupHook; meta = { diff --git a/pkgs/development/libraries/kde-frameworks/extra-cmake-modules/setup-hook.sh b/pkgs/development/libraries/kde-frameworks/extra-cmake-modules/setup-hook.sh index 88091e78a0cd..4df086ddbf21 100644 --- a/pkgs/development/libraries/kde-frameworks/extra-cmake-modules/setup-hook.sh +++ b/pkgs/development/libraries/kde-frameworks/extra-cmake-modules/setup-hook.sh @@ -1,16 +1,16 @@ -_ecmEnvHook() { +ecmEnvHook() { addToSearchPath XDG_DATA_DIRS "$1/share" addToSearchPath XDG_CONFIG_DIRS "$1/etc/xdg" } -addEnvHooks "$targetOffset" _ecmEnvHook +addEnvHooks "$targetOffset" ecmEnvHook -_ecmPreConfigureHook() { +ecmPostHook() { # Because we need to use absolute paths here, we must set *all* the paths. cmakeFlags+=" -DKDE_INSTALL_EXECROOTDIR=${!outputBin}" cmakeFlags+=" -DKDE_INSTALL_BINDIR=${!outputBin}/bin" cmakeFlags+=" -DKDE_INSTALL_SBINDIR=${!outputBin}/sbin" cmakeFlags+=" -DKDE_INSTALL_LIBDIR=${!outputLib}/lib" - cmakeFlags+=" -DKDE_INSTALL_LIBEXECDIR=${!outputLib}/lib/libexec" + cmakeFlags+=" -DKDE_INSTALL_LIBEXECDIR=${!outputLib}/libexec" cmakeFlags+=" -DKDE_INSTALL_CMAKEPACKAGEDIR=${!outputDev}/lib/cmake" cmakeFlags+=" -DKDE_INSTALL_INCLUDEDIR=${!outputInclude}/include" cmakeFlags+=" -DKDE_INSTALL_LOCALSTATEDIR=/var" @@ -51,4 +51,58 @@ _ecmPreConfigureHook() { cmakeFlags+=" -DKDE_INSTALL_QMLDIR=${!outputBin}/$qtQmlPrefix" fi } -preConfigureHooks+=(_ecmPreConfigureHook) +postHooks+=(ecmPostHook) + +xdgDataSubdirs=( + "doc" "config.kcfg" "kconf_update" "kservices5" "kservicetypes5" \ + "kxmlgui5" "knotifications5" "icons" "locale" "sounds" "templates" \ + "wallpapers" "applications" "desktop-directories" "mime" "appdata" "dbus-1" \ +) + + +ecmHostPathSeen=( ) + +ecmUnseenHostPath() { + for pkg in "${ecmHostPathSeen[@]}" + do + if [ "${pkg:?}" == "$1" ] + then + return 1 + fi + done + + ecmHostPathSeen+=("$1") + return 0 +} + +ecmHostPathHook() { + ecmUnseenHostPath "$1" || return 0 + + local xdgConfigDir="$1/etc/xdg" + if [ -d "$xdgConfigDir" ] + then + qtWrapperArgs+=(--prefix XDG_CONFIG_DIRS : "$xdgConfigDir") + fi + + for xdgDataSubdir in "${xdgDataSubdirs[@]}" + do + if [ -d "$1/share/$xdgDataSubdir" ] + then + qtWrapperArgs+=(--prefix XDG_DATA_DIRS : "$1/share") + break + fi + done + + local manDir="$1/man" + if [ -d "$manDir" ] + then + qtWrapperArgs+=(--prefix MANPATH : "$manDir") + fi + + local infoDir="$1/info" + if [ -d "$infoDir" ] + then + qtWrapperArgs+=(--prefix INFOPATH : "$infoDir") + fi +} +addEnvHooks "$hostOffset" ecmHostPathHook diff --git a/pkgs/development/libraries/kde-frameworks/kinit/default.nix b/pkgs/development/libraries/kde-frameworks/kinit/default.nix index 538078fd7457..42a1e157a917 100644 --- a/pkgs/development/libraries/kde-frameworks/kinit/default.nix +++ b/pkgs/development/libraries/kde-frameworks/kinit/default.nix @@ -9,6 +9,7 @@ let inherit (lib) getLib; in mkDerivation { name = "kinit"; meta = { maintainers = [ lib.maintainers.ttuegel ]; }; + outputs = [ "out" "dev" ]; nativeBuildInputs = [ extra-cmake-modules kdoctools ]; buildInputs = [ kconfig kcrash ki18n kio kservice kwindowsystem @@ -19,9 +20,6 @@ mkDerivation { ''-DNIXPKGS_KF5_PARTS=\"${getLib kparts}/lib/libKF5Parts.so.5\"'' ''-DNIXPKGS_KF5_PLASMA=\"${getLib plasma-framework}/lib/libKF5Plasma.so.5\"'' ]; - postFixup = '' - moveToOutput "lib/libexec/kf5/start_kdeinit" "$bin" - ''; setupHook = writeScript "setup-hook.sh" '' kinitFixupOutputHook() { if [ $prefix != ''${!outputBin} ] && [ -d $prefix/lib ]; then diff --git a/pkgs/development/libraries/qt-5/5.11/default.nix b/pkgs/development/libraries/qt-5/5.11/default.nix index fe01b89081f4..67c5047e5078 100644 --- a/pkgs/development/libraries/qt-5/5.11/default.nix +++ b/pkgs/development/libraries/qt-5/5.11/default.nix @@ -17,7 +17,7 @@ top-level attribute to `top-level/all-packages.nix`. { newScope, - stdenv, fetchurl, fetchFromGitHub, makeSetupHook, + stdenv, fetchurl, fetchFromGitHub, makeSetupHook, makeWrapper, bison, cups ? null, harfbuzz, libGL, perl, gstreamer, gst-plugins-base, gtk3, dconf, llvmPackages_5, @@ -34,6 +34,8 @@ let qtCompatVersion = "5.11"; + stdenvActual = if stdenv.cc.isClang then llvmPackages_5.stdenv else stdenv; + mirror = "https://download.qt.io"; srcs = import ./srcs.nix { inherit fetchurl; inherit mirror; } // { # Community port of the now unmaintained upstream qtwebkit. @@ -64,16 +66,18 @@ let qtwebkit = [ ./qtwebkit.patch ]; }; - mkDerivation = - import ../mkDerivation.nix { - inherit (stdenv) lib; - stdenv = if stdenv.cc.isClang then llvmPackages_5.stdenv else stdenv; - } - { inherit debug; }; - qtModule = import ../qtModule.nix - { inherit mkDerivation perl; inherit (stdenv) lib; } + { + inherit perl; + inherit (stdenv) lib; + # Use a variant of mkDerivation that does not include wrapQtApplications + # to avoid cyclic dependencies between Qt modules. + mkDerivation = + import ../mkDerivation.nix + { inherit (stdenv) lib; inherit debug; wrapQtAppsHook = null; } + stdenvActual.mkDerivation; + } { inherit self srcs patches; }; addPackages = self: with self; @@ -81,7 +85,11 @@ let callPackage = self.newScope { inherit qtCompatVersion qtModule srcs; }; in { - inherit mkDerivation; + mkDerivationWith = + import ../mkDerivation.nix + { inherit (stdenv) lib; inherit debug; inherit (self) wrapQtAppsHook; }; + + mkDerivation = mkDerivationWith stdenvActual.mkDerivation; qtbase = callPackage ../modules/qtbase.nix { inherit (srcs.qtbase) src version; @@ -142,6 +150,12 @@ let fix_qt_builtin_paths = ../hooks/fix-qt-builtin-paths.sh; }; } ../hooks/qmake-hook.sh; + + wrapQtAppsHook = makeSetupHook { + deps = + [ self.qtbase.dev makeWrapper ] + ++ optional stdenv.isLinux self.qtwayland.dev; + } ../hooks/wrap-qt-apps-hook.sh; }; self = makeScope newScope addPackages; diff --git a/pkgs/development/libraries/qt-5/5.12/default.nix b/pkgs/development/libraries/qt-5/5.12/default.nix index 57b89dd43865..1fbf7b57289f 100644 --- a/pkgs/development/libraries/qt-5/5.12/default.nix +++ b/pkgs/development/libraries/qt-5/5.12/default.nix @@ -17,7 +17,7 @@ top-level attribute to `top-level/all-packages.nix`. { newScope, - stdenv, fetchurl, fetchFromGitHub, makeSetupHook, + stdenv, fetchurl, fetchFromGitHub, makeSetupHook, makeWrapper, bison, cups ? null, harfbuzz, libGL, perl, gstreamer, gst-plugins-base, gtk3, dconf, llvmPackages_5, @@ -34,6 +34,8 @@ let qtCompatVersion = "5.12"; + stdenvActual = if stdenv.cc.isClang then llvmPackages_5.stdenv else stdenv; + mirror = "https://download.qt.io"; srcs = import ./srcs.nix { inherit fetchurl; inherit mirror; } // { # Community port of the now unmaintained upstream qtwebkit. @@ -69,16 +71,18 @@ let qttools = [ ./qttools.patch ]; }; - mkDerivation = - import ../mkDerivation.nix { - inherit (stdenv) lib; - stdenv = if stdenv.cc.isClang then llvmPackages_5.stdenv else stdenv; - } - { inherit debug; }; - qtModule = import ../qtModule.nix - { inherit mkDerivation perl; inherit (stdenv) lib; } + { + inherit perl; + inherit (stdenv) lib; + # Use a variant of mkDerivation that does not include wrapQtApplications + # to avoid cyclic dependencies between Qt modules. + mkDerivation = + import ../mkDerivation.nix + { inherit (stdenv) lib; inherit debug; wrapQtAppsHook = null; } + stdenvActual.mkDerivation; + } { inherit self srcs patches; }; addPackages = self: with self; @@ -86,7 +90,11 @@ let callPackage = self.newScope { inherit qtCompatVersion qtModule srcs; }; in { - inherit mkDerivation; + mkDerivationWith = + import ../mkDerivation.nix + { inherit (stdenv) lib; inherit debug; inherit (self) wrapQtAppsHook; }; + + mkDerivation = mkDerivationWith stdenvActual.mkDerivation; qtbase = callPackage ../modules/qtbase.nix { inherit (srcs.qtbase) src version; @@ -147,6 +155,12 @@ let fix_qt_builtin_paths = ../hooks/fix-qt-builtin-paths.sh; }; } ../hooks/qmake-hook.sh; + + wrapQtAppsHook = makeSetupHook { + deps = + [ self.qtbase.dev makeWrapper ] + ++ optional stdenv.isLinux self.qtwayland.dev; + } ../hooks/wrap-qt-apps-hook.sh; }; self = makeScope newScope addPackages; diff --git a/pkgs/development/libraries/qt-5/5.6/default.nix b/pkgs/development/libraries/qt-5/5.6/default.nix index bf0ae42ea1f2..4f739b57ffec 100644 --- a/pkgs/development/libraries/qt-5/5.6/default.nix +++ b/pkgs/development/libraries/qt-5/5.6/default.nix @@ -26,7 +26,7 @@ existing packages here and modify it as necessary. { newScope, - stdenv, fetchurl, fetchpatch, makeSetupHook, + stdenv, fetchurl, fetchpatch, makeSetupHook, makeWrapper, bison, cups ? null, harfbuzz, libGL, perl, gstreamer, gst-plugins-base, @@ -104,14 +104,18 @@ let ]; }; - mkDerivation = - import ../mkDerivation.nix - { inherit stdenv; inherit (stdenv) lib; } - { inherit debug; }; - qtModule = import ../qtModule.nix - { inherit mkDerivation perl; inherit (stdenv) lib; } + { + inherit perl; + inherit (stdenv) lib; + # Use a variant of mkDerivation that does not include wrapQtApplications + # to avoid cyclic dependencies between Qt modules. + mkDerivation = + import ../mkDerivation.nix + { inherit (stdenv) lib; inherit debug; wrapQtAppsHook = null; } + stdenv.mkDerivation; + } { inherit self srcs patches; }; addPackages = self: with self; @@ -119,7 +123,11 @@ let callPackage = self.newScope { inherit qtCompatVersion qtModule srcs; }; in { - inherit mkDerivation; + mkDerivationWith = + import ../mkDerivation.nix + { inherit (stdenv) lib; inherit debug; inherit (self) wrapQtAppsHook; }; + + mkDerivation = mkDerivationWith stdenv.mkDerivation; qtbase = callPackage ../modules/qtbase.nix { inherit bison cups harfbuzz libGL; @@ -173,6 +181,12 @@ let deps = [ self.qtbase.dev ]; substitutions = { inherit (stdenv) isDarwin; }; } ../hooks/qmake-hook.sh; + + wrapQtAppsHook = makeSetupHook { + deps = + [ self.qtbase.dev makeWrapper ] + ++ optional stdenv.isLinux self.qtwayland.dev; + } ../hooks/wrap-qt-apps-hook.sh; }; self = makeScope newScope addPackages; diff --git a/pkgs/development/libraries/qt-5/5.9/default.nix b/pkgs/development/libraries/qt-5/5.9/default.nix index e59b6b90105b..f36f86e26ffe 100644 --- a/pkgs/development/libraries/qt-5/5.9/default.nix +++ b/pkgs/development/libraries/qt-5/5.9/default.nix @@ -17,7 +17,7 @@ top-level attribute to `top-level/all-packages.nix`. { newScope, - stdenv, fetchurl, fetchpatch, makeSetupHook, + stdenv, fetchurl, fetchpatch, makeSetupHook, makeWrapper, bison, cups ? null, harfbuzz, libGL, perl, gstreamer, gst-plugins-base, gtk3, dconf, @@ -67,14 +67,18 @@ let }; - mkDerivation = - import ../mkDerivation.nix - { inherit stdenv; inherit (stdenv) lib; } - { inherit debug; }; - qtModule = import ../qtModule.nix - { inherit mkDerivation perl; inherit (stdenv) lib; } + { + inherit perl; + inherit (stdenv) lib; + # Use a variant of mkDerivation that does not include wrapQtApplications + # to avoid cyclic dependencies between Qt modules. + mkDerivation = + import ../mkDerivation.nix + { inherit (stdenv) lib; inherit debug; wrapQtAppsHook = null; } + stdenv.mkDerivation; + } { inherit self srcs patches; }; addPackages = self: with self; @@ -82,7 +86,11 @@ let callPackage = self.newScope { inherit qtCompatVersion qtModule srcs; }; in { - inherit mkDerivation; + mkDerivationWith = + import ../mkDerivation.nix + { inherit (stdenv) lib; inherit debug; inherit (self) wrapQtAppsHook; }; + + mkDerivation = mkDerivationWith stdenv.mkDerivation; qtbase = callPackage ../modules/qtbase.nix { inherit (srcs.qtbase) src version; @@ -140,6 +148,12 @@ let fix_qt_builtin_paths = ../hooks/fix-qt-builtin-paths.sh; }; } ../hooks/qmake-hook.sh; + + wrapQtAppsHook = makeSetupHook { + deps = + [ self.qtbase.dev makeWrapper ] + ++ optional stdenv.isLinux self.qtwayland.dev; + } ../hooks/wrap-qt-apps-hook.sh; }; self = makeScope newScope addPackages; diff --git a/pkgs/development/libraries/qt-5/hooks/qtbase-setup-hook.sh b/pkgs/development/libraries/qt-5/hooks/qtbase-setup-hook.sh index 3a558153988c..436c2e1d032a 100644 --- a/pkgs/development/libraries/qt-5/hooks/qtbase-setup-hook.sh +++ b/pkgs/development/libraries/qt-5/hooks/qtbase-setup-hook.sh @@ -19,12 +19,14 @@ export QMAKEPATH QMAKEMODULES= export QMAKEMODULES -addToQMAKEPATH() { - if [ -d "$1/mkspecs" ]; then +qmakePathHook() { + if [ -d "$1/mkspecs" ] + then QMAKEMODULES="${QMAKEMODULES}${QMAKEMODULES:+:}/mkspecs" QMAKEPATH="${QMAKEPATH}${QMAKEPATH:+:}$1" fi } +envBuildHostHooks+=(qmakePathHook) # Propagate any runtime dependency of the building package. # Each dependency is propagated to the user environment and as a build @@ -32,18 +34,18 @@ addToQMAKEPATH() { # package depending on the building package. (This is necessary in case # the building package does not provide runtime dependencies itself and so # would not be propagated to the user environment.) -qtEnvHook() { - addToQMAKEPATH "$1" - if providesQtRuntime "$1"; then - if [ "z${!outputBin}" != "z${!outputDev}" ]; then - propagatedBuildInputs+=" $1" - fi - propagatedUserEnvPkgs+=" $1" +qtEnvHostTargetHook() { + if providesQtRuntime "$1" && [ "z${!outputBin}" != "z${!outputDev}" ] + then + propagatedBuildInputs+=" $1" fi } -envHostTargetHooks+=(qtEnvHook) +envHostTargetHooks+=(qtEnvHostTargetHook) postPatchMkspecs() { + # Prevent this hook from running multiple times + dontPatchMkspecs=1 + local bin="${!outputBin}" local dev="${!outputDev}" local doc="${!outputDoc}" diff --git a/pkgs/development/libraries/qt-5/hooks/wrap-qt-apps-hook.sh b/pkgs/development/libraries/qt-5/hooks/wrap-qt-apps-hook.sh new file mode 100644 index 000000000000..83f62e4ec2b8 --- /dev/null +++ b/pkgs/development/libraries/qt-5/hooks/wrap-qt-apps-hook.sh @@ -0,0 +1,106 @@ +# Inherit arguments given in mkDerivation +qtWrapperArgs=( $qtWrapperArgs ) + +qtHostPathSeen=() + +qtUnseenHostPath() { + for pkg in "${qtHostPathSeen[@]}" + do + if [ "${pkg:?}" == "$1" ] + then + return 1 + fi + done + + qtHostPathSeen+=("$1") + return 0 +} + +qtHostPathHook() { + qtUnseenHostPath "$1" || return 0 + + local pluginDir="$1/${qtPluginPrefix:?}" + if [ -d "$pluginDir" ] + then + qtWrapperArgs+=(--prefix QT_PLUGIN_PATH : "$pluginDir") + fi + + local qmlDir="$1/${qtQmlPrefix:?}" + if [ -d "$qmlDir" ] + then + qtWrapperArgs+=(--prefix QML2_IMPORT_PATH : "$qmlDir") + fi +} +addEnvHooks "$hostOffset" qtHostPathHook + +makeQtWrapper() { + local original="$1" + local wrapper="$2" + shift 2 + makeWrapper "$original" "$wrapper" "${qtWrapperArgs[@]}" "$@" +} + +wrapQtApp() { + local program="$1" + shift 1 + wrapProgram "$program" "${qtWrapperArgs[@]}" "$@" +} + +qtOwnPathsHook() { + local xdgDataDir="${!outputBin}/share" + if [ -d "$xdgDataDir" ] + then + qtWrapperArgs+=(--prefix XDG_DATA_DIRS : "$xdgDataDir") + fi + + local xdgConfigDir="${!outputBin}/etc/xdg" + if [ -d "$xdgConfigDir" ] + then + qtWrapperArgs+=(--prefix XDG_CONFIG_DIRS : "$xdgConfigDir") + fi + + qtHostPathHook "${!outputBin}" +} + +preFixupPhases+=" qtOwnPathsHook" + +isQtApp () { + readelf -d "$1" 2>/dev/null | grep -q -F 'libQt5Core' +} + +# Note: $qtWrapperArgs still gets defined even if $dontWrapQtApps is set. +wrapQtAppsHook() { + # skip this hook when requested + [ -z "$dontWrapQtApps" ] || return 0 + + # guard against running multiple times (e.g. due to propagation) + [ -z "$wrapQtAppsHookHasRun" ] || return 0 + wrapQtAppsHookHasRun=1 + + local targetDirs=( "$prefix/bin" ) + echo "wrapping Qt applications in ${targetDirs[@]}" + + for targetDir in "${targetDirs[@]}" + do + [ -d "$targetDir" ] || continue + + find "$targetDir" -executable -print0 | while IFS= read -r -d '' file + do + isQtApp "$file" || continue + + if [ -f "$file" ] + then + echo "wrapping $file" + wrapQtApp "$file" + elif [ -h "$file" ] + then + target="$(readlink -e "$file")" + echo "wrapping $file -> $target" + rm "$file" + makeQtWrapper "$target" "$file" + fi + done + done +} + +fixupOutputHooks+=(wrapQtAppsHook) diff --git a/pkgs/development/libraries/qt-5/mkDerivation.nix b/pkgs/development/libraries/qt-5/mkDerivation.nix index d4e2143d564b..95357c096dfd 100644 --- a/pkgs/development/libraries/qt-5/mkDerivation.nix +++ b/pkgs/development/libraries/qt-5/mkDerivation.nix @@ -1,8 +1,8 @@ -{ stdenv, lib }: +{ lib, debug, wrapQtAppsHook }: let inherit (lib) optional; in -{ debug }: +mkDerivation: args: @@ -24,7 +24,9 @@ let enableParallelBuilding = args.enableParallelBuilding or true; + nativeBuildInputs = (args.nativeBuildInputs or []) ++ [ wrapQtAppsHook ]; + }; in -stdenv.mkDerivation (args // args_) +mkDerivation (args // args_) diff --git a/pkgs/development/libraries/qt-5/modules/qtspeech.nix b/pkgs/development/libraries/qt-5/modules/qtspeech.nix index 7b4b19ccab5a..ddef01a9482e 100644 --- a/pkgs/development/libraries/qt-5/modules/qtspeech.nix +++ b/pkgs/development/libraries/qt-5/modules/qtspeech.nix @@ -3,5 +3,5 @@ qtModule { name = "qtspeech"; qtInputs = [ ]; - outputs = [ "out" "dev" "bin" ]; + outputs = [ "out" "dev" ]; } diff --git a/pkgs/development/r-modules/wrapper-rstudio.nix b/pkgs/development/r-modules/wrapper-rstudio.nix index c89773c2dd55..5eeac8fed30e 100644 --- a/pkgs/development/r-modules/wrapper-rstudio.nix +++ b/pkgs/development/r-modules/wrapper-rstudio.nix @@ -1,4 +1,4 @@ -{ lib, runCommand, R, rstudio, makeWrapper, recommendedPackages, packages, qtbase }: +{ lib, runCommand, R, rstudio, wrapQtAppsHook, recommendedPackages, packages, qtbase }: let qtVersion = with lib.versions; "${major qtbase.version}.${minor qtbase.version}"; @@ -7,7 +7,8 @@ runCommand (rstudio.name + "-wrapper") { preferLocalBuild = true; allowSubstitutes = false; - nativeBuildInputs = [makeWrapper]; + nativeBuildInputs = [wrapQtAppsHook]; + dontWrapQtApps = true; buildInputs = [R rstudio] ++ recommendedPackages ++ packages; @@ -29,6 +30,6 @@ echo -n ".libPaths(c(.libPaths(), \"" >> $out/$fixLibsR echo -n $R_LIBS_SITE | sed -e 's/:/", "/g' >> $out/$fixLibsR echo -n "\"))" >> $out/$fixLibsR echo >> $out/$fixLibsR -makeWrapper ${rstudio}/bin/rstudio $out/bin/rstudio --set R_PROFILE_USER $out/$fixLibsR \ - --prefix QT_PLUGIN_PATH : ${qtbase}/lib/qt-${qtVersion}/plugins +makeQtWrapper ${rstudio}/bin/rstudio $out/bin/rstudio \ + --set R_PROFILE_USER $out/$fixLibsR '' diff --git a/pkgs/development/tools/analysis/hopper/default.nix b/pkgs/development/tools/analysis/hopper/default.nix index 7158ea38c04d..c9214ae7e35d 100644 --- a/pkgs/development/tools/analysis/hopper/default.nix +++ b/pkgs/development/tools/analysis/hopper/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, pkgs, makeWrapper, lib }: +{ stdenv, fetchurl, pkgs, lib }: stdenv.mkDerivation rec { pname = "hopper"; @@ -16,22 +16,20 @@ stdenv.mkDerivation rec { libbsd.out libffi.out gmpxx.out python27Full.out python27Packages.libxml2 qt5.qtbase zlib xlibs.libX11.out xorg_sys_opengl.out xlibs.libXrender.out gcc-unwrapped.lib ]; - nativeBuildInputs = [ makeWrapper ]; + nativeBuildInputs = [ pkgs.qt5.wrapQtAppsHook ]; + + qtWrapperArgs = [ ''--suffix LD_LIBRARY_PATH : ${ldLibraryPath}'' ]; installPhase = '' - mkdir -p $out/bin - mkdir -p $out/lib - mkdir -p $out/share - cp $sourceRoot/opt/hopper-${rev}/bin/Hopper $out/bin/hopper - cp -r $sourceRoot/opt/hopper-${rev}/lib $out - cp -r $sourceRoot/usr/share $out/share + mkdir -p $out/bin + mkdir -p $out/lib + mkdir -p $out/share + cp $sourceRoot/opt/hopper-${rev}/bin/Hopper $out/bin/hopper + cp -r $sourceRoot/opt/hopper-${rev}/lib $out + cp -r $sourceRoot/usr/share $out/share patchelf \ - --set-interpreter ${stdenv.glibc}/lib/ld-linux-x86-64.so.2 \ - $out/bin/hopper - # Details: https://nixos.wiki/wiki/Qt - wrapProgram $out/bin/hopper \ - --suffix LD_LIBRARY_PATH : ${ldLibraryPath} \ - --suffix QT_PLUGIN_PATH : ${pkgs.qt5.qtbase}/lib/qt-${pkgs.qt5.qtbase.qtCompatVersion}/plugins + --set-interpreter ${stdenv.glibc}/lib/ld-linux-x86-64.so.2 \ + $out/bin/hopper ''; meta = { diff --git a/pkgs/development/tools/qtcreator/default.nix b/pkgs/development/tools/qtcreator/default.nix index 03b758cbdc6d..1b3bc7a21626 100644 --- a/pkgs/development/tools/qtcreator/default.nix +++ b/pkgs/development/tools/qtcreator/default.nix @@ -10,7 +10,7 @@ let revision = "1"; # Fetch clang from qt vendor, this contains submodules like this: - # clang<-clang-tools-extra<-clazy. + # clang<-clang-tools-extra<-clazy. clang_qt_vendor = llvmPackages_8.clang-unwrapped.overrideAttrs (oldAttrs: rec { src = fetchgit { url = "https://code.qt.io/clang/clang.git"; @@ -32,15 +32,15 @@ stdenv.mkDerivation rec { buildInputs = [ qtbase qtscript qtquickcontrols qtdeclarative llvmPackages_8.libclang clang_qt_vendor llvmPackages_8.llvm ]; - nativeBuildInputs = [ qmake makeWrapper ]; + nativeBuildInputs = [ qmake ]; - # 0001-Fix-clang-libcpp-regexp.patch is for fixing regexp that is used to + # 0001-Fix-clang-libcpp-regexp.patch is for fixing regexp that is used to # find clang libc++ library include paths. By default it's not covering paths # like libc++-version, which is default name for libc++ folder in nixos. - patches = [ ./0001-Fix-clang-libcpp-regexp.patch + patches = [ ./0001-Fix-clang-libcpp-regexp.patch - # Fix clazy plugin name. This plugin was renamed with clang8 - # release, and patch didn't make it into 4.9.1 release. Should be removed + # Fix clazy plugin name. This plugin was renamed with clang8 + # release, and patch didn't make it into 4.9.1 release. Should be removed # on qtcreator update, if this problem is fixed. (fetchpatch { url = "https://code.qt.io/cgit/qt-creator/qt-creator.git/patch/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp?id=53c407bc0c87e0b65b537bf26836ddd8e00ead82"; @@ -51,7 +51,7 @@ stdenv.mkDerivation rec { url = "https://code.qt.io/cgit/qt-creator/qt-creator.git/patch/src/plugins/clangtools/clangtidyclazyrunner.cpp?id=53c407bc0c87e0b65b537bf26836ddd8e00ead82"; sha256 = "1rl0rc2l297lpfhhawvkkmj77zb081hhp0bbi7nnykf3q9ch0clh"; }) - ]; + ]; doCheck = true; @@ -70,7 +70,7 @@ stdenv.mkDerivation rec { --replace '$$clean_path($${LLVM_LIBDIR}/clang/$${LLVM_VERSION}/include)' '${clang_qt_vendor}/lib/clang/8.0.0/include' \ --replace '$$clean_path($${LLVM_BINDIR})' '${clang_qt_vendor}/bin' - # Fix include path to find clang and clang-c include directories. + # Fix include path to find clang and clang-c include directories. substituteInPlace src/plugins/clangtools/clangtools.pro \ --replace 'INCLUDEPATH += $$LLVM_INCLUDEPATH' 'INCLUDEPATH += $$LLVM_INCLUDEPATH ${clang_qt_vendor}' diff --git a/pkgs/development/tools/tora/default.nix b/pkgs/development/tools/tora/default.nix index 5b46b975cf7f..2bbe2cfe16df 100644 --- a/pkgs/development/tools/tora/default.nix +++ b/pkgs/development/tools/tora/default.nix @@ -53,10 +53,9 @@ in mkDerivation rec { NIX_CFLAGS_COMPILE = [ "-L${mysql.connector-c}/lib/mysql" "-I${mysql.connector-c}/include/mysql" ]; - postFixup = '' - wrapProgram $out/bin/tora \ - --prefix PATH : ${lib.getBin graphviz}/bin - ''; + qtWrapperArgs = [ + ''--prefix PATH : ${lib.getBin graphviz}/bin'' + ]; meta = with lib; { description = "Tora SQL tool"; diff --git a/pkgs/games/chessx/default.nix b/pkgs/games/chessx/default.nix index 5800f8026ac4..47432bca1633 100644 --- a/pkgs/games/chessx/default.nix +++ b/pkgs/games/chessx/default.nix @@ -32,9 +32,6 @@ stdenv.mkDerivation rec { cp -pr release/chessx "$out/bin" cp -pr unix/chessx.desktop "$out/share/applications" - wrapProgram $out/bin/chessx \ - --prefix QT_PLUGIN_PATH : ${qtbase}/lib/qt-5.${lib.versions.minor qtbase.version}/plugins - runHook postInstall ''; diff --git a/pkgs/games/flightgear/default.nix b/pkgs/games/flightgear/default.nix index 728709a12f62..9765a9c06ee1 100644 --- a/pkgs/games/flightgear/default.nix +++ b/pkgs/games/flightgear/default.nix @@ -62,13 +62,12 @@ stdenv.mkDerivation rec { postInstall = '' mkdir -p "$out/share/applications/" cp "${desktopItem}"/share/applications/* "$out/share/applications/" #*/ - - for f in $out/bin/* #*/ - do - wrapProgram $f --set FG_ROOT "${data}/share/FlightGear" - done ''; + qtWrapperArgs = [ + ''--set FG_ROOT "${data}/share/FlightGear"'' + ]; + enableParallelBuilding = true; meta = with stdenv.lib; { diff --git a/pkgs/games/nethack/default.nix b/pkgs/games/nethack/default.nix index 5e476cdc7e98..24cc64ac9aff 100644 --- a/pkgs/games/nethack/default.nix +++ b/pkgs/games/nethack/default.nix @@ -1,5 +1,5 @@ { stdenv, lib, fetchurl, coreutils, ncurses, gzip, flex, bison -, less, makeWrapper +, less , buildPackages , x11Mode ? false, qtMode ? false, libXaw, libXext, libXpm, bdftopcf, mkfontdir, pkgconfig, qt5 }: @@ -37,7 +37,7 @@ in stdenv.mkDerivation rec { ++ lib.optionals x11Mode [ mkfontdir bdftopcf ] ++ lib.optionals qtMode [ pkgconfig mkfontdir qt5.qtbase.dev - qt5.qtmultimedia.dev makeWrapper + qt5.qtmultimedia.dev qt5.wrapQtAppsHook bdftopcf ]; @@ -97,6 +97,10 @@ in stdenv.mkDerivation rec { enableParallelBuilding = true; + preFixup = '' + wrapQtApp "$out/games/nethack" + ''; + postInstall = '' mkdir -p $out/games/lib/nethackuserdir for i in xlogfile logfile perm record save; do @@ -137,11 +141,6 @@ in stdenv.mkDerivation rec { ${lib.optionalString (!(x11Mode || qtMode)) "install -Dm 555 util/dlb -t $out/libexec/nethack/"} ''; - postFixup = lib.optionalString qtMode '' - wrapProgram $out/bin/nethack-qt \ - --prefix QT_PLUGIN_PATH : "${qt5.qtbase}/${qt5.qtbase.qtPluginPrefix}" - ''; - meta = with stdenv.lib; { description = "Rogue-like game"; homepage = http://nethack.org/; diff --git a/pkgs/misc/emulators/mgba/default.nix b/pkgs/misc/emulators/mgba/default.nix index 7a5ed31a5803..039bc57e6031 100644 --- a/pkgs/misc/emulators/mgba/default.nix +++ b/pkgs/misc/emulators/mgba/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchFromGitHub, makeDesktopItem, makeWrapper, pkgconfig +{ stdenv, fetchFromGitHub, makeDesktopItem, wrapQtAppsHook, pkgconfig , cmake, epoxy, libzip, ffmpeg, imagemagick, SDL2, qtbase, qtmultimedia, libedit , qttools, minizip }: @@ -25,7 +25,7 @@ in stdenv.mkDerivation rec { }; enableParallelBuilding = true; - nativeBuildInputs = [ makeWrapper pkgconfig cmake ]; + nativeBuildInputs = [ wrapQtAppsHook pkgconfig cmake ]; buildInputs = [ libzip epoxy ffmpeg imagemagick SDL2 qtbase qtmultimedia libedit minizip @@ -34,8 +34,6 @@ in stdenv.mkDerivation rec { postInstall = '' cp -r ${desktopItem}/share/applications $out/share - wrapProgram $out/bin/mgba-qt --suffix QT_PLUGIN_PATH : \ - ${qtbase.bin}/${qtbase.qtPluginPrefix} ''; meta = with stdenv.lib; { diff --git a/pkgs/tools/graphics/nifskope/default.nix b/pkgs/tools/graphics/nifskope/default.nix index c5651d0418e4..42da24e32399 100644 --- a/pkgs/tools/graphics/nifskope/default.nix +++ b/pkgs/tools/graphics/nifskope/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchFromGitHub, qmake, qtbase, qttools, substituteAll, libGLU, makeWrapper }: +{ stdenv, fetchFromGitHub, qmake, qtbase, qttools, substituteAll, libGLU, wrapQtAppsHook }: stdenv.mkDerivation rec { name = "nifskope-${version}"; @@ -20,8 +20,8 @@ stdenv.mkDerivation rec { }) ]; - buildInputs = [ qtbase qttools libGLU.dev makeWrapper ]; - nativeBuildInputs = [ qmake ]; + buildInputs = [ qtbase qttools libGLU.dev ]; + nativeBuildInputs = [ qmake wrapQtAppsHook ]; preConfigure = '' shopt -s globstar @@ -33,9 +33,7 @@ stdenv.mkDerivation rec { enableParallelBuilding = true; # Inspired by install/linux-install/nifskope.spec.in. - installPhase = let - qtVersion = "5.${stdenv.lib.versions.minor qtbase.version}"; - in '' + installPhase = '' runHook preInstall d=$out/share/nifskope @@ -53,8 +51,6 @@ stdenv.mkDerivation rec { find $out/share -type f -exec chmod -x {} \; - wrapProgram $out/bin/NifSkope --prefix QT_PLUGIN_PATH : "${qtbase}/lib/qt-${qtVersion}/plugins" - runHook postInstall ''; diff --git a/pkgs/tools/misc/partition-manager/default.nix b/pkgs/tools/misc/partition-manager/default.nix index 4599309b2384..1c094c291d89 100644 --- a/pkgs/tools/misc/partition-manager/default.nix +++ b/pkgs/tools/misc/partition-manager/default.nix @@ -1,7 +1,7 @@ { mkDerivation, fetchurl, lib -, extra-cmake-modules, kdoctools, wrapGAppsHook +, extra-cmake-modules, kdoctools, wrapGAppsHook, wrapQtAppsHook , kconfig, kcrash, kinit, kpmcore -, eject, libatasmart , utillinux, makeWrapper, qtbase +, eject, libatasmart , utillinux, qtbase }: let @@ -17,16 +17,12 @@ in mkDerivation rec { enableParallelBuilding = true; - nativeBuildInputs = [ extra-cmake-modules kdoctools wrapGAppsHook makeWrapper ]; + nativeBuildInputs = [ extra-cmake-modules kdoctools wrapGAppsHook wrapQtAppsHook ]; # refer to kpmcore for the use of eject buildInputs = [ eject libatasmart utillinux ]; propagatedBuildInputs = [ kconfig kcrash kinit kpmcore ]; - postInstall = '' - wrapProgram "$out/bin/partitionmanager" --prefix QT_PLUGIN_PATH : "${kpmcore}/lib/qt-5.${lib.versions.minor qtbase.version}/plugins" - ''; - meta = with lib; { description = "KDE Partition Manager"; license = licenses.gpl2; diff --git a/pkgs/tools/misc/yubikey-manager-qt/default.nix b/pkgs/tools/misc/yubikey-manager-qt/default.nix index a1d0b185a0a9..44b2f3451c1d 100644 --- a/pkgs/tools/misc/yubikey-manager-qt/default.nix +++ b/pkgs/tools/misc/yubikey-manager-qt/default.nix @@ -1,6 +1,6 @@ { stdenv , fetchurl -, makeWrapper +, wrapQtAppsHook , pcsclite , pyotherside , pythonPackages @@ -16,16 +16,9 @@ , yubikey-personalization }: -let - qmlPath = qmlLib: "${qmlLib}/${qtbase.qtQmlPrefix}"; +let inherit (stdenv) lib; in - inherit (stdenv) lib; - - qml2ImportPath = lib.concatMapStringsSep ":" qmlPath [ - qtbase.bin qtdeclarative.bin pyotherside qtquickcontrols qtquickcontrols2.bin qtgraphicaleffects - ]; - -in stdenv.mkDerivation rec { +stdenv.mkDerivation rec { pname = "yubikey-manager-qt"; version = "1.1.2"; @@ -34,7 +27,7 @@ in stdenv.mkDerivation rec { sha256 = "01ax8zjrahs2sjbgsys2ahh57sdcap0ij3y1r1bbvsgzr7xxm2q8"; }; - nativeBuildInputs = [ makeWrapper python3.pkgs.wrapPython qmake ]; + nativeBuildInputs = [ wrapQtAppsHook python3.pkgs.wrapPython qmake ]; postPatch = '' substituteInPlace ykman-gui/deployment.pri --replace '/usr/bin' "$out/bin" @@ -46,22 +39,20 @@ in stdenv.mkDerivation rec { pythonPath = [ yubikey-manager ]; + dontWrapQtApps = true; postInstall = '' buildPythonPath "$pythonPath" - wrapProgram $out/bin/ykman-gui \ + wrapQtApp $out/bin/ykman-gui \ --prefix LD_LIBRARY_PATH : "${stdenv.lib.getLib pcsclite}/lib:${yubikey-personalization}/lib" \ - --prefix PYTHONPATH : "$program_PYTHONPATH" \ - --set QML2_IMPORT_PATH "${qml2ImportPath}" \ - --set QT_QPA_PLATFORM_PLUGIN_PATH ${qtbase.bin}/lib/qt-*/plugins/platforms \ - --prefix QT_PLUGIN_PATH : "${qtsvg.bin}/${qtbase.qtPluginPrefix}" + --prefix PYTHONPATH : "$program_PYTHONPATH" - mkdir -p $out/share/applications - cp resources/ykman-gui.desktop $out/share/applications/ykman-gui.desktop - mkdir -p $out/share/ykman-gui/icons - cp resources/icons/*.{icns,ico,png,xpm} $out/share/ykman-gui/icons - substituteInPlace $out/share/applications/ykman-gui.desktop \ - --replace 'Exec=ykman-gui' "Exec=$out/bin/ykman-gui" \ + mkdir -p $out/share/applications + cp resources/ykman-gui.desktop $out/share/applications/ykman-gui.desktop + mkdir -p $out/share/ykman-gui/icons + cp resources/icons/*.{icns,ico,png,xpm} $out/share/ykman-gui/icons + substituteInPlace $out/share/applications/ykman-gui.desktop \ + --replace 'Exec=ykman-gui' "Exec=$out/bin/ykman-gui" \ ''; meta = with lib; { diff --git a/pkgs/tools/security/nitrokey-app/default.nix b/pkgs/tools/security/nitrokey-app/default.nix index e7f7547e4ad9..1b18f0e1e11a 100644 --- a/pkgs/tools/security/nitrokey-app/default.nix +++ b/pkgs/tools/security/nitrokey-app/default.nix @@ -1,5 +1,5 @@ -{ stdenv, makeWrapper, bash-completion, cmake, fetchFromGitHub, hidapi, libusb1, pkgconfig -, qtbase, qttranslations, qtsvg }: +{ stdenv, bash-completion, cmake, fetchFromGitHub, hidapi, libusb1, pkgconfig +, qtbase, qttranslations, qtsvg, wrapQtAppsHook }: stdenv.mkDerivation rec { name = "nitrokey-app-${version}"; @@ -29,15 +29,10 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ cmake pkgconfig - makeWrapper + wrapQtAppsHook ]; cmakeFlags = "-DCMAKE_BUILD_TYPE=Release"; - postFixup = '' - wrapProgram $out/bin/nitrokey-app \ - --prefix QT_PLUGIN_PATH : "${qtbase}/${qtbase.qtPluginPrefix}" - ''; - meta = with stdenv.lib; { description = "Provides extra functionality for the Nitrokey Pro and Storage"; longDescription = '' diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4c07fa2bc1b4..35d40464d9f1 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -12777,7 +12777,7 @@ in qt56 = recurseIntoAttrs (makeOverridable (import ../development/libraries/qt-5/5.6) { inherit newScope; - inherit stdenv fetchurl fetchpatch makeSetupHook; + inherit stdenv fetchurl fetchpatch makeSetupHook makeWrapper; bison = bison2; # error: too few arguments to function 'int yylex(... inherit cups; harfbuzz = harfbuzzFull; @@ -12791,7 +12791,7 @@ in qt59 = recurseIntoAttrs (makeOverridable (import ../development/libraries/qt-5/5.9) { inherit newScope; - inherit stdenv fetchurl fetchpatch makeSetupHook; + inherit stdenv fetchurl fetchpatch makeSetupHook makeWrapper; bison = bison2; # error: too few arguments to function 'int yylex(... inherit cups; harfbuzz = harfbuzzFull; @@ -12807,7 +12807,7 @@ in qt511 = recurseIntoAttrs (makeOverridable (import ../development/libraries/qt-5/5.11) { inherit newScope; - inherit stdenv fetchurl fetchFromGitHub makeSetupHook; + inherit stdenv fetchurl fetchFromGitHub makeSetupHook makeWrapper; bison = bison2; # error: too few arguments to function 'int yylex(... inherit cups; harfbuzz = harfbuzzFull; @@ -12824,7 +12824,7 @@ in qt512 = recurseIntoAttrs (makeOverridable (import ../development/libraries/qt-5/5.12) { inherit newScope; - inherit stdenv fetchurl fetchFromGitHub makeSetupHook; + inherit stdenv fetchurl fetchFromGitHub makeSetupHook makeWrapper; bison = bison2; # error: too few arguments to function 'int yylex(... inherit cups; harfbuzz = harfbuzzFull;