22f5045bde
There are still some libraries left, which we either need to patch or provide more recent versions. Plus we're going to use openssl, as libnss doesn't want to do proper SSL (let's debug this later).
150 lines
4.2 KiB
Nix
150 lines
4.2 KiB
Nix
{ stdenv, fetchurl, fetchsvn, makeWrapper, which
|
|
|
|
# default dependencies
|
|
, bzip2, ffmpeg, flac #, harfbuzz
|
|
, icu, libevent, expat, libjpeg
|
|
, libpng, libwebp, libxml2, libxslt #, skia
|
|
, speex, sqlite, openssl #, stlport
|
|
, v8, xdg_utils, yasm, zlib
|
|
|
|
, python, perl, pkgconfig
|
|
, nspr, udev
|
|
, utillinux, alsaLib
|
|
, gcc, bison, gperf
|
|
, krb5
|
|
, glib, gtk, gconf, libgcrypt, libgnome_keyring, dbus_glib
|
|
, libXScrnSaver, libXcursor
|
|
|
|
, useSELinux ? false
|
|
, naclSupport ? false
|
|
, gnomeKeyringSupport ? false
|
|
, useProprietaryCodecs ? false
|
|
}:
|
|
|
|
let
|
|
sourceInfo = import ./source.nix;
|
|
|
|
mkGypFlags = with stdenv.lib; let
|
|
sanitize = value:
|
|
if value == true then "1"
|
|
else if value == false then "0"
|
|
else "${value}";
|
|
toFlag = key: value: "-D${key}=${sanitize value}";
|
|
in attrs: concatStringsSep " " (attrValues (mapAttrs toFlag attrs));
|
|
|
|
gypFlagsUseSystemLibs = {
|
|
use_system_bzip2 = true;
|
|
use_system_ffmpeg = false; # FIXME: libavformat...
|
|
use_system_flac = true;
|
|
use_system_harfbuzz = false; # TODO
|
|
use_system_icu = false; # FIXME: wrong version!
|
|
use_system_libevent = true;
|
|
use_system_libexpat = true;
|
|
use_system_libjpeg = true;
|
|
use_system_libpng = true;
|
|
use_system_libwebp = false; # See chromium issue #133161
|
|
use_system_libxml = true;
|
|
use_system_skia = false; # TODO
|
|
use_system_speex = true;
|
|
use_system_sqlite = false; # FIXME
|
|
use_system_ssl = true;
|
|
use_system_stlport = true;
|
|
use_system_v8 = false; # TODO...
|
|
use_system_xdg_utils = true;
|
|
use_system_yasm = true;
|
|
use_system_zlib = true;
|
|
};
|
|
|
|
defaultDependencies = [
|
|
bzip2 ffmpeg flac # harfbuzz
|
|
icu libevent expat libjpeg
|
|
libpng libwebp libxml2 libxslt # skia
|
|
speex sqlite openssl # stlport
|
|
v8 xdg_utils yasm zlib
|
|
];
|
|
|
|
in stdenv.mkDerivation rec {
|
|
name = "chromium-${version}";
|
|
|
|
version = sourceInfo.version;
|
|
|
|
src = fetchurl {
|
|
url = sourceInfo.url;
|
|
sha256 = sourceInfo.sha256;
|
|
};
|
|
|
|
buildInputs = defaultDependencies ++ [
|
|
which makeWrapper
|
|
python perl pkgconfig
|
|
nspr udev
|
|
utillinux alsaLib
|
|
gcc bison gperf
|
|
krb5
|
|
glib gtk gconf libgcrypt dbus_glib
|
|
libXScrnSaver libXcursor
|
|
] ++ stdenv.lib.optional gnomeKeyringSupport libgnome_keyring;
|
|
|
|
prePatch = "patchShebangs .";
|
|
|
|
patches = stdenv.lib.optional (!useSELinux) ./enable_seccomp.patch;
|
|
|
|
gypFlags = mkGypFlags (gypFlagsUseSystemLibs // {
|
|
linux_use_gold_binary = false;
|
|
linux_use_gold_flags = false;
|
|
proprietary_codecs = false;
|
|
use_gnome_keyring = gnomeKeyringSupport;
|
|
disable_nacl = !naclSupport;
|
|
use_openssl = true;
|
|
selinux = useSELinux;
|
|
use_cups = false;
|
|
} // stdenv.lib.optionalAttrs (stdenv.system == "x86_64-linux") {
|
|
target_arch = "x64";
|
|
} // stdenv.lib.optionalAttrs (stdenv.system == "i686-linux") {
|
|
target_arch = "ia32";
|
|
});
|
|
|
|
buildType = "Release";
|
|
|
|
configurePhase = ''
|
|
python build/gyp_chromium --depth "$(pwd)" ${gypFlags}
|
|
'';
|
|
|
|
extraBuildFlags = let
|
|
CC = "${gcc}/bin/gcc";
|
|
CXX = "${gcc}/bin/g++";
|
|
in "CC=\"${CC}\" CXX=\"${CXX}\" CC.host=\"${CC}\" CXX.host=\"${CXX}\" LINK.host=\"${CXX}\"";
|
|
|
|
buildPhase = ''
|
|
make ${extraBuildFlags} BUILDTYPE=${buildType} library=shared_library chrome
|
|
'';
|
|
|
|
installPhase = ''
|
|
mkdir -vp "$out/libexec/chrome"
|
|
cp -v "out/${buildType}/"*.pak "$out/libexec/chrome/"
|
|
cp -vR "out/${buildType}/locales" "out/${buildType}/resources" "$out/libexec/chrome/"
|
|
|
|
cp -v "out/${buildType}/chrome" "$out/libexec/chrome/chrome"
|
|
|
|
mkdir -vp "$out/bin"
|
|
makeWrapper "$out/libexec/chrome/chrome" "$out/bin/chrome"
|
|
|
|
mkdir -vp "$out/share/man/man1"
|
|
cp -v "out/${buildType}/chrome.1" "$out/share/man/man1/chrome.1"
|
|
|
|
for icon_file in chrome/app/theme/chromium/product_logo_*[0-9].png; do
|
|
num_and_suffix="''${icon_file##*logo_}"
|
|
icon_size="''${num_and_suffix%.*}"
|
|
logo_output_path="$out/share/icons/hicolor/''${icon_size}x''${icon_size}/apps"
|
|
mkdir -vp "$logo_output_path"
|
|
cp -v "$icon_file" "$logo_output_path/chrome.png"
|
|
done
|
|
'';
|
|
|
|
meta = with stdenv.lib; {
|
|
description = "Chromium, an open source web browser";
|
|
homepage = http://www.chromium.org/;
|
|
maintainers = with stdenv.lib.maintainers; [ goibhniu chaoflow ];
|
|
license = licenses.bsd3;
|
|
};
|
|
}
|