1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
{ stdenv, fetchurl, config
, alsaLib
, atk
, cairo
, cups
, dbus_glib
, dbus_libs
, fontconfig
, freetype
, gconf
, gdk_pixbuf
, glib
, glibc
, gst_plugins_base
, gstreamer
, gtk
, libX11
, libXScrnSaver
, libXcomposite
, libXdamage
, libXext
, libXfixes
, libXinerama
, libXrender
, libXt
, libcanberra
, libgnome
, libgnomeui
, mesa
, nspr
, nss
, pango
, heimdal
, pulseaudio
, systemd
}:
assert stdenv.isLinux;
# imports `version` and `sources`
with (import ./sources.nix);
let
arch = if stdenv.system == "i686-linux"
then "linux-i686"
else "linux-x86_64";
isPrefixOf = prefix: string:
builtins.substring 0 (builtins.stringLength prefix) string == prefix;
sourceMatches = locale: source:
(isPrefixOf source.locale locale) && source.arch == arch;
systemLocale = config.i18n.defaultLocale or "en-US";
defaultSource = stdenv.lib.findFirst (sourceMatches "en-US") {} sources;
source = stdenv.lib.findFirst (sourceMatches systemLocale) defaultSource sources;
in
stdenv.mkDerivation {
name = "firefox-bin-${version}";
src = fetchurl {
url = "http://download-installer.cdn.mozilla.net/pub/firefox/releases/${version}/${source.arch}/${source.locale}/firefox-${version}.tar.bz2";
inherit (source) sha1;
};
phases = "unpackPhase installPhase";
libPath = stdenv.lib.makeLibraryPath
[ stdenv.gcc.gcc
alsaLib
atk
cairo
cups
dbus_glib
dbus_libs
fontconfig
freetype
gconf
gdk_pixbuf
glib
glibc
gst_plugins_base
gstreamer
gtk
libX11
libXScrnSaver
libXcomposite
libXdamage
libXext
libXfixes
libXinerama
libXrender
libXt
libcanberra
libgnome
libgnomeui
mesa
nspr
nss
pango
heimdal
pulseaudio
systemd
] + ":" + stdenv.lib.makeSearchPath "lib64" [
stdenv.gcc.gcc
];
# "strip" after "patchelf" may break binaries.
# See: https://github.com/NixOS/patchelf/issues/10
dontStrip = 1;
installPhase =
''
mkdir -p "$prefix/usr/lib/firefox-bin-${version}"
cp -r * "$prefix/usr/lib/firefox-bin-${version}"
mkdir -p "$out/bin"
ln -s "$prefix/usr/lib/firefox-bin-${version}/firefox" "$out/bin/"
for executable in \
firefox mozilla-xremote-client firefox-bin plugin-container \
updater crashreporter webapprt-stub
do
patchelf --interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \
"$out/usr/lib/firefox-bin-${version}/$executable"
done
for executable in \
firefox mozilla-xremote-client firefox-bin plugin-container \
updater crashreporter webapprt-stub libxul.so
do
patchelf --set-rpath "$libPath" \
"$out/usr/lib/firefox-bin-${version}/$executable"
done
# Create a desktop item.
mkdir -p $out/share/applications
cat > $out/share/applications/firefox.desktop <<EOF
[Desktop Entry]
Type=Application
Exec=$out/bin/firefox
Icon=$out/lib/firefox-bin-${version}/chrome/icons/default/default256.png
Name=Firefox
GenericName=Web Browser
Categories=Application;Network;
EOF
'';
meta = with stdenv.lib; {
description = "Mozilla Firefox, free web browser (binary package)";
homepage = http://www.mozilla.org/firefox/;
license = {
free = false;
url = http://www.mozilla.org/en-US/foundation/trademarks/policy/;
};
platforms = platforms.linux;
};
}
|