1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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;
};
}
|