blob: fb1a1cb59a8ae3cabfb6d10cca4f4d8210cf63e6 [file] [log] [blame]
[email protected]e041ed12009-03-10 16:43:011#!/bin/bash -e
2
[email protected]aac39c92012-02-08 18:39:533# Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]e46cdae2009-08-25 20:59:274# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
[email protected]cf1df402008-10-31 21:45:307# Script to install everything needed to build chromium (well, ideally, anyway)
mostynbdf175a82016-02-08 23:27:208# See https://chromium.googlesource.com/chromium/src/+/master/docs/linux_build_instructions.md
[email protected]cf1df402008-10-31 21:45:309
[email protected]1eae2bfb2010-01-26 18:17:5310usage() {
11 echo "Usage: $0 [--options]"
12 echo "Options:"
13 echo "--[no-]syms: enable or disable installation of debugging symbols"
johnme49bb458a2014-11-27 15:45:3114 echo "--lib32: enable installation of 32-bit libraries, e.g. for V8 snapshot"
[email protected]f2826b6a2012-11-15 01:06:2615 echo "--[no-]arm: enable or disable installation of arm cross toolchain"
[email protected]bd29cdd2013-02-22 03:49:2016 echo "--[no-]chromeos-fonts: enable or disable installation of Chrome OS"\
17 "fonts"
[email protected]565416362014-01-16 21:26:4718 echo "--[no-]nacl: enable or disable installation of prerequisites for"\
19 "building standalone NaCl and all its toolchains"
[email protected]e2544ed42012-04-23 04:48:3120 echo "--no-prompt: silently select standard options/defaults"
[email protected]ba48c4ca2013-10-25 16:11:4621 echo "--quick-check: quickly try to determine if dependencies are installed"
22 echo " (this avoids interactive prompts and sudo commands,"
23 echo " so might not be 100% accurate)"
24 echo "--unsupported: attempt installation even on unsupported systems"
[email protected]1eae2bfb2010-01-26 18:17:5325 echo "Script will prompt interactively if options not given."
26 exit 1
27}
28
thomasanderson4e3d30fe2016-12-07 18:58:3429# Waits for the user to press 'Y' or 'N'. Either uppercase of lowercase is
30# accepted. Returns 0 for 'Y' and 1 for 'N'. If an optional parameter has
31# been provided to yes_no(), the function also accepts RETURN as a user input.
32# The parameter specifies the exit code that should be returned in that case.
33# The function will echo the user's selection followed by a newline character.
34# Users can abort the function by pressing CTRL-C. This will call "exit 1".
35yes_no() {
36 if [ 0 -ne "${do_default-0}" ] ; then
37 [ $1 -eq 0 ] && echo "Y" || echo "N"
38 return $1
39 fi
40 local c
41 while :; do
42 c="$(trap 'stty echo -iuclc icanon 2>/dev/null' EXIT INT TERM QUIT
43 stty -echo iuclc -icanon 2>/dev/null
44 dd count=1 bs=1 2>/dev/null | od -An -tx1)"
45 case "$c" in
46 " 0a") if [ -n "$1" ]; then
47 [ $1 -eq 0 ] && echo "Y" || echo "N"
48 return $1
49 fi
50 ;;
51 " 79") echo "Y"
52 return 0
53 ;;
54 " 6e") echo "N"
55 return 1
56 ;;
57 "") echo "Aborted" >&2
58 exit 1
59 ;;
60 *) # The user pressed an unrecognized key. As we are not echoing
61 # any incorrect user input, alert the user by ringing the bell.
62 (tput bel) 2>/dev/null
63 ;;
64 esac
65 done
66}
67
[email protected]4fc00712013-05-29 23:11:2068# Checks whether a particular package is available in the repos.
69# USAGE: $ package_exists <package name>
70package_exists() {
Tom Anderson17d6cdd2017-11-28 04:13:2571 # 'apt-cache search' takes a regex string, so eg. the +'s in packages like
72 # "libstdc++" need to be escaped.
73 local escaped="$(echo $1 | sed 's/[\~\+\.\:-]/\\&/g')"
74 [ ! -z "$(apt-cache search --names-only "${escaped}" | \
Tom Anderson9c70eb72017-11-27 21:47:3875 awk '$1 == "'$1'" { print $1; }')" ]
[email protected]4fc00712013-05-29 23:11:2076}
77
[email protected]fbeddf22014-01-17 23:59:0178# These default to on because (some) bots need them and it keeps things
79# simple for the bot setup if all bots just run the script in its default
80# mode. Developers who don't want stuff they don't need installed on their
81# own workstations can pass --no-arm --no-nacl when running the script.
82do_inst_arm=1
83do_inst_nacl=1
84
[email protected]1eae2bfb2010-01-26 18:17:5385while test "$1" != ""
86do
87 case "$1" in
[email protected]ce774642011-09-12 23:21:3988 --syms) do_inst_syms=1;;
89 --no-syms) do_inst_syms=0;;
[email protected]ce774642011-09-12 23:21:3990 --lib32) do_inst_lib32=1;;
[email protected]f2826b6a2012-11-15 01:06:2691 --arm) do_inst_arm=1;;
92 --no-arm) do_inst_arm=0;;
[email protected]bd29cdd2013-02-22 03:49:2093 --chromeos-fonts) do_inst_chromeos_fonts=1;;
94 --no-chromeos-fonts) do_inst_chromeos_fonts=0;;
[email protected]565416362014-01-16 21:26:4795 --nacl) do_inst_nacl=1;;
96 --no-nacl) do_inst_nacl=0;;
[email protected]e2544ed42012-04-23 04:48:3197 --no-prompt) do_default=1
98 do_quietly="-qq --assume-yes"
99 ;;
[email protected]ba48c4ca2013-10-25 16:11:46100 --quick-check) do_quick_check=1;;
[email protected]fe63a022013-01-15 22:11:47101 --unsupported) do_unsupported=1;;
[email protected]1eae2bfb2010-01-26 18:17:53102 *) usage;;
103 esac
104 shift
105done
106
johnme49bb458a2014-11-27 15:45:31107if test "$do_inst_arm" = "1"; then
108 do_inst_lib32=1
109fi
110
[email protected]0febc9b2014-05-22 20:07:19111# Check for lsb_release command in $PATH
112if ! which lsb_release > /dev/null; then
113 echo "ERROR: lsb_release not found in \$PATH" >&2
114 exit 1;
115fi
[email protected]f2826b6a2012-11-15 01:06:26116
thomasandersondfefc6c02017-05-04 01:29:11117distro_codename=$(lsb_release --codename --short)
118distro_id=$(lsb_release --id --short)
marcin38933dd2017-10-30 00:05:52119supported_codenames="(trusty|xenial|zesty|artful)"
thomasandersondfefc6c02017-05-04 01:29:11120supported_ids="(Debian)"
[email protected]ba48c4ca2013-10-25 16:11:46121if [ 0 -eq "${do_unsupported-0}" ] && [ 0 -eq "${do_quick_check-0}" ] ; then
thomasandersondfefc6c02017-05-04 01:29:11122 if [[ ! $distro_codename =~ $supported_codenames &&
123 ! $distro_id =~ $supported_ids ]]; then
thomasanderson05c40292017-03-28 19:28:45124 echo -e "ERROR: The only supported distros are\n" \
125 "\tUbuntu 14.04 (trusty)\n" \
126 "\tUbuntu 16.04 (xenial)\n" \
marcin38933dd2017-10-30 00:05:52127 "\tUbuntu 17.10 (artful)\n" \
thomasandersondfefc6c02017-05-04 01:29:11128 "\tDebian 8 (jessie) or later" >&2
anthonyvd2ae919e52016-11-21 19:47:12129 exit 1
[email protected]fe63a022013-01-15 22:11:47130 fi
[email protected]cf1df402008-10-31 21:45:30131
[email protected]fe63a022013-01-15 22:11:47132 if ! uname -m | egrep -q "i686|x86_64"; then
anthonyvd2ae919e52016-11-21 19:47:12133 echo "Only x86 architectures are currently supported" >&2
[email protected]fe63a022013-01-15 22:11:47134 exit
135 fi
[email protected]e041ed12009-03-10 16:43:01136fi
137
[email protected]ba48c4ca2013-10-25 16:11:46138if [ "x$(id -u)" != x0 ] && [ 0 -eq "${do_quick_check-0}" ]; then
[email protected]e041ed12009-03-10 16:43:01139 echo "Running as non-root user."
140 echo "You might have to enter your password one or more times for 'sudo'."
[email protected]8ada8c52009-03-10 21:53:08141 echo
[email protected]e041ed12009-03-10 16:43:01142fi
143
[email protected]fdc6bf52010-06-07 22:01:57144# Packages needed for chromeos only
Tom Anderson6b2b2ad52018-02-22 23:28:14145chromeos_dev_list="libbluetooth-dev libxkbcommon-dev"
146
147if package_exists realpath; then
148 chromeos_dev_list="${chromeos_dev_list} realpath"
149fi
[email protected]fdc6bf52010-06-07 22:01:57150
[email protected]b61f6882013-11-14 20:41:41151# Packages needed for development
thomasanderson20032a5c2017-03-02 00:28:20152dev_list="\
153 bison
154 cdbs
155 curl
Tom Anderson8bfb0b02018-02-17 00:44:15156 dbus-x11
thomasanderson20032a5c2017-03-02 00:28:20157 dpkg-dev
158 elfutils
159 devscripts
160 fakeroot
161 flex
162 fonts-ipafont
thomasanderson20032a5c2017-03-02 00:28:20163 g++
164 git-core
165 git-svn
166 gperf
Tim Brown06ee43a2018-02-08 18:42:12167 libappindicator-dev
168 libappindicator3-dev
thomasanderson20032a5c2017-03-02 00:28:20169 libasound2-dev
170 libbrlapi-dev
171 libav-tools
172 libbz2-dev
173 libcairo2-dev
174 libcap-dev
175 libcups2-dev
176 libcurl4-gnutls-dev
177 libdrm-dev
178 libelf-dev
179 libffi-dev
thomasanderson20032a5c2017-03-02 00:28:20180 libglib2.0-dev
181 libglu1-mesa-dev
182 libgnome-keyring-dev
183 libgtk2.0-dev
184 libgtk-3-dev
185 libkrb5-dev
186 libnspr4-dev
187 libnss3-dev
188 libpam0g-dev
189 libpci-dev
190 libpulse-dev
191 libsctp-dev
192 libspeechd-dev
193 libsqlite3-dev
194 libssl-dev
195 libudev-dev
196 libwww-perl
197 libxslt1-dev
198 libxss-dev
199 libxt-dev
200 libxtst-dev
Andrew Grievee41aeae2017-08-21 20:53:21201 locales
thomasanderson20032a5c2017-03-02 00:28:20202 openbox
Nico Webera9fa6a72018-02-23 18:26:02203 p7zip
thomasanderson20032a5c2017-03-02 00:28:20204 patch
205 perl
206 pkg-config
207 python
208 python-cherrypy3
209 python-crypto
210 python-dev
211 python-numpy
212 python-opencv
213 python-openssl
214 python-psutil
215 python-yaml
216 rpm
217 ruby
218 subversion
thomasanderson20032a5c2017-03-02 00:28:20219 wdiff
Tom Andersond79de41d2017-08-08 00:23:23220 x11-utils
thomasanderson20032a5c2017-03-02 00:28:20221 xcompmgr
222 zip
223 $chromeos_dev_list
224"
[email protected]fdc6bf52010-06-07 22:01:57225
[email protected]f16aabf2012-08-15 21:00:14226# 64-bit systems need a minimum set of 32-bit compat packages for the pre-built
[email protected]f8ceadb2014-08-18 12:30:23227# NaCl binaries.
ki.stfu0a79d6992015-09-17 07:27:12228if file -L /sbin/init | grep -q 'ELF 64-bit'; then
[email protected]d93d68b12012-10-15 06:39:53229 dev_list="${dev_list} libc6-i386 lib32gcc1 lib32stdc++6"
[email protected]f16aabf2012-08-15 21:00:14230fi
231
[email protected]fdc6bf52010-06-07 22:01:57232# Run-time libraries required by chromeos only
[email protected]ba48c4ca2013-10-25 16:11:46233chromeos_lib_list="libpulse0 libbz2-1.0"
[email protected]e041ed12009-03-10 16:43:01234
235# Full list of required run-time libraries
thomasanderson20032a5c2017-03-02 00:28:20236lib_list="\
Tim Brown06ee43a2018-02-08 18:42:12237 libappindicator1
238 libappindicator3-1
239 libasound2
thomasanderson20032a5c2017-03-02 00:28:20240 libatk1.0-0
241 libc6
thomasanderson20032a5c2017-03-02 00:28:20242 libcairo2
243 libcap2
244 libcups2
245 libexpat1
246 libffi6
247 libfontconfig1
248 libfreetype6
249 libglib2.0-0
250 libgnome-keyring0
251 libgtk2.0-0
252 libgtk-3-0
253 libpam0g
254 libpango1.0-0
255 libpci3
256 libpcre3
257 libpixman-1-0
258 libspeechd2
259 libstdc++6
260 libsqlite3-0
261 libx11-6
262 libx11-xcb1
263 libxau6
264 libxcb1
265 libxcomposite1
266 libxcursor1
267 libxdamage1
268 libxdmcp6
269 libxext6
270 libxfixes3
271 libxi6
272 libxinerama1
273 libxrandr2
274 libxrender1
275 libxtst6
276 zlib1g
277 $chromeos_lib_list
278"
[email protected]e041ed12009-03-10 16:43:01279
280# Debugging symbols for all of the run-time libraries
thomasanderson20032a5c2017-03-02 00:28:20281dbg_list="\
thomasanderson20032a5c2017-03-02 00:28:20282 libc6-dbg
thomasanderson20032a5c2017-03-02 00:28:20283 libffi6-dbg
thomasanderson20032a5c2017-03-02 00:28:20284 libgtk2.0-0-dbg
thomasanderson20032a5c2017-03-02 00:28:20285 libpcre3-dbg
286 libpixman-1-0-dbg
287 libsqlite3-0-dbg
thomasanderson20032a5c2017-03-02 00:28:20288 libxau6-dbg
289 libxcb1-dbg
290 libxcomposite1-dbg
thomasanderson20032a5c2017-03-02 00:28:20291 libxdmcp6-dbg
292 libxext6-dbg
thomasanderson20032a5c2017-03-02 00:28:20293 libxinerama1-dbg
thomasanderson20032a5c2017-03-02 00:28:20294 zlib1g-dbg
295"
lfgad917d12015-03-17 23:28:00296
Tom Anderson17d6cdd2017-11-28 04:13:25297if package_exists libstdc++6-6-dbg; then
298 dbg_list="${dbg_list} libstdc++6-6-dbg"
299elif package_exists libstdc++6-4.9-dbg; then
lfgad917d12015-03-17 23:28:00300 dbg_list="${dbg_list} libstdc++6-4.9-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25301else
302 dbg_list="${dbg_list} libstdc++6-4.8-dbg"
303fi
304if package_exists libgtk-3-0-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28305 dbg_list="${dbg_list} libgtk-3-0-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25306elif package_exists libgtk-3-0-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28307 dbg_list="${dbg_list} libgtk-3-0-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25308fi
309if package_exists libatk1.0-0-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28310 dbg_list="${dbg_list} libatk1.0-0-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25311elif package_exists libatk1.0-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28312 dbg_list="${dbg_list} libatk1.0-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25313fi
314if package_exists libcairo2-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28315 dbg_list="${dbg_list} libcairo2-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25316elif package_exists libcairo2-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28317 dbg_list="${dbg_list} libcairo2-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25318fi
319if package_exists libfontconfig1-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28320 dbg_list="${dbg_list} libfontconfig1-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25321else
Tom Anderson1ce9314f2018-02-21 21:04:28322 dbg_list="${dbg_list} libfontconfig1-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25323fi
324if package_exists libxdamage1-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28325 dbg_list="${dbg_list} libxdamage1-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25326elif package_exists libxdamage1-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28327 dbg_list="${dbg_list} libxdamage1-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25328fi
329if package_exists libpango1.0-dev-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28330 dbg_list="${dbg_list} libpango1.0-dev-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25331elif package_exists libpango1.0-0-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28332 dbg_list="${dbg_list} libpango1.0-0-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25333fi
334if package_exists libx11-6-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28335 dbg_list="${dbg_list} libx11-6-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25336fi
337if package_exists libx11-xcb1-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28338 dbg_list="${dbg_list} libx11-xcb1-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25339fi
340if package_exists libxfixes3-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28341 dbg_list="${dbg_list} libxfixes3-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25342fi
343if package_exists libxi6-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28344 dbg_list="${dbg_list} libxi6-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25345fi
346if package_exists libxrandr2-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28347 dbg_list="${dbg_list} libxrandr2-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25348fi
349if package_exists libxrender1-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28350 dbg_list="${dbg_list} libxrender1-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25351fi
352if package_exists libxtst6-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28353 dbg_list="${dbg_list} libxtst6-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25354fi
355if package_exists libglib2.0-0-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28356 dbg_list="${dbg_list} libglib2.0-0-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25357fi
Tom Andersonb2582042018-02-22 16:56:07358if package_exists libxcursor1-dbgsym; then
359 dbg_list="${dbg_list} libxcursor1-dbgsym"
360elif package_exists libxcursor1-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28361 dbg_list="${dbg_list} libxcursor1-dbg"
lfgad917d12015-03-17 23:28:00362fi
[email protected]e041ed12009-03-10 16:43:01363
johnme49bb458a2014-11-27 15:45:31364# 32-bit libraries needed e.g. to compile V8 snapshot for Android or armhf
Tanin Na Nakorn6cbe32e52017-05-30 19:37:04365lib32_list="linux-libc-dev:i386 libpci3:i386"
johnme49bb458a2014-11-27 15:45:31366
[email protected]3f85dac32013-10-29 02:38:46367# arm cross toolchain packages needed to build chrome on armhf
thomasanderson4e3d30fe2016-12-07 18:58:34368EM_REPO="deb http://emdebian.org/tools/debian/ jessie main"
369EM_SOURCE=$(cat <<EOF
370# Repo added by Chromium $0
371${EM_REPO}
372# deb-src http://emdebian.org/tools/debian/ jessie main
373EOF
374)
375EM_ARCHIVE_KEY_FINGER="084C6C6F39159EDB67969AA87DE089671804772E"
376GPP_ARM_PACKAGE="g++-arm-linux-gnueabihf"
thomasandersondfefc6c02017-05-04 01:29:11377case $distro_codename in
kjellander95504ae2017-03-30 12:30:31378 jessie)
thomasanderson4e3d30fe2016-12-07 18:58:34379 eval $(apt-config shell APT_SOURCESDIR 'Dir::Etc::sourceparts/d')
380 CROSSTOOLS_LIST="${APT_SOURCESDIR}/crosstools.list"
381 arm_list="libc6-dev:armhf
382 linux-libc-dev:armhf"
383 if test "$do_inst_arm" = "1"; then
384 if $(dpkg-query -W ${GPP_ARM_PACKAGE} &>/dev/null); then
385 arm_list+=" ${GPP_ARM_PACKAGE}"
386 else
387 echo "The Debian Cross-toolchains repository is necessary to"
388 echo "cross-compile Chromium for arm."
389 echo -n "Do you want me to add it for you (y/N) "
390 if yes_no 1; then
391 gpg --keyserver pgp.mit.edu --recv-keys ${EM_ARCHIVE_KEY_FINGER}
392 gpg -a --export ${EM_ARCHIVE_KEY_FINGER} | sudo apt-key add -
393 if ! grep "^${EM_REPO}" "${CROSSTOOLS_LIST}" &>/dev/null; then
394 echo "${EM_SOURCE}" | sudo tee -a "${CROSSTOOLS_LIST}" >/dev/null
395 fi
396 arm_list+=" ${GPP_ARM_PACKAGE}"
397 fi
398 fi
399 fi
400 ;;
thomasandersondfefc6c02017-05-04 01:29:11401 # All necessary ARM packages are available on the default repos on
402 # Debian 9 and later.
kjellander95504ae2017-03-30 12:30:31403 *)
Tom Anderson81e7f1792017-11-11 03:56:33404 arm_list="libc6-dev-armhf-cross
thomasanderson4e3d30fe2016-12-07 18:58:34405 linux-libc-dev-armhf-cross
406 ${GPP_ARM_PACKAGE}"
407 ;;
408esac
[email protected]31a605532011-08-23 22:27:35409
sbcb5d4ded2015-04-01 17:49:03410# Work around for dependency issue Ubuntu/Trusty: http://crbug.com/435056
thomasandersondfefc6c02017-05-04 01:29:11411case $distro_codename in
friedmanbf8b90a2016-04-21 01:15:48412 trusty)
413 arm_list+=" g++-4.8-multilib-arm-linux-gnueabihf
414 gcc-4.8-multilib-arm-linux-gnueabihf"
415 ;;
marcin38933dd2017-10-30 00:05:52416 xenial|zesty|artful)
krasineef3d4b2016-04-22 00:52:18417 arm_list+=" g++-5-multilib-arm-linux-gnueabihf
418 gcc-5-multilib-arm-linux-gnueabihf
419 gcc-arm-linux-gnueabihf"
420 ;;
friedmanbf8b90a2016-04-21 01:15:48421esac
sbcb5d4ded2015-04-01 17:49:03422
[email protected]713eac62014-06-02 23:10:03423# Packages to build NaCl, its toolchains, and its ports.
Brad Nelson5e59c2c2014-09-06 06:18:45424naclports_list="ant autoconf bison cmake gawk intltool xutils-dev xsltproc"
thomasanderson20032a5c2017-03-02 00:28:20425nacl_list="\
426 g++-mingw-w64-i686
427 lib32z1-dev
428 libasound2:i386
429 libcap2:i386
430 libelf-dev:i386
431 libfontconfig1:i386
thomasanderson20032a5c2017-03-02 00:28:20432 libglib2.0-0:i386
433 libgpm2:i386
434 libgtk2.0-0:i386
435 libgtk-3-0:i386
436 libncurses5:i386
437 lib32ncurses5-dev
438 libnss3:i386
439 libpango1.0-0:i386
thomasandersondfefc6c02017-05-04 01:29:11440 libssl-dev:i386
thomasanderson20032a5c2017-03-02 00:28:20441 libtinfo-dev
442 libtinfo-dev:i386
443 libtool
444 libxcomposite1:i386
445 libxcursor1:i386
446 libxdamage1:i386
447 libxi6:i386
448 libxrandr2:i386
449 libxss1:i386
450 libxtst6:i386
451 texinfo
452 xvfb
453 ${naclports_list}
454"
[email protected]419a9a62014-06-19 18:26:18455
Tom Anderson0524b2b72017-12-11 20:39:18456if package_exists libssl1.1; then
457 nacl_list="${nacl_list} libssl1.1:i386"
458elif package_exists libssl1.0.2; then
thomasandersondfefc6c02017-05-04 01:29:11459 nacl_list="${nacl_list} libssl1.0.2:i386"
Tom Anderson0524b2b72017-12-11 20:39:18460else
461 nacl_list="${nacl_list} libssl1.0.0:i386"
thomasandersondfefc6c02017-05-04 01:29:11462fi
463
torne8a6eb692015-11-05 12:43:08464# Find the proper version of packages that depend on mesa. Only one -lts variant
465# of mesa can be installed and everything that depends on it must match.
466
467# Query for the name and status of all mesa LTS variants, filter for only
468# installed packages, extract just the name, and eliminate duplicates (there can
469# be more than one with the same name in the case of multiarch). Expand into an
470# array.
471mesa_packages=($(dpkg-query -Wf'${package} ${status}\n' \
torne12cd9f6c2016-02-24 18:52:23472 libgl1-mesa-glx-lts-\* 2>/dev/null | \
torne8a6eb692015-11-05 12:43:08473 grep " ok installed" | cut -d " " -f 1 | sort -u))
474if [ "${#mesa_packages[@]}" -eq 0 ]; then
475 mesa_variant=""
476elif [ "${#mesa_packages[@]}" -eq 1 ]; then
477 # Strip the base package name and leave just "-lts-whatever"
478 mesa_variant="${mesa_packages[0]#libgl1-mesa-glx}"
479else
480 echo "ERROR: unable to determine which libgl1-mesa-glx variant is installed."
481 exit 1
482fi
[email protected]3a4bd5d2014-06-25 23:55:04483dev_list="${dev_list} libgbm-dev${mesa_variant}
vabrf1e8b17f2015-03-17 10:56:37484 libgles2-mesa-dev${mesa_variant} libgl1-mesa-dev${mesa_variant}
485 mesa-common-dev${mesa_variant}"
[email protected]419a9a62014-06-19 18:26:18486nacl_list="${nacl_list} libgl1-mesa-glx${mesa_variant}:i386"
[email protected]565416362014-01-16 21:26:47487
[email protected]757c2962012-03-15 19:05:18488# Some package names have changed over time
Tom Anderson0524b2b72017-12-11 20:39:18489if package_exists libpng16-16; then
marcin73929a72017-01-04 22:04:58490 lib_list="${lib_list} libpng16-16"
Tom Anderson0524b2b72017-12-11 20:39:18491else
492 lib_list="${lib_list} libpng12-0"
marcin73929a72017-01-04 22:04:58493fi
[email protected]4fc00712013-05-29 23:11:20494if package_exists libnspr4-dbg; then
[email protected]1a0f64a2011-05-20 17:53:55495 dbg_list="${dbg_list} libnspr4-dbg libnss3-dbg"
496 lib_list="${lib_list} libnspr4 libnss3"
[email protected]757c2962012-03-15 19:05:18497else
498 dbg_list="${dbg_list} libnspr4-0d-dbg libnss3-1d-dbg"
499 lib_list="${lib_list} libnspr4-0d libnss3-1d"
500fi
[email protected]4fc00712013-05-29 23:11:20501if package_exists libjpeg-dev; then
[email protected]9e895962013-05-21 08:26:42502 dev_list="${dev_list} libjpeg-dev"
[email protected]b11411c2012-03-21 22:09:41503else
[email protected]9e895962013-05-21 08:26:42504 dev_list="${dev_list} libjpeg62-dev"
[email protected]b11411c2012-03-21 22:09:41505fi
[email protected]4fc00712013-05-29 23:11:20506if package_exists libudev1; then
[email protected]9e895962013-05-21 08:26:42507 dev_list="${dev_list} libudev1"
[email protected]ab9e69082014-06-05 15:28:52508 nacl_list="${nacl_list} libudev1:i386"
[email protected]9e895962013-05-21 08:26:42509else
510 dev_list="${dev_list} libudev0"
[email protected]ab9e69082014-06-05 15:28:52511 nacl_list="${nacl_list} libudev0:i386"
[email protected]9e895962013-05-21 08:26:42512fi
[email protected]3ea42912013-09-06 06:23:57513if package_exists libbrlapi0.6; then
514 dev_list="${dev_list} libbrlapi0.6"
515else
516 dev_list="${dev_list} libbrlapi0.5"
517fi
Tom Anderson0524b2b72017-12-11 20:39:18518if package_exists apache2.2-bin; then
halton.huo3e728c42016-01-20 05:12:23519 dev_list="${dev_list} apache2.2-bin"
Tom Anderson0524b2b72017-12-11 20:39:18520else
521 dev_list="${dev_list} apache2-bin"
halton.huo3e728c42016-01-20 05:12:23522fi
vadimsh278ff0662016-05-19 00:06:28523if package_exists xfonts-mathml; then
halton.huo3e728c42016-01-20 05:12:23524 dev_list="${dev_list} xfonts-mathml"
525fi
marcin38933dd2017-10-30 00:05:52526if package_exists php7.1-cgi; then
527 dev_list="${dev_list} php7.1-cgi libapache2-mod-php7.1"
528elif package_exists php7.0-cgi; then
vadimsh278ff0662016-05-19 00:06:28529 dev_list="${dev_list} php7.0-cgi libapache2-mod-php7.0"
krasineef3d4b2016-04-22 00:52:18530else
vadimsh278ff0662016-05-19 00:06:28531 dev_list="${dev_list} php5-cgi libapache2-mod-php5"
krasineef3d4b2016-04-22 00:52:18532fi
thomasandersonb4a2bca2016-12-08 06:46:05533# ttf-mscorefonts-installer is in the Debian contrib repo, which has
534# dependencies on non-free software. Install it only if the user has already
535# enabled contrib.
536if package_exists ttf-mscorefonts-installer; then
537 dev_list="${dev_list} ttf-mscorefonts-installer"
538elif package_exists msttcorefonts; then
539 dev_list="${dev_list} msttcorefonts"
540fi
[email protected]757c2962012-03-15 19:05:18541
[email protected]dc099772013-09-30 22:06:58542# Some packages are only needed if the distribution actually supports
[email protected]757c2962012-03-15 19:05:18543# installing them.
[email protected]4fc00712013-05-29 23:11:20544if package_exists appmenu-gtk; then
[email protected]757c2962012-03-15 19:05:18545 lib_list="$lib_list appmenu-gtk"
[email protected]4da8fad2011-04-11 18:42:42546fi
547
Tom Anderson81e7f1792017-11-11 03:56:33548# Cross-toolchain strip is needed for building the sysroots.
549if package_exists binutils-arm-linux-gnueabihf; then
550 dev_list="${dev_list} binutils-arm-linux-gnueabihf"
551fi
552if package_exists binutils-aarch64-linux-gnu; then
553 dev_list="${dev_list} binutils-aarch64-linux-gnu"
554fi
555if package_exists binutils-mipsel-linux-gnu; then
556 dev_list="${dev_list} binutils-mipsel-linux-gnu"
557fi
558if package_exists binutils-mips64el-linux-gnuabi64; then
559 dev_list="${dev_list} binutils-mips64el-linux-gnuabi64"
560fi
561
johnme49bb458a2014-11-27 15:45:31562# When cross building for arm/Android on 64-bit systems the host binaries
563# that are part of v8 need to be compiled with -m32 which means
564# that basic multilib support is needed.
ki.stfu0a79d6992015-09-17 07:27:12565if file -L /sbin/init | grep -q 'ELF 64-bit'; then
johnme49bb458a2014-11-27 15:45:31566 # gcc-multilib conflicts with the arm cross compiler (at least in trusty) but
567 # g++-X.Y-multilib gives us the 32-bit support that we need. Find out the
568 # appropriate value of X and Y by seeing what version the current
569 # distribution's g++-multilib package depends on.
570 multilib_package=$(apt-cache depends g++-multilib --important | \
571 grep -E --color=never --only-matching '\bg\+\+-[0-9.]+-multilib\b')
572 lib32_list="$lib32_list $multilib_package"
573fi
574
[email protected]ba48c4ca2013-10-25 16:11:46575if test "$do_inst_syms" = "" && test 0 -eq ${do_quick_check-0}
[email protected]1eae2bfb2010-01-26 18:17:53576then
577 echo "This script installs all tools and libraries needed to build Chromium."
578 echo ""
579 echo "For most of the libraries, it can also install debugging symbols, which"
580 echo "will allow you to debug code in the system libraries. Most developers"
581 echo "won't need these symbols."
582 echo -n "Do you want me to install them for you (y/N) "
583 if yes_no 1; then
584 do_inst_syms=1
585 fi
586fi
587if test "$do_inst_syms" = "1"; then
[email protected]ba48c4ca2013-10-25 16:11:46588 echo "Including debugging symbols."
[email protected]8ada8c52009-03-10 21:53:08589else
[email protected]ba48c4ca2013-10-25 16:11:46590 echo "Skipping debugging symbols."
[email protected]8ada8c52009-03-10 21:53:08591 dbg_list=
592fi
593
johnme49bb458a2014-11-27 15:45:31594if test "$do_inst_lib32" = "1" ; then
595 echo "Including 32-bit libraries for ARM/Android."
596else
597 echo "Skipping 32-bit libraries for ARM/Android."
598 lib32_list=
[email protected]9f28a9cf2012-12-17 23:31:40599fi
600
[email protected]ba48c4ca2013-10-25 16:11:46601if test "$do_inst_arm" = "1" ; then
[email protected]ba48c4ca2013-10-25 16:11:46602 echo "Including ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26603else
[email protected]ba48c4ca2013-10-25 16:11:46604 echo "Skipping ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26605 arm_list=
606fi
607
[email protected]565416362014-01-16 21:26:47608if test "$do_inst_nacl" = "1"; then
[email protected]713eac62014-06-02 23:10:03609 echo "Including NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47610else
[email protected]713eac62014-06-02 23:10:03611 echo "Skipping NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47612 nacl_list=
613fi
614
johnme4bd10302015-01-06 11:25:52615# The `sort -r -s -t: -k2` sorts all the :i386 packages to the front, to avoid
616# confusing dpkg-query (crbug.com/446172).
[email protected]565416362014-01-16 21:26:47617packages="$(
johnme49bb458a2014-11-27 15:45:31618 echo "${dev_list} ${lib_list} ${dbg_list} ${lib32_list} ${arm_list}"\
johnme4bd10302015-01-06 11:25:52619 "${nacl_list}" | tr " " "\n" | sort -u | sort -r -s -t: -k2 | tr "\n" " "
[email protected]565416362014-01-16 21:26:47620)"
[email protected]ba48c4ca2013-10-25 16:11:46621
622if [ 1 -eq "${do_quick_check-0}" ] ; then
thomasanderson73b3a4412016-11-18 23:16:07623 if ! missing_packages="$(dpkg-query -W -f ' ' ${packages} 2>&1)"; then
624 # Distinguish between packages that actually aren't available to the
625 # system (i.e. not in any repo) and packages that just aren't known to
626 # dpkg (i.e. managed by apt).
627 missing_packages="$(echo "${missing_packages}" | awk '{print $NF}')"
628 not_installed=""
629 unknown=""
630 for p in ${missing_packages}; do
631 if apt-cache show ${p} > /dev/null 2>&1; then
632 not_installed="${p}\n${not_installed}"
633 else
634 unknown="${p}\n${unknown}"
[email protected]ba48c4ca2013-10-25 16:11:46635 fi
thomasanderson73b3a4412016-11-18 23:16:07636 done
637 if [ -n "${not_installed}" ]; then
[email protected]ba48c4ca2013-10-25 16:11:46638 echo "WARNING: The following packages are not installed:"
thomasanderson73b3a4412016-11-18 23:16:07639 echo -e "${not_installed}" | sed -e "s/^/ /"
640 fi
641 if [ -n "${unknown}" ]; then
642 echo "WARNING: The following packages are unknown to your system"
643 echo "(maybe missing a repo or need to 'sudo apt-get update'):"
644 echo -e "${unknown}" | sed -e "s/^/ /"
[email protected]ba48c4ca2013-10-25 16:11:46645 fi
646 exit 1
647 fi
648 exit 0
649fi
650
johnme49bb458a2014-11-27 15:45:31651if test "$do_inst_lib32" = "1" || test "$do_inst_nacl" = "1"; then
thomasanderson05c40292017-03-28 19:28:45652 sudo dpkg --add-architecture i386
johnme49bb458a2014-11-27 15:45:31653fi
sbc42564092015-04-01 01:01:28654sudo apt-get update
[email protected]e041ed12009-03-10 16:43:01655
656# We initially run "apt-get" with the --reinstall option and parse its output.
657# This way, we can find all the packages that need to be newly installed
658# without accidentally promoting any packages from "auto" to "manual".
659# We then re-run "apt-get" with just the list of missing packages.
660echo "Finding missing packages..."
[email protected]757c2962012-03-15 19:05:18661# Intentionally leaving $packages unquoted so it's more readable.
[email protected]b6e064522009-08-10 18:47:51662echo "Packages required: " $packages
663echo
[email protected]79a9d2962009-08-06 21:10:58664new_list_cmd="sudo apt-get install --reinstall $(echo $packages)"
[email protected]c3d8b152013-05-10 10:10:03665if new_list="$(yes n | LANGUAGE=en LANG=C $new_list_cmd)"; then
[email protected]b6e064522009-08-10 18:47:51666 # We probably never hit this following line.
thakis3e861de2016-06-14 14:24:01667 echo "No missing packages, and the packages are up to date."
[email protected]b62f11e72010-05-03 17:20:45668elif [ $? -eq 1 ]; then
[email protected]79a9d2962009-08-06 21:10:58669 # We expect apt-get to have exit status of 1.
[email protected]757c2962012-03-15 19:05:18670 # This indicates that we cancelled the install with "yes n|".
[email protected]b6e064522009-08-10 18:47:51671 new_list=$(echo "$new_list" |
[email protected]79a9d2962009-08-06 21:10:58672 sed -e '1,/The following NEW packages will be installed:/d;s/^ //;t;d')
[email protected]b6e064522009-08-10 18:47:51673 new_list=$(echo "$new_list" | sed 's/ *$//')
674 if [ -z "$new_list" ] ; then
thakis3e861de2016-06-14 14:24:01675 echo "No missing packages, and the packages are up to date."
[email protected]b6e064522009-08-10 18:47:51676 else
677 echo "Installing missing packages: $new_list."
[email protected]e2544ed42012-04-23 04:48:31678 sudo apt-get install ${do_quietly-} ${new_list}
[email protected]b6e064522009-08-10 18:47:51679 fi
680 echo
[email protected]79a9d2962009-08-06 21:10:58681else
682 # An apt-get exit status of 100 indicates that a real error has occurred.
[email protected]e041ed12009-03-10 16:43:01683
[email protected]79a9d2962009-08-06 21:10:58684 # I am intentionally leaving out the '"'s around new_list_cmd,
685 # as this makes it easier to cut and paste the output
[email protected]79a9d2962009-08-06 21:10:58686 echo "The following command failed: " ${new_list_cmd}
687 echo
688 echo "It produces the following output:"
689 yes n | $new_list_cmd || true
690 echo
691 echo "You will have to install the above packages yourself."
692 echo
693 exit 100
694fi
[email protected]e041ed12009-03-10 16:43:01695
[email protected]d96cc3472013-09-19 00:53:30696# Install the Chrome OS default fonts. This must go after running
697# apt-get, since install-chromeos-fonts depends on curl.
698if test "$do_inst_chromeos_fonts" != "0"; then
699 echo
700 echo "Installing Chrome OS fonts."
701 dir=`echo $0 | sed -r -e 's/\/[^/]+$//'`
702 if ! sudo $dir/linux/install-chromeos-fonts.py; then
703 echo "ERROR: The installation of the Chrome OS default fonts failed."
704 if [ `stat -f -c %T $dir` == "nfs" ]; then
705 echo "The reason is that your repo is installed on a remote file system."
706 else
707 echo "This is expected if your repo is installed on a remote file system."
708 fi
709 echo "It is recommended to install your repo on a local file system."
710 echo "You can skip the installation of the Chrome OS default founts with"
711 echo "the command line option: --no-chromeos-fonts."
712 exit 1
713 fi
714else
715 echo "Skipping installation of Chrome OS fonts."
716fi
717
thomasanderson5ef5c3d2016-12-08 01:59:19718echo "Installing locales."
719CHROMIUM_LOCALES="da_DK.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 zh_TW.UTF-8"
720LOCALE_GEN=/etc/locale.gen
721if [ -e ${LOCALE_GEN} ]; then
722 OLD_LOCALE_GEN="$(cat /etc/locale.gen)"
723 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
724 sudo sed -i "s/^# ${CHROMIUM_LOCALE}/${CHROMIUM_LOCALE}/" ${LOCALE_GEN}
725 done
726 # Regenerating locales can take a while, so only do it if we need to.
727 if (echo "${OLD_LOCALE_GEN}" | cmp -s ${LOCALE_GEN}); then
728 echo "Locales already up-to-date."
729 else
730 sudo locale-gen
731 fi
732else
733 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
734 sudo locale-gen ${CHROMIUM_LOCALE}
735 done
736fi