forked from mirrors/nixpkgs
121 lines
3.4 KiB
Nix
121 lines
3.4 KiB
Nix
|
{ 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;
|
||
|
};
|
||
|
}
|