blob: b73cd49efbcbe03f94d4d04f0da80c5c1823cad2 [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="\
Tom Anderson2b8a8362018-08-01 17:41:34121 binutils
thomasanderson20032a5c2017-03-02 00:28:20122 bison
George Burgess IV3d20a812018-05-10 22:24:17123 bzip2
thomasanderson20032a5c2017-03-02 00:28:20124 cdbs
125 curl
Tom Anderson8bfb0b02018-02-17 00:44:15126 dbus-x11
thomasanderson20032a5c2017-03-02 00:28:20127 dpkg-dev
128 elfutils
129 devscripts
130 fakeroot
131 flex
thomasanderson20032a5c2017-03-02 00:28:20132 g++
133 git-core
134 git-svn
135 gperf
Tim Brown06ee43a2018-02-08 18:42:12136 libappindicator3-dev
thomasanderson20032a5c2017-03-02 00:28:20137 libasound2-dev
Tom Anderson13200012018-09-10 22:29:02138 libatspi2.0-dev
thomasanderson20032a5c2017-03-02 00:28:20139 libbrlapi-dev
thomasanderson20032a5c2017-03-02 00:28:20140 libbz2-dev
141 libcairo2-dev
142 libcap-dev
Daniel Bratell8cc92d372019-03-12 16:42:06143 libc6-dev
thomasanderson20032a5c2017-03-02 00:28:20144 libcups2-dev
145 libcurl4-gnutls-dev
146 libdrm-dev
147 libelf-dev
148 libffi-dev
Tom Andersond4ea2522018-03-01 20:34:38149 libgbm-dev
thomasanderson20032a5c2017-03-02 00:28:20150 libglib2.0-dev
151 libglu1-mesa-dev
152 libgnome-keyring-dev
thomasanderson20032a5c2017-03-02 00:28:20153 libgtk-3-dev
154 libkrb5-dev
155 libnspr4-dev
156 libnss3-dev
157 libpam0g-dev
158 libpci-dev
159 libpulse-dev
160 libsctp-dev
161 libspeechd-dev
162 libsqlite3-dev
163 libssl-dev
164 libudev-dev
165 libwww-perl
166 libxslt1-dev
167 libxss-dev
168 libxt-dev
169 libxtst-dev
Andrew Grievee41aeae2017-08-21 20:53:21170 locales
thomasanderson20032a5c2017-03-02 00:28:20171 openbox
Nico Webera9fa6a72018-02-23 18:26:02172 p7zip
thomasanderson20032a5c2017-03-02 00:28:20173 patch
174 perl
175 pkg-config
176 python
177 python-cherrypy3
178 python-crypto
179 python-dev
180 python-numpy
181 python-opencv
182 python-openssl
183 python-psutil
184 python-yaml
185 rpm
186 ruby
187 subversion
Daniel Bratellbec626a2018-06-26 17:40:52188 uuid-dev
thomasanderson20032a5c2017-03-02 00:28:20189 wdiff
Tom Andersond79de41d2017-08-08 00:23:23190 x11-utils
thomasanderson20032a5c2017-03-02 00:28:20191 xcompmgr
George Burgess IV3d20a812018-05-10 22:24:17192 xz-utils
thomasanderson20032a5c2017-03-02 00:28:20193 zip
194 $chromeos_dev_list
195"
[email protected]fdc6bf52010-06-07 22:01:57196
[email protected]f16aabf2012-08-15 21:00:14197# 64-bit systems need a minimum set of 32-bit compat packages for the pre-built
[email protected]f8ceadb2014-08-18 12:30:23198# NaCl binaries.
ki.stfu0a79d6992015-09-17 07:27:12199if file -L /sbin/init | grep -q 'ELF 64-bit'; then
[email protected]d93d68b12012-10-15 06:39:53200 dev_list="${dev_list} libc6-i386 lib32gcc1 lib32stdc++6"
[email protected]f16aabf2012-08-15 21:00:14201fi
202
[email protected]fdc6bf52010-06-07 22:01:57203# Run-time libraries required by chromeos only
[email protected]ba48c4ca2013-10-25 16:11:46204chromeos_lib_list="libpulse0 libbz2-1.0"
[email protected]e041ed12009-03-10 16:43:01205
Yves Gereye1fe0df2018-06-08 08:01:47206# List of required run-time libraries
207common_lib_list="\
Tim Brown06ee43a2018-02-08 18:42:12208 libappindicator3-1
209 libasound2
thomasanderson20032a5c2017-03-02 00:28:20210 libatk1.0-0
Tom Anderson13200012018-09-10 22:29:02211 libatspi2.0-0
thomasanderson20032a5c2017-03-02 00:28:20212 libc6
thomasanderson20032a5c2017-03-02 00:28:20213 libcairo2
214 libcap2
215 libcups2
216 libexpat1
217 libffi6
218 libfontconfig1
219 libfreetype6
220 libglib2.0-0
221 libgnome-keyring0
thomasanderson20032a5c2017-03-02 00:28:20222 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
Tom Anderson287339e2018-08-22 21:52:02277 libappindicator-dev
278 libappindicator1
Tom Andersone9883cd2018-06-20 00:32:21279 libappindicator3-1:i386
280 libdconf-dev
281 libdconf-dev:i386
282 libdconf1
283 libdconf1:i386
284 libexif-dev
285 libexif12
286 libexif12:i386
287 libgbm-dev
288 libgconf-2-4:i386
289 libgconf2-dev
290 libgl1-mesa-dev
291 libgl1-mesa-glx:i386
292 libgles2-mesa-dev
Tom Anderson99ffaae2018-11-29 00:08:31293 libgtk-3-0:i386
Tom Anderson287339e2018-08-22 21:52:02294 libgtk2.0-0
295 libgtk2.0-0:i386
296 libgtk2.0-dev
Tom Andersone9883cd2018-06-20 00:32:21297 mesa-common-dev
298 msttcorefonts
299 ttf-dejavu-core
300 ttf-indic-fonts
301 ttf-kochi-gothic
302 ttf-kochi-mincho
303 ttf-mscorefonts-installer
304 xfonts-mathml
305"
306case $distro_codename in
307 trusty)
308 backwards_compatible_list+=" \
309 libgbm-dev-lts-trusty
310 libgl1-mesa-dev-lts-trusty
311 libgl1-mesa-glx-lts-trusty:i386
312 libgles2-mesa-dev-lts-trusty
313 mesa-common-dev-lts-trusty"
314 ;;
315 xenial)
316 backwards_compatible_list+=" \
317 libgbm-dev-lts-xenial
318 libgl1-mesa-dev-lts-xenial
319 libgl1-mesa-glx-lts-xenial:i386
320 libgles2-mesa-dev-lts-xenial
321 mesa-common-dev-lts-xenial"
322 ;;
323esac
324
[email protected]3f85dac32013-10-29 02:38:46325# arm cross toolchain packages needed to build chrome on armhf
thomasanderson4e3d30fe2016-12-07 18:58:34326EM_REPO="deb http://emdebian.org/tools/debian/ jessie main"
327EM_SOURCE=$(cat <<EOF
328# Repo added by Chromium $0
329${EM_REPO}
330# deb-src http://emdebian.org/tools/debian/ jessie main
331EOF
332)
333EM_ARCHIVE_KEY_FINGER="084C6C6F39159EDB67969AA87DE089671804772E"
334GPP_ARM_PACKAGE="g++-arm-linux-gnueabihf"
thomasandersondfefc6c02017-05-04 01:29:11335case $distro_codename in
kjellander95504ae2017-03-30 12:30:31336 jessie)
thomasanderson4e3d30fe2016-12-07 18:58:34337 eval $(apt-config shell APT_SOURCESDIR 'Dir::Etc::sourceparts/d')
338 CROSSTOOLS_LIST="${APT_SOURCESDIR}/crosstools.list"
339 arm_list="libc6-dev:armhf
340 linux-libc-dev:armhf"
Tom Anderson8e0a484e2018-06-14 22:47:02341 if [ "$do_inst_arm" = "1" ]; then
thomasanderson4e3d30fe2016-12-07 18:58:34342 if $(dpkg-query -W ${GPP_ARM_PACKAGE} &>/dev/null); then
343 arm_list+=" ${GPP_ARM_PACKAGE}"
344 else
Tom Anderson8e0a484e2018-06-14 22:47:02345 if [ "${add_cross_tool_repo}" = "1" ]; then
thomasanderson4e3d30fe2016-12-07 18:58:34346 gpg --keyserver pgp.mit.edu --recv-keys ${EM_ARCHIVE_KEY_FINGER}
347 gpg -a --export ${EM_ARCHIVE_KEY_FINGER} | sudo apt-key add -
348 if ! grep "^${EM_REPO}" "${CROSSTOOLS_LIST}" &>/dev/null; then
349 echo "${EM_SOURCE}" | sudo tee -a "${CROSSTOOLS_LIST}" >/dev/null
350 fi
351 arm_list+=" ${GPP_ARM_PACKAGE}"
Tom Anderson8e0a484e2018-06-14 22:47:02352 else
353 echo "The Debian Cross-toolchains repository is necessary to"
354 echo "cross-compile Chromium for arm."
355 echo "Rerun with --add-deb-cross-tool-repo to have it added for you."
thomasanderson4e3d30fe2016-12-07 18:58:34356 fi
357 fi
358 fi
359 ;;
thomasandersondfefc6c02017-05-04 01:29:11360 # All necessary ARM packages are available on the default repos on
361 # Debian 9 and later.
kjellander95504ae2017-03-30 12:30:31362 *)
Tom Anderson81e7f1792017-11-11 03:56:33363 arm_list="libc6-dev-armhf-cross
thomasanderson4e3d30fe2016-12-07 18:58:34364 linux-libc-dev-armhf-cross
365 ${GPP_ARM_PACKAGE}"
366 ;;
367esac
[email protected]31a605532011-08-23 22:27:35368
sbcb5d4ded2015-04-01 17:49:03369# Work around for dependency issue Ubuntu/Trusty: http://crbug.com/435056
thomasandersondfefc6c02017-05-04 01:29:11370case $distro_codename in
friedmanbf8b90a2016-04-21 01:15:48371 trusty)
372 arm_list+=" g++-4.8-multilib-arm-linux-gnueabihf
373 gcc-4.8-multilib-arm-linux-gnueabihf"
374 ;;
Marcin Wiacekd7577c32018-04-30 19:12:51375 xenial|artful|bionic)
krasineef3d4b2016-04-22 00:52:18376 arm_list+=" g++-5-multilib-arm-linux-gnueabihf
377 gcc-5-multilib-arm-linux-gnueabihf
378 gcc-arm-linux-gnueabihf"
379 ;;
friedmanbf8b90a2016-04-21 01:15:48380esac
sbcb5d4ded2015-04-01 17:49:03381
[email protected]713eac62014-06-02 23:10:03382# Packages to build NaCl, its toolchains, and its ports.
Brad Nelson5e59c2c2014-09-06 06:18:45383naclports_list="ant autoconf bison cmake gawk intltool xutils-dev xsltproc"
thomasanderson20032a5c2017-03-02 00:28:20384nacl_list="\
385 g++-mingw-w64-i686
386 lib32z1-dev
387 libasound2:i386
388 libcap2:i386
389 libelf-dev:i386
390 libfontconfig1:i386
thomasanderson20032a5c2017-03-02 00:28:20391 libglib2.0-0:i386
392 libgpm2:i386
thomasanderson20032a5c2017-03-02 00:28:20393 libncurses5:i386
394 lib32ncurses5-dev
395 libnss3:i386
396 libpango1.0-0:i386
thomasandersondfefc6c02017-05-04 01:29:11397 libssl-dev:i386
thomasanderson20032a5c2017-03-02 00:28:20398 libtinfo-dev
399 libtinfo-dev:i386
400 libtool
Tom Andersonf8a0c662018-06-14 23:54:14401 libuuid1:i386
thomasanderson20032a5c2017-03-02 00:28:20402 libxcomposite1:i386
403 libxcursor1:i386
404 libxdamage1:i386
405 libxi6:i386
406 libxrandr2:i386
407 libxss1:i386
408 libxtst6:i386
409 texinfo
410 xvfb
411 ${naclports_list}
412"
[email protected]419a9a62014-06-19 18:26:18413
Tom Anderson0524b2b72017-12-11 20:39:18414if package_exists libssl1.1; then
415 nacl_list="${nacl_list} libssl1.1:i386"
416elif package_exists libssl1.0.2; then
thomasandersondfefc6c02017-05-04 01:29:11417 nacl_list="${nacl_list} libssl1.0.2:i386"
Tom Anderson0524b2b72017-12-11 20:39:18418else
419 nacl_list="${nacl_list} libssl1.0.0:i386"
thomasandersondfefc6c02017-05-04 01:29:11420fi
421
[email protected]757c2962012-03-15 19:05:18422# Some package names have changed over time
Tom Anderson0524b2b72017-12-11 20:39:18423if package_exists libpng16-16; then
marcin73929a72017-01-04 22:04:58424 lib_list="${lib_list} libpng16-16"
Tom Anderson0524b2b72017-12-11 20:39:18425else
426 lib_list="${lib_list} libpng12-0"
marcin73929a72017-01-04 22:04:58427fi
Tom Anderson96a2efc2018-06-14 01:12:14428if package_exists libnspr4; then
[email protected]1a0f64a2011-05-20 17:53:55429 lib_list="${lib_list} libnspr4 libnss3"
[email protected]757c2962012-03-15 19:05:18430else
[email protected]757c2962012-03-15 19:05:18431 lib_list="${lib_list} libnspr4-0d libnss3-1d"
432fi
[email protected]4fc00712013-05-29 23:11:20433if package_exists libjpeg-dev; then
[email protected]9e895962013-05-21 08:26:42434 dev_list="${dev_list} libjpeg-dev"
[email protected]b11411c2012-03-21 22:09:41435else
[email protected]9e895962013-05-21 08:26:42436 dev_list="${dev_list} libjpeg62-dev"
[email protected]b11411c2012-03-21 22:09:41437fi
[email protected]4fc00712013-05-29 23:11:20438if package_exists libudev1; then
[email protected]9e895962013-05-21 08:26:42439 dev_list="${dev_list} libudev1"
[email protected]ab9e69082014-06-05 15:28:52440 nacl_list="${nacl_list} libudev1:i386"
[email protected]9e895962013-05-21 08:26:42441else
442 dev_list="${dev_list} libudev0"
[email protected]ab9e69082014-06-05 15:28:52443 nacl_list="${nacl_list} libudev0:i386"
[email protected]9e895962013-05-21 08:26:42444fi
[email protected]3ea42912013-09-06 06:23:57445if package_exists libbrlapi0.6; then
446 dev_list="${dev_list} libbrlapi0.6"
447else
448 dev_list="${dev_list} libbrlapi0.5"
449fi
Tom Anderson0524b2b72017-12-11 20:39:18450if package_exists apache2.2-bin; then
halton.huo3e728c42016-01-20 05:12:23451 dev_list="${dev_list} apache2.2-bin"
Tom Anderson0524b2b72017-12-11 20:39:18452else
453 dev_list="${dev_list} apache2-bin"
halton.huo3e728c42016-01-20 05:12:23454fi
Marcin Wiacekd7577c32018-04-30 19:12:51455if package_exists libav-tools; then
456 dev_list="${dev_list} libav-tools"
457fi
458if package_exists php7.2-cgi; then
459 dev_list="${dev_list} php7.2-cgi libapache2-mod-php7.2"
460elif package_exists php7.1-cgi; then
marcin38933dd2017-10-30 00:05:52461 dev_list="${dev_list} php7.1-cgi libapache2-mod-php7.1"
462elif package_exists php7.0-cgi; then
vadimsh278ff0662016-05-19 00:06:28463 dev_list="${dev_list} php7.0-cgi libapache2-mod-php7.0"
krasineef3d4b2016-04-22 00:52:18464else
vadimsh278ff0662016-05-19 00:06:28465 dev_list="${dev_list} php5-cgi libapache2-mod-php5"
krasineef3d4b2016-04-22 00:52:18466fi
[email protected]757c2962012-03-15 19:05:18467
[email protected]dc099772013-09-30 22:06:58468# Some packages are only needed if the distribution actually supports
[email protected]757c2962012-03-15 19:05:18469# installing them.
[email protected]4fc00712013-05-29 23:11:20470if package_exists appmenu-gtk; then
[email protected]757c2962012-03-15 19:05:18471 lib_list="$lib_list appmenu-gtk"
[email protected]4da8fad2011-04-11 18:42:42472fi
473
Tom Anderson81e7f1792017-11-11 03:56:33474# Cross-toolchain strip is needed for building the sysroots.
475if package_exists binutils-arm-linux-gnueabihf; then
476 dev_list="${dev_list} binutils-arm-linux-gnueabihf"
477fi
478if package_exists binutils-aarch64-linux-gnu; then
479 dev_list="${dev_list} binutils-aarch64-linux-gnu"
480fi
481if package_exists binutils-mipsel-linux-gnu; then
482 dev_list="${dev_list} binutils-mipsel-linux-gnu"
483fi
484if package_exists binutils-mips64el-linux-gnuabi64; then
485 dev_list="${dev_list} binutils-mips64el-linux-gnuabi64"
486fi
487
johnme49bb458a2014-11-27 15:45:31488# When cross building for arm/Android on 64-bit systems the host binaries
489# that are part of v8 need to be compiled with -m32 which means
490# that basic multilib support is needed.
ki.stfu0a79d6992015-09-17 07:27:12491if file -L /sbin/init | grep -q 'ELF 64-bit'; then
johnme49bb458a2014-11-27 15:45:31492 # gcc-multilib conflicts with the arm cross compiler (at least in trusty) but
493 # g++-X.Y-multilib gives us the 32-bit support that we need. Find out the
494 # appropriate value of X and Y by seeing what version the current
495 # distribution's g++-multilib package depends on.
496 multilib_package=$(apt-cache depends g++-multilib --important | \
497 grep -E --color=never --only-matching '\bg\+\+-[0-9.]+-multilib\b')
498 lib32_list="$lib32_list $multilib_package"
499fi
500
Tom Anderson8e0a484e2018-06-14 22:47:02501if [ "$do_inst_syms" = "1" ]; then
[email protected]ba48c4ca2013-10-25 16:11:46502 echo "Including debugging symbols."
Tom Anderson8206da9a2018-06-12 01:49:09503
504 # Debian is in the process of transitioning to automatic debug packages, which
505 # have the -dbgsym suffix (https://wiki.debian.org/AutomaticDebugPackages).
506 # Untransitioned packages have the -dbg suffix. And on some systems, neither
507 # will be available, so exclude the ones that are missing.
508 dbg_package_name() {
509 if package_exists "$1-dbgsym"; then
510 echo "$1-dbgsym"
511 elif package_exists "$1-dbg"; then
512 echo "$1-dbg"
513 fi
514 }
515
516 for package in "${common_lib_list}"; do
517 dbg_list="$dbg_list $(dbg_package_name ${package})"
518 done
519
520 # Debugging symbols packages not following common naming scheme
Tom Anderson8e0a484e2018-06-14 22:47:02521 if [ "$(dbg_package_name libstdc++6)" == "" ]; then
522 if package_exists libstdc++6-8-dbg; then
523 dbg_list="${dbg_list} libstdc++6-8-dbg"
524 elif package_exists libstdc++6-7-dbg; then
525 dbg_list="${dbg_list} libstdc++6-7-dbg"
526 elif package_exists libstdc++6-6-dbg; then
Tom Anderson8206da9a2018-06-12 01:49:09527 dbg_list="${dbg_list} libstdc++6-6-dbg"
Tom Anderson8e0a484e2018-06-14 22:47:02528 elif package_exists libstdc++6-5-dbg; then
529 dbg_list="${dbg_list} libstdc++6-5-dbg"
Tom Anderson8206da9a2018-06-12 01:49:09530 elif package_exists libstdc++6-4.9-dbg; then
531 dbg_list="${dbg_list} libstdc++6-4.9-dbg"
Tom Anderson8e0a484e2018-06-14 22:47:02532 elif package_exists libstdc++6-4.8-dbg; then
Tom Anderson8206da9a2018-06-12 01:49:09533 dbg_list="${dbg_list} libstdc++6-4.8-dbg"
Tom Anderson8e0a484e2018-06-14 22:47:02534 elif package_exists libstdc++6-4.7-dbg; then
535 dbg_list="${dbg_list} libstdc++6-4.7-dbg"
Tom Andersone9883cd2018-06-20 00:32:21536 elif package_exists libstdc++6-4.6-dbg; then
537 dbg_list="${dbg_list} libstdc++6-4.6-dbg"
Tom Anderson8206da9a2018-06-12 01:49:09538 fi
539 fi
Tom Anderson8e0a484e2018-06-14 22:47:02540 if [ "$(dbg_package_name libatk1.0-0)" == "" ]; then
Tom Anderson8206da9a2018-06-12 01:49:09541 dbg_list="$dbg_list $(dbg_package_name libatk1.0)"
542 fi
Tom Anderson8e0a484e2018-06-14 22:47:02543 if [ "$(dbg_package_name libpango1.0-0)" == "" ]; then
Tom Anderson8206da9a2018-06-12 01:49:09544 dbg_list="$dbg_list $(dbg_package_name libpango1.0-dev)"
545 fi
[email protected]8ada8c52009-03-10 21:53:08546else
[email protected]ba48c4ca2013-10-25 16:11:46547 echo "Skipping debugging symbols."
[email protected]8ada8c52009-03-10 21:53:08548 dbg_list=
549fi
550
Tom Anderson8e0a484e2018-06-14 22:47:02551if [ "$do_inst_lib32" = "1" ]; then
Tom Andersondd47ad32018-03-21 19:30:19552 echo "Including 32-bit libraries."
johnme49bb458a2014-11-27 15:45:31553else
Tom Andersondd47ad32018-03-21 19:30:19554 echo "Skipping 32-bit libraries."
johnme49bb458a2014-11-27 15:45:31555 lib32_list=
[email protected]9f28a9cf2012-12-17 23:31:40556fi
557
Tom Anderson8e0a484e2018-06-14 22:47:02558if [ "$do_inst_arm" = "1" ]; then
[email protected]ba48c4ca2013-10-25 16:11:46559 echo "Including ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26560else
[email protected]ba48c4ca2013-10-25 16:11:46561 echo "Skipping ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26562 arm_list=
563fi
564
Tom Anderson8e0a484e2018-06-14 22:47:02565if [ "$do_inst_nacl" = "1" ]; then
[email protected]713eac62014-06-02 23:10:03566 echo "Including NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47567else
[email protected]713eac62014-06-02 23:10:03568 echo "Skipping NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47569 nacl_list=
570fi
571
Tom Andersone9883cd2018-06-20 00:32:21572filtered_backwards_compatible_list=
573if [ "$do_inst_backwards_compatible" = "1" ]; then
574 echo "Including backwards compatible packages."
575 for package in ${backwards_compatible_list}; do
576 if package_exists ${package}; then
577 filtered_backwards_compatible_list+=" ${package}"
578 fi
579 done
580fi
581
johnme4bd10302015-01-06 11:25:52582# The `sort -r -s -t: -k2` sorts all the :i386 packages to the front, to avoid
583# confusing dpkg-query (crbug.com/446172).
[email protected]565416362014-01-16 21:26:47584packages="$(
Tom Andersone9883cd2018-06-20 00:32:21585 echo "${dev_list} ${lib_list} ${dbg_list} ${lib32_list} ${arm_list}" \
586 "${nacl_list}" ${filtered_backwards_compatible_list} | tr " " "\n" | \
587 sort -u | sort -r -s -t: -k2 | tr "\n" " "
[email protected]565416362014-01-16 21:26:47588)"
[email protected]ba48c4ca2013-10-25 16:11:46589
590if [ 1 -eq "${do_quick_check-0}" ] ; then
thomasanderson73b3a4412016-11-18 23:16:07591 if ! missing_packages="$(dpkg-query -W -f ' ' ${packages} 2>&1)"; then
592 # Distinguish between packages that actually aren't available to the
593 # system (i.e. not in any repo) and packages that just aren't known to
594 # dpkg (i.e. managed by apt).
595 missing_packages="$(echo "${missing_packages}" | awk '{print $NF}')"
596 not_installed=""
597 unknown=""
598 for p in ${missing_packages}; do
599 if apt-cache show ${p} > /dev/null 2>&1; then
600 not_installed="${p}\n${not_installed}"
601 else
602 unknown="${p}\n${unknown}"
[email protected]ba48c4ca2013-10-25 16:11:46603 fi
thomasanderson73b3a4412016-11-18 23:16:07604 done
605 if [ -n "${not_installed}" ]; then
[email protected]ba48c4ca2013-10-25 16:11:46606 echo "WARNING: The following packages are not installed:"
thomasanderson73b3a4412016-11-18 23:16:07607 echo -e "${not_installed}" | sed -e "s/^/ /"
608 fi
609 if [ -n "${unknown}" ]; then
610 echo "WARNING: The following packages are unknown to your system"
611 echo "(maybe missing a repo or need to 'sudo apt-get update'):"
612 echo -e "${unknown}" | sed -e "s/^/ /"
[email protected]ba48c4ca2013-10-25 16:11:46613 fi
614 exit 1
615 fi
616 exit 0
617fi
618
Tom Anderson8e0a484e2018-06-14 22:47:02619if [ "$do_inst_lib32" = "1" ] || [ "$do_inst_nacl" = "1" ]; then
thomasanderson05c40292017-03-28 19:28:45620 sudo dpkg --add-architecture i386
johnme49bb458a2014-11-27 15:45:31621fi
sbc42564092015-04-01 01:01:28622sudo apt-get update
[email protected]e041ed12009-03-10 16:43:01623
[email protected]e041ed12009-03-10 16:43:01624echo "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
Daniel Bratell8cc92d372019-03-12 16:42:06628query_cmd="apt-get --just-print install $(echo $packages)"
629if cmd_output="$(LANGUAGE=en LANG=C $query_cmd)"; then
630 new_list=$(echo "$cmd_output" |
631 sed -e '1,/The following NEW packages will be installed:/d;s/^ //;t;d' |
632 sed 's/ *$//')
633 upgrade_list=$(echo "$cmd_output" |
634 sed -e '1,/The following packages will be upgraded:/d;s/^ //;t;d' |
635 sed 's/ *$//')
636 if [ -z "$new_list" ] && [ -z "$upgrade_list" ]; then
thakis3e861de2016-06-14 14:24:01637 echo "No missing packages, and the packages are up to date."
[email protected]b6e064522009-08-10 18:47:51638 else
Daniel Bratell8cc92d372019-03-12 16:42:06639 echo "Installing and upgrading packages: $new_list $upgrade_list."
640 sudo apt-get install ${do_quietly-} ${new_list} ${upgrade_list}
[email protected]b6e064522009-08-10 18:47:51641 fi
642 echo
[email protected]79a9d2962009-08-06 21:10:58643else
644 # An apt-get exit status of 100 indicates that a real error has occurred.
[email protected]e041ed12009-03-10 16:43:01645
Daniel Bratell8cc92d372019-03-12 16:42:06646 # I am intentionally leaving out the '"'s around query_cmd,
[email protected]79a9d2962009-08-06 21:10:58647 # as this makes it easier to cut and paste the output
Daniel Bratell8cc92d372019-03-12 16:42:06648 echo "The following command failed: " ${query_cmd}
[email protected]79a9d2962009-08-06 21:10:58649 echo
Daniel Bratell8cc92d372019-03-12 16:42:06650 echo "It produced the following output:"
651 echo "$cmd_output"
[email protected]79a9d2962009-08-06 21:10:58652 echo
653 echo "You will have to install the above packages yourself."
654 echo
655 exit 100
656fi
[email protected]e041ed12009-03-10 16:43:01657
[email protected]d96cc3472013-09-19 00:53:30658# Install the Chrome OS default fonts. This must go after running
659# apt-get, since install-chromeos-fonts depends on curl.
Tom Anderson8e0a484e2018-06-14 22:47:02660if [ "$do_inst_chromeos_fonts" != "0" ]; then
[email protected]d96cc3472013-09-19 00:53:30661 echo
662 echo "Installing Chrome OS fonts."
663 dir=`echo $0 | sed -r -e 's/\/[^/]+$//'`
664 if ! sudo $dir/linux/install-chromeos-fonts.py; then
665 echo "ERROR: The installation of the Chrome OS default fonts failed."
666 if [ `stat -f -c %T $dir` == "nfs" ]; then
667 echo "The reason is that your repo is installed on a remote file system."
668 else
669 echo "This is expected if your repo is installed on a remote file system."
670 fi
671 echo "It is recommended to install your repo on a local file system."
672 echo "You can skip the installation of the Chrome OS default founts with"
673 echo "the command line option: --no-chromeos-fonts."
674 exit 1
675 fi
676else
677 echo "Skipping installation of Chrome OS fonts."
678fi
679
thomasanderson5ef5c3d2016-12-08 01:59:19680echo "Installing locales."
681CHROMIUM_LOCALES="da_DK.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 zh_TW.UTF-8"
682LOCALE_GEN=/etc/locale.gen
683if [ -e ${LOCALE_GEN} ]; then
684 OLD_LOCALE_GEN="$(cat /etc/locale.gen)"
685 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
686 sudo sed -i "s/^# ${CHROMIUM_LOCALE}/${CHROMIUM_LOCALE}/" ${LOCALE_GEN}
687 done
688 # Regenerating locales can take a while, so only do it if we need to.
689 if (echo "${OLD_LOCALE_GEN}" | cmp -s ${LOCALE_GEN}); then
690 echo "Locales already up-to-date."
691 else
692 sudo locale-gen
693 fi
694else
695 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
696 sudo locale-gen ${CHROMIUM_LOCALE}
697 done
698fi