blob: f897280f0fca7017ca886b7b361f0e9f74ca2dd6 [file] [log] [blame]
[email protected]e041ed12009-03-10 16:43:011#!/bin/bash -e
2
[email protected]aac39c92012-02-08 18:39:533# Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]e46cdae2009-08-25 20:59:274# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
[email protected]cf1df402008-10-31 21:45:307# Script to install everything needed to build chromium (well, ideally, anyway)
mostynbdf175a82016-02-08 23:27:208# See https://chromium.googlesource.com/chromium/src/+/master/docs/linux_build_instructions.md
[email protected]cf1df402008-10-31 21:45:309
[email protected]1eae2bfb2010-01-26 18:17:5310usage() {
11 echo "Usage: $0 [--options]"
12 echo "Options:"
13 echo "--[no-]syms: enable or disable installation of debugging symbols"
johnme49bb458a2014-11-27 15:45:3114 echo "--lib32: enable installation of 32-bit libraries, e.g. for V8 snapshot"
[email protected]f2826b6a2012-11-15 01:06:2615 echo "--[no-]arm: enable or disable installation of arm cross toolchain"
[email protected]bd29cdd2013-02-22 03:49:2016 echo "--[no-]chromeos-fonts: enable or disable installation of Chrome OS"\
17 "fonts"
[email protected]565416362014-01-16 21:26:4718 echo "--[no-]nacl: enable or disable installation of prerequisites for"\
19 "building standalone NaCl and all its toolchains"
[email protected]e2544ed42012-04-23 04:48:3120 echo "--no-prompt: silently select standard options/defaults"
[email protected]ba48c4ca2013-10-25 16:11:4621 echo "--quick-check: quickly try to determine if dependencies are installed"
22 echo " (this avoids interactive prompts and sudo commands,"
23 echo " so might not be 100% accurate)"
24 echo "--unsupported: attempt installation even on unsupported systems"
[email protected]1eae2bfb2010-01-26 18:17:5325 echo "Script will prompt interactively if options not given."
26 exit 1
27}
28
thomasanderson4e3d30fe2016-12-07 18:58:3429# Waits for the user to press 'Y' or 'N'. Either uppercase of lowercase is
30# accepted. Returns 0 for 'Y' and 1 for 'N'. If an optional parameter has
31# been provided to yes_no(), the function also accepts RETURN as a user input.
32# The parameter specifies the exit code that should be returned in that case.
33# The function will echo the user's selection followed by a newline character.
34# Users can abort the function by pressing CTRL-C. This will call "exit 1".
35yes_no() {
36 if [ 0 -ne "${do_default-0}" ] ; then
37 [ $1 -eq 0 ] && echo "Y" || echo "N"
38 return $1
39 fi
40 local c
41 while :; do
42 c="$(trap 'stty echo -iuclc icanon 2>/dev/null' EXIT INT TERM QUIT
43 stty -echo iuclc -icanon 2>/dev/null
44 dd count=1 bs=1 2>/dev/null | od -An -tx1)"
45 case "$c" in
46 " 0a") if [ -n "$1" ]; then
47 [ $1 -eq 0 ] && echo "Y" || echo "N"
48 return $1
49 fi
50 ;;
51 " 79") echo "Y"
52 return 0
53 ;;
54 " 6e") echo "N"
55 return 1
56 ;;
57 "") echo "Aborted" >&2
58 exit 1
59 ;;
60 *) # The user pressed an unrecognized key. As we are not echoing
61 # any incorrect user input, alert the user by ringing the bell.
62 (tput bel) 2>/dev/null
63 ;;
64 esac
65 done
66}
67
[email protected]4fc00712013-05-29 23:11:2068# Checks whether a particular package is available in the repos.
69# USAGE: $ package_exists <package name>
70package_exists() {
thomasandersonb4a2bca2016-12-08 06:46:0571 [ ! -z "`apt-cache search --names-only "$1"`" ]
[email protected]4fc00712013-05-29 23:11:2072}
73
[email protected]fbeddf22014-01-17 23:59:0174# These default to on because (some) bots need them and it keeps things
75# simple for the bot setup if all bots just run the script in its default
76# mode. Developers who don't want stuff they don't need installed on their
77# own workstations can pass --no-arm --no-nacl when running the script.
78do_inst_arm=1
79do_inst_nacl=1
80
[email protected]1eae2bfb2010-01-26 18:17:5381while test "$1" != ""
82do
83 case "$1" in
[email protected]ce774642011-09-12 23:21:3984 --syms) do_inst_syms=1;;
85 --no-syms) do_inst_syms=0;;
[email protected]ce774642011-09-12 23:21:3986 --lib32) do_inst_lib32=1;;
[email protected]f2826b6a2012-11-15 01:06:2687 --arm) do_inst_arm=1;;
88 --no-arm) do_inst_arm=0;;
[email protected]bd29cdd2013-02-22 03:49:2089 --chromeos-fonts) do_inst_chromeos_fonts=1;;
90 --no-chromeos-fonts) do_inst_chromeos_fonts=0;;
[email protected]565416362014-01-16 21:26:4791 --nacl) do_inst_nacl=1;;
92 --no-nacl) do_inst_nacl=0;;
[email protected]e2544ed42012-04-23 04:48:3193 --no-prompt) do_default=1
94 do_quietly="-qq --assume-yes"
95 ;;
[email protected]ba48c4ca2013-10-25 16:11:4696 --quick-check) do_quick_check=1;;
[email protected]fe63a022013-01-15 22:11:4797 --unsupported) do_unsupported=1;;
[email protected]1eae2bfb2010-01-26 18:17:5398 *) usage;;
99 esac
100 shift
101done
102
johnme49bb458a2014-11-27 15:45:31103if test "$do_inst_arm" = "1"; then
104 do_inst_lib32=1
105fi
106
[email protected]0febc9b2014-05-22 20:07:19107# Check for lsb_release command in $PATH
108if ! which lsb_release > /dev/null; then
109 echo "ERROR: lsb_release not found in \$PATH" >&2
110 exit 1;
111fi
[email protected]f2826b6a2012-11-15 01:06:26112
thomasandersondfefc6c02017-05-04 01:29:11113distro_codename=$(lsb_release --codename --short)
114distro_id=$(lsb_release --id --short)
marcin3a0793a2017-06-30 03:51:28115supported_codenames="(trusty|xenial|yakkety|zesty)"
thomasandersondfefc6c02017-05-04 01:29:11116supported_ids="(Debian)"
[email protected]ba48c4ca2013-10-25 16:11:46117if [ 0 -eq "${do_unsupported-0}" ] && [ 0 -eq "${do_quick_check-0}" ] ; then
thomasandersondfefc6c02017-05-04 01:29:11118 if [[ ! $distro_codename =~ $supported_codenames &&
119 ! $distro_id =~ $supported_ids ]]; then
thomasanderson05c40292017-03-28 19:28:45120 echo -e "ERROR: The only supported distros are\n" \
121 "\tUbuntu 14.04 (trusty)\n" \
122 "\tUbuntu 16.04 (xenial)\n" \
123 "\tUbuntu 16.10 (yakkety)\n" \
marcin3a0793a2017-06-30 03:51:28124 "\tUbuntu 17.04 (zesty)\n" \
thomasandersondfefc6c02017-05-04 01:29:11125 "\tDebian 8 (jessie) or later" >&2
anthonyvd2ae919e52016-11-21 19:47:12126 exit 1
[email protected]fe63a022013-01-15 22:11:47127 fi
[email protected]cf1df402008-10-31 21:45:30128
[email protected]fe63a022013-01-15 22:11:47129 if ! uname -m | egrep -q "i686|x86_64"; then
anthonyvd2ae919e52016-11-21 19:47:12130 echo "Only x86 architectures are currently supported" >&2
[email protected]fe63a022013-01-15 22:11:47131 exit
132 fi
[email protected]e041ed12009-03-10 16:43:01133fi
134
[email protected]ba48c4ca2013-10-25 16:11:46135if [ "x$(id -u)" != x0 ] && [ 0 -eq "${do_quick_check-0}" ]; then
[email protected]e041ed12009-03-10 16:43:01136 echo "Running as non-root user."
137 echo "You might have to enter your password one or more times for 'sudo'."
[email protected]8ada8c52009-03-10 21:53:08138 echo
[email protected]e041ed12009-03-10 16:43:01139fi
140
[email protected]fdc6bf52010-06-07 22:01:57141# Packages needed for chromeos only
dnj6a8491d12015-05-26 21:08:12142chromeos_dev_list="libbluetooth-dev libxkbcommon-dev realpath"
[email protected]fdc6bf52010-06-07 22:01:57143
[email protected]b61f6882013-11-14 20:41:41144# Packages needed for development
thomasanderson20032a5c2017-03-02 00:28:20145dev_list="\
146 bison
147 cdbs
148 curl
149 dpkg-dev
150 elfutils
151 devscripts
152 fakeroot
153 flex
154 fonts-ipafont
155 fonts-thai-tlwg
156 g++
157 git-core
158 git-svn
159 gperf
160 libasound2-dev
161 libbrlapi-dev
162 libav-tools
163 libbz2-dev
164 libcairo2-dev
165 libcap-dev
166 libcups2-dev
167 libcurl4-gnutls-dev
168 libdrm-dev
169 libelf-dev
170 libffi-dev
171 libgconf2-dev
172 libglib2.0-dev
173 libglu1-mesa-dev
174 libgnome-keyring-dev
175 libgtk2.0-dev
176 libgtk-3-dev
177 libkrb5-dev
178 libnspr4-dev
179 libnss3-dev
180 libpam0g-dev
181 libpci-dev
182 libpulse-dev
183 libsctp-dev
184 libspeechd-dev
185 libsqlite3-dev
186 libssl-dev
187 libudev-dev
188 libwww-perl
189 libxslt1-dev
190 libxss-dev
191 libxt-dev
192 libxtst-dev
193 openbox
194 patch
195 perl
196 pkg-config
197 python
198 python-cherrypy3
199 python-crypto
200 python-dev
201 python-numpy
202 python-opencv
203 python-openssl
204 python-psutil
205 python-yaml
206 rpm
207 ruby
208 subversion
209 ttf-dejavu-core
210 wdiff
Tom Andersond79de41d2017-08-08 00:23:23211 x11-utils
thomasanderson20032a5c2017-03-02 00:28:20212 xcompmgr
213 zip
214 $chromeos_dev_list
215"
[email protected]fdc6bf52010-06-07 22:01:57216
[email protected]f16aabf2012-08-15 21:00:14217# 64-bit systems need a minimum set of 32-bit compat packages for the pre-built
[email protected]f8ceadb2014-08-18 12:30:23218# NaCl binaries.
ki.stfu0a79d6992015-09-17 07:27:12219if file -L /sbin/init | grep -q 'ELF 64-bit'; then
[email protected]d93d68b12012-10-15 06:39:53220 dev_list="${dev_list} libc6-i386 lib32gcc1 lib32stdc++6"
[email protected]f16aabf2012-08-15 21:00:14221fi
222
[email protected]fdc6bf52010-06-07 22:01:57223# Run-time libraries required by chromeos only
[email protected]ba48c4ca2013-10-25 16:11:46224chromeos_lib_list="libpulse0 libbz2-1.0"
[email protected]e041ed12009-03-10 16:43:01225
226# Full list of required run-time libraries
thomasanderson20032a5c2017-03-02 00:28:20227lib_list="\
228 libatk1.0-0
229 libc6
230 libasound2
231 libcairo2
232 libcap2
233 libcups2
234 libexpat1
235 libffi6
236 libfontconfig1
237 libfreetype6
238 libglib2.0-0
239 libgnome-keyring0
240 libgtk2.0-0
241 libgtk-3-0
242 libpam0g
243 libpango1.0-0
244 libpci3
245 libpcre3
246 libpixman-1-0
247 libspeechd2
248 libstdc++6
249 libsqlite3-0
250 libx11-6
251 libx11-xcb1
252 libxau6
253 libxcb1
254 libxcomposite1
255 libxcursor1
256 libxdamage1
257 libxdmcp6
258 libxext6
259 libxfixes3
260 libxi6
261 libxinerama1
262 libxrandr2
263 libxrender1
264 libxtst6
265 zlib1g
266 $chromeos_lib_list
267"
[email protected]e041ed12009-03-10 16:43:01268
269# Debugging symbols for all of the run-time libraries
thomasanderson20032a5c2017-03-02 00:28:20270dbg_list="\
271 libatk1.0-dbg
272 libc6-dbg
273 libcairo2-dbg
274 libffi6-dbg
275 libfontconfig1-dbg
276 libglib2.0-0-dbg
277 libgtk2.0-0-dbg
278 libgtk-3-0-dbg
279 libpango1.0-0-dbg
280 libpcre3-dbg
281 libpixman-1-0-dbg
282 libsqlite3-0-dbg
283 libx11-6-dbg
284 libx11-xcb1-dbg
285 libxau6-dbg
286 libxcb1-dbg
287 libxcomposite1-dbg
288 libxcursor1-dbg
289 libxdamage1-dbg
290 libxdmcp6-dbg
291 libxext6-dbg
thomasanderson20032a5c2017-03-02 00:28:20292 libxi6-dbg
293 libxinerama1-dbg
294 libxrandr2-dbg
295 libxrender1-dbg
296 libxtst6-dbg
297 zlib1g-dbg
298"
lfgad917d12015-03-17 23:28:00299
thomasandersondfefc6c02017-05-04 01:29:11300if [[ ! $distro_codename =~ "yakkety" ]]; then
thomasanderson05c40292017-03-28 19:28:45301 dbg_list="${dbg_list} libxfixes3-dbg"
302fi
303
lfgad917d12015-03-17 23:28:00304# Find the proper version of libstdc++6-4.x-dbg.
thomasandersondfefc6c02017-05-04 01:29:11305if [ "x$distro_codename" = "xtrusty" ]; then
lfgad917d12015-03-17 23:28:00306 dbg_list="${dbg_list} libstdc++6-4.8-dbg"
307else
308 dbg_list="${dbg_list} libstdc++6-4.9-dbg"
309fi
[email protected]e041ed12009-03-10 16:43:01310
johnme49bb458a2014-11-27 15:45:31311# 32-bit libraries needed e.g. to compile V8 snapshot for Android or armhf
Tanin Na Nakorn6cbe32e52017-05-30 19:37:04312lib32_list="linux-libc-dev:i386 libpci3:i386"
johnme49bb458a2014-11-27 15:45:31313
[email protected]3f85dac32013-10-29 02:38:46314# arm cross toolchain packages needed to build chrome on armhf
thomasanderson4e3d30fe2016-12-07 18:58:34315EM_REPO="deb http://emdebian.org/tools/debian/ jessie main"
316EM_SOURCE=$(cat <<EOF
317# Repo added by Chromium $0
318${EM_REPO}
319# deb-src http://emdebian.org/tools/debian/ jessie main
320EOF
321)
322EM_ARCHIVE_KEY_FINGER="084C6C6F39159EDB67969AA87DE089671804772E"
323GPP_ARM_PACKAGE="g++-arm-linux-gnueabihf"
thomasandersondfefc6c02017-05-04 01:29:11324case $distro_codename in
kjellander95504ae2017-03-30 12:30:31325 jessie)
thomasanderson4e3d30fe2016-12-07 18:58:34326 eval $(apt-config shell APT_SOURCESDIR 'Dir::Etc::sourceparts/d')
327 CROSSTOOLS_LIST="${APT_SOURCESDIR}/crosstools.list"
328 arm_list="libc6-dev:armhf
329 linux-libc-dev:armhf"
330 if test "$do_inst_arm" = "1"; then
331 if $(dpkg-query -W ${GPP_ARM_PACKAGE} &>/dev/null); then
332 arm_list+=" ${GPP_ARM_PACKAGE}"
333 else
334 echo "The Debian Cross-toolchains repository is necessary to"
335 echo "cross-compile Chromium for arm."
336 echo -n "Do you want me to add it for you (y/N) "
337 if yes_no 1; then
338 gpg --keyserver pgp.mit.edu --recv-keys ${EM_ARCHIVE_KEY_FINGER}
339 gpg -a --export ${EM_ARCHIVE_KEY_FINGER} | sudo apt-key add -
340 if ! grep "^${EM_REPO}" "${CROSSTOOLS_LIST}" &>/dev/null; then
341 echo "${EM_SOURCE}" | sudo tee -a "${CROSSTOOLS_LIST}" >/dev/null
342 fi
343 arm_list+=" ${GPP_ARM_PACKAGE}"
344 fi
345 fi
346 fi
347 ;;
thomasandersondfefc6c02017-05-04 01:29:11348 # All necessary ARM packages are available on the default repos on
349 # Debian 9 and later.
kjellander95504ae2017-03-30 12:30:31350 *)
kjellander74c7e4b2017-01-27 13:15:44351 arm_list="binutils-aarch64-linux-gnu
352 libc6-dev-armhf-cross
thomasanderson4e3d30fe2016-12-07 18:58:34353 linux-libc-dev-armhf-cross
354 ${GPP_ARM_PACKAGE}"
355 ;;
356esac
[email protected]31a605532011-08-23 22:27:35357
sbcb5d4ded2015-04-01 17:49:03358# Work around for dependency issue Ubuntu/Trusty: http://crbug.com/435056
thomasandersondfefc6c02017-05-04 01:29:11359case $distro_codename in
friedmanbf8b90a2016-04-21 01:15:48360 trusty)
361 arm_list+=" g++-4.8-multilib-arm-linux-gnueabihf
362 gcc-4.8-multilib-arm-linux-gnueabihf"
363 ;;
marcin3a0793a2017-06-30 03:51:28364 xenial|yakkety|zesty)
krasineef3d4b2016-04-22 00:52:18365 arm_list+=" g++-5-multilib-arm-linux-gnueabihf
366 gcc-5-multilib-arm-linux-gnueabihf
367 gcc-arm-linux-gnueabihf"
368 ;;
friedmanbf8b90a2016-04-21 01:15:48369esac
sbcb5d4ded2015-04-01 17:49:03370
[email protected]713eac62014-06-02 23:10:03371# Packages to build NaCl, its toolchains, and its ports.
Brad Nelson5e59c2c2014-09-06 06:18:45372naclports_list="ant autoconf bison cmake gawk intltool xutils-dev xsltproc"
thomasanderson20032a5c2017-03-02 00:28:20373nacl_list="\
374 g++-mingw-w64-i686
375 lib32z1-dev
376 libasound2:i386
377 libcap2:i386
378 libelf-dev:i386
379 libfontconfig1:i386
380 libgconf-2-4:i386
381 libglib2.0-0:i386
382 libgpm2:i386
383 libgtk2.0-0:i386
384 libgtk-3-0:i386
385 libncurses5:i386
386 lib32ncurses5-dev
387 libnss3:i386
388 libpango1.0-0:i386
thomasandersondfefc6c02017-05-04 01:29:11389 libssl-dev:i386
thomasanderson20032a5c2017-03-02 00:28:20390 libtinfo-dev
391 libtinfo-dev:i386
392 libtool
393 libxcomposite1:i386
394 libxcursor1:i386
395 libxdamage1:i386
396 libxi6:i386
397 libxrandr2:i386
398 libxss1:i386
399 libxtst6:i386
400 texinfo
401 xvfb
402 ${naclports_list}
403"
[email protected]419a9a62014-06-19 18:26:18404
thomasandersondfefc6c02017-05-04 01:29:11405if package_exists libssl1.0.0; then
406 nacl_list="${nacl_list} libssl1.0.0:i386"
407else
408 nacl_list="${nacl_list} libssl1.0.2:i386"
409fi
410
torne8a6eb692015-11-05 12:43:08411# Find the proper version of packages that depend on mesa. Only one -lts variant
412# of mesa can be installed and everything that depends on it must match.
413
414# Query for the name and status of all mesa LTS variants, filter for only
415# installed packages, extract just the name, and eliminate duplicates (there can
416# be more than one with the same name in the case of multiarch). Expand into an
417# array.
418mesa_packages=($(dpkg-query -Wf'${package} ${status}\n' \
torne12cd9f6c2016-02-24 18:52:23419 libgl1-mesa-glx-lts-\* 2>/dev/null | \
torne8a6eb692015-11-05 12:43:08420 grep " ok installed" | cut -d " " -f 1 | sort -u))
421if [ "${#mesa_packages[@]}" -eq 0 ]; then
422 mesa_variant=""
423elif [ "${#mesa_packages[@]}" -eq 1 ]; then
424 # Strip the base package name and leave just "-lts-whatever"
425 mesa_variant="${mesa_packages[0]#libgl1-mesa-glx}"
426else
427 echo "ERROR: unable to determine which libgl1-mesa-glx variant is installed."
428 exit 1
429fi
[email protected]3a4bd5d2014-06-25 23:55:04430dev_list="${dev_list} libgbm-dev${mesa_variant}
vabrf1e8b17f2015-03-17 10:56:37431 libgles2-mesa-dev${mesa_variant} libgl1-mesa-dev${mesa_variant}
432 mesa-common-dev${mesa_variant}"
[email protected]419a9a62014-06-19 18:26:18433nacl_list="${nacl_list} libgl1-mesa-glx${mesa_variant}:i386"
[email protected]565416362014-01-16 21:26:47434
[email protected]757c2962012-03-15 19:05:18435# Some package names have changed over time
marcin73929a72017-01-04 22:04:58436if package_exists libpng12-0; then
437 lib_list="${lib_list} libpng12-0"
438else
439 lib_list="${lib_list} libpng16-16"
440fi
[email protected]4fc00712013-05-29 23:11:20441if package_exists libnspr4-dbg; then
[email protected]1a0f64a2011-05-20 17:53:55442 dbg_list="${dbg_list} libnspr4-dbg libnss3-dbg"
443 lib_list="${lib_list} libnspr4 libnss3"
[email protected]757c2962012-03-15 19:05:18444else
445 dbg_list="${dbg_list} libnspr4-0d-dbg libnss3-1d-dbg"
446 lib_list="${lib_list} libnspr4-0d libnss3-1d"
447fi
[email protected]4fc00712013-05-29 23:11:20448if package_exists libjpeg-dev; then
[email protected]9e895962013-05-21 08:26:42449 dev_list="${dev_list} libjpeg-dev"
[email protected]b11411c2012-03-21 22:09:41450else
[email protected]9e895962013-05-21 08:26:42451 dev_list="${dev_list} libjpeg62-dev"
[email protected]b11411c2012-03-21 22:09:41452fi
[email protected]4fc00712013-05-29 23:11:20453if package_exists libudev1; then
[email protected]9e895962013-05-21 08:26:42454 dev_list="${dev_list} libudev1"
[email protected]ab9e69082014-06-05 15:28:52455 nacl_list="${nacl_list} libudev1:i386"
[email protected]9e895962013-05-21 08:26:42456else
457 dev_list="${dev_list} libudev0"
[email protected]ab9e69082014-06-05 15:28:52458 nacl_list="${nacl_list} libudev0:i386"
[email protected]9e895962013-05-21 08:26:42459fi
[email protected]3ea42912013-09-06 06:23:57460if package_exists libbrlapi0.6; then
461 dev_list="${dev_list} libbrlapi0.6"
462else
463 dev_list="${dev_list} libbrlapi0.5"
464fi
halton.huo3e728c42016-01-20 05:12:23465if package_exists apache2-bin; then
466 dev_list="${dev_list} apache2-bin"
467else
468 dev_list="${dev_list} apache2.2-bin"
469fi
vadimsh278ff0662016-05-19 00:06:28470if package_exists xfonts-mathml; then
halton.huo3e728c42016-01-20 05:12:23471 dev_list="${dev_list} xfonts-mathml"
472fi
krasineef3d4b2016-04-22 00:52:18473if package_exists fonts-indic; then
vadimsh278ff0662016-05-19 00:06:28474 dev_list="${dev_list} fonts-indic"
krasineef3d4b2016-04-22 00:52:18475else
vadimsh278ff0662016-05-19 00:06:28476 dev_list="${dev_list} ttf-indic-fonts"
krasineef3d4b2016-04-22 00:52:18477fi
478if package_exists php7.0-cgi; then
vadimsh278ff0662016-05-19 00:06:28479 dev_list="${dev_list} php7.0-cgi libapache2-mod-php7.0"
krasineef3d4b2016-04-22 00:52:18480else
vadimsh278ff0662016-05-19 00:06:28481 dev_list="${dev_list} php5-cgi libapache2-mod-php5"
krasineef3d4b2016-04-22 00:52:18482fi
thomasandersonb4a2bca2016-12-08 06:46:05483# ttf-mscorefonts-installer is in the Debian contrib repo, which has
484# dependencies on non-free software. Install it only if the user has already
485# enabled contrib.
486if package_exists ttf-mscorefonts-installer; then
487 dev_list="${dev_list} ttf-mscorefonts-installer"
488elif package_exists msttcorefonts; then
489 dev_list="${dev_list} msttcorefonts"
490fi
horo233d31c2016-11-16 03:43:00491# Ubuntu 16.04 has this package deleted.
492if package_exists ttf-kochi-gothic; then
493 dev_list="${dev_list} ttf-kochi-gothic"
494fi
495# Ubuntu 16.04 has this package deleted.
496if package_exists ttf-kochi-mincho; then
497 dev_list="${dev_list} ttf-kochi-mincho"
498fi
[email protected]757c2962012-03-15 19:05:18499
[email protected]dc099772013-09-30 22:06:58500# Some packages are only needed if the distribution actually supports
[email protected]757c2962012-03-15 19:05:18501# installing them.
[email protected]4fc00712013-05-29 23:11:20502if package_exists appmenu-gtk; then
[email protected]757c2962012-03-15 19:05:18503 lib_list="$lib_list appmenu-gtk"
[email protected]4da8fad2011-04-11 18:42:42504fi
505
johnme49bb458a2014-11-27 15:45:31506# When cross building for arm/Android on 64-bit systems the host binaries
507# that are part of v8 need to be compiled with -m32 which means
508# that basic multilib support is needed.
ki.stfu0a79d6992015-09-17 07:27:12509if file -L /sbin/init | grep -q 'ELF 64-bit'; then
johnme49bb458a2014-11-27 15:45:31510 # gcc-multilib conflicts with the arm cross compiler (at least in trusty) but
511 # g++-X.Y-multilib gives us the 32-bit support that we need. Find out the
512 # appropriate value of X and Y by seeing what version the current
513 # distribution's g++-multilib package depends on.
514 multilib_package=$(apt-cache depends g++-multilib --important | \
515 grep -E --color=never --only-matching '\bg\+\+-[0-9.]+-multilib\b')
516 lib32_list="$lib32_list $multilib_package"
517fi
518
[email protected]ba48c4ca2013-10-25 16:11:46519if test "$do_inst_syms" = "" && test 0 -eq ${do_quick_check-0}
[email protected]1eae2bfb2010-01-26 18:17:53520then
521 echo "This script installs all tools and libraries needed to build Chromium."
522 echo ""
523 echo "For most of the libraries, it can also install debugging symbols, which"
524 echo "will allow you to debug code in the system libraries. Most developers"
525 echo "won't need these symbols."
526 echo -n "Do you want me to install them for you (y/N) "
527 if yes_no 1; then
528 do_inst_syms=1
529 fi
530fi
531if test "$do_inst_syms" = "1"; then
[email protected]ba48c4ca2013-10-25 16:11:46532 echo "Including debugging symbols."
thomasandersondfefc6c02017-05-04 01:29:11533 # Many debug packages are not available in Debian stretch,
534 # so exclude the ones that are missing.
535 available_dbg_packages=""
536 for package in ${dbg_list}; do
537 if package_exists ${package}; then
538 available_dbg_packages="${available_dbg_packages} ${package}"
539 fi
540 done
541 dbg_list="${available_dbg_packages}"
[email protected]8ada8c52009-03-10 21:53:08542else
[email protected]ba48c4ca2013-10-25 16:11:46543 echo "Skipping debugging symbols."
[email protected]8ada8c52009-03-10 21:53:08544 dbg_list=
545fi
546
johnme49bb458a2014-11-27 15:45:31547if test "$do_inst_lib32" = "1" ; then
548 echo "Including 32-bit libraries for ARM/Android."
549else
550 echo "Skipping 32-bit libraries for ARM/Android."
551 lib32_list=
[email protected]9f28a9cf2012-12-17 23:31:40552fi
553
[email protected]ba48c4ca2013-10-25 16:11:46554if test "$do_inst_arm" = "1" ; then
[email protected]ba48c4ca2013-10-25 16:11:46555 echo "Including ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26556else
[email protected]ba48c4ca2013-10-25 16:11:46557 echo "Skipping ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26558 arm_list=
559fi
560
[email protected]565416362014-01-16 21:26:47561if test "$do_inst_nacl" = "1"; then
[email protected]713eac62014-06-02 23:10:03562 echo "Including NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47563else
[email protected]713eac62014-06-02 23:10:03564 echo "Skipping NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47565 nacl_list=
566fi
567
johnme4bd10302015-01-06 11:25:52568# The `sort -r -s -t: -k2` sorts all the :i386 packages to the front, to avoid
569# confusing dpkg-query (crbug.com/446172).
[email protected]565416362014-01-16 21:26:47570packages="$(
johnme49bb458a2014-11-27 15:45:31571 echo "${dev_list} ${lib_list} ${dbg_list} ${lib32_list} ${arm_list}"\
johnme4bd10302015-01-06 11:25:52572 "${nacl_list}" | tr " " "\n" | sort -u | sort -r -s -t: -k2 | tr "\n" " "
[email protected]565416362014-01-16 21:26:47573)"
[email protected]ba48c4ca2013-10-25 16:11:46574
575if [ 1 -eq "${do_quick_check-0}" ] ; then
thomasanderson73b3a4412016-11-18 23:16:07576 if ! missing_packages="$(dpkg-query -W -f ' ' ${packages} 2>&1)"; then
577 # Distinguish between packages that actually aren't available to the
578 # system (i.e. not in any repo) and packages that just aren't known to
579 # dpkg (i.e. managed by apt).
580 missing_packages="$(echo "${missing_packages}" | awk '{print $NF}')"
581 not_installed=""
582 unknown=""
583 for p in ${missing_packages}; do
584 if apt-cache show ${p} > /dev/null 2>&1; then
585 not_installed="${p}\n${not_installed}"
586 else
587 unknown="${p}\n${unknown}"
[email protected]ba48c4ca2013-10-25 16:11:46588 fi
thomasanderson73b3a4412016-11-18 23:16:07589 done
590 if [ -n "${not_installed}" ]; then
[email protected]ba48c4ca2013-10-25 16:11:46591 echo "WARNING: The following packages are not installed:"
thomasanderson73b3a4412016-11-18 23:16:07592 echo -e "${not_installed}" | sed -e "s/^/ /"
593 fi
594 if [ -n "${unknown}" ]; then
595 echo "WARNING: The following packages are unknown to your system"
596 echo "(maybe missing a repo or need to 'sudo apt-get update'):"
597 echo -e "${unknown}" | sed -e "s/^/ /"
[email protected]ba48c4ca2013-10-25 16:11:46598 fi
599 exit 1
600 fi
601 exit 0
602fi
603
johnme49bb458a2014-11-27 15:45:31604if test "$do_inst_lib32" = "1" || test "$do_inst_nacl" = "1"; then
thomasanderson05c40292017-03-28 19:28:45605 sudo dpkg --add-architecture i386
johnme49bb458a2014-11-27 15:45:31606fi
sbc42564092015-04-01 01:01:28607sudo apt-get update
[email protected]e041ed12009-03-10 16:43:01608
609# We initially run "apt-get" with the --reinstall option and parse its output.
610# This way, we can find all the packages that need to be newly installed
611# without accidentally promoting any packages from "auto" to "manual".
612# We then re-run "apt-get" with just the list of missing packages.
613echo "Finding missing packages..."
[email protected]757c2962012-03-15 19:05:18614# Intentionally leaving $packages unquoted so it's more readable.
[email protected]b6e064522009-08-10 18:47:51615echo "Packages required: " $packages
616echo
[email protected]79a9d2962009-08-06 21:10:58617new_list_cmd="sudo apt-get install --reinstall $(echo $packages)"
[email protected]c3d8b152013-05-10 10:10:03618if new_list="$(yes n | LANGUAGE=en LANG=C $new_list_cmd)"; then
[email protected]b6e064522009-08-10 18:47:51619 # We probably never hit this following line.
thakis3e861de2016-06-14 14:24:01620 echo "No missing packages, and the packages are up to date."
[email protected]b62f11e72010-05-03 17:20:45621elif [ $? -eq 1 ]; then
[email protected]79a9d2962009-08-06 21:10:58622 # We expect apt-get to have exit status of 1.
[email protected]757c2962012-03-15 19:05:18623 # This indicates that we cancelled the install with "yes n|".
[email protected]b6e064522009-08-10 18:47:51624 new_list=$(echo "$new_list" |
[email protected]79a9d2962009-08-06 21:10:58625 sed -e '1,/The following NEW packages will be installed:/d;s/^ //;t;d')
[email protected]b6e064522009-08-10 18:47:51626 new_list=$(echo "$new_list" | sed 's/ *$//')
627 if [ -z "$new_list" ] ; then
thakis3e861de2016-06-14 14:24:01628 echo "No missing packages, and the packages are up to date."
[email protected]b6e064522009-08-10 18:47:51629 else
630 echo "Installing missing packages: $new_list."
[email protected]e2544ed42012-04-23 04:48:31631 sudo apt-get install ${do_quietly-} ${new_list}
[email protected]b6e064522009-08-10 18:47:51632 fi
633 echo
[email protected]79a9d2962009-08-06 21:10:58634else
635 # An apt-get exit status of 100 indicates that a real error has occurred.
[email protected]e041ed12009-03-10 16:43:01636
[email protected]79a9d2962009-08-06 21:10:58637 # I am intentionally leaving out the '"'s around new_list_cmd,
638 # as this makes it easier to cut and paste the output
[email protected]79a9d2962009-08-06 21:10:58639 echo "The following command failed: " ${new_list_cmd}
640 echo
641 echo "It produces the following output:"
642 yes n | $new_list_cmd || true
643 echo
644 echo "You will have to install the above packages yourself."
645 echo
646 exit 100
647fi
[email protected]e041ed12009-03-10 16:43:01648
[email protected]d96cc3472013-09-19 00:53:30649# Install the Chrome OS default fonts. This must go after running
650# apt-get, since install-chromeos-fonts depends on curl.
651if test "$do_inst_chromeos_fonts" != "0"; then
652 echo
653 echo "Installing Chrome OS fonts."
654 dir=`echo $0 | sed -r -e 's/\/[^/]+$//'`
655 if ! sudo $dir/linux/install-chromeos-fonts.py; then
656 echo "ERROR: The installation of the Chrome OS default fonts failed."
657 if [ `stat -f -c %T $dir` == "nfs" ]; then
658 echo "The reason is that your repo is installed on a remote file system."
659 else
660 echo "This is expected if your repo is installed on a remote file system."
661 fi
662 echo "It is recommended to install your repo on a local file system."
663 echo "You can skip the installation of the Chrome OS default founts with"
664 echo "the command line option: --no-chromeos-fonts."
665 exit 1
666 fi
667else
668 echo "Skipping installation of Chrome OS fonts."
669fi
670
thomasanderson5ef5c3d2016-12-08 01:59:19671echo "Installing locales."
672CHROMIUM_LOCALES="da_DK.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 zh_TW.UTF-8"
673LOCALE_GEN=/etc/locale.gen
674if [ -e ${LOCALE_GEN} ]; then
675 OLD_LOCALE_GEN="$(cat /etc/locale.gen)"
676 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
677 sudo sed -i "s/^# ${CHROMIUM_LOCALE}/${CHROMIUM_LOCALE}/" ${LOCALE_GEN}
678 done
679 # Regenerating locales can take a while, so only do it if we need to.
680 if (echo "${OLD_LOCALE_GEN}" | cmp -s ${LOCALE_GEN}); then
681 echo "Locales already up-to-date."
682 else
683 sudo locale-gen
684 fi
685else
686 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
687 sudo locale-gen ${CHROMIUM_LOCALE}
688 done
689fi