tangled
alpha
login
or
join now
pyrox.dev
/
nixpkgs
lol
0
fork
atom
overview
issues
pulls
pipelines
dropbox: prepare for Qt upgrade
Thomas Tuegel
10 years ago
d8d5e986
f998d502
+58
-30
2 changed files
expand all
collapse all
unified
split
pkgs
applications
networking
dropbox
default.nix
top-level
all-packages.nix
+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
0
0
0
115
116
mkdir -p "$out/bin"
0
117
makeWrapper "$out/${appdir}/dropbox" "$out/bin/dropbox" \
118
-
--prefix LD_LIBRARY_PATH : "${ldpath}"
0
119
120
-
mkdir -p "$out/share/icons"
121
-
ln -s "$out/${appdir}/images/hicolor" "$out/share/icons/hicolor"
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
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
0
0
0
0
0
0
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
0
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
0
0
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
0
0
0
0
0
0
0
0
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 { };
0
0
0
0
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