forked from mirrors/nixpkgs
f6c1004b2a
Use system libpng with apng support. Use the system icu which works fine in newer firefox builds. Use jemalloc to speed up memory allocations and reduce fragmentation.
119 lines
4 KiB
Nix
119 lines
4 KiB
Nix
{ lib, stdenv, fetchurl, pkgconfig, gtk, gtk3, pango, perl, python, zip, libIDL
|
|
, libjpeg, zlib, dbus, dbus_glib, bzip2, xlibs
|
|
, freetype, fontconfig, file, alsaLib, nspr, nss, libnotify
|
|
, yasm, mesa, sqlite, unzip, makeWrapper, pysqlite
|
|
, hunspell, libevent, libstartup_notification, libvpx
|
|
, cairo, gst_all_1, icu, libpng, jemalloc
|
|
, enableGTK3 ? false
|
|
, debugBuild ? false
|
|
, # If you want the resulting program to call itself "Firefox" instead
|
|
# of "Shiretoko" or whatever, enable this option. However, those
|
|
# binaries may not be distributed without permission from the
|
|
# Mozilla Foundation, see
|
|
# http://www.mozilla.org/foundation/trademarks/.
|
|
enableOfficialBranding ? false
|
|
}:
|
|
|
|
assert stdenv.cc ? libc && stdenv.cc.libc != null;
|
|
|
|
let version = "39.0"; in
|
|
|
|
stdenv.mkDerivation rec {
|
|
name = "firefox-${version}";
|
|
|
|
src = fetchurl {
|
|
url = "http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${version}/source/firefox-${version}.source.tar.bz2";
|
|
sha1 = "32785daee7ddb9da8d7509ef095258fc58fe838e";
|
|
};
|
|
|
|
buildInputs =
|
|
[ pkgconfig gtk perl zip libIDL libjpeg zlib bzip2
|
|
python dbus dbus_glib pango freetype fontconfig xlibs.libXi
|
|
xlibs.libX11 xlibs.libXrender xlibs.libXft xlibs.libXt file
|
|
alsaLib nspr nss libnotify xlibs.pixman yasm mesa
|
|
xlibs.libXScrnSaver xlibs.scrnsaverproto pysqlite
|
|
xlibs.libXext xlibs.xextproto sqlite unzip makeWrapper
|
|
hunspell libevent libstartup_notification libvpx cairo
|
|
gst_all_1.gstreamer gst_all_1.gst-plugins-base icu libpng
|
|
jemalloc
|
|
]
|
|
++ lib.optional enableGTK3 gtk3;
|
|
|
|
configureFlags =
|
|
[ "--enable-application=browser"
|
|
"--disable-javaxpcom"
|
|
"--with-system-jpeg"
|
|
"--with-system-zlib"
|
|
"--with-system-bz2"
|
|
"--with-system-nspr"
|
|
"--with-system-nss"
|
|
"--with-system-libevent"
|
|
"--with-system-libvpx"
|
|
"--with-system-png" # needs APNG support
|
|
"--with-system-icu"
|
|
"--enable-system-ffi"
|
|
"--enable-system-hunspell"
|
|
"--enable-system-pixman"
|
|
"--enable-system-sqlite"
|
|
"--enable-system-cairo"
|
|
"--enable-gstreamer=1.0"
|
|
"--enable-startup-notification"
|
|
"--enable-content-sandbox" # available since 26.0, but not much info available
|
|
"--disable-content-sandbox-reporter" # keeping disabled for now
|
|
"--disable-crashreporter"
|
|
"--disable-tests"
|
|
"--disable-necko-wifi" # maybe we want to enable this at some point
|
|
"--disable-installer"
|
|
"--disable-updater"
|
|
"--disable-pulseaudio"
|
|
"--enable-jemalloc"
|
|
]
|
|
++ lib.optional enableGTK3 "--enable-default-toolkit=cairo-gtk3"
|
|
++ (if debugBuild then [ "--enable-debug" "--enable-profiling" ]
|
|
else [ "--disable-debug" "--enable-release"
|
|
"--enable-optimize${lib.optionalString (stdenv.system == "i686-linux") "=-O1"}"
|
|
"--enable-strip" ])
|
|
++ lib.optional enableOfficialBranding "--enable-official-branding";
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
preConfigure =
|
|
''
|
|
mkdir ../objdir
|
|
cd ../objdir
|
|
configureScript=../mozilla-release/configure
|
|
'';
|
|
|
|
preInstall =
|
|
''
|
|
# The following is needed for startup cache creation on grsecurity kernels.
|
|
paxmark m ../objdir/dist/bin/xpcshell
|
|
'';
|
|
|
|
postInstall =
|
|
''
|
|
# For grsecurity kernels
|
|
paxmark m $out/lib/${name}/{firefox,firefox-bin,plugin-container}
|
|
|
|
# Remove SDK cruft. FIXME: move to a separate output?
|
|
rm -rf $out/share/idl $out/include $out/lib/firefox-devel-*
|
|
'' + lib.optionalString enableGTK3
|
|
''
|
|
wrapProgram "$out/bin/firefox" \
|
|
--prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH:" \
|
|
--suffix XDG_DATA_DIRS : "$XDG_ICON_DIRS"
|
|
'';
|
|
|
|
meta = {
|
|
description = "Web browser";
|
|
homepage = http://www.mozilla.com/en-US/firefox/;
|
|
maintainers = with lib.maintainers; [ eelco ];
|
|
platforms = lib.platforms.linux;
|
|
};
|
|
|
|
passthru = {
|
|
inherit gtk nspr version;
|
|
isFirefox3Like = true;
|
|
};
|
|
}
|