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 (default.nix)
+
+{ 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 all-packages.nix
+
+{
+ # ...
+
+ 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 all-packages.nix
+
+{
+ # ...
+
+ 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;