chromium: Minimal build (no install) from source.

This only gets chromium to build so far, installation is missing by upstream, so
we need to manually copy the corresponding files. And I guess with nix, we also
need to patch a few paths on installation.

Another issue is that at the moment, a lot of dependencies are used from the
source tree, rather than from the system.

Also, it would be nice to build using LLVM, as it really speeds up compilation a
*LOT* and also has the side effect of resulting in smaller binaries.

Working unit tests would be nice, too. Unfortunately they're quite heavyweight
and take hours to run, so I guess "someday" would be the most appropriate time
to integrate.

Further todo's:

- Allow to disable GConf, GIO and CUPS.
- Option to disable the sandbox (for whatever reason the user might have).
- Integrate gold binutils.
- Pulseaudio support.
- Clearly separate Linux specific stuff.
This commit is contained in:
aszlig 2012-06-12 10:19:22 +02:00 committed by Eelco Dolstra
parent b06fb762b4
commit a31301dab4
2 changed files with 75 additions and 51 deletions

View File

@ -1,62 +1,87 @@
{ GConf, alsaLib, bzip2, cairo, cups, dbus, dbus_glib, expat { stdenv, fetchurl, fetchsvn
, fetchurl, ffmpeg, fontconfig, freetype, libX11, libXfixes , python, perl, pkgconfig
, glib, gtk, gdk_pixbuf, pango , nspr, nss, udev, bzip2
, libXScrnSaver, libXdamage, libXext, libXrender, libXt, libXtst, libXcomposite , utillinux, alsaLib
, libgcrypt, libjpeg, libpng, makeWrapper, nspr, nss, patchelf , gcc, bison, gperf
, stdenv, unzip, zlib, pam, pcre, udev }: , krb5
, glib, gtk, gconf, libgcrypt, libgnome_keyring, dbus_glib
, libXScrnSaver, libXcursor
assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux" ; , useSELinux ? false
, naclSupport ? false
, gnomeKeyringSupport ? false
, useProprietaryCodecs ? false
}:
stdenv.mkDerivation rec { let
name = "chromium-19.0.1061.0-pre${version}"; 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));
# To determine the latest revision, get in stdenv.mkDerivation rec {
# http://commondatastorage.googleapis.com/chromium-browser-continuous/Linux/LAST_CHANGE. name = "chromium-${version}";
# For the version number, see about:version.
version = "124950";
src =
if stdenv.system == "x86_64-linux" then
fetchurl {
url = "http://commondatastorage.googleapis.com/chromium-browser-continuous/Linux_x64/${version}/chrome-linux.zip";
sha256 = "4472bf584a96e477e2c17f96d4452dd41f4f34ac3d6a9bb4c845cf15d8db0c73";
}
else if stdenv.system == "i686-linux" then
fetchurl {
url = "http://commondatastorage.googleapis.com/chromium-browser-continuous/Linux/${version}/chrome-linux.zip";
sha256 = "6e8a49d9917ee26b67d14cd10b85711c3b9382864197ba02b3cfe8e636d3d69c";
}
else throw "Chromium is not supported on this platform.";
phases = "unpackPhase installPhase"; version = "21.0.1171.0";
buildInputs = [ makeWrapper unzip ]; src = fetchurl {
url = "http://commondatastorage.googleapis.com/chromium-browser-official/chromium-${version}.tar.bz2";
sha256 = "3fd9b2d8895750a4435a585b9c2dc7d34b583c6470ba67eb6ea6c2579f126377";
};
libPath = buildInputs = [
stdenv.lib.makeLibraryPath python perl pkgconfig
[ GConf alsaLib bzip2 cairo cups dbus dbus_glib expat nspr nss udev bzip2
ffmpeg fontconfig freetype libX11 libXScrnSaver libXfixes libXcomposite utillinux alsaLib
libXdamage libXext libXrender libXt libXtst libgcrypt libjpeg gcc bison gperf
libpng nspr stdenv.gcc.gcc zlib stdenv.gcc.libc krb5
glib gtk gdk_pixbuf pango glib gtk gconf libgcrypt dbus_glib
pam udev libXScrnSaver libXcursor
]; ] ++ stdenv.lib.optional gnomeKeyringSupport libgnome_keyring;
installPhase = '' prePatch = "patchShebangs .";
mkdir -p $out/bin
mkdir -p $out/libexec/chrome
cp -R * $out/libexec/chrome gypFlags = mkGypFlags {
linux_use_gold_binary = false;
linux_use_gold_flags = false;
proprietary_codecs = false;
use_gnome_keyring = gnomeKeyringSupport;
disable_nacl = !naclSupport;
use_cups = false;
};
strip $out/libexec/chrome/chrome /* TODO:
use_system_bzip2 = true;
${patchelf}/bin/patchelf \ use_system_ffmpeg = true;
--interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \ use_system_flac = true;
--set-rpath ${libPath}:$out/lib:${stdenv.gcc.gcc}/lib64:${stdenv.gcc.gcc}/lib \ use_system_harfbuzz = true;
$out/libexec/chrome/chrome use_system_icu = true;
use_system_libevent = true;
use_system_libexpat = true;
use_system_libjpeg = true;
use_system_libpng = true;
use_system_libwebp = true;
use_system_libxml = true;
use_system_skia = true;
use_system_speex = true;
use_system_sqlite = true;
use_system_ssl = true;
use_system_stlport = true;
use_system_v8 = true;
use_system_xdg_utils = true;
use_system_yasm = true;
use_system_zlib = true;
*/
makeWrapper $out/libexec/chrome/chrome $out/bin/chrome \ configurePhase = ''
--prefix LD_LIBRARY_PATH : "${pcre}/lib:${nss}/lib" python build/gyp_chromium --depth $(pwd) ${gypFlags}
'';
buildPhase = ''
make CC=${gcc}/bin/gcc BUILDTYPE=Release library=shared_library chrome chrome_sandbox
''; '';
meta = with stdenv.lib; { meta = with stdenv.lib; {

View File

@ -6341,8 +6341,7 @@ let
}; };
chrome = lowPrio (callPackage ../applications/networking/browsers/chromium { chrome = lowPrio (callPackage ../applications/networking/browsers/chromium {
inherit (gnome) GConf; gconf = gnome.GConf;
libpng = libpng12;
}); });
chromeWrapper = wrapFirefox chromeWrapper = wrapFirefox