blob: d371c1698227e635f671a6cbde2e574c8a716e8a [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
thomasanderson20032a5c2017-03-02 00:28:20187 wdiff
Tom Andersond79de41d2017-08-08 00:23:23188 x11-utils
thomasanderson20032a5c2017-03-02 00:28:20189 xcompmgr
George Burgess IV3d20a812018-05-10 22:24:17190 xz-utils
thomasanderson20032a5c2017-03-02 00:28:20191 zip
192 $chromeos_dev_list
193"
[email protected]fdc6bf52010-06-07 22:01:57194
[email protected]f16aabf2012-08-15 21:00:14195# 64-bit systems need a minimum set of 32-bit compat packages for the pre-built
[email protected]f8ceadb2014-08-18 12:30:23196# NaCl binaries.
ki.stfu0a79d6992015-09-17 07:27:12197if file -L /sbin/init | grep -q 'ELF 64-bit'; then
[email protected]d93d68b12012-10-15 06:39:53198 dev_list="${dev_list} libc6-i386 lib32gcc1 lib32stdc++6"
[email protected]f16aabf2012-08-15 21:00:14199fi
200
[email protected]fdc6bf52010-06-07 22:01:57201# Run-time libraries required by chromeos only
[email protected]ba48c4ca2013-10-25 16:11:46202chromeos_lib_list="libpulse0 libbz2-1.0"
[email protected]e041ed12009-03-10 16:43:01203
Yves Gereye1fe0df2018-06-08 08:01:47204# List of required run-time libraries
205common_lib_list="\
Tim Brown06ee43a2018-02-08 18:42:12206 libappindicator1
207 libappindicator3-1
208 libasound2
thomasanderson20032a5c2017-03-02 00:28:20209 libatk1.0-0
210 libc6
thomasanderson20032a5c2017-03-02 00:28:20211 libcairo2
212 libcap2
213 libcups2
214 libexpat1
215 libffi6
216 libfontconfig1
217 libfreetype6
218 libglib2.0-0
219 libgnome-keyring0
220 libgtk2.0-0
221 libgtk-3-0
222 libpam0g
223 libpango1.0-0
224 libpci3
225 libpcre3
226 libpixman-1-0
227 libspeechd2
228 libstdc++6
229 libsqlite3-0
Tom Andersonf8a0c662018-06-14 23:54:14230 libuuid1
Scott Violetdd7e2372018-04-12 01:11:26231 libwayland-egl1-mesa
thomasanderson20032a5c2017-03-02 00:28:20232 libx11-6
233 libx11-xcb1
234 libxau6
235 libxcb1
236 libxcomposite1
237 libxcursor1
238 libxdamage1
239 libxdmcp6
240 libxext6
241 libxfixes3
242 libxi6
243 libxinerama1
244 libxrandr2
245 libxrender1
246 libxtst6
247 zlib1g
Yves Gereye1fe0df2018-06-08 08:01:47248"
249
250# Full list of required run-time libraries
251lib_list="\
252 $common_lib_list
thomasanderson20032a5c2017-03-02 00:28:20253 $chromeos_lib_list
254"
[email protected]e041ed12009-03-10 16:43:01255
johnme49bb458a2014-11-27 15:45:31256# 32-bit libraries needed e.g. to compile V8 snapshot for Android or armhf
Tanin Na Nakorn6cbe32e52017-05-30 19:37:04257lib32_list="linux-libc-dev:i386 libpci3:i386"
johnme49bb458a2014-11-27 15:45:31258
Tom Andersondd47ad32018-03-21 19:30:19259# 32-bit libraries needed for a 32-bit build
260lib32_list="$lib32_list libx11-xcb1:i386"
261
Tom Andersone9883cd2018-06-20 00:32:21262# Packages that have been removed from this script. Regardless of configuration
263# or options passed to this script, whenever a package is removed, it should be
264# added here.
265backwards_compatible_list="\
266 7za
267 fonts-indic
268 fonts-ipafont
269 fonts-stix
270 fonts-thai-tlwg
271 fonts-tlwg-garuda
272 language-pack-da
273 language-pack-fr
274 language-pack-he
275 language-pack-zh-hant
276 libappindicator3-1:i386
277 libdconf-dev
278 libdconf-dev:i386
279 libdconf1
280 libdconf1:i386
281 libexif-dev
282 libexif12
283 libexif12:i386
284 libgbm-dev
285 libgconf-2-4:i386
286 libgconf2-dev
287 libgl1-mesa-dev
288 libgl1-mesa-glx:i386
289 libgles2-mesa-dev
290 mesa-common-dev
291 msttcorefonts
292 ttf-dejavu-core
293 ttf-indic-fonts
294 ttf-kochi-gothic
295 ttf-kochi-mincho
296 ttf-mscorefonts-installer
297 xfonts-mathml
298"
299case $distro_codename in
300 trusty)
301 backwards_compatible_list+=" \
302 libgbm-dev-lts-trusty
303 libgl1-mesa-dev-lts-trusty
304 libgl1-mesa-glx-lts-trusty:i386
305 libgles2-mesa-dev-lts-trusty
306 mesa-common-dev-lts-trusty"
307 ;;
308 xenial)
309 backwards_compatible_list+=" \
310 libgbm-dev-lts-xenial
311 libgl1-mesa-dev-lts-xenial
312 libgl1-mesa-glx-lts-xenial:i386
313 libgles2-mesa-dev-lts-xenial
314 mesa-common-dev-lts-xenial"
315 ;;
316esac
317
[email protected]3f85dac32013-10-29 02:38:46318# arm cross toolchain packages needed to build chrome on armhf
thomasanderson4e3d30fe2016-12-07 18:58:34319EM_REPO="deb http://emdebian.org/tools/debian/ jessie main"
320EM_SOURCE=$(cat <<EOF
321# Repo added by Chromium $0
322${EM_REPO}
323# deb-src http://emdebian.org/tools/debian/ jessie main
324EOF
325)
326EM_ARCHIVE_KEY_FINGER="084C6C6F39159EDB67969AA87DE089671804772E"
327GPP_ARM_PACKAGE="g++-arm-linux-gnueabihf"
thomasandersondfefc6c02017-05-04 01:29:11328case $distro_codename in
kjellander95504ae2017-03-30 12:30:31329 jessie)
thomasanderson4e3d30fe2016-12-07 18:58:34330 eval $(apt-config shell APT_SOURCESDIR 'Dir::Etc::sourceparts/d')
331 CROSSTOOLS_LIST="${APT_SOURCESDIR}/crosstools.list"
332 arm_list="libc6-dev:armhf
333 linux-libc-dev:armhf"
Tom Anderson8e0a484e2018-06-14 22:47:02334 if [ "$do_inst_arm" = "1" ]; then
thomasanderson4e3d30fe2016-12-07 18:58:34335 if $(dpkg-query -W ${GPP_ARM_PACKAGE} &>/dev/null); then
336 arm_list+=" ${GPP_ARM_PACKAGE}"
337 else
Tom Anderson8e0a484e2018-06-14 22:47:02338 if [ "${add_cross_tool_repo}" = "1" ]; then
thomasanderson4e3d30fe2016-12-07 18:58:34339 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}"
Tom Anderson8e0a484e2018-06-14 22:47:02345 else
346 echo "The Debian Cross-toolchains repository is necessary to"
347 echo "cross-compile Chromium for arm."
348 echo "Rerun with --add-deb-cross-tool-repo to have it added for you."
thomasanderson4e3d30fe2016-12-07 18:58:34349 fi
350 fi
351 fi
352 ;;
thomasandersondfefc6c02017-05-04 01:29:11353 # All necessary ARM packages are available on the default repos on
354 # Debian 9 and later.
kjellander95504ae2017-03-30 12:30:31355 *)
Tom Anderson81e7f1792017-11-11 03:56:33356 arm_list="libc6-dev-armhf-cross
thomasanderson4e3d30fe2016-12-07 18:58:34357 linux-libc-dev-armhf-cross
358 ${GPP_ARM_PACKAGE}"
359 ;;
360esac
[email protected]31a605532011-08-23 22:27:35361
sbcb5d4ded2015-04-01 17:49:03362# Work around for dependency issue Ubuntu/Trusty: http://crbug.com/435056
thomasandersondfefc6c02017-05-04 01:29:11363case $distro_codename in
friedmanbf8b90a2016-04-21 01:15:48364 trusty)
365 arm_list+=" g++-4.8-multilib-arm-linux-gnueabihf
366 gcc-4.8-multilib-arm-linux-gnueabihf"
367 ;;
Marcin Wiacekd7577c32018-04-30 19:12:51368 xenial|artful|bionic)
krasineef3d4b2016-04-22 00:52:18369 arm_list+=" g++-5-multilib-arm-linux-gnueabihf
370 gcc-5-multilib-arm-linux-gnueabihf
371 gcc-arm-linux-gnueabihf"
372 ;;
friedmanbf8b90a2016-04-21 01:15:48373esac
sbcb5d4ded2015-04-01 17:49:03374
[email protected]713eac62014-06-02 23:10:03375# Packages to build NaCl, its toolchains, and its ports.
Brad Nelson5e59c2c2014-09-06 06:18:45376naclports_list="ant autoconf bison cmake gawk intltool xutils-dev xsltproc"
thomasanderson20032a5c2017-03-02 00:28:20377nacl_list="\
378 g++-mingw-w64-i686
379 lib32z1-dev
380 libasound2:i386
381 libcap2:i386
382 libelf-dev:i386
383 libfontconfig1:i386
thomasanderson20032a5c2017-03-02 00:28:20384 libglib2.0-0:i386
385 libgpm2:i386
386 libgtk2.0-0:i386
387 libgtk-3-0:i386
388 libncurses5:i386
389 lib32ncurses5-dev
390 libnss3:i386
391 libpango1.0-0:i386
thomasandersondfefc6c02017-05-04 01:29:11392 libssl-dev:i386
thomasanderson20032a5c2017-03-02 00:28:20393 libtinfo-dev
394 libtinfo-dev:i386
395 libtool
Tom Andersonf8a0c662018-06-14 23:54:14396 libuuid1:i386
thomasanderson20032a5c2017-03-02 00:28:20397 libxcomposite1:i386
398 libxcursor1:i386
399 libxdamage1:i386
400 libxi6:i386
401 libxrandr2:i386
402 libxss1:i386
403 libxtst6:i386
404 texinfo
405 xvfb
406 ${naclports_list}
407"
[email protected]419a9a62014-06-19 18:26:18408
Tom Anderson0524b2b72017-12-11 20:39:18409if package_exists libssl1.1; then
410 nacl_list="${nacl_list} libssl1.1:i386"
411elif package_exists libssl1.0.2; then
thomasandersondfefc6c02017-05-04 01:29:11412 nacl_list="${nacl_list} libssl1.0.2:i386"
Tom Anderson0524b2b72017-12-11 20:39:18413else
414 nacl_list="${nacl_list} libssl1.0.0:i386"
thomasandersondfefc6c02017-05-04 01:29:11415fi
416
[email protected]757c2962012-03-15 19:05:18417# Some package names have changed over time
Tom Anderson0524b2b72017-12-11 20:39:18418if package_exists libpng16-16; then
marcin73929a72017-01-04 22:04:58419 lib_list="${lib_list} libpng16-16"
Tom Anderson0524b2b72017-12-11 20:39:18420else
421 lib_list="${lib_list} libpng12-0"
marcin73929a72017-01-04 22:04:58422fi
Tom Anderson96a2efc2018-06-14 01:12:14423if package_exists libnspr4; then
[email protected]1a0f64a2011-05-20 17:53:55424 lib_list="${lib_list} libnspr4 libnss3"
[email protected]757c2962012-03-15 19:05:18425else
[email protected]757c2962012-03-15 19:05:18426 lib_list="${lib_list} libnspr4-0d libnss3-1d"
427fi
[email protected]4fc00712013-05-29 23:11:20428if package_exists libjpeg-dev; then
[email protected]9e895962013-05-21 08:26:42429 dev_list="${dev_list} libjpeg-dev"
[email protected]b11411c2012-03-21 22:09:41430else
[email protected]9e895962013-05-21 08:26:42431 dev_list="${dev_list} libjpeg62-dev"
[email protected]b11411c2012-03-21 22:09:41432fi
[email protected]4fc00712013-05-29 23:11:20433if package_exists libudev1; then
[email protected]9e895962013-05-21 08:26:42434 dev_list="${dev_list} libudev1"
[email protected]ab9e69082014-06-05 15:28:52435 nacl_list="${nacl_list} libudev1:i386"
[email protected]9e895962013-05-21 08:26:42436else
437 dev_list="${dev_list} libudev0"
[email protected]ab9e69082014-06-05 15:28:52438 nacl_list="${nacl_list} libudev0:i386"
[email protected]9e895962013-05-21 08:26:42439fi
[email protected]3ea42912013-09-06 06:23:57440if package_exists libbrlapi0.6; then
441 dev_list="${dev_list} libbrlapi0.6"
442else
443 dev_list="${dev_list} libbrlapi0.5"
444fi
Tom Anderson0524b2b72017-12-11 20:39:18445if package_exists apache2.2-bin; then
halton.huo3e728c42016-01-20 05:12:23446 dev_list="${dev_list} apache2.2-bin"
Tom Anderson0524b2b72017-12-11 20:39:18447else
448 dev_list="${dev_list} apache2-bin"
halton.huo3e728c42016-01-20 05:12:23449fi
Marcin Wiacekd7577c32018-04-30 19:12:51450if package_exists libav-tools; then
451 dev_list="${dev_list} libav-tools"
452fi
453if package_exists php7.2-cgi; then
454 dev_list="${dev_list} php7.2-cgi libapache2-mod-php7.2"
455elif package_exists php7.1-cgi; then
marcin38933dd2017-10-30 00:05:52456 dev_list="${dev_list} php7.1-cgi libapache2-mod-php7.1"
457elif package_exists php7.0-cgi; then
vadimsh278ff0662016-05-19 00:06:28458 dev_list="${dev_list} php7.0-cgi libapache2-mod-php7.0"
krasineef3d4b2016-04-22 00:52:18459else
vadimsh278ff0662016-05-19 00:06:28460 dev_list="${dev_list} php5-cgi libapache2-mod-php5"
krasineef3d4b2016-04-22 00:52:18461fi
[email protected]757c2962012-03-15 19:05:18462
[email protected]dc099772013-09-30 22:06:58463# Some packages are only needed if the distribution actually supports
[email protected]757c2962012-03-15 19:05:18464# installing them.
[email protected]4fc00712013-05-29 23:11:20465if package_exists appmenu-gtk; then
[email protected]757c2962012-03-15 19:05:18466 lib_list="$lib_list appmenu-gtk"
[email protected]4da8fad2011-04-11 18:42:42467fi
468
Tom Anderson81e7f1792017-11-11 03:56:33469# Cross-toolchain strip is needed for building the sysroots.
470if package_exists binutils-arm-linux-gnueabihf; then
471 dev_list="${dev_list} binutils-arm-linux-gnueabihf"
472fi
473if package_exists binutils-aarch64-linux-gnu; then
474 dev_list="${dev_list} binutils-aarch64-linux-gnu"
475fi
476if package_exists binutils-mipsel-linux-gnu; then
477 dev_list="${dev_list} binutils-mipsel-linux-gnu"
478fi
479if package_exists binutils-mips64el-linux-gnuabi64; then
480 dev_list="${dev_list} binutils-mips64el-linux-gnuabi64"
481fi
482
johnme49bb458a2014-11-27 15:45:31483# When cross building for arm/Android on 64-bit systems the host binaries
484# that are part of v8 need to be compiled with -m32 which means
485# that basic multilib support is needed.
ki.stfu0a79d6992015-09-17 07:27:12486if file -L /sbin/init | grep -q 'ELF 64-bit'; then
johnme49bb458a2014-11-27 15:45:31487 # gcc-multilib conflicts with the arm cross compiler (at least in trusty) but
488 # g++-X.Y-multilib gives us the 32-bit support that we need. Find out the
489 # appropriate value of X and Y by seeing what version the current
490 # distribution's g++-multilib package depends on.
491 multilib_package=$(apt-cache depends g++-multilib --important | \
492 grep -E --color=never --only-matching '\bg\+\+-[0-9.]+-multilib\b')
493 lib32_list="$lib32_list $multilib_package"
494fi
495
Tom Anderson8e0a484e2018-06-14 22:47:02496if [ "$do_inst_syms" = "1" ]; then
[email protected]ba48c4ca2013-10-25 16:11:46497 echo "Including debugging symbols."
Tom Anderson8206da9a2018-06-12 01:49:09498
499 # Debian is in the process of transitioning to automatic debug packages, which
500 # have the -dbgsym suffix (https://wiki.debian.org/AutomaticDebugPackages).
501 # Untransitioned packages have the -dbg suffix. And on some systems, neither
502 # will be available, so exclude the ones that are missing.
503 dbg_package_name() {
504 if package_exists "$1-dbgsym"; then
505 echo "$1-dbgsym"
506 elif package_exists "$1-dbg"; then
507 echo "$1-dbg"
508 fi
509 }
510
511 for package in "${common_lib_list}"; do
512 dbg_list="$dbg_list $(dbg_package_name ${package})"
513 done
514
515 # Debugging symbols packages not following common naming scheme
Tom Anderson8e0a484e2018-06-14 22:47:02516 if [ "$(dbg_package_name libstdc++6)" == "" ]; then
517 if package_exists libstdc++6-8-dbg; then
518 dbg_list="${dbg_list} libstdc++6-8-dbg"
519 elif package_exists libstdc++6-7-dbg; then
520 dbg_list="${dbg_list} libstdc++6-7-dbg"
521 elif package_exists libstdc++6-6-dbg; then
Tom Anderson8206da9a2018-06-12 01:49:09522 dbg_list="${dbg_list} libstdc++6-6-dbg"
Tom Anderson8e0a484e2018-06-14 22:47:02523 elif package_exists libstdc++6-5-dbg; then
524 dbg_list="${dbg_list} libstdc++6-5-dbg"
Tom Anderson8206da9a2018-06-12 01:49:09525 elif package_exists libstdc++6-4.9-dbg; then
526 dbg_list="${dbg_list} libstdc++6-4.9-dbg"
Tom Anderson8e0a484e2018-06-14 22:47:02527 elif package_exists libstdc++6-4.8-dbg; then
Tom Anderson8206da9a2018-06-12 01:49:09528 dbg_list="${dbg_list} libstdc++6-4.8-dbg"
Tom Anderson8e0a484e2018-06-14 22:47:02529 elif package_exists libstdc++6-4.7-dbg; then
530 dbg_list="${dbg_list} libstdc++6-4.7-dbg"
Tom Andersone9883cd2018-06-20 00:32:21531 elif package_exists libstdc++6-4.6-dbg; then
532 dbg_list="${dbg_list} libstdc++6-4.6-dbg"
Tom Anderson8206da9a2018-06-12 01:49:09533 fi
534 fi
Tom Anderson8e0a484e2018-06-14 22:47:02535 if [ "$(dbg_package_name libatk1.0-0)" == "" ]; then
Tom Anderson8206da9a2018-06-12 01:49:09536 dbg_list="$dbg_list $(dbg_package_name libatk1.0)"
537 fi
Tom Anderson8e0a484e2018-06-14 22:47:02538 if [ "$(dbg_package_name libpango1.0-0)" == "" ]; then
Tom Anderson8206da9a2018-06-12 01:49:09539 dbg_list="$dbg_list $(dbg_package_name libpango1.0-dev)"
540 fi
[email protected]8ada8c52009-03-10 21:53:08541else
[email protected]ba48c4ca2013-10-25 16:11:46542 echo "Skipping debugging symbols."
[email protected]8ada8c52009-03-10 21:53:08543 dbg_list=
544fi
545
Tom Anderson8e0a484e2018-06-14 22:47:02546if [ "$do_inst_lib32" = "1" ]; then
Tom Andersondd47ad32018-03-21 19:30:19547 echo "Including 32-bit libraries."
johnme49bb458a2014-11-27 15:45:31548else
Tom Andersondd47ad32018-03-21 19:30:19549 echo "Skipping 32-bit libraries."
johnme49bb458a2014-11-27 15:45:31550 lib32_list=
[email protected]9f28a9cf2012-12-17 23:31:40551fi
552
Tom Anderson8e0a484e2018-06-14 22:47:02553if [ "$do_inst_arm" = "1" ]; then
[email protected]ba48c4ca2013-10-25 16:11:46554 echo "Including ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26555else
[email protected]ba48c4ca2013-10-25 16:11:46556 echo "Skipping ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26557 arm_list=
558fi
559
Tom Anderson8e0a484e2018-06-14 22:47:02560if [ "$do_inst_nacl" = "1" ]; then
[email protected]713eac62014-06-02 23:10:03561 echo "Including NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47562else
[email protected]713eac62014-06-02 23:10:03563 echo "Skipping NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47564 nacl_list=
565fi
566
Tom Andersone9883cd2018-06-20 00:32:21567filtered_backwards_compatible_list=
568if [ "$do_inst_backwards_compatible" = "1" ]; then
569 echo "Including backwards compatible packages."
570 for package in ${backwards_compatible_list}; do
571 if package_exists ${package}; then
572 filtered_backwards_compatible_list+=" ${package}"
573 fi
574 done
575fi
576
johnme4bd10302015-01-06 11:25:52577# The `sort -r -s -t: -k2` sorts all the :i386 packages to the front, to avoid
578# confusing dpkg-query (crbug.com/446172).
[email protected]565416362014-01-16 21:26:47579packages="$(
Tom Andersone9883cd2018-06-20 00:32:21580 echo "${dev_list} ${lib_list} ${dbg_list} ${lib32_list} ${arm_list}" \
581 "${nacl_list}" ${filtered_backwards_compatible_list} | tr " " "\n" | \
582 sort -u | sort -r -s -t: -k2 | tr "\n" " "
[email protected]565416362014-01-16 21:26:47583)"
[email protected]ba48c4ca2013-10-25 16:11:46584
585if [ 1 -eq "${do_quick_check-0}" ] ; then
thomasanderson73b3a4412016-11-18 23:16:07586 if ! missing_packages="$(dpkg-query -W -f ' ' ${packages} 2>&1)"; then
587 # Distinguish between packages that actually aren't available to the
588 # system (i.e. not in any repo) and packages that just aren't known to
589 # dpkg (i.e. managed by apt).
590 missing_packages="$(echo "${missing_packages}" | awk '{print $NF}')"
591 not_installed=""
592 unknown=""
593 for p in ${missing_packages}; do
594 if apt-cache show ${p} > /dev/null 2>&1; then
595 not_installed="${p}\n${not_installed}"
596 else
597 unknown="${p}\n${unknown}"
[email protected]ba48c4ca2013-10-25 16:11:46598 fi
thomasanderson73b3a4412016-11-18 23:16:07599 done
600 if [ -n "${not_installed}" ]; then
[email protected]ba48c4ca2013-10-25 16:11:46601 echo "WARNING: The following packages are not installed:"
thomasanderson73b3a4412016-11-18 23:16:07602 echo -e "${not_installed}" | sed -e "s/^/ /"
603 fi
604 if [ -n "${unknown}" ]; then
605 echo "WARNING: The following packages are unknown to your system"
606 echo "(maybe missing a repo or need to 'sudo apt-get update'):"
607 echo -e "${unknown}" | sed -e "s/^/ /"
[email protected]ba48c4ca2013-10-25 16:11:46608 fi
609 exit 1
610 fi
611 exit 0
612fi
613
Tom Anderson8e0a484e2018-06-14 22:47:02614if [ "$do_inst_lib32" = "1" ] || [ "$do_inst_nacl" = "1" ]; then
thomasanderson05c40292017-03-28 19:28:45615 sudo dpkg --add-architecture i386
johnme49bb458a2014-11-27 15:45:31616fi
sbc42564092015-04-01 01:01:28617sudo apt-get update
[email protected]e041ed12009-03-10 16:43:01618
619# We initially run "apt-get" with the --reinstall option and parse its output.
620# This way, we can find all the packages that need to be newly installed
621# without accidentally promoting any packages from "auto" to "manual".
622# We then re-run "apt-get" with just the list of missing packages.
623echo "Finding missing packages..."
[email protected]757c2962012-03-15 19:05:18624# Intentionally leaving $packages unquoted so it's more readable.
[email protected]b6e064522009-08-10 18:47:51625echo "Packages required: " $packages
626echo
[email protected]79a9d2962009-08-06 21:10:58627new_list_cmd="sudo apt-get install --reinstall $(echo $packages)"
[email protected]c3d8b152013-05-10 10:10:03628if new_list="$(yes n | LANGUAGE=en LANG=C $new_list_cmd)"; then
[email protected]b6e064522009-08-10 18:47:51629 # We probably never hit this following line.
thakis3e861de2016-06-14 14:24:01630 echo "No missing packages, and the packages are up to date."
[email protected]b62f11e72010-05-03 17:20:45631elif [ $? -eq 1 ]; then
[email protected]79a9d2962009-08-06 21:10:58632 # We expect apt-get to have exit status of 1.
[email protected]757c2962012-03-15 19:05:18633 # This indicates that we cancelled the install with "yes n|".
[email protected]b6e064522009-08-10 18:47:51634 new_list=$(echo "$new_list" |
[email protected]79a9d2962009-08-06 21:10:58635 sed -e '1,/The following NEW packages will be installed:/d;s/^ //;t;d')
[email protected]b6e064522009-08-10 18:47:51636 new_list=$(echo "$new_list" | sed 's/ *$//')
637 if [ -z "$new_list" ] ; then
thakis3e861de2016-06-14 14:24:01638 echo "No missing packages, and the packages are up to date."
[email protected]b6e064522009-08-10 18:47:51639 else
640 echo "Installing missing packages: $new_list."
[email protected]e2544ed42012-04-23 04:48:31641 sudo apt-get install ${do_quietly-} ${new_list}
[email protected]b6e064522009-08-10 18:47:51642 fi
643 echo
[email protected]79a9d2962009-08-06 21:10:58644else
645 # An apt-get exit status of 100 indicates that a real error has occurred.
[email protected]e041ed12009-03-10 16:43:01646
[email protected]79a9d2962009-08-06 21:10:58647 # I am intentionally leaving out the '"'s around new_list_cmd,
648 # as this makes it easier to cut and paste the output
[email protected]79a9d2962009-08-06 21:10:58649 echo "The following command failed: " ${new_list_cmd}
650 echo
651 echo "It produces the following output:"
652 yes n | $new_list_cmd || true
653 echo
654 echo "You will have to install the above packages yourself."
655 echo
656 exit 100
657fi
[email protected]e041ed12009-03-10 16:43:01658
[email protected]d96cc3472013-09-19 00:53:30659# Install the Chrome OS default fonts. This must go after running
660# apt-get, since install-chromeos-fonts depends on curl.
Tom Anderson8e0a484e2018-06-14 22:47:02661if [ "$do_inst_chromeos_fonts" != "0" ]; then
[email protected]d96cc3472013-09-19 00:53:30662 echo
663 echo "Installing Chrome OS fonts."
664 dir=`echo $0 | sed -r -e 's/\/[^/]+$//'`
665 if ! sudo $dir/linux/install-chromeos-fonts.py; then
666 echo "ERROR: The installation of the Chrome OS default fonts failed."
667 if [ `stat -f -c %T $dir` == "nfs" ]; then
668 echo "The reason is that your repo is installed on a remote file system."
669 else
670 echo "This is expected if your repo is installed on a remote file system."
671 fi
672 echo "It is recommended to install your repo on a local file system."
673 echo "You can skip the installation of the Chrome OS default founts with"
674 echo "the command line option: --no-chromeos-fonts."
675 exit 1
676 fi
677else
678 echo "Skipping installation of Chrome OS fonts."
679fi
680
thomasanderson5ef5c3d2016-12-08 01:59:19681echo "Installing locales."
682CHROMIUM_LOCALES="da_DK.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 zh_TW.UTF-8"
683LOCALE_GEN=/etc/locale.gen
684if [ -e ${LOCALE_GEN} ]; then
685 OLD_LOCALE_GEN="$(cat /etc/locale.gen)"
686 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
687 sudo sed -i "s/^# ${CHROMIUM_LOCALE}/${CHROMIUM_LOCALE}/" ${LOCALE_GEN}
688 done
689 # Regenerating locales can take a while, so only do it if we need to.
690 if (echo "${OLD_LOCALE_GEN}" | cmp -s ${LOCALE_GEN}); then
691 echo "Locales already up-to-date."
692 else
693 sudo locale-gen
694 fi
695else
696 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
697 sudo locale-gen ${CHROMIUM_LOCALE}
698 done
699fi