blob: c636f81ef45d7fe421c343da31c9cf7e61dcd1d2 [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
Andrew Grievee41aeae2017-08-21 20:53:21193 locales
thomasanderson20032a5c2017-03-02 00:28:20194 openbox
195 patch
196 perl
197 pkg-config
198 python
199 python-cherrypy3
200 python-crypto
201 python-dev
202 python-numpy
203 python-opencv
204 python-openssl
205 python-psutil
206 python-yaml
207 rpm
208 ruby
209 subversion
210 ttf-dejavu-core
211 wdiff
Tom Andersond79de41d2017-08-08 00:23:23212 x11-utils
thomasanderson20032a5c2017-03-02 00:28:20213 xcompmgr
214 zip
215 $chromeos_dev_list
216"
[email protected]fdc6bf52010-06-07 22:01:57217
[email protected]f16aabf2012-08-15 21:00:14218# 64-bit systems need a minimum set of 32-bit compat packages for the pre-built
[email protected]f8ceadb2014-08-18 12:30:23219# NaCl binaries.
ki.stfu0a79d6992015-09-17 07:27:12220if file -L /sbin/init | grep -q 'ELF 64-bit'; then
[email protected]d93d68b12012-10-15 06:39:53221 dev_list="${dev_list} libc6-i386 lib32gcc1 lib32stdc++6"
[email protected]f16aabf2012-08-15 21:00:14222fi
223
[email protected]fdc6bf52010-06-07 22:01:57224# Run-time libraries required by chromeos only
[email protected]ba48c4ca2013-10-25 16:11:46225chromeos_lib_list="libpulse0 libbz2-1.0"
[email protected]e041ed12009-03-10 16:43:01226
227# Full list of required run-time libraries
thomasanderson20032a5c2017-03-02 00:28:20228lib_list="\
229 libatk1.0-0
230 libc6
231 libasound2
232 libcairo2
233 libcap2
234 libcups2
235 libexpat1
236 libffi6
237 libfontconfig1
238 libfreetype6
239 libglib2.0-0
240 libgnome-keyring0
241 libgtk2.0-0
242 libgtk-3-0
243 libpam0g
244 libpango1.0-0
245 libpci3
246 libpcre3
247 libpixman-1-0
248 libspeechd2
249 libstdc++6
250 libsqlite3-0
251 libx11-6
252 libx11-xcb1
253 libxau6
254 libxcb1
255 libxcomposite1
256 libxcursor1
257 libxdamage1
258 libxdmcp6
259 libxext6
260 libxfixes3
261 libxi6
262 libxinerama1
263 libxrandr2
264 libxrender1
265 libxtst6
266 zlib1g
267 $chromeos_lib_list
268"
[email protected]e041ed12009-03-10 16:43:01269
270# Debugging symbols for all of the run-time libraries
thomasanderson20032a5c2017-03-02 00:28:20271dbg_list="\
272 libatk1.0-dbg
273 libc6-dbg
274 libcairo2-dbg
275 libffi6-dbg
276 libfontconfig1-dbg
277 libglib2.0-0-dbg
278 libgtk2.0-0-dbg
279 libgtk-3-0-dbg
280 libpango1.0-0-dbg
281 libpcre3-dbg
282 libpixman-1-0-dbg
283 libsqlite3-0-dbg
284 libx11-6-dbg
285 libx11-xcb1-dbg
286 libxau6-dbg
287 libxcb1-dbg
288 libxcomposite1-dbg
289 libxcursor1-dbg
290 libxdamage1-dbg
291 libxdmcp6-dbg
292 libxext6-dbg
thomasanderson20032a5c2017-03-02 00:28:20293 libxi6-dbg
294 libxinerama1-dbg
295 libxrandr2-dbg
296 libxrender1-dbg
297 libxtst6-dbg
298 zlib1g-dbg
299"
lfgad917d12015-03-17 23:28:00300
thomasandersondfefc6c02017-05-04 01:29:11301if [[ ! $distro_codename =~ "yakkety" ]]; then
thomasanderson05c40292017-03-28 19:28:45302 dbg_list="${dbg_list} libxfixes3-dbg"
303fi
304
lfgad917d12015-03-17 23:28:00305# Find the proper version of libstdc++6-4.x-dbg.
thomasandersondfefc6c02017-05-04 01:29:11306if [ "x$distro_codename" = "xtrusty" ]; then
lfgad917d12015-03-17 23:28:00307 dbg_list="${dbg_list} libstdc++6-4.8-dbg"
308else
309 dbg_list="${dbg_list} libstdc++6-4.9-dbg"
310fi
[email protected]e041ed12009-03-10 16:43:01311
johnme49bb458a2014-11-27 15:45:31312# 32-bit libraries needed e.g. to compile V8 snapshot for Android or armhf
Tanin Na Nakorn6cbe32e52017-05-30 19:37:04313lib32_list="linux-libc-dev:i386 libpci3:i386"
johnme49bb458a2014-11-27 15:45:31314
[email protected]3f85dac32013-10-29 02:38:46315# arm cross toolchain packages needed to build chrome on armhf
thomasanderson4e3d30fe2016-12-07 18:58:34316EM_REPO="deb http://emdebian.org/tools/debian/ jessie main"
317EM_SOURCE=$(cat <<EOF
318# Repo added by Chromium $0
319${EM_REPO}
320# deb-src http://emdebian.org/tools/debian/ jessie main
321EOF
322)
323EM_ARCHIVE_KEY_FINGER="084C6C6F39159EDB67969AA87DE089671804772E"
324GPP_ARM_PACKAGE="g++-arm-linux-gnueabihf"
thomasandersondfefc6c02017-05-04 01:29:11325case $distro_codename in
kjellander95504ae2017-03-30 12:30:31326 jessie)
thomasanderson4e3d30fe2016-12-07 18:58:34327 eval $(apt-config shell APT_SOURCESDIR 'Dir::Etc::sourceparts/d')
328 CROSSTOOLS_LIST="${APT_SOURCESDIR}/crosstools.list"
329 arm_list="libc6-dev:armhf
330 linux-libc-dev:armhf"
331 if test "$do_inst_arm" = "1"; then
332 if $(dpkg-query -W ${GPP_ARM_PACKAGE} &>/dev/null); then
333 arm_list+=" ${GPP_ARM_PACKAGE}"
334 else
335 echo "The Debian Cross-toolchains repository is necessary to"
336 echo "cross-compile Chromium for arm."
337 echo -n "Do you want me to add it for you (y/N) "
338 if yes_no 1; then
339 gpg --keyserver pgp.mit.edu --recv-keys ${EM_ARCHIVE_KEY_FINGER}
340 gpg -a --export ${EM_ARCHIVE_KEY_FINGER} | sudo apt-key add -
341 if ! grep "^${EM_REPO}" "${CROSSTOOLS_LIST}" &>/dev/null; then
342 echo "${EM_SOURCE}" | sudo tee -a "${CROSSTOOLS_LIST}" >/dev/null
343 fi
344 arm_list+=" ${GPP_ARM_PACKAGE}"
345 fi
346 fi
347 fi
348 ;;
thomasandersondfefc6c02017-05-04 01:29:11349 # All necessary ARM packages are available on the default repos on
350 # Debian 9 and later.
kjellander95504ae2017-03-30 12:30:31351 *)
kjellander74c7e4b2017-01-27 13:15:44352 arm_list="binutils-aarch64-linux-gnu
353 libc6-dev-armhf-cross
thomasanderson4e3d30fe2016-12-07 18:58:34354 linux-libc-dev-armhf-cross
355 ${GPP_ARM_PACKAGE}"
356 ;;
357esac
[email protected]31a605532011-08-23 22:27:35358
sbcb5d4ded2015-04-01 17:49:03359# Work around for dependency issue Ubuntu/Trusty: http://crbug.com/435056
thomasandersondfefc6c02017-05-04 01:29:11360case $distro_codename in
friedmanbf8b90a2016-04-21 01:15:48361 trusty)
362 arm_list+=" g++-4.8-multilib-arm-linux-gnueabihf
363 gcc-4.8-multilib-arm-linux-gnueabihf"
364 ;;
marcin3a0793a2017-06-30 03:51:28365 xenial|yakkety|zesty)
krasineef3d4b2016-04-22 00:52:18366 arm_list+=" g++-5-multilib-arm-linux-gnueabihf
367 gcc-5-multilib-arm-linux-gnueabihf
368 gcc-arm-linux-gnueabihf"
369 ;;
friedmanbf8b90a2016-04-21 01:15:48370esac
sbcb5d4ded2015-04-01 17:49:03371
[email protected]713eac62014-06-02 23:10:03372# Packages to build NaCl, its toolchains, and its ports.
Brad Nelson5e59c2c2014-09-06 06:18:45373naclports_list="ant autoconf bison cmake gawk intltool xutils-dev xsltproc"
thomasanderson20032a5c2017-03-02 00:28:20374nacl_list="\
375 g++-mingw-w64-i686
376 lib32z1-dev
377 libasound2:i386
378 libcap2:i386
379 libelf-dev:i386
380 libfontconfig1:i386
381 libgconf-2-4:i386
382 libglib2.0-0:i386
383 libgpm2:i386
384 libgtk2.0-0:i386
385 libgtk-3-0:i386
386 libncurses5:i386
387 lib32ncurses5-dev
388 libnss3:i386
389 libpango1.0-0:i386
thomasandersondfefc6c02017-05-04 01:29:11390 libssl-dev:i386
thomasanderson20032a5c2017-03-02 00:28:20391 libtinfo-dev
392 libtinfo-dev:i386
393 libtool
394 libxcomposite1:i386
395 libxcursor1:i386
396 libxdamage1:i386
397 libxi6:i386
398 libxrandr2:i386
399 libxss1:i386
400 libxtst6:i386
401 texinfo
402 xvfb
403 ${naclports_list}
404"
[email protected]419a9a62014-06-19 18:26:18405
thomasandersondfefc6c02017-05-04 01:29:11406if package_exists libssl1.0.0; then
407 nacl_list="${nacl_list} libssl1.0.0:i386"
408else
409 nacl_list="${nacl_list} libssl1.0.2:i386"
410fi
411
torne8a6eb692015-11-05 12:43:08412# Find the proper version of packages that depend on mesa. Only one -lts variant
413# of mesa can be installed and everything that depends on it must match.
414
415# Query for the name and status of all mesa LTS variants, filter for only
416# installed packages, extract just the name, and eliminate duplicates (there can
417# be more than one with the same name in the case of multiarch). Expand into an
418# array.
419mesa_packages=($(dpkg-query -Wf'${package} ${status}\n' \
torne12cd9f6c2016-02-24 18:52:23420 libgl1-mesa-glx-lts-\* 2>/dev/null | \
torne8a6eb692015-11-05 12:43:08421 grep " ok installed" | cut -d " " -f 1 | sort -u))
422if [ "${#mesa_packages[@]}" -eq 0 ]; then
423 mesa_variant=""
424elif [ "${#mesa_packages[@]}" -eq 1 ]; then
425 # Strip the base package name and leave just "-lts-whatever"
426 mesa_variant="${mesa_packages[0]#libgl1-mesa-glx}"
427else
428 echo "ERROR: unable to determine which libgl1-mesa-glx variant is installed."
429 exit 1
430fi
[email protected]3a4bd5d2014-06-25 23:55:04431dev_list="${dev_list} libgbm-dev${mesa_variant}
vabrf1e8b17f2015-03-17 10:56:37432 libgles2-mesa-dev${mesa_variant} libgl1-mesa-dev${mesa_variant}
433 mesa-common-dev${mesa_variant}"
[email protected]419a9a62014-06-19 18:26:18434nacl_list="${nacl_list} libgl1-mesa-glx${mesa_variant}:i386"
[email protected]565416362014-01-16 21:26:47435
[email protected]757c2962012-03-15 19:05:18436# Some package names have changed over time
marcin73929a72017-01-04 22:04:58437if package_exists libpng12-0; then
438 lib_list="${lib_list} libpng12-0"
439else
440 lib_list="${lib_list} libpng16-16"
441fi
[email protected]4fc00712013-05-29 23:11:20442if package_exists libnspr4-dbg; then
[email protected]1a0f64a2011-05-20 17:53:55443 dbg_list="${dbg_list} libnspr4-dbg libnss3-dbg"
444 lib_list="${lib_list} libnspr4 libnss3"
[email protected]757c2962012-03-15 19:05:18445else
446 dbg_list="${dbg_list} libnspr4-0d-dbg libnss3-1d-dbg"
447 lib_list="${lib_list} libnspr4-0d libnss3-1d"
448fi
[email protected]4fc00712013-05-29 23:11:20449if package_exists libjpeg-dev; then
[email protected]9e895962013-05-21 08:26:42450 dev_list="${dev_list} libjpeg-dev"
[email protected]b11411c2012-03-21 22:09:41451else
[email protected]9e895962013-05-21 08:26:42452 dev_list="${dev_list} libjpeg62-dev"
[email protected]b11411c2012-03-21 22:09:41453fi
[email protected]4fc00712013-05-29 23:11:20454if package_exists libudev1; then
[email protected]9e895962013-05-21 08:26:42455 dev_list="${dev_list} libudev1"
[email protected]ab9e69082014-06-05 15:28:52456 nacl_list="${nacl_list} libudev1:i386"
[email protected]9e895962013-05-21 08:26:42457else
458 dev_list="${dev_list} libudev0"
[email protected]ab9e69082014-06-05 15:28:52459 nacl_list="${nacl_list} libudev0:i386"
[email protected]9e895962013-05-21 08:26:42460fi
[email protected]3ea42912013-09-06 06:23:57461if package_exists libbrlapi0.6; then
462 dev_list="${dev_list} libbrlapi0.6"
463else
464 dev_list="${dev_list} libbrlapi0.5"
465fi
halton.huo3e728c42016-01-20 05:12:23466if package_exists apache2-bin; then
467 dev_list="${dev_list} apache2-bin"
468else
469 dev_list="${dev_list} apache2.2-bin"
470fi
vadimsh278ff0662016-05-19 00:06:28471if package_exists xfonts-mathml; then
halton.huo3e728c42016-01-20 05:12:23472 dev_list="${dev_list} xfonts-mathml"
473fi
krasineef3d4b2016-04-22 00:52:18474if package_exists fonts-indic; then
vadimsh278ff0662016-05-19 00:06:28475 dev_list="${dev_list} fonts-indic"
krasineef3d4b2016-04-22 00:52:18476else
vadimsh278ff0662016-05-19 00:06:28477 dev_list="${dev_list} ttf-indic-fonts"
krasineef3d4b2016-04-22 00:52:18478fi
479if package_exists php7.0-cgi; then
vadimsh278ff0662016-05-19 00:06:28480 dev_list="${dev_list} php7.0-cgi libapache2-mod-php7.0"
krasineef3d4b2016-04-22 00:52:18481else
vadimsh278ff0662016-05-19 00:06:28482 dev_list="${dev_list} php5-cgi libapache2-mod-php5"
krasineef3d4b2016-04-22 00:52:18483fi
thomasandersonb4a2bca2016-12-08 06:46:05484# ttf-mscorefonts-installer is in the Debian contrib repo, which has
485# dependencies on non-free software. Install it only if the user has already
486# enabled contrib.
487if package_exists ttf-mscorefonts-installer; then
488 dev_list="${dev_list} ttf-mscorefonts-installer"
489elif package_exists msttcorefonts; then
490 dev_list="${dev_list} msttcorefonts"
491fi
horo233d31c2016-11-16 03:43:00492# Ubuntu 16.04 has this package deleted.
493if package_exists ttf-kochi-gothic; then
494 dev_list="${dev_list} ttf-kochi-gothic"
495fi
496# Ubuntu 16.04 has this package deleted.
497if package_exists ttf-kochi-mincho; then
498 dev_list="${dev_list} ttf-kochi-mincho"
499fi
[email protected]757c2962012-03-15 19:05:18500
[email protected]dc099772013-09-30 22:06:58501# Some packages are only needed if the distribution actually supports
[email protected]757c2962012-03-15 19:05:18502# installing them.
[email protected]4fc00712013-05-29 23:11:20503if package_exists appmenu-gtk; then
[email protected]757c2962012-03-15 19:05:18504 lib_list="$lib_list appmenu-gtk"
[email protected]4da8fad2011-04-11 18:42:42505fi
506
johnme49bb458a2014-11-27 15:45:31507# When cross building for arm/Android on 64-bit systems the host binaries
508# that are part of v8 need to be compiled with -m32 which means
509# that basic multilib support is needed.
ki.stfu0a79d6992015-09-17 07:27:12510if file -L /sbin/init | grep -q 'ELF 64-bit'; then
johnme49bb458a2014-11-27 15:45:31511 # gcc-multilib conflicts with the arm cross compiler (at least in trusty) but
512 # g++-X.Y-multilib gives us the 32-bit support that we need. Find out the
513 # appropriate value of X and Y by seeing what version the current
514 # distribution's g++-multilib package depends on.
515 multilib_package=$(apt-cache depends g++-multilib --important | \
516 grep -E --color=never --only-matching '\bg\+\+-[0-9.]+-multilib\b')
517 lib32_list="$lib32_list $multilib_package"
518fi
519
[email protected]ba48c4ca2013-10-25 16:11:46520if test "$do_inst_syms" = "" && test 0 -eq ${do_quick_check-0}
[email protected]1eae2bfb2010-01-26 18:17:53521then
522 echo "This script installs all tools and libraries needed to build Chromium."
523 echo ""
524 echo "For most of the libraries, it can also install debugging symbols, which"
525 echo "will allow you to debug code in the system libraries. Most developers"
526 echo "won't need these symbols."
527 echo -n "Do you want me to install them for you (y/N) "
528 if yes_no 1; then
529 do_inst_syms=1
530 fi
531fi
532if test "$do_inst_syms" = "1"; then
[email protected]ba48c4ca2013-10-25 16:11:46533 echo "Including debugging symbols."
thomasandersondfefc6c02017-05-04 01:29:11534 # Many debug packages are not available in Debian stretch,
535 # so exclude the ones that are missing.
536 available_dbg_packages=""
537 for package in ${dbg_list}; do
538 if package_exists ${package}; then
539 available_dbg_packages="${available_dbg_packages} ${package}"
540 fi
541 done
542 dbg_list="${available_dbg_packages}"
[email protected]8ada8c52009-03-10 21:53:08543else
[email protected]ba48c4ca2013-10-25 16:11:46544 echo "Skipping debugging symbols."
[email protected]8ada8c52009-03-10 21:53:08545 dbg_list=
546fi
547
johnme49bb458a2014-11-27 15:45:31548if test "$do_inst_lib32" = "1" ; then
549 echo "Including 32-bit libraries for ARM/Android."
550else
551 echo "Skipping 32-bit libraries for ARM/Android."
552 lib32_list=
[email protected]9f28a9cf2012-12-17 23:31:40553fi
554
[email protected]ba48c4ca2013-10-25 16:11:46555if test "$do_inst_arm" = "1" ; then
[email protected]ba48c4ca2013-10-25 16:11:46556 echo "Including ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26557else
[email protected]ba48c4ca2013-10-25 16:11:46558 echo "Skipping ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26559 arm_list=
560fi
561
[email protected]565416362014-01-16 21:26:47562if test "$do_inst_nacl" = "1"; then
[email protected]713eac62014-06-02 23:10:03563 echo "Including NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47564else
[email protected]713eac62014-06-02 23:10:03565 echo "Skipping NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47566 nacl_list=
567fi
568
johnme4bd10302015-01-06 11:25:52569# The `sort -r -s -t: -k2` sorts all the :i386 packages to the front, to avoid
570# confusing dpkg-query (crbug.com/446172).
[email protected]565416362014-01-16 21:26:47571packages="$(
johnme49bb458a2014-11-27 15:45:31572 echo "${dev_list} ${lib_list} ${dbg_list} ${lib32_list} ${arm_list}"\
johnme4bd10302015-01-06 11:25:52573 "${nacl_list}" | tr " " "\n" | sort -u | sort -r -s -t: -k2 | tr "\n" " "
[email protected]565416362014-01-16 21:26:47574)"
[email protected]ba48c4ca2013-10-25 16:11:46575
576if [ 1 -eq "${do_quick_check-0}" ] ; then
thomasanderson73b3a4412016-11-18 23:16:07577 if ! missing_packages="$(dpkg-query -W -f ' ' ${packages} 2>&1)"; then
578 # Distinguish between packages that actually aren't available to the
579 # system (i.e. not in any repo) and packages that just aren't known to
580 # dpkg (i.e. managed by apt).
581 missing_packages="$(echo "${missing_packages}" | awk '{print $NF}')"
582 not_installed=""
583 unknown=""
584 for p in ${missing_packages}; do
585 if apt-cache show ${p} > /dev/null 2>&1; then
586 not_installed="${p}\n${not_installed}"
587 else
588 unknown="${p}\n${unknown}"
[email protected]ba48c4ca2013-10-25 16:11:46589 fi
thomasanderson73b3a4412016-11-18 23:16:07590 done
591 if [ -n "${not_installed}" ]; then
[email protected]ba48c4ca2013-10-25 16:11:46592 echo "WARNING: The following packages are not installed:"
thomasanderson73b3a4412016-11-18 23:16:07593 echo -e "${not_installed}" | sed -e "s/^/ /"
594 fi
595 if [ -n "${unknown}" ]; then
596 echo "WARNING: The following packages are unknown to your system"
597 echo "(maybe missing a repo or need to 'sudo apt-get update'):"
598 echo -e "${unknown}" | sed -e "s/^/ /"
[email protected]ba48c4ca2013-10-25 16:11:46599 fi
600 exit 1
601 fi
602 exit 0
603fi
604
johnme49bb458a2014-11-27 15:45:31605if test "$do_inst_lib32" = "1" || test "$do_inst_nacl" = "1"; then
thomasanderson05c40292017-03-28 19:28:45606 sudo dpkg --add-architecture i386
johnme49bb458a2014-11-27 15:45:31607fi
sbc42564092015-04-01 01:01:28608sudo apt-get update
[email protected]e041ed12009-03-10 16:43:01609
610# We initially run "apt-get" with the --reinstall option and parse its output.
611# This way, we can find all the packages that need to be newly installed
612# without accidentally promoting any packages from "auto" to "manual".
613# We then re-run "apt-get" with just the list of missing packages.
614echo "Finding missing packages..."
[email protected]757c2962012-03-15 19:05:18615# Intentionally leaving $packages unquoted so it's more readable.
[email protected]b6e064522009-08-10 18:47:51616echo "Packages required: " $packages
617echo
[email protected]79a9d2962009-08-06 21:10:58618new_list_cmd="sudo apt-get install --reinstall $(echo $packages)"
[email protected]c3d8b152013-05-10 10:10:03619if new_list="$(yes n | LANGUAGE=en LANG=C $new_list_cmd)"; then
[email protected]b6e064522009-08-10 18:47:51620 # We probably never hit this following line.
thakis3e861de2016-06-14 14:24:01621 echo "No missing packages, and the packages are up to date."
[email protected]b62f11e72010-05-03 17:20:45622elif [ $? -eq 1 ]; then
[email protected]79a9d2962009-08-06 21:10:58623 # We expect apt-get to have exit status of 1.
[email protected]757c2962012-03-15 19:05:18624 # This indicates that we cancelled the install with "yes n|".
[email protected]b6e064522009-08-10 18:47:51625 new_list=$(echo "$new_list" |
[email protected]79a9d2962009-08-06 21:10:58626 sed -e '1,/The following NEW packages will be installed:/d;s/^ //;t;d')
[email protected]b6e064522009-08-10 18:47:51627 new_list=$(echo "$new_list" | sed 's/ *$//')
628 if [ -z "$new_list" ] ; then
thakis3e861de2016-06-14 14:24:01629 echo "No missing packages, and the packages are up to date."
[email protected]b6e064522009-08-10 18:47:51630 else
631 echo "Installing missing packages: $new_list."
[email protected]e2544ed42012-04-23 04:48:31632 sudo apt-get install ${do_quietly-} ${new_list}
[email protected]b6e064522009-08-10 18:47:51633 fi
634 echo
[email protected]79a9d2962009-08-06 21:10:58635else
636 # An apt-get exit status of 100 indicates that a real error has occurred.
[email protected]e041ed12009-03-10 16:43:01637
[email protected]79a9d2962009-08-06 21:10:58638 # I am intentionally leaving out the '"'s around new_list_cmd,
639 # as this makes it easier to cut and paste the output
[email protected]79a9d2962009-08-06 21:10:58640 echo "The following command failed: " ${new_list_cmd}
641 echo
642 echo "It produces the following output:"
643 yes n | $new_list_cmd || true
644 echo
645 echo "You will have to install the above packages yourself."
646 echo
647 exit 100
648fi
[email protected]e041ed12009-03-10 16:43:01649
[email protected]d96cc3472013-09-19 00:53:30650# Install the Chrome OS default fonts. This must go after running
651# apt-get, since install-chromeos-fonts depends on curl.
652if test "$do_inst_chromeos_fonts" != "0"; then
653 echo
654 echo "Installing Chrome OS fonts."
655 dir=`echo $0 | sed -r -e 's/\/[^/]+$//'`
656 if ! sudo $dir/linux/install-chromeos-fonts.py; then
657 echo "ERROR: The installation of the Chrome OS default fonts failed."
658 if [ `stat -f -c %T $dir` == "nfs" ]; then
659 echo "The reason is that your repo is installed on a remote file system."
660 else
661 echo "This is expected if your repo is installed on a remote file system."
662 fi
663 echo "It is recommended to install your repo on a local file system."
664 echo "You can skip the installation of the Chrome OS default founts with"
665 echo "the command line option: --no-chromeos-fonts."
666 exit 1
667 fi
668else
669 echo "Skipping installation of Chrome OS fonts."
670fi
671
thomasanderson5ef5c3d2016-12-08 01:59:19672echo "Installing locales."
673CHROMIUM_LOCALES="da_DK.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 zh_TW.UTF-8"
674LOCALE_GEN=/etc/locale.gen
675if [ -e ${LOCALE_GEN} ]; then
676 OLD_LOCALE_GEN="$(cat /etc/locale.gen)"
677 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
678 sudo sed -i "s/^# ${CHROMIUM_LOCALE}/${CHROMIUM_LOCALE}/" ${LOCALE_GEN}
679 done
680 # Regenerating locales can take a while, so only do it if we need to.
681 if (echo "${OLD_LOCALE_GEN}" | cmp -s ${LOCALE_GEN}); then
682 echo "Locales already up-to-date."
683 else
684 sudo locale-gen
685 fi
686else
687 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
688 sudo locale-gen ${CHROMIUM_LOCALE}
689 done
690fi