summary refs log tree commit diff
path: root/pkgs/applications/networking/browsers/chromium/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/networking/browsers/chromium/default.nix')
-rw-r--r--pkgs/applications/networking/browsers/chromium/default.nix106
1 files changed, 61 insertions, 45 deletions
diff --git a/pkgs/applications/networking/browsers/chromium/default.nix b/pkgs/applications/networking/browsers/chromium/default.nix
index 4c3a02dcecc2..33f9283b47ad 100644
--- a/pkgs/applications/networking/browsers/chromium/default.nix
+++ b/pkgs/applications/networking/browsers/chromium/default.nix
@@ -1,7 +1,4 @@
-{ stdenv, getConfig, fetchurl, makeWrapper, which
-
-# this is needed in order to build the versions older than 21.x
-, subversion
+{ stdenv, config, fetchurl, makeWrapper, which
 
 # default dependencies
 , bzip2, flac, speex
@@ -25,30 +22,33 @@
 , libselinux # config.selinux
 }:
 
+with stdenv.lib;
+
 let
-  mkConfigurable = stdenv.lib.mapAttrs (flag: default: getConfig ["chromium" flag] default);
+  mkConfigurable = mapAttrs (flag: default: attrByPath ["chromium" flag] default config);
 
-  config = mkConfigurable {
+  cfg = mkConfigurable {
     channel = "stable";
     selinux = false;
     nacl = false;
-    openssl = true;
+    openssl = false;
     gnome = false;
     gnomeKeyring = false;
     proprietaryCodecs = true;
     cups = false;
-    pulseaudio = getConfig ["pulseaudio"] true;
+    pulseaudio = config.pulseaudio or true;
   };
 
-  sourceInfo = builtins.getAttr config.channel (import ./sources.nix);
+  sourceInfo = builtins.getAttr cfg.channel (import ./sources.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));
+  mkGypFlags =
+    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;
@@ -59,7 +59,7 @@ let
     use_system_libpng = true;
     use_system_libxml = true;
     use_system_speex = true;
-    use_system_ssl = true;
+    use_system_ssl = cfg.openssl;
     use_system_stlport = true;
     use_system_xdg_utils = true;
     use_system_yasm = true;
@@ -73,14 +73,28 @@ let
     use_system_v8 = false;
   };
 
-  needsSubversion = stdenv.lib.versionOlder sourceInfo.version "21.0.0.0";
-
   defaultDependencies = [
     bzip2 flac speex
     libevent expat libjpeg
     libpng libxml2 libxslt
     xdg_utils yasm zlib
-  ] ++ stdenv.lib.optional needsSubversion subversion;
+  ];
+
+  seccompPatch = let
+    pre22 = versionOlder sourceInfo.version "22.0.0.0";
+  in if pre22 then ./enable_seccomp.patch else ./enable_seccomp22.patch;
+
+  # XXX: this reverts r151720 to prevent http://crbug.com/143623
+  maybeRevertZlibChanges = let
+    below22 = versionOlder sourceInfo.version "22.0.0.0";
+    patch = fetchurl {
+      name = "revert-r151720";
+      url = "http://git.chromium.org/gitweb/?p=chromium.git;a=commitdiff_plain;"
+          + "hp=4419ec6414b33b6b19bb2e380b4998ed5193ecab;"
+          + "h=0fabb4fda7059a8757422e8a44e70deeab28e698";
+      sha256 = "0n0d6mkg89g8q63cifapzpg9dxfs2n6xvk4k13szhymvf67b77pf";
+    };
+  in optional (!below22) patch;
 
 in stdenv.mkDerivation rec {
   name = "${packageName}-${version}";
@@ -97,27 +111,28 @@ in stdenv.mkDerivation rec {
     which makeWrapper
     python perl pkgconfig
     nspr udev
-    (if config.openssl then openssl else nss)
+    (if cfg.openssl then openssl else nss)
     utillinux alsaLib
     gcc bison gperf
     krb5
     glib gtk dbus_glib
     libXScrnSaver libXcursor mesa
-  ] ++ stdenv.lib.optional config.gnomeKeyring libgnome_keyring
-    ++ stdenv.lib.optionals config.gnome [ gconf libgcrypt ]
-    ++ stdenv.lib.optional config.selinux libselinux
-    ++ stdenv.lib.optional config.cups libgcrypt
-    ++ stdenv.lib.optional config.pulseaudio pulseaudio;
+  ] ++ optional cfg.gnomeKeyring libgnome_keyring
+    ++ optionals cfg.gnome [ gconf libgcrypt ]
+    ++ optional cfg.selinux libselinux
+    ++ optional cfg.cups libgcrypt
+    ++ optional cfg.pulseaudio pulseaudio;
 
-  opensslPatches = stdenv.lib.optional config.openssl openssl.patches;
+  opensslPatches = optional cfg.openssl openssl.patches;
 
   prePatch = "patchShebangs .";
 
-  patches = stdenv.lib.optional (!config.selinux) ./enable_seccomp.patch
-         ++ stdenv.lib.optional config.cups ./cups_allow_deprecated.patch
-         ++ stdenv.lib.optional config.pulseaudio ./pulseaudio_array_bounds.patch;
+  patches = optional (!cfg.selinux) seccompPatch
+         ++ optional cfg.cups ./cups_allow_deprecated.patch
+         ++ optional cfg.pulseaudio ./pulseaudio_array_bounds.patch
+         ++ maybeRevertZlibChanges;
 
-  postPatch = stdenv.lib.optionalString config.openssl ''
+  postPatch = optionalString cfg.openssl ''
     cat $opensslPatches | patch -p1 -d third_party/openssl/openssl
   '';
 
@@ -125,21 +140,21 @@ in stdenv.mkDerivation rec {
     linux_use_gold_binary = false;
     linux_use_gold_flags = false;
     proprietary_codecs = false;
-    use_gnome_keyring = config.gnomeKeyring;
-    use_gconf = config.gnome;
-    use_gio = config.gnome;
-    use_pulseaudio = config.pulseaudio;
-    disable_nacl = !config.nacl;
-    use_openssl = config.openssl;
-    selinux = config.selinux;
-    use_cups = config.cups;
-  } // stdenv.lib.optionalAttrs config.proprietaryCodecs {
+    use_gnome_keyring = cfg.gnomeKeyring;
+    use_gconf = cfg.gnome;
+    use_gio = cfg.gnome;
+    use_pulseaudio = cfg.pulseaudio;
+    disable_nacl = !cfg.nacl;
+    use_openssl = cfg.openssl;
+    selinux = cfg.selinux;
+    use_cups = cfg.cups;
+  } // optionalAttrs cfg.proprietaryCodecs {
     # enable support for the H.264 codec
     proprietary_codecs = true;
     ffmpeg_branding = "Chrome";
-  } // stdenv.lib.optionalAttrs (stdenv.system == "x86_64-linux") {
+  } // optionalAttrs (stdenv.system == "x86_64-linux") {
     target_arch = "x64";
-  } // stdenv.lib.optionalAttrs (stdenv.system == "i686-linux") {
+  } // optionalAttrs (stdenv.system == "i686-linux") {
     target_arch = "ia32";
   });
 
@@ -172,6 +187,7 @@ in stdenv.mkDerivation rec {
     mkdir -vp "$out/libexec/${packageName}"
     cp -v "out/${buildType}/"*.pak "$out/libexec/${packageName}/"
     cp -vR "out/${buildType}/locales" "out/${buildType}/resources" "$out/libexec/${packageName}/"
+    cp -v out/${buildType}/libffmpegsumo.so "$out/libexec/${packageName}/"
 
     cp -v "out/${buildType}/chrome" "$out/libexec/${packageName}/${packageName}"
 
@@ -190,11 +206,11 @@ in stdenv.mkDerivation rec {
     done
   '';
 
-  meta =  with stdenv.lib; {
+  meta = {
     description = "Chromium, an open source web browser";
     homepage = http://www.chromium.org/;
-    maintainers = with stdenv.lib.maintainers; [ goibhniu chaoflow ];
+    maintainers = with maintainers; [ goibhniu chaoflow ];
     license = licenses.bsd3;
-    platforms = with stdenv.lib.platforms; linux;
+    platforms = platforms.linux;
   };
 }