blob: 8fbf031717193831aed833056036d0ae47258c76 [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"
Tom Andersone9883cd2018-06-20 00:32:2120 echo "--[no-]backwards-compatible: enable or disable installation of packages
21 that are no longer currently needed and have been removed from this
22 script. Useful for bisection."
[email protected]e2544ed42012-04-23 04:48:3123 echo "--no-prompt: silently select standard options/defaults"
[email protected]ba48c4ca2013-10-25 16:11:4624 echo "--quick-check: quickly try to determine if dependencies are installed"
25 echo " (this avoids interactive prompts and sudo commands,"
26 echo " so might not be 100% accurate)"
27 echo "--unsupported: attempt installation even on unsupported systems"
[email protected]1eae2bfb2010-01-26 18:17:5328 echo "Script will prompt interactively if options not given."
29 exit 1
30}
31
[email protected]4fc00712013-05-29 23:11:2032# Checks whether a particular package is available in the repos.
33# USAGE: $ package_exists <package name>
34package_exists() {
Tom Anderson17d6cdd2017-11-28 04:13:2535 # 'apt-cache search' takes a regex string, so eg. the +'s in packages like
36 # "libstdc++" need to be escaped.
37 local escaped="$(echo $1 | sed 's/[\~\+\.\:-]/\\&/g')"
38 [ ! -z "$(apt-cache search --names-only "${escaped}" | \
Tom Anderson9c70eb72017-11-27 21:47:3839 awk '$1 == "'$1'" { print $1; }')" ]
[email protected]4fc00712013-05-29 23:11:2040}
41
[email protected]fbeddf22014-01-17 23:59:0142# These default to on because (some) bots need them and it keeps things
43# simple for the bot setup if all bots just run the script in its default
44# mode. Developers who don't want stuff they don't need installed on their
45# own workstations can pass --no-arm --no-nacl when running the script.
46do_inst_arm=1
47do_inst_nacl=1
48
Tom Anderson8e0a484e2018-06-14 22:47:0249while [ "$1" != "" ]
[email protected]1eae2bfb2010-01-26 18:17:5350do
51 case "$1" in
Tom Andersone9883cd2018-06-20 00:32:2152 --syms) do_inst_syms=1;;
53 --no-syms) do_inst_syms=0;;
54 --lib32) do_inst_lib32=1;;
55 --arm) do_inst_arm=1;;
56 --no-arm) do_inst_arm=0;;
57 --chromeos-fonts) do_inst_chromeos_fonts=1;;
58 --no-chromeos-fonts) do_inst_chromeos_fonts=0;;
59 --nacl) do_inst_nacl=1;;
60 --no-nacl) do_inst_nacl=0;;
61 --backwards-compatible) do_inst_backwards_compatible=1;;
62 --no-backwards-compatible) do_inst_backwards_compatible=0;;
63 --add-cross-tool-repo) add_cross_tool_repo=1;;
64 --no-prompt) do_default=1
65 do_quietly="-qq --assume-yes"
[email protected]e2544ed42012-04-23 04:48:3166 ;;
Tom Andersone9883cd2018-06-20 00:32:2167 --quick-check) do_quick_check=1;;
68 --unsupported) do_unsupported=1;;
[email protected]1eae2bfb2010-01-26 18:17:5369 *) usage;;
70 esac
71 shift
72done
73
Tom Anderson8e0a484e2018-06-14 22:47:0274if [ "$do_inst_arm" = "1" ]; then
johnme49bb458a2014-11-27 15:45:3175 do_inst_lib32=1
76fi
77
[email protected]0febc9b2014-05-22 20:07:1978# Check for lsb_release command in $PATH
79if ! which lsb_release > /dev/null; then
80 echo "ERROR: lsb_release not found in \$PATH" >&2
81 exit 1;
82fi
[email protected]f2826b6a2012-11-15 01:06:2683
thomasandersondfefc6c02017-05-04 01:29:1184distro_codename=$(lsb_release --codename --short)
85distro_id=$(lsb_release --id --short)
Marcin Wiacekd7577c32018-04-30 19:12:5186supported_codenames="(trusty|xenial|artful|bionic)"
thomasandersondfefc6c02017-05-04 01:29:1187supported_ids="(Debian)"
[email protected]ba48c4ca2013-10-25 16:11:4688if [ 0 -eq "${do_unsupported-0}" ] && [ 0 -eq "${do_quick_check-0}" ] ; then
thomasandersondfefc6c02017-05-04 01:29:1189 if [[ ! $distro_codename =~ $supported_codenames &&
90 ! $distro_id =~ $supported_ids ]]; then
thomasanderson05c40292017-03-28 19:28:4591 echo -e "ERROR: The only supported distros are\n" \
Marcin Wiacekd7577c32018-04-30 19:12:5192 "\tUbuntu 14.04 LTS (trusty)\n" \
93 "\tUbuntu 16.04 LTS (xenial)\n" \
marcin38933dd2017-10-30 00:05:5294 "\tUbuntu 17.10 (artful)\n" \
Marcin Wiacekd7577c32018-04-30 19:12:5195 "\tUbuntu 18.04 LTS (bionic)\n" \
thomasandersondfefc6c02017-05-04 01:29:1196 "\tDebian 8 (jessie) or later" >&2
anthonyvd2ae919e52016-11-21 19:47:1297 exit 1
[email protected]fe63a022013-01-15 22:11:4798 fi
[email protected]cf1df402008-10-31 21:45:3099
[email protected]fe63a022013-01-15 22:11:47100 if ! uname -m | egrep -q "i686|x86_64"; then
anthonyvd2ae919e52016-11-21 19:47:12101 echo "Only x86 architectures are currently supported" >&2
[email protected]fe63a022013-01-15 22:11:47102 exit
103 fi
[email protected]e041ed12009-03-10 16:43:01104fi
105
[email protected]ba48c4ca2013-10-25 16:11:46106if [ "x$(id -u)" != x0 ] && [ 0 -eq "${do_quick_check-0}" ]; then
[email protected]e041ed12009-03-10 16:43:01107 echo "Running as non-root user."
108 echo "You might have to enter your password one or more times for 'sudo'."
[email protected]8ada8c52009-03-10 21:53:08109 echo
[email protected]e041ed12009-03-10 16:43:01110fi
111
[email protected]fdc6bf52010-06-07 22:01:57112# Packages needed for chromeos only
Tom Anderson6b2b2ad52018-02-22 23:28:14113chromeos_dev_list="libbluetooth-dev libxkbcommon-dev"
114
115if package_exists realpath; then
116 chromeos_dev_list="${chromeos_dev_list} realpath"
117fi
[email protected]fdc6bf52010-06-07 22:01:57118
[email protected]b61f6882013-11-14 20:41:41119# Packages needed for development
thomasanderson20032a5c2017-03-02 00:28:20120dev_list="\
121 bison
George Burgess IV3d20a812018-05-10 22:24:17122 bzip2
thomasanderson20032a5c2017-03-02 00:28:20123 cdbs
124 curl
Tom Anderson8bfb0b02018-02-17 00:44:15125 dbus-x11
thomasanderson20032a5c2017-03-02 00:28:20126 dpkg-dev
127 elfutils
128 devscripts
129 fakeroot
130 flex
thomasanderson20032a5c2017-03-02 00:28:20131 g++
132 git-core
133 git-svn
134 gperf
Tim Brown06ee43a2018-02-08 18:42:12135 libappindicator-dev
136 libappindicator3-dev
thomasanderson20032a5c2017-03-02 00:28:20137 libasound2-dev
138 libbrlapi-dev
thomasanderson20032a5c2017-03-02 00:28:20139 libbz2-dev
140 libcairo2-dev
141 libcap-dev
142 libcups2-dev
143 libcurl4-gnutls-dev
144 libdrm-dev
145 libelf-dev
146 libffi-dev
Tom Andersond4ea2522018-03-01 20:34:38147 libgbm-dev
thomasanderson20032a5c2017-03-02 00:28:20148 libglib2.0-dev
149 libglu1-mesa-dev
150 libgnome-keyring-dev
151 libgtk2.0-dev
152 libgtk-3-dev
153 libkrb5-dev
154 libnspr4-dev
155 libnss3-dev
156 libpam0g-dev
157 libpci-dev
158 libpulse-dev
159 libsctp-dev
160 libspeechd-dev
161 libsqlite3-dev
162 libssl-dev
163 libudev-dev
164 libwww-perl
165 libxslt1-dev
166 libxss-dev
167 libxt-dev
168 libxtst-dev
Andrew Grievee41aeae2017-08-21 20:53:21169 locales
thomasanderson20032a5c2017-03-02 00:28:20170 openbox
Nico Webera9fa6a72018-02-23 18:26:02171 p7zip
thomasanderson20032a5c2017-03-02 00:28:20172 patch
173 perl
174 pkg-config
175 python
176 python-cherrypy3
177 python-crypto
178 python-dev
179 python-numpy
180 python-opencv
181 python-openssl
182 python-psutil
183 python-yaml
184 rpm
185 ruby
186 subversion
Daniel Bratellbec626a2018-06-26 17:40:52187 uuid-dev
thomasanderson20032a5c2017-03-02 00:28:20188 wdiff
Tom Andersond79de41d2017-08-08 00:23:23189 x11-utils
thomasanderson20032a5c2017-03-02 00:28:20190 xcompmgr
George Burgess IV3d20a812018-05-10 22:24:17191 xz-utils
thomasanderson20032a5c2017-03-02 00:28:20192 zip
193 $chromeos_dev_list
194"
[email protected]fdc6bf52010-06-07 22:01:57195
[email protected]f16aabf2012-08-15 21:00:14196# 64-bit systems need a minimum set of 32-bit compat packages for the pre-built
[email protected]f8ceadb2014-08-18 12:30:23197# NaCl binaries.
ki.stfu0a79d6992015-09-17 07:27:12198if file -L /sbin/init | grep -q 'ELF 64-bit'; then
[email protected]d93d68b12012-10-15 06:39:53199 dev_list="${dev_list} libc6-i386 lib32gcc1 lib32stdc++6"
[email protected]f16aabf2012-08-15 21:00:14200fi
201
[email protected]fdc6bf52010-06-07 22:01:57202# Run-time libraries required by chromeos only
[email protected]ba48c4ca2013-10-25 16:11:46203chromeos_lib_list="libpulse0 libbz2-1.0"
[email protected]e041ed12009-03-10 16:43:01204
Yves Gereye1fe0df2018-06-08 08:01:47205# List of required run-time libraries
206common_lib_list="\
Tim Brown06ee43a2018-02-08 18:42:12207 libappindicator1
208 libappindicator3-1
209 libasound2
thomasanderson20032a5c2017-03-02 00:28:20210 libatk1.0-0
211 libc6
thomasanderson20032a5c2017-03-02 00:28:20212 libcairo2
213 libcap2
214 libcups2
215 libexpat1
216 libffi6
217 libfontconfig1
218 libfreetype6
219 libglib2.0-0
220 libgnome-keyring0
221 libgtk2.0-0
222 libgtk-3-0
223 libpam0g
224 libpango1.0-0
225 libpci3
226 libpcre3
227 libpixman-1-0
228 libspeechd2
229 libstdc++6
230 libsqlite3-0
Tom Andersonf8a0c662018-06-14 23:54:14231 libuuid1
Scott Violetdd7e2372018-04-12 01:11:26232 libwayland-egl1-mesa
thomasanderson20032a5c2017-03-02 00:28:20233 libx11-6
234 libx11-xcb1
235 libxau6
236 libxcb1
237 libxcomposite1
238 libxcursor1
239 libxdamage1
240 libxdmcp6
241 libxext6
242 libxfixes3
243 libxi6
244 libxinerama1
245 libxrandr2
246 libxrender1
247 libxtst6
248 zlib1g
Yves Gereye1fe0df2018-06-08 08:01:47249"
250
251# Full list of required run-time libraries
252lib_list="\
253 $common_lib_list
thomasanderson20032a5c2017-03-02 00:28:20254 $chromeos_lib_list
255"
[email protected]e041ed12009-03-10 16:43:01256
johnme49bb458a2014-11-27 15:45:31257# 32-bit libraries needed e.g. to compile V8 snapshot for Android or armhf
Tanin Na Nakorn6cbe32e52017-05-30 19:37:04258lib32_list="linux-libc-dev:i386 libpci3:i386"
johnme49bb458a2014-11-27 15:45:31259
Tom Andersondd47ad32018-03-21 19:30:19260# 32-bit libraries needed for a 32-bit build
261lib32_list="$lib32_list libx11-xcb1:i386"
262
Tom Andersone9883cd2018-06-20 00:32:21263# Packages that have been removed from this script. Regardless of configuration
264# or options passed to this script, whenever a package is removed, it should be
265# added here.
266backwards_compatible_list="\
267 7za
268 fonts-indic
269 fonts-ipafont
270 fonts-stix
271 fonts-thai-tlwg
272 fonts-tlwg-garuda
273 language-pack-da
274 language-pack-fr
275 language-pack-he
276 language-pack-zh-hant
277 libappindicator3-1:i386
278 libdconf-dev
279 libdconf-dev:i386
280 libdconf1
281 libdconf1:i386
282 libexif-dev
283 libexif12
284 libexif12:i386
285 libgbm-dev
286 libgconf-2-4:i386
287 libgconf2-dev
288 libgl1-mesa-dev
289 libgl1-mesa-glx:i386
290 libgles2-mesa-dev
291 mesa-common-dev
292 msttcorefonts
293 ttf-dejavu-core
294 ttf-indic-fonts
295 ttf-kochi-gothic
296 ttf-kochi-mincho
297 ttf-mscorefonts-installer
298 xfonts-mathml
299"
300case $distro_codename in
301 trusty)
302 backwards_compatible_list+=" \
303 libgbm-dev-lts-trusty
304 libgl1-mesa-dev-lts-trusty
305 libgl1-mesa-glx-lts-trusty:i386
306 libgles2-mesa-dev-lts-trusty
307 mesa-common-dev-lts-trusty"
308 ;;
309 xenial)
310 backwards_compatible_list+=" \
311 libgbm-dev-lts-xenial
312 libgl1-mesa-dev-lts-xenial
313 libgl1-mesa-glx-lts-xenial:i386
314 libgles2-mesa-dev-lts-xenial
315 mesa-common-dev-lts-xenial"
316 ;;
317esac
318
[email protected]3f85dac32013-10-29 02:38:46319# arm cross toolchain packages needed to build chrome on armhf
thomasanderson4e3d30fe2016-12-07 18:58:34320EM_REPO="deb http://emdebian.org/tools/debian/ jessie main"
321EM_SOURCE=$(cat <<EOF
322# Repo added by Chromium $0
323${EM_REPO}
324# deb-src http://emdebian.org/tools/debian/ jessie main
325EOF
326)
327EM_ARCHIVE_KEY_FINGER="084C6C6F39159EDB67969AA87DE089671804772E"
328GPP_ARM_PACKAGE="g++-arm-linux-gnueabihf"
thomasandersondfefc6c02017-05-04 01:29:11329case $distro_codename in
kjellander95504ae2017-03-30 12:30:31330 jessie)
thomasanderson4e3d30fe2016-12-07 18:58:34331 eval $(apt-config shell APT_SOURCESDIR 'Dir::Etc::sourceparts/d')
332 CROSSTOOLS_LIST="${APT_SOURCESDIR}/crosstools.list"
333 arm_list="libc6-dev:armhf
334 linux-libc-dev:armhf"
Tom Anderson8e0a484e2018-06-14 22:47:02335 if [ "$do_inst_arm" = "1" ]; then
thomasanderson4e3d30fe2016-12-07 18:58:34336 if $(dpkg-query -W ${GPP_ARM_PACKAGE} &>/dev/null); then
337 arm_list+=" ${GPP_ARM_PACKAGE}"
338 else
Tom Anderson8e0a484e2018-06-14 22:47:02339 if [ "${add_cross_tool_repo}" = "1" ]; then
thomasanderson4e3d30fe2016-12-07 18:58:34340 gpg --keyserver pgp.mit.edu --recv-keys ${EM_ARCHIVE_KEY_FINGER}
341 gpg -a --export ${EM_ARCHIVE_KEY_FINGER} | sudo apt-key add -
342 if ! grep "^${EM_REPO}" "${CROSSTOOLS_LIST}" &>/dev/null; then
343 echo "${EM_SOURCE}" | sudo tee -a "${CROSSTOOLS_LIST}" >/dev/null
344 fi
345 arm_list+=" ${GPP_ARM_PACKAGE}"
Tom Anderson8e0a484e2018-06-14 22:47:02346 else
347 echo "The Debian Cross-toolchains repository is necessary to"
348 echo "cross-compile Chromium for arm."
349 echo "Rerun with --add-deb-cross-tool-repo to have it added for you."
thomasanderson4e3d30fe2016-12-07 18:58:34350 fi
351 fi
352 fi
353 ;;
thomasandersondfefc6c02017-05-04 01:29:11354 # All necessary ARM packages are available on the default repos on
355 # Debian 9 and later.
kjellander95504ae2017-03-30 12:30:31356 *)
Tom Anderson81e7f1792017-11-11 03:56:33357 arm_list="libc6-dev-armhf-cross
thomasanderson4e3d30fe2016-12-07 18:58:34358 linux-libc-dev-armhf-cross
359 ${GPP_ARM_PACKAGE}"
360 ;;
361esac
[email protected]31a605532011-08-23 22:27:35362
sbcb5d4ded2015-04-01 17:49:03363# Work around for dependency issue Ubuntu/Trusty: http://crbug.com/435056
thomasandersondfefc6c02017-05-04 01:29:11364case $distro_codename in
friedmanbf8b90a2016-04-21 01:15:48365 trusty)
366 arm_list+=" g++-4.8-multilib-arm-linux-gnueabihf
367 gcc-4.8-multilib-arm-linux-gnueabihf"
368 ;;
Marcin Wiacekd7577c32018-04-30 19:12:51369 xenial|artful|bionic)
krasineef3d4b2016-04-22 00:52:18370 arm_list+=" g++-5-multilib-arm-linux-gnueabihf
371 gcc-5-multilib-arm-linux-gnueabihf
372 gcc-arm-linux-gnueabihf"
373 ;;
friedmanbf8b90a2016-04-21 01:15:48374esac
sbcb5d4ded2015-04-01 17:49:03375
[email protected]713eac62014-06-02 23:10:03376# Packages to build NaCl, its toolchains, and its ports.
Brad Nelson5e59c2c2014-09-06 06:18:45377naclports_list="ant autoconf bison cmake gawk intltool xutils-dev xsltproc"
thomasanderson20032a5c2017-03-02 00:28:20378nacl_list="\
379 g++-mingw-w64-i686
380 lib32z1-dev
381 libasound2:i386
382 libcap2:i386
383 libelf-dev:i386
384 libfontconfig1:i386
thomasanderson20032a5c2017-03-02 00:28:20385 libglib2.0-0:i386
386 libgpm2:i386
387 libgtk2.0-0:i386
388 libgtk-3-0:i386
389 libncurses5:i386
390 lib32ncurses5-dev
391 libnss3:i386
392 libpango1.0-0:i386
thomasandersondfefc6c02017-05-04 01:29:11393 libssl-dev:i386
thomasanderson20032a5c2017-03-02 00:28:20394 libtinfo-dev
395 libtinfo-dev:i386
396 libtool
Tom Andersonf8a0c662018-06-14 23:54:14397 libuuid1:i386
thomasanderson20032a5c2017-03-02 00:28:20398 libxcomposite1:i386
399 libxcursor1:i386
400 libxdamage1:i386
401 libxi6:i386
402 libxrandr2:i386
403 libxss1:i386
404 libxtst6:i386
405 texinfo
406 xvfb
407 ${naclports_list}
408"
[email protected]419a9a62014-06-19 18:26:18409
Tom Anderson0524b2b72017-12-11 20:39:18410if package_exists libssl1.1; then
411 nacl_list="${nacl_list} libssl1.1:i386"
412elif package_exists libssl1.0.2; then
thomasandersondfefc6c02017-05-04 01:29:11413 nacl_list="${nacl_list} libssl1.0.2:i386"
Tom Anderson0524b2b72017-12-11 20:39:18414else
415 nacl_list="${nacl_list} libssl1.0.0:i386"
thomasandersondfefc6c02017-05-04 01:29:11416fi
417
[email protected]757c2962012-03-15 19:05:18418# Some package names have changed over time
Tom Anderson0524b2b72017-12-11 20:39:18419if package_exists libpng16-16; then
marcin73929a72017-01-04 22:04:58420 lib_list="${lib_list} libpng16-16"
Tom Anderson0524b2b72017-12-11 20:39:18421else
422 lib_list="${lib_list} libpng12-0"
marcin73929a72017-01-04 22:04:58423fi
Tom Anderson96a2efc2018-06-14 01:12:14424if package_exists libnspr4; then
[email protected]1a0f64a2011-05-20 17:53:55425 lib_list="${lib_list} libnspr4 libnss3"
[email protected]757c2962012-03-15 19:05:18426else
[email protected]757c2962012-03-15 19:05:18427 lib_list="${lib_list} libnspr4-0d libnss3-1d"
428fi
[email protected]4fc00712013-05-29 23:11:20429if package_exists libjpeg-dev; then
[email protected]9e895962013-05-21 08:26:42430 dev_list="${dev_list} libjpeg-dev"
[email protected]b11411c2012-03-21 22:09:41431else
[email protected]9e895962013-05-21 08:26:42432 dev_list="${dev_list} libjpeg62-dev"
[email protected]b11411c2012-03-21 22:09:41433fi
[email protected]4fc00712013-05-29 23:11:20434if package_exists libudev1; then
[email protected]9e895962013-05-21 08:26:42435 dev_list="${dev_list} libudev1"
[email protected]ab9e69082014-06-05 15:28:52436 nacl_list="${nacl_list} libudev1:i386"
[email protected]9e895962013-05-21 08:26:42437else
438 dev_list="${dev_list} libudev0"
[email protected]ab9e69082014-06-05 15:28:52439 nacl_list="${nacl_list} libudev0:i386"
[email protected]9e895962013-05-21 08:26:42440fi
[email protected]3ea42912013-09-06 06:23:57441if package_exists libbrlapi0.6; then
442 dev_list="${dev_list} libbrlapi0.6"
443else
444 dev_list="${dev_list} libbrlapi0.5"
445fi
Tom Anderson0524b2b72017-12-11 20:39:18446if package_exists apache2.2-bin; then
halton.huo3e728c42016-01-20 05:12:23447 dev_list="${dev_list} apache2.2-bin"
Tom Anderson0524b2b72017-12-11 20:39:18448else
449 dev_list="${dev_list} apache2-bin"
halton.huo3e728c42016-01-20 05:12:23450fi
Marcin Wiacekd7577c32018-04-30 19:12:51451if package_exists libav-tools; then
452 dev_list="${dev_list} libav-tools"
453fi
454if package_exists php7.2-cgi; then
455 dev_list="${dev_list} php7.2-cgi libapache2-mod-php7.2"
456elif package_exists php7.1-cgi; then
marcin38933dd2017-10-30 00:05:52457 dev_list="${dev_list} php7.1-cgi libapache2-mod-php7.1"
458elif package_exists php7.0-cgi; then
vadimsh278ff0662016-05-19 00:06:28459 dev_list="${dev_list} php7.0-cgi libapache2-mod-php7.0"
krasineef3d4b2016-04-22 00:52:18460else
vadimsh278ff0662016-05-19 00:06:28461 dev_list="${dev_list} php5-cgi libapache2-mod-php5"
krasineef3d4b2016-04-22 00:52:18462fi
[email protected]757c2962012-03-15 19:05:18463
[email protected]dc099772013-09-30 22:06:58464# Some packages are only needed if the distribution actually supports
[email protected]757c2962012-03-15 19:05:18465# installing them.
[email protected]4fc00712013-05-29 23:11:20466if package_exists appmenu-gtk; then
[email protected]757c2962012-03-15 19:05:18467 lib_list="$lib_list appmenu-gtk"
[email protected]4da8fad2011-04-11 18:42:42468fi
469
Tom Anderson81e7f1792017-11-11 03:56:33470# Cross-toolchain strip is needed for building the sysroots.
471if package_exists binutils-arm-linux-gnueabihf; then
472 dev_list="${dev_list} binutils-arm-linux-gnueabihf"
473fi
474if package_exists binutils-aarch64-linux-gnu; then
475 dev_list="${dev_list} binutils-aarch64-linux-gnu"
476fi
477if package_exists binutils-mipsel-linux-gnu; then
478 dev_list="${dev_list} binutils-mipsel-linux-gnu"
479fi
480if package_exists binutils-mips64el-linux-gnuabi64; then
481 dev_list="${dev_list} binutils-mips64el-linux-gnuabi64"
482fi
483
johnme49bb458a2014-11-27 15:45:31484# When cross building for arm/Android on 64-bit systems the host binaries
485# that are part of v8 need to be compiled with -m32 which means
486# that basic multilib support is needed.
ki.stfu0a79d6992015-09-17 07:27:12487if file -L /sbin/init | grep -q 'ELF 64-bit'; then
johnme49bb458a2014-11-27 15:45:31488 # gcc-multilib conflicts with the arm cross compiler (at least in trusty) but
489 # g++-X.Y-multilib gives us the 32-bit support that we need. Find out the
490 # appropriate value of X and Y by seeing what version the current
491 # distribution's g++-multilib package depends on.
492 multilib_package=$(apt-cache depends g++-multilib --important | \
493 grep -E --color=never --only-matching '\bg\+\+-[0-9.]+-multilib\b')
494 lib32_list="$lib32_list $multilib_package"
495fi
496
Tom Anderson8e0a484e2018-06-14 22:47:02497if [ "$do_inst_syms" = "1" ]; then
[email protected]ba48c4ca2013-10-25 16:11:46498 echo "Including debugging symbols."
Tom Anderson8206da9a2018-06-12 01:49:09499
500 # Debian is in the process of transitioning to automatic debug packages, which
501 # have the -dbgsym suffix (https://wiki.debian.org/AutomaticDebugPackages).
502 # Untransitioned packages have the -dbg suffix. And on some systems, neither
503 # will be available, so exclude the ones that are missing.
504 dbg_package_name() {
505 if package_exists "$1-dbgsym"; then
506 echo "$1-dbgsym"
507 elif package_exists "$1-dbg"; then
508 echo "$1-dbg"
509 fi
510 }
511
512 for package in "${common_lib_list}"; do
513 dbg_list="$dbg_list $(dbg_package_name ${package})"
514 done
515
516 # Debugging symbols packages not following common naming scheme
Tom Anderson8e0a484e2018-06-14 22:47:02517 if [ "$(dbg_package_name libstdc++6)" == "" ]; then
518 if package_exists libstdc++6-8-dbg; then
519 dbg_list="${dbg_list} libstdc++6-8-dbg"
520 elif package_exists libstdc++6-7-dbg; then
521 dbg_list="${dbg_list} libstdc++6-7-dbg"
522 elif package_exists libstdc++6-6-dbg; then
Tom Anderson8206da9a2018-06-12 01:49:09523 dbg_list="${dbg_list} libstdc++6-6-dbg"
Tom Anderson8e0a484e2018-06-14 22:47:02524 elif package_exists libstdc++6-5-dbg; then
525 dbg_list="${dbg_list} libstdc++6-5-dbg"
Tom Anderson8206da9a2018-06-12 01:49:09526 elif package_exists libstdc++6-4.9-dbg; then
527 dbg_list="${dbg_list} libstdc++6-4.9-dbg"
Tom Anderson8e0a484e2018-06-14 22:47:02528 elif package_exists libstdc++6-4.8-dbg; then
Tom Anderson8206da9a2018-06-12 01:49:09529 dbg_list="${dbg_list} libstdc++6-4.8-dbg"
Tom Anderson8e0a484e2018-06-14 22:47:02530 elif package_exists libstdc++6-4.7-dbg; then
531 dbg_list="${dbg_list} libstdc++6-4.7-dbg"
Tom Andersone9883cd2018-06-20 00:32:21532 elif package_exists libstdc++6-4.6-dbg; then
533 dbg_list="${dbg_list} libstdc++6-4.6-dbg"
Tom Anderson8206da9a2018-06-12 01:49:09534 fi
535 fi
Tom Anderson8e0a484e2018-06-14 22:47:02536 if [ "$(dbg_package_name libatk1.0-0)" == "" ]; then
Tom Anderson8206da9a2018-06-12 01:49:09537 dbg_list="$dbg_list $(dbg_package_name libatk1.0)"
538 fi
Tom Anderson8e0a484e2018-06-14 22:47:02539 if [ "$(dbg_package_name libpango1.0-0)" == "" ]; then
Tom Anderson8206da9a2018-06-12 01:49:09540 dbg_list="$dbg_list $(dbg_package_name libpango1.0-dev)"
541 fi
[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
Tom Anderson8e0a484e2018-06-14 22:47:02547if [ "$do_inst_lib32" = "1" ]; then
Tom Andersondd47ad32018-03-21 19:30:19548 echo "Including 32-bit libraries."
johnme49bb458a2014-11-27 15:45:31549else
Tom Andersondd47ad32018-03-21 19:30:19550 echo "Skipping 32-bit libraries."
johnme49bb458a2014-11-27 15:45:31551 lib32_list=
[email protected]9f28a9cf2012-12-17 23:31:40552fi
553
Tom Anderson8e0a484e2018-06-14 22:47:02554if [ "$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
Tom Anderson8e0a484e2018-06-14 22:47:02561if [ "$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
Tom Andersone9883cd2018-06-20 00:32:21568filtered_backwards_compatible_list=
569if [ "$do_inst_backwards_compatible" = "1" ]; then
570 echo "Including backwards compatible packages."
571 for package in ${backwards_compatible_list}; do
572 if package_exists ${package}; then
573 filtered_backwards_compatible_list+=" ${package}"
574 fi
575 done
576fi
577
johnme4bd10302015-01-06 11:25:52578# The `sort -r -s -t: -k2` sorts all the :i386 packages to the front, to avoid
579# confusing dpkg-query (crbug.com/446172).
[email protected]565416362014-01-16 21:26:47580packages="$(
Tom Andersone9883cd2018-06-20 00:32:21581 echo "${dev_list} ${lib_list} ${dbg_list} ${lib32_list} ${arm_list}" \
582 "${nacl_list}" ${filtered_backwards_compatible_list} | tr " " "\n" | \
583 sort -u | sort -r -s -t: -k2 | tr "\n" " "
[email protected]565416362014-01-16 21:26:47584)"
[email protected]ba48c4ca2013-10-25 16:11:46585
586if [ 1 -eq "${do_quick_check-0}" ] ; then
thomasanderson73b3a4412016-11-18 23:16:07587 if ! missing_packages="$(dpkg-query -W -f ' ' ${packages} 2>&1)"; then
588 # Distinguish between packages that actually aren't available to the
589 # system (i.e. not in any repo) and packages that just aren't known to
590 # dpkg (i.e. managed by apt).
591 missing_packages="$(echo "${missing_packages}" | awk '{print $NF}')"
592 not_installed=""
593 unknown=""
594 for p in ${missing_packages}; do
595 if apt-cache show ${p} > /dev/null 2>&1; then
596 not_installed="${p}\n${not_installed}"
597 else
598 unknown="${p}\n${unknown}"
[email protected]ba48c4ca2013-10-25 16:11:46599 fi
thomasanderson73b3a4412016-11-18 23:16:07600 done
601 if [ -n "${not_installed}" ]; then
[email protected]ba48c4ca2013-10-25 16:11:46602 echo "WARNING: The following packages are not installed:"
thomasanderson73b3a4412016-11-18 23:16:07603 echo -e "${not_installed}" | sed -e "s/^/ /"
604 fi
605 if [ -n "${unknown}" ]; then
606 echo "WARNING: The following packages are unknown to your system"
607 echo "(maybe missing a repo or need to 'sudo apt-get update'):"
608 echo -e "${unknown}" | sed -e "s/^/ /"
[email protected]ba48c4ca2013-10-25 16:11:46609 fi
610 exit 1
611 fi
612 exit 0
613fi
614
Tom Anderson8e0a484e2018-06-14 22:47:02615if [ "$do_inst_lib32" = "1" ] || [ "$do_inst_nacl" = "1" ]; then
thomasanderson05c40292017-03-28 19:28:45616 sudo dpkg --add-architecture i386
johnme49bb458a2014-11-27 15:45:31617fi
sbc42564092015-04-01 01:01:28618sudo apt-get update
[email protected]e041ed12009-03-10 16:43:01619
620# We initially run "apt-get" with the --reinstall option and parse its output.
621# This way, we can find all the packages that need to be newly installed
622# without accidentally promoting any packages from "auto" to "manual".
623# We then re-run "apt-get" with just the list of missing packages.
624echo "Finding missing packages..."
[email protected]757c2962012-03-15 19:05:18625# Intentionally leaving $packages unquoted so it's more readable.
[email protected]b6e064522009-08-10 18:47:51626echo "Packages required: " $packages
627echo
[email protected]79a9d2962009-08-06 21:10:58628new_list_cmd="sudo apt-get install --reinstall $(echo $packages)"
[email protected]c3d8b152013-05-10 10:10:03629if new_list="$(yes n | LANGUAGE=en LANG=C $new_list_cmd)"; then
[email protected]b6e064522009-08-10 18:47:51630 # We probably never hit this following line.
thakis3e861de2016-06-14 14:24:01631 echo "No missing packages, and the packages are up to date."
[email protected]b62f11e72010-05-03 17:20:45632elif [ $? -eq 1 ]; then
[email protected]79a9d2962009-08-06 21:10:58633 # We expect apt-get to have exit status of 1.
[email protected]757c2962012-03-15 19:05:18634 # This indicates that we cancelled the install with "yes n|".
[email protected]b6e064522009-08-10 18:47:51635 new_list=$(echo "$new_list" |
[email protected]79a9d2962009-08-06 21:10:58636 sed -e '1,/The following NEW packages will be installed:/d;s/^ //;t;d')
[email protected]b6e064522009-08-10 18:47:51637 new_list=$(echo "$new_list" | sed 's/ *$//')
638 if [ -z "$new_list" ] ; then
thakis3e861de2016-06-14 14:24:01639 echo "No missing packages, and the packages are up to date."
[email protected]b6e064522009-08-10 18:47:51640 else
641 echo "Installing missing packages: $new_list."
[email protected]e2544ed42012-04-23 04:48:31642 sudo apt-get install ${do_quietly-} ${new_list}
[email protected]b6e064522009-08-10 18:47:51643 fi
644 echo
[email protected]79a9d2962009-08-06 21:10:58645else
646 # An apt-get exit status of 100 indicates that a real error has occurred.
[email protected]e041ed12009-03-10 16:43:01647
[email protected]79a9d2962009-08-06 21:10:58648 # I am intentionally leaving out the '"'s around new_list_cmd,
649 # as this makes it easier to cut and paste the output
[email protected]79a9d2962009-08-06 21:10:58650 echo "The following command failed: " ${new_list_cmd}
651 echo
652 echo "It produces the following output:"
653 yes n | $new_list_cmd || true
654 echo
655 echo "You will have to install the above packages yourself."
656 echo
657 exit 100
658fi
[email protected]e041ed12009-03-10 16:43:01659
[email protected]d96cc3472013-09-19 00:53:30660# Install the Chrome OS default fonts. This must go after running
661# apt-get, since install-chromeos-fonts depends on curl.
Tom Anderson8e0a484e2018-06-14 22:47:02662if [ "$do_inst_chromeos_fonts" != "0" ]; then
[email protected]d96cc3472013-09-19 00:53:30663 echo
664 echo "Installing Chrome OS fonts."
665 dir=`echo $0 | sed -r -e 's/\/[^/]+$//'`
666 if ! sudo $dir/linux/install-chromeos-fonts.py; then
667 echo "ERROR: The installation of the Chrome OS default fonts failed."
668 if [ `stat -f -c %T $dir` == "nfs" ]; then
669 echo "The reason is that your repo is installed on a remote file system."
670 else
671 echo "This is expected if your repo is installed on a remote file system."
672 fi
673 echo "It is recommended to install your repo on a local file system."
674 echo "You can skip the installation of the Chrome OS default founts with"
675 echo "the command line option: --no-chromeos-fonts."
676 exit 1
677 fi
678else
679 echo "Skipping installation of Chrome OS fonts."
680fi
681
thomasanderson5ef5c3d2016-12-08 01:59:19682echo "Installing locales."
683CHROMIUM_LOCALES="da_DK.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 zh_TW.UTF-8"
684LOCALE_GEN=/etc/locale.gen
685if [ -e ${LOCALE_GEN} ]; then
686 OLD_LOCALE_GEN="$(cat /etc/locale.gen)"
687 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
688 sudo sed -i "s/^# ${CHROMIUM_LOCALE}/${CHROMIUM_LOCALE}/" ${LOCALE_GEN}
689 done
690 # Regenerating locales can take a while, so only do it if we need to.
691 if (echo "${OLD_LOCALE_GEN}" | cmp -s ${LOCALE_GEN}); then
692 echo "Locales already up-to-date."
693 else
694 sudo locale-gen
695 fi
696else
697 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
698 sudo locale-gen ${CHROMIUM_LOCALE}
699 done
700fi