dropbox: prepare for Qt upgrade

+58 -30
+53 -29
pkgs/applications/networking/dropbox/default.nix
··· 1 - { stdenv, fetchurl, makeDesktopItem, makeWrapper 2 , dbus_libs, gcc, glib, libdrm, libffi, libICE, libSM 3 , libX11, libXmu, ncurses, popt, qt5, zlib 4 , qtbase, qtdeclarative, qtwebkit ··· 33 "i686-linux" = "x86"; 34 }."${stdenv.system}" or (throw "system ${stdenv.system} not supported"); 35 36 - interpreter = 37 - { 38 - "x86_64-linux" = "ld-linux-x86-64.so.2"; 39 - "i686-linux" = "ld-linux.so.2"; 40 - }."${stdenv.system}" or (throw "system ${stdenv.system} not supported"); 41 - 42 # relative location where the dropbox libraries are stored 43 appdir = "opt/dropbox"; 44 45 ldpath = stdenv.lib.makeSearchPath "lib" 46 [ 47 - dbus_libs gcc glib libdrm libffi libICE libSM libX11 48 - libXmu ncurses popt qtbase qtdeclarative qtwebkit 49 - zlib 50 ]; 51 52 desktopItem = makeDesktopItem { ··· 59 }; 60 61 in stdenv.mkDerivation { 62 - name = "dropbox-${version}-bin"; 63 src = fetchurl { 64 name = "dropbox-${version}.tar.gz"; 65 url = "https://dl-web.dropbox.com/u/17/dropbox-lnx.${arch}-${version}.tar.gz"; 66 inherit sha256; 67 }; 68 69 - sourceRoot = "."; 70 71 - patchPhase = '' 72 - rm -f .dropbox-dist/dropboxd 73 - ''; 74 - 75 - buildInputs = [ makeWrapper ]; 76 77 installPhase = '' 78 mkdir -p "$out/${appdir}" 79 - cp -r ".dropbox-dist/dropbox-lnx.${arch}-${version}"/* "$out/${appdir}/" 80 81 rm "$out/${appdir}/libdrm.so.2" 82 rm "$out/${appdir}/libffi.so.6" ··· 102 rm "$out/${appdir}/qt.conf" 103 rm -fr "$out/${appdir}/plugins" 104 105 - find "$out/${appdir}" -type f -a -perm -0100 \ 106 - -print -exec patchelf --set-interpreter ${stdenv.glibc}/lib/${interpreter} {} \; 107 - 108 - RPATH=${ldpath}:${gcc.cc}/lib:$out/${appdir} 109 - echo "updating rpaths to: $RPATH" 110 - find "$out/${appdir}" -type f -a -perm -0100 \ 111 - -print -exec patchelf --force-rpath --set-rpath "$RPATH" {} \; 112 - 113 mkdir -p "$out/share/applications" 114 cp "${desktopItem}/share/applications/"* $out/share/applications 115 116 mkdir -p "$out/bin" 117 makeWrapper "$out/${appdir}/dropbox" "$out/bin/dropbox" \ 118 - --prefix LD_LIBRARY_PATH : "${ldpath}" 119 120 - mkdir -p "$out/share/icons" 121 - ln -s "$out/${appdir}/images/hicolor" "$out/share/icons/hicolor" 122 ''; 123 124 meta = {
··· 1 + { stdenv, fetchurl, makeDesktopItem, makeWrapper, patchelf 2 , dbus_libs, gcc, glib, libdrm, libffi, libICE, libSM 3 , libX11, libXmu, ncurses, popt, qt5, zlib 4 , qtbase, qtdeclarative, qtwebkit ··· 33 "i686-linux" = "x86"; 34 }."${stdenv.system}" or (throw "system ${stdenv.system} not supported"); 35 36 # relative location where the dropbox libraries are stored 37 appdir = "opt/dropbox"; 38 39 ldpath = stdenv.lib.makeSearchPath "lib" 40 [ 41 + dbus_libs gcc.cc glib libdrm libffi libICE libSM libX11 libXmu 42 + ncurses popt qtbase qtdeclarative qtwebkit zlib 43 ]; 44 45 desktopItem = makeDesktopItem { ··· 52 }; 53 54 in stdenv.mkDerivation { 55 + name = "dropbox-${version}"; 56 src = fetchurl { 57 name = "dropbox-${version}.tar.gz"; 58 url = "https://dl-web.dropbox.com/u/17/dropbox-lnx.${arch}-${version}.tar.gz"; 59 inherit sha256; 60 }; 61 62 + sourceRoot = ".dropbox-dist"; 63 64 + buildInputs = [ makeWrapper patchelf ]; 65 + dontPatchELF = true; # patchelf invoked explicitly below 66 + dontStrip = true; # already done 67 68 installPhase = '' 69 mkdir -p "$out/${appdir}" 70 + cp -r "dropbox-lnx.${arch}-${version}"/* "$out/${appdir}/" 71 72 rm "$out/${appdir}/libdrm.so.2" 73 rm "$out/${appdir}/libffi.so.6" ··· 93 rm "$out/${appdir}/qt.conf" 94 rm -fr "$out/${appdir}/plugins" 95 96 mkdir -p "$out/share/applications" 97 cp "${desktopItem}/share/applications/"* $out/share/applications 98 + 99 + mkdir -p "$out/share/icons" 100 + ln -s "$out/${appdir}/images/hicolor" "$out/share/icons/hicolor" 101 102 mkdir -p "$out/bin" 103 + RPATH="${ldpath}:$out/${appdir}" 104 makeWrapper "$out/${appdir}/dropbox" "$out/bin/dropbox" \ 105 + --prefix LD_LIBRARY_PATH : "$RPATH" 106 + ''; 107 108 + fixupPhase = '' 109 + INTERP=$(cat $NIX_CC/nix-support/dynamic-linker) 110 + RPATH="${ldpath}:$out/${appdir}" 111 + getType='s/ *Type: *\([A-Z]*\) (.*/\1/' 112 + find "$out/${appdir}" -type f -a -perm -0100 -print | while read obj; do 113 + dynamic=$(readelf -S "$obj" 2>/dev/null | grep "DYNAMIC" || true) 114 + 115 + if [[ -n "$dynamic" ]]; then 116 + type=$(readelf -h "$obj" 2>/dev/null | grep 'Type:' | sed -e "$getType") 117 + 118 + if [[ "$type" == "EXEC" ]]; then 119 + 120 + echo "patching interpreter path in $type $obj" 121 + patchelf --set-interpreter "$INTERP" "$obj" 122 + 123 + echo "patching RPATH in $type $obj" 124 + oldRPATH=$(patchelf --print-rpath "$obj") 125 + patchelf --set-rpath "''${oldRPATH:+$oldRPATH:}$RPATH" "$obj" 126 + 127 + echo "shrinking RPATH in $type $obj" 128 + patchelf --shrink-rpath "$obj" 129 + 130 + elif [[ "$type" == "DYN" ]]; then 131 + 132 + echo "patching RPATH in $type $obj" 133 + oldRPATH=$(patchelf --print-rpath "$obj") 134 + patchelf --set-rpath "''${oldRPATH:+$oldRPATH:}$RPATH" "$obj" 135 + 136 + echo "shrinking RPATH in $type $obj" 137 + patchelf --shrink-rpath "$obj" 138 + 139 + else 140 + 141 + echo "unknown ELF type \"$type\"; not patching $obj" 142 + 143 + fi 144 + fi 145 + done 146 ''; 147 148 meta = {
+5 -1
pkgs/top-level/all-packages.nix
··· 12681 12682 copy-com = callPackage ../applications/networking/copy-com { }; 12683 12684 - dropbox = qt5Libs.callPackage ../applications/networking/dropbox { }; 12685 12686 dropbox-cli = callPackage ../applications/networking/dropbox-cli { }; 12687
··· 12681 12682 copy-com = callPackage ../applications/networking/copy-com { }; 12683 12684 + dropbox = callPackage ../applications/networking/dropbox { 12685 + qtbase = qt5.base; 12686 + qtdeclarative = qt5.declarative; 12687 + qtwebkit = qt5.webkit; 12688 + }; 12689 12690 dropbox-cli = callPackage ../applications/networking/dropbox-cli { }; 12691