From a31301dab4d1fd63ff0b7153a6530c702706cd64 Mon Sep 17 00:00:00 2001 From: aszlig Date: Tue, 12 Jun 2012 10:19:22 +0200 Subject: [PATCH] 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. --- .../networking/browsers/chromium/default.nix | 123 +++++++++++------- pkgs/top-level/all-packages.nix | 3 +- 2 files changed, 75 insertions(+), 51 deletions(-) diff --git a/pkgs/applications/networking/browsers/chromium/default.nix b/pkgs/applications/networking/browsers/chromium/default.nix index 2ea5bac0600e..3fb29081b5f7 100644 --- a/pkgs/applications/networking/browsers/chromium/default.nix +++ b/pkgs/applications/networking/browsers/chromium/default.nix @@ -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; { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0dc6197a282f..71702c0bea36 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6341,8 +6341,7 @@ let }; chrome = lowPrio (callPackage ../applications/networking/browsers/chromium { - inherit (gnome) GConf; - libpng = libpng12; + gconf = gnome.GConf; }); chromeWrapper = wrapFirefox