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:
parent
b06fb762b4
commit
a31301dab4
@ -1,62 +1,87 @@
|
||||
{ GConf, alsaLib, bzip2, cairo, cups, dbus, dbus_glib, expat
|
||||
, fetchurl, ffmpeg, fontconfig, freetype, libX11, libXfixes
|
||||
, glib, gtk, gdk_pixbuf, pango
|
||||
, libXScrnSaver, libXdamage, libXext, libXrender, libXt, libXtst, libXcomposite
|
||||
, libgcrypt, libjpeg, libpng, makeWrapper, nspr, nss, patchelf
|
||||
, stdenv, unzip, zlib, pam, pcre, udev }:
|
||||
{ stdenv, fetchurl, fetchsvn
|
||||
, python, perl, pkgconfig
|
||||
, nspr, nss, udev, bzip2
|
||||
, utillinux, alsaLib
|
||||
, gcc, bison, gperf
|
||||
, 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 {
|
||||
name = "chromium-19.0.1061.0-pre${version}";
|
||||
let
|
||||
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
|
||||
# ‘http://commondatastorage.googleapis.com/chromium-browser-continuous/Linux/LAST_CHANGE’.
|
||||
# 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.";
|
||||
in stdenv.mkDerivation rec {
|
||||
name = "chromium-${version}";
|
||||
|
||||
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 =
|
||||
stdenv.lib.makeLibraryPath
|
||||
[ GConf alsaLib bzip2 cairo cups dbus dbus_glib expat
|
||||
ffmpeg fontconfig freetype libX11 libXScrnSaver libXfixes libXcomposite
|
||||
libXdamage libXext libXrender libXt libXtst libgcrypt libjpeg
|
||||
libpng nspr stdenv.gcc.gcc zlib stdenv.gcc.libc
|
||||
glib gtk gdk_pixbuf pango
|
||||
pam udev
|
||||
];
|
||||
buildInputs = [
|
||||
python perl pkgconfig
|
||||
nspr nss udev bzip2
|
||||
utillinux alsaLib
|
||||
gcc bison gperf
|
||||
krb5
|
||||
glib gtk gconf libgcrypt dbus_glib
|
||||
libXScrnSaver libXcursor
|
||||
] ++ stdenv.lib.optional gnomeKeyringSupport libgnome_keyring;
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
mkdir -p $out/libexec/chrome
|
||||
prePatch = "patchShebangs .";
|
||||
|
||||
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
|
||||
|
||||
${patchelf}/bin/patchelf \
|
||||
--interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \
|
||||
--set-rpath ${libPath}:$out/lib:${stdenv.gcc.gcc}/lib64:${stdenv.gcc.gcc}/lib \
|
||||
$out/libexec/chrome/chrome
|
||||
/* TODO:
|
||||
use_system_bzip2 = true;
|
||||
use_system_ffmpeg = true;
|
||||
use_system_flac = true;
|
||||
use_system_harfbuzz = true;
|
||||
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 \
|
||||
--prefix LD_LIBRARY_PATH : "${pcre}/lib:${nss}/lib"
|
||||
configurePhase = ''
|
||||
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; {
|
||||
|
@ -6341,8 +6341,7 @@ let
|
||||
};
|
||||
|
||||
chrome = lowPrio (callPackage ../applications/networking/browsers/chromium {
|
||||
inherit (gnome) GConf;
|
||||
libpng = libpng12;
|
||||
gconf = gnome.GConf;
|
||||
});
|
||||
|
||||
chromeWrapper = wrapFirefox
|
||||
|
Loading…
Reference in New Issue
Block a user