From 1d8d6d564d18f0d7b4ac659c0c2a6a2084ff546e Mon Sep 17 00:00:00 2001 From: Thomas Tuegel Date: Wed, 29 Mar 2017 07:23:27 -0500 Subject: [PATCH 1/6] Revert "dropbox: use vendored Qt 5 libraries" This reverts commit 9125bab708fcacbfbf7b77e44935c8ce254de3b9. The vendored libraries have a problem with xkbcommon. --- .../networking/dropbox/default.nix | 24 ++++++++++++------- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/pkgs/applications/networking/dropbox/default.nix b/pkgs/applications/networking/dropbox/default.nix index 028ca2e7397..de419398ad5 100644 --- a/pkgs/applications/networking/dropbox/default.nix +++ b/pkgs/applications/networking/dropbox/default.nix @@ -3,6 +3,7 @@ , libdrm, libffi, libICE, libSM , libX11, libXcomposite, libXext, libXmu, libXrender, libxcb , libxml2, libxslt, ncurses, zlib +, qtbase, qtdeclarative, qtwebkit }: # this package contains the daemon version of dropbox @@ -43,6 +44,8 @@ let dbus_libs fontconfig freetype gcc.cc glib libdrm libffi libICE libSM libX11 libXcomposite libXext libXmu libXrender libxcb libxml2 libxslt ncurses zlib + + qtbase qtdeclarative qtwebkit ]; desktopItem = makeDesktopItem { @@ -70,8 +73,6 @@ in stdenv.mkDerivation { dontStrip = true; # already done installPhase = '' - runHook preInstall - mkdir -p "$out/${appdir}" cp -r --no-preserve=mode "dropbox-lnx.${arch}-${version}"/* "$out/${appdir}/" @@ -80,6 +81,19 @@ in stdenv.mkDerivation { rm "$out/${appdir}/libGL.so.1" rm "$out/${appdir}/libX11-xcb.so.1" + rm "$out/${appdir}/libQt5Core.so.5" + rm "$out/${appdir}/libQt5DBus.so.5" + rm "$out/${appdir}/libQt5Gui.so.5" + rm "$out/${appdir}/libQt5Network.so.5" + rm "$out/${appdir}/libQt5OpenGL.so.5" + rm "$out/${appdir}/libQt5PrintSupport.so.5" + rm "$out/${appdir}/libQt5Qml.so.5" + rm "$out/${appdir}/libQt5Quick.so.5" + rm "$out/${appdir}/libQt5Sql.so.5" + rm "$out/${appdir}/libQt5WebKit.so.5" + rm "$out/${appdir}/libQt5WebKitWidgets.so.5" + rm "$out/${appdir}/libQt5XcbQpa.so.5" + mkdir -p "$out/share/applications" cp "${desktopItem}/share/applications/"* $out/share/applications @@ -92,13 +106,9 @@ in stdenv.mkDerivation { --prefix LD_LIBRARY_PATH : "$RPATH" chmod 755 $out/${appdir}/dropbox - - runHook postInstall ''; fixupPhase = '' - runHook preFixup - INTERP=$(cat $NIX_CC/nix-support/dynamic-linker) RPATH="${ldpath}:$out/${appdir}" getType='s/ *Type: *\([A-Z]*\) (.*/\1/' @@ -138,8 +148,6 @@ in stdenv.mkDerivation { done paxmark m $out/${appdir}/dropbox - - runHook postFixup ''; meta = { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 61ff664d446..a487579e41c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15403,7 +15403,7 @@ with pkgs; bittorrentSync14 = callPackage ../applications/networking/bittorrentsync/1.4.x.nix { }; bittorrentSync20 = callPackage ../applications/networking/bittorrentsync/2.0.x.nix { }; - dropbox = callPackage ../applications/networking/dropbox { }; + dropbox = libsForQt5.callPackage ../applications/networking/dropbox { }; dropbox-cli = callPackage ../applications/networking/dropbox-cli { }; From 3c96a536086ad4af2291eee1f1f7fb866eca39d0 Mon Sep 17 00:00:00 2001 From: Thomas Tuegel Date: Wed, 29 Mar 2017 07:33:23 -0500 Subject: [PATCH 2/6] dropbox: wrap as any other Qt application --- pkgs/applications/networking/dropbox/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/networking/dropbox/default.nix b/pkgs/applications/networking/dropbox/default.nix index de419398ad5..9e1469d95b2 100644 --- a/pkgs/applications/networking/dropbox/default.nix +++ b/pkgs/applications/networking/dropbox/default.nix @@ -3,7 +3,7 @@ , libdrm, libffi, libICE, libSM , libX11, libXcomposite, libXext, libXmu, libXrender, libxcb , libxml2, libxslt, ncurses, zlib -, qtbase, qtdeclarative, qtwebkit +, qtbase, qtdeclarative, qtwebkit, makeQtWrapper }: # this package contains the daemon version of dropbox @@ -68,8 +68,8 @@ in stdenv.mkDerivation { sourceRoot = ".dropbox-dist"; - nativeBuildInputs = [ makeWrapper patchelf ]; dontPatchELF = true; # patchelf invoked explicitly below + nativeBuildInputs = [ makeQtWrapper patchelf ]; dontStrip = true; # already done installPhase = '' @@ -102,7 +102,7 @@ in stdenv.mkDerivation { mkdir -p "$out/bin" RPATH="${ldpath}:$out/${appdir}" - makeWrapper "$out/${appdir}/dropbox" "$out/bin/dropbox" \ + makeQtWrapper "$out/${appdir}/dropbox" "$out/bin/dropbox" \ --prefix LD_LIBRARY_PATH : "$RPATH" chmod 755 $out/${appdir}/dropbox From c076b9326ffa66ef125d64cefe3ba68dac3d8399 Mon Sep 17 00:00:00 2001 From: Thomas Tuegel Date: Wed, 29 Mar 2017 07:33:46 -0500 Subject: [PATCH 3/6] dropbox: remove more useless vendored libraries --- .../applications/networking/dropbox/default.nix | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/pkgs/applications/networking/dropbox/default.nix b/pkgs/applications/networking/dropbox/default.nix index 9e1469d95b2..c262d901443 100644 --- a/pkgs/applications/networking/dropbox/default.nix +++ b/pkgs/applications/networking/dropbox/default.nix @@ -76,23 +76,16 @@ in stdenv.mkDerivation { mkdir -p "$out/${appdir}" cp -r --no-preserve=mode "dropbox-lnx.${arch}-${version}"/* "$out/${appdir}/" + # Vendored libraries interact poorly with our graphics drivers rm "$out/${appdir}/libdrm.so.2" rm "$out/${appdir}/libffi.so.6" rm "$out/${appdir}/libGL.so.1" rm "$out/${appdir}/libX11-xcb.so.1" - rm "$out/${appdir}/libQt5Core.so.5" - rm "$out/${appdir}/libQt5DBus.so.5" - rm "$out/${appdir}/libQt5Gui.so.5" - rm "$out/${appdir}/libQt5Network.so.5" - rm "$out/${appdir}/libQt5OpenGL.so.5" - rm "$out/${appdir}/libQt5PrintSupport.so.5" - rm "$out/${appdir}/libQt5Qml.so.5" - rm "$out/${appdir}/libQt5Quick.so.5" - rm "$out/${appdir}/libQt5Sql.so.5" - rm "$out/${appdir}/libQt5WebKit.so.5" - rm "$out/${appdir}/libQt5WebKitWidgets.so.5" - rm "$out/${appdir}/libQt5XcbQpa.so.5" + # Cannot use vendored Qt libraries due to problem with xkbcommon + rm "$out/${appdir}/"libQt5*.so.5 + rm "$out/${appdir}/qt.conf" + rm -fr "$out/${appdir}/plugins" mkdir -p "$out/share/applications" cp "${desktopItem}/share/applications/"* $out/share/applications From 096c72e255d30cffaf4f62eec94a7c29f72db6dc Mon Sep 17 00:00:00 2001 From: Thomas Tuegel Date: Wed, 29 Mar 2017 07:35:21 -0500 Subject: [PATCH 4/6] dropbox: set INTERP for some DYN objects --- pkgs/applications/networking/dropbox/default.nix | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/pkgs/applications/networking/dropbox/default.nix b/pkgs/applications/networking/dropbox/default.nix index c262d901443..6b6c31d9db6 100644 --- a/pkgs/applications/networking/dropbox/default.nix +++ b/pkgs/applications/networking/dropbox/default.nix @@ -107,23 +107,15 @@ in stdenv.mkDerivation { getType='s/ *Type: *\([A-Z]*\) (.*/\1/' find "$out/${appdir}" -type f -a -perm -0100 -print | while read obj; do dynamic=$(readelf -S "$obj" 2>/dev/null | grep "DYNAMIC" || true) - if [[ -n "$dynamic" ]]; then - type=$(readelf -h "$obj" 2>/dev/null | grep 'Type:' | sed -e "$getType") - - if [[ "$type" == "EXEC" ]]; then + if readelf -l "$obj" 2>/dev/null | grep "INTERP" >/dev/null; then echo "patching interpreter path in $type $obj" patchelf --set-interpreter "$INTERP" "$obj" + fi - echo "patching RPATH in $type $obj" - oldRPATH=$(patchelf --print-rpath "$obj") - patchelf --set-rpath "''${oldRPATH:+$oldRPATH:}$RPATH" "$obj" - - echo "shrinking RPATH in $type $obj" - patchelf --shrink-rpath "$obj" - - elif [[ "$type" == "DYN" ]]; then + type=$(readelf -h "$obj" 2>/dev/null | grep 'Type:' | sed -e "$getType") + if [ "$type" == "EXEC" ] || [ "$type" == "DYN" ]; then echo "patching RPATH in $type $obj" oldRPATH=$(patchelf --print-rpath "$obj") From 2e591bac0d24def29e0b1091758a5f2c35d777fd Mon Sep 17 00:00:00 2001 From: Thomas Tuegel Date: Wed, 29 Mar 2017 07:35:52 -0500 Subject: [PATCH 5/6] dropbox: leave RPATH-shrinking to patchelf setup hook --- pkgs/applications/networking/dropbox/default.nix | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pkgs/applications/networking/dropbox/default.nix b/pkgs/applications/networking/dropbox/default.nix index 6b6c31d9db6..1a9a83ac957 100644 --- a/pkgs/applications/networking/dropbox/default.nix +++ b/pkgs/applications/networking/dropbox/default.nix @@ -68,7 +68,6 @@ in stdenv.mkDerivation { sourceRoot = ".dropbox-dist"; - dontPatchELF = true; # patchelf invoked explicitly below nativeBuildInputs = [ makeQtWrapper patchelf ]; dontStrip = true; # already done @@ -121,9 +120,6 @@ in stdenv.mkDerivation { oldRPATH=$(patchelf --print-rpath "$obj") patchelf --set-rpath "''${oldRPATH:+$oldRPATH:}$RPATH" "$obj" - echo "shrinking RPATH in $type $obj" - patchelf --shrink-rpath "$obj" - else echo "unknown ELF type \"$type\"; not patching $obj" From 97518649fbd567a12a4cd54a10380fc45f3359be Mon Sep 17 00:00:00 2001 From: Thomas Tuegel Date: Wed, 29 Mar 2017 07:36:10 -0500 Subject: [PATCH 6/6] dropbox: patch all files in output --- pkgs/applications/networking/dropbox/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/networking/dropbox/default.nix b/pkgs/applications/networking/dropbox/default.nix index 1a9a83ac957..097ff84a704 100644 --- a/pkgs/applications/networking/dropbox/default.nix +++ b/pkgs/applications/networking/dropbox/default.nix @@ -104,7 +104,7 @@ in stdenv.mkDerivation { INTERP=$(cat $NIX_CC/nix-support/dynamic-linker) RPATH="${ldpath}:$out/${appdir}" getType='s/ *Type: *\([A-Z]*\) (.*/\1/' - find "$out/${appdir}" -type f -a -perm -0100 -print | while read obj; do + find "$out/${appdir}" -type f -print | while read obj; do dynamic=$(readelf -S "$obj" 2>/dev/null | grep "DYNAMIC" || true) if [[ -n "$dynamic" ]]; then