diff --git a/pkgs/applications/networking/browsers/google-chrome/default.nix b/pkgs/applications/networking/browsers/google-chrome/default.nix new file mode 100644 index 000000000000..b05da9c67000 --- /dev/null +++ b/pkgs/applications/networking/browsers/google-chrome/default.nix @@ -0,0 +1,120 @@ +{ stdenv, buildEnv, fetchurl, patchelf, bash + +# Linked dynamic libraries. +, glib, fontconfig, freetype, pango, cairo, libX11, libXi, atk, gconf, nss, nspr +, libXcursor, libXext, libXfixes, libXrender, libXScrnSaver, libXcomposite +, alsaLib, libXdamage, libXtst, libXrandr, expat, cups +, dbus_libs, gtk, gdk_pixbuf, gcc + +# Will crash without. +, udev + +# Loaded at runtime. +, libexif + +# Additional dependencies according to other distros. +## Ubuntu +, liberation_ttf, curl, utillinux, xdg_utils, wget +## Arch Linux. +, flac, harfbuzz, icu, libpng, libopus, snappy, speechd +## Gentoo +, bzip2, libcap + +# Which distribution channel to use. +, channel ? "stable" + +# Necessary for USB audio devices. +, pulseSupport ? true, libpulseaudio ? null + +}: + +with stdenv.lib; + +with (import ../chromium/source/update.nix { + inherit (stdenv) system; +}).getChannel channel; + +let + dist = if channel == "dev" then "unstable" else channel; + + opusWithCustomModes = libopus.override { + withCustomModes = true; + }; + + env = buildEnv { + name = "google-chrome-env"; + paths = [ + glib fontconfig freetype pango cairo libX11 libXi atk gconf nss nspr + libXcursor libXext libXfixes libXrender libXScrnSaver libXcomposite + alsaLib libXdamage libXtst libXrandr expat cups + dbus_libs gtk gdk_pixbuf gcc + udev + libexif + liberation_ttf curl utillinux xdg_utils wget + flac harfbuzz icu libpng opusWithCustomModes snappy speechd + bzip2 libcap + ] + ++ optional pulseSupport libpulseaudio; + }; +in stdenv.mkDerivation rec { + inherit version; + + name = "google-chrome-${version}"; + + src = fetchurl binary; + + buildInputs = [ env patchelf ]; + + unpackPhase = '' + ar x $src + tar xf data.tar.xz + ''; + + installPhase = '' + exe=$out/bin/google-chrome-${dist} + rpath="${env}/lib:${env}/lib64" + + mkdir -p $out/bin $out/share + + cp -a opt/* $out/share + cp -a usr/share/* $out/share + + substituteInPlace $out/share/applications/google-chrome.desktop \ + --replace /usr/bin/google-chrome-${dist} $exe + substituteInPlace $out/share/gnome-control-center/default-apps/google-chrome.xml \ + --replace /opt/google/chrome/google-chrome $exe + substituteInPlace $out/share/menu/google-chrome.menu \ + --replace /opt $out/share \ + --replace $out/share/google/chrome/google-chrome $exe + + for icon_file in $out/share/google/chrome/product_logo_*[0-9].png; do + num_and_suffix="''${icon_file##*logo_}" + icon_size="''${num_and_suffix%.*}" + logo_output_prefix="$out/share/icons/hicolor" + logo_output_path="$logo_output_prefix/''${icon_size}x''${icon_size}/apps" + mkdir -p "$logo_output_path" + mv "$icon_file" "$logo_output_path/google-chrome.png" + done + + cat > $exe << EOF + #!${bash}/bin/sh + export LD_LIBRARY_PATH=$rpath\''${LD_LIBRARY_PATH:+:\$LD_LIBRARY_PATH} + export PATH=${env}/bin\''${PATH:+:\$PATH} + $out/share/google/chrome/google-chrome "\$@" + EOF + chmod +x $exe + + for elf in $out/share/google/chrome/{chrome,chrome-sandbox,nacl_helper}; do + patchelf --set-rpath $rpath $elf + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $elf + done + ''; + + meta = { + description = "A freeware web browser developed by Google"; + homepage = "https://www.google.com/chrome/browser/"; + license = licenses.unfree; + maintainers = [ maintainers.msteen ]; + platforms = platforms.linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 66382269ebaa..66e8ef088e30 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -11851,6 +11851,8 @@ let inherit (gnome) GConf; }; + google-chrome = callPackage ../applications/networking/browsers/google-chrome { gconf = gnome.GConf; }; + googleearth = callPackage_i686 ../applications/misc/googleearth { }; google_talk_plugin = callPackage ../applications/networking/browsers/mozilla-plugins/google-talk-plugin {