blob: df6ed90d16266b4b6d435a65d8d9687aa1854f4d [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
203 patch
204 perl
205 pkg-config
206 python
207 python-cherrypy3
208 python-crypto
209 python-dev
210 python-numpy
211 python-opencv
212 python-openssl
213 python-psutil
214 python-yaml
215 rpm
216 ruby
217 subversion
thomasanderson20032a5c2017-03-02 00:28:20218 wdiff
Tom Andersond79de41d2017-08-08 00:23:23219 x11-utils
thomasanderson20032a5c2017-03-02 00:28:20220 xcompmgr
221 zip
222 $chromeos_dev_list
223"
[email protected]fdc6bf52010-06-07 22:01:57224
[email protected]f16aabf2012-08-15 21:00:14225# 64-bit systems need a minimum set of 32-bit compat packages for the pre-built
[email protected]f8ceadb2014-08-18 12:30:23226# NaCl binaries.
ki.stfu0a79d6992015-09-17 07:27:12227if file -L /sbin/init | grep -q 'ELF 64-bit'; then
[email protected]d93d68b12012-10-15 06:39:53228 dev_list="${dev_list} libc6-i386 lib32gcc1 lib32stdc++6"
[email protected]f16aabf2012-08-15 21:00:14229fi
230
[email protected]fdc6bf52010-06-07 22:01:57231# Run-time libraries required by chromeos only
[email protected]ba48c4ca2013-10-25 16:11:46232chromeos_lib_list="libpulse0 libbz2-1.0"
[email protected]e041ed12009-03-10 16:43:01233
234# Full list of required run-time libraries
thomasanderson20032a5c2017-03-02 00:28:20235lib_list="\
Tim Brown06ee43a2018-02-08 18:42:12236 libappindicator1
237 libappindicator3-1
238 libasound2
thomasanderson20032a5c2017-03-02 00:28:20239 libatk1.0-0
240 libc6
thomasanderson20032a5c2017-03-02 00:28:20241 libcairo2
242 libcap2
243 libcups2
244 libexpat1
245 libffi6
246 libfontconfig1
247 libfreetype6
248 libglib2.0-0
249 libgnome-keyring0
250 libgtk2.0-0
251 libgtk-3-0
252 libpam0g
253 libpango1.0-0
254 libpci3
255 libpcre3
256 libpixman-1-0
257 libspeechd2
258 libstdc++6
259 libsqlite3-0
260 libx11-6
261 libx11-xcb1
262 libxau6
263 libxcb1
264 libxcomposite1
265 libxcursor1
266 libxdamage1
267 libxdmcp6
268 libxext6
269 libxfixes3
270 libxi6
271 libxinerama1
272 libxrandr2
273 libxrender1
274 libxtst6
275 zlib1g
276 $chromeos_lib_list
277"
[email protected]e041ed12009-03-10 16:43:01278
279# Debugging symbols for all of the run-time libraries
thomasanderson20032a5c2017-03-02 00:28:20280dbg_list="\
thomasanderson20032a5c2017-03-02 00:28:20281 libc6-dbg
thomasanderson20032a5c2017-03-02 00:28:20282 libffi6-dbg
thomasanderson20032a5c2017-03-02 00:28:20283 libgtk2.0-0-dbg
thomasanderson20032a5c2017-03-02 00:28:20284 libpcre3-dbg
285 libpixman-1-0-dbg
286 libsqlite3-0-dbg
thomasanderson20032a5c2017-03-02 00:28:20287 libxau6-dbg
288 libxcb1-dbg
289 libxcomposite1-dbg
thomasanderson20032a5c2017-03-02 00:28:20290 libxdmcp6-dbg
291 libxext6-dbg
thomasanderson20032a5c2017-03-02 00:28:20292 libxinerama1-dbg
thomasanderson20032a5c2017-03-02 00:28:20293 zlib1g-dbg
294"
lfgad917d12015-03-17 23:28:00295
Tom Anderson17d6cdd2017-11-28 04:13:25296if package_exists libstdc++6-6-dbg; then
297 dbg_list="${dbg_list} libstdc++6-6-dbg"
298elif package_exists libstdc++6-4.9-dbg; then
lfgad917d12015-03-17 23:28:00299 dbg_list="${dbg_list} libstdc++6-4.9-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25300else
301 dbg_list="${dbg_list} libstdc++6-4.8-dbg"
302fi
303if package_exists libgtk-3-0-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28304 dbg_list="${dbg_list} libgtk-3-0-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25305elif package_exists libgtk-3-0-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28306 dbg_list="${dbg_list} libgtk-3-0-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25307fi
308if package_exists libatk1.0-0-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28309 dbg_list="${dbg_list} libatk1.0-0-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25310elif package_exists libatk1.0-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28311 dbg_list="${dbg_list} libatk1.0-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25312fi
313if package_exists libcairo2-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28314 dbg_list="${dbg_list} libcairo2-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25315elif package_exists libcairo2-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28316 dbg_list="${dbg_list} libcairo2-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25317fi
318if package_exists libfontconfig1-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28319 dbg_list="${dbg_list} libfontconfig1-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25320else
Tom Anderson1ce9314f2018-02-21 21:04:28321 dbg_list="${dbg_list} libfontconfig1-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25322fi
323if package_exists libxdamage1-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28324 dbg_list="${dbg_list} libxdamage1-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25325elif package_exists libxdamage1-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28326 dbg_list="${dbg_list} libxdamage1-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25327fi
328if package_exists libpango1.0-dev-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28329 dbg_list="${dbg_list} libpango1.0-dev-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25330elif package_exists libpango1.0-0-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28331 dbg_list="${dbg_list} libpango1.0-0-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25332fi
333if package_exists libx11-6-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28334 dbg_list="${dbg_list} libx11-6-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25335fi
336if package_exists libx11-xcb1-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28337 dbg_list="${dbg_list} libx11-xcb1-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25338fi
339if package_exists libxfixes3-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28340 dbg_list="${dbg_list} libxfixes3-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25341fi
342if package_exists libxi6-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28343 dbg_list="${dbg_list} libxi6-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25344fi
345if package_exists libxrandr2-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28346 dbg_list="${dbg_list} libxrandr2-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25347fi
348if package_exists libxrender1-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28349 dbg_list="${dbg_list} libxrender1-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25350fi
351if package_exists libxtst6-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28352 dbg_list="${dbg_list} libxtst6-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25353fi
354if package_exists libglib2.0-0-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28355 dbg_list="${dbg_list} libglib2.0-0-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25356fi
Tom Andersonb2582042018-02-22 16:56:07357if package_exists libxcursor1-dbgsym; then
358 dbg_list="${dbg_list} libxcursor1-dbgsym"
359elif package_exists libxcursor1-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28360 dbg_list="${dbg_list} libxcursor1-dbg"
lfgad917d12015-03-17 23:28:00361fi
[email protected]e041ed12009-03-10 16:43:01362
johnme49bb458a2014-11-27 15:45:31363# 32-bit libraries needed e.g. to compile V8 snapshot for Android or armhf
Tanin Na Nakorn6cbe32e52017-05-30 19:37:04364lib32_list="linux-libc-dev:i386 libpci3:i386"
johnme49bb458a2014-11-27 15:45:31365
[email protected]3f85dac32013-10-29 02:38:46366# arm cross toolchain packages needed to build chrome on armhf
thomasanderson4e3d30fe2016-12-07 18:58:34367EM_REPO="deb http://emdebian.org/tools/debian/ jessie main"
368EM_SOURCE=$(cat <<EOF
369# Repo added by Chromium $0
370${EM_REPO}
371# deb-src http://emdebian.org/tools/debian/ jessie main
372EOF
373)
374EM_ARCHIVE_KEY_FINGER="084C6C6F39159EDB67969AA87DE089671804772E"
375GPP_ARM_PACKAGE="g++-arm-linux-gnueabihf"
thomasandersondfefc6c02017-05-04 01:29:11376case $distro_codename in
kjellander95504ae2017-03-30 12:30:31377 jessie)
thomasanderson4e3d30fe2016-12-07 18:58:34378 eval $(apt-config shell APT_SOURCESDIR 'Dir::Etc::sourceparts/d')
379 CROSSTOOLS_LIST="${APT_SOURCESDIR}/crosstools.list"
380 arm_list="libc6-dev:armhf
381 linux-libc-dev:armhf"
382 if test "$do_inst_arm" = "1"; then
383 if $(dpkg-query -W ${GPP_ARM_PACKAGE} &>/dev/null); then
384 arm_list+=" ${GPP_ARM_PACKAGE}"
385 else
386 echo "The Debian Cross-toolchains repository is necessary to"
387 echo "cross-compile Chromium for arm."
388 echo -n "Do you want me to add it for you (y/N) "
389 if yes_no 1; then
390 gpg --keyserver pgp.mit.edu --recv-keys ${EM_ARCHIVE_KEY_FINGER}
391 gpg -a --export ${EM_ARCHIVE_KEY_FINGER} | sudo apt-key add -
392 if ! grep "^${EM_REPO}" "${CROSSTOOLS_LIST}" &>/dev/null; then
393 echo "${EM_SOURCE}" | sudo tee -a "${CROSSTOOLS_LIST}" >/dev/null
394 fi
395 arm_list+=" ${GPP_ARM_PACKAGE}"
396 fi
397 fi
398 fi
399 ;;
thomasandersondfefc6c02017-05-04 01:29:11400 # All necessary ARM packages are available on the default repos on
401 # Debian 9 and later.
kjellander95504ae2017-03-30 12:30:31402 *)
Tom Anderson81e7f1792017-11-11 03:56:33403 arm_list="libc6-dev-armhf-cross
thomasanderson4e3d30fe2016-12-07 18:58:34404 linux-libc-dev-armhf-cross
405 ${GPP_ARM_PACKAGE}"
406 ;;
407esac
[email protected]31a605532011-08-23 22:27:35408
sbcb5d4ded2015-04-01 17:49:03409# Work around for dependency issue Ubuntu/Trusty: http://crbug.com/435056
thomasandersondfefc6c02017-05-04 01:29:11410case $distro_codename in
friedmanbf8b90a2016-04-21 01:15:48411 trusty)
412 arm_list+=" g++-4.8-multilib-arm-linux-gnueabihf
413 gcc-4.8-multilib-arm-linux-gnueabihf"
414 ;;
marcin38933dd2017-10-30 00:05:52415 xenial|zesty|artful)
krasineef3d4b2016-04-22 00:52:18416 arm_list+=" g++-5-multilib-arm-linux-gnueabihf
417 gcc-5-multilib-arm-linux-gnueabihf
418 gcc-arm-linux-gnueabihf"
419 ;;
friedmanbf8b90a2016-04-21 01:15:48420esac
sbcb5d4ded2015-04-01 17:49:03421
[email protected]713eac62014-06-02 23:10:03422# Packages to build NaCl, its toolchains, and its ports.
Brad Nelson5e59c2c2014-09-06 06:18:45423naclports_list="ant autoconf bison cmake gawk intltool xutils-dev xsltproc"
thomasanderson20032a5c2017-03-02 00:28:20424nacl_list="\
425 g++-mingw-w64-i686
426 lib32z1-dev
427 libasound2:i386
428 libcap2:i386
429 libelf-dev:i386
430 libfontconfig1:i386
thomasanderson20032a5c2017-03-02 00:28:20431 libglib2.0-0:i386
432 libgpm2:i386
433 libgtk2.0-0:i386
434 libgtk-3-0:i386
435 libncurses5:i386
436 lib32ncurses5-dev
437 libnss3:i386
438 libpango1.0-0:i386
thomasandersondfefc6c02017-05-04 01:29:11439 libssl-dev:i386
thomasanderson20032a5c2017-03-02 00:28:20440 libtinfo-dev
441 libtinfo-dev:i386
442 libtool
443 libxcomposite1:i386
444 libxcursor1:i386
445 libxdamage1:i386
446 libxi6:i386
447 libxrandr2:i386
448 libxss1:i386
449 libxtst6:i386
450 texinfo
451 xvfb
452 ${naclports_list}
453"
[email protected]419a9a62014-06-19 18:26:18454
Tom Anderson0524b2b72017-12-11 20:39:18455if package_exists libssl1.1; then
456 nacl_list="${nacl_list} libssl1.1:i386"
457elif package_exists libssl1.0.2; then
thomasandersondfefc6c02017-05-04 01:29:11458 nacl_list="${nacl_list} libssl1.0.2:i386"
Tom Anderson0524b2b72017-12-11 20:39:18459else
460 nacl_list="${nacl_list} libssl1.0.0:i386"
thomasandersondfefc6c02017-05-04 01:29:11461fi
462
torne8a6eb692015-11-05 12:43:08463# Find the proper version of packages that depend on mesa. Only one -lts variant
464# of mesa can be installed and everything that depends on it must match.
465
466# Query for the name and status of all mesa LTS variants, filter for only
467# installed packages, extract just the name, and eliminate duplicates (there can
468# be more than one with the same name in the case of multiarch). Expand into an
469# array.
470mesa_packages=($(dpkg-query -Wf'${package} ${status}\n' \
torne12cd9f6c2016-02-24 18:52:23471 libgl1-mesa-glx-lts-\* 2>/dev/null | \
torne8a6eb692015-11-05 12:43:08472 grep " ok installed" | cut -d " " -f 1 | sort -u))
473if [ "${#mesa_packages[@]}" -eq 0 ]; then
474 mesa_variant=""
475elif [ "${#mesa_packages[@]}" -eq 1 ]; then
476 # Strip the base package name and leave just "-lts-whatever"
477 mesa_variant="${mesa_packages[0]#libgl1-mesa-glx}"
478else
479 echo "ERROR: unable to determine which libgl1-mesa-glx variant is installed."
480 exit 1
481fi
[email protected]3a4bd5d2014-06-25 23:55:04482dev_list="${dev_list} libgbm-dev${mesa_variant}
vabrf1e8b17f2015-03-17 10:56:37483 libgles2-mesa-dev${mesa_variant} libgl1-mesa-dev${mesa_variant}
484 mesa-common-dev${mesa_variant}"
[email protected]419a9a62014-06-19 18:26:18485nacl_list="${nacl_list} libgl1-mesa-glx${mesa_variant}:i386"
[email protected]565416362014-01-16 21:26:47486
[email protected]757c2962012-03-15 19:05:18487# Some package names have changed over time
Tom Anderson0524b2b72017-12-11 20:39:18488if package_exists libpng16-16; then
marcin73929a72017-01-04 22:04:58489 lib_list="${lib_list} libpng16-16"
Tom Anderson0524b2b72017-12-11 20:39:18490else
491 lib_list="${lib_list} libpng12-0"
marcin73929a72017-01-04 22:04:58492fi
[email protected]4fc00712013-05-29 23:11:20493if package_exists libnspr4-dbg; then
[email protected]1a0f64a2011-05-20 17:53:55494 dbg_list="${dbg_list} libnspr4-dbg libnss3-dbg"
495 lib_list="${lib_list} libnspr4 libnss3"
[email protected]757c2962012-03-15 19:05:18496else
497 dbg_list="${dbg_list} libnspr4-0d-dbg libnss3-1d-dbg"
498 lib_list="${lib_list} libnspr4-0d libnss3-1d"
499fi
[email protected]4fc00712013-05-29 23:11:20500if package_exists libjpeg-dev; then
[email protected]9e895962013-05-21 08:26:42501 dev_list="${dev_list} libjpeg-dev"
[email protected]b11411c2012-03-21 22:09:41502else
[email protected]9e895962013-05-21 08:26:42503 dev_list="${dev_list} libjpeg62-dev"
[email protected]b11411c2012-03-21 22:09:41504fi
[email protected]4fc00712013-05-29 23:11:20505if package_exists libudev1; then
[email protected]9e895962013-05-21 08:26:42506 dev_list="${dev_list} libudev1"
[email protected]ab9e69082014-06-05 15:28:52507 nacl_list="${nacl_list} libudev1:i386"
[email protected]9e895962013-05-21 08:26:42508else
509 dev_list="${dev_list} libudev0"
[email protected]ab9e69082014-06-05 15:28:52510 nacl_list="${nacl_list} libudev0:i386"
[email protected]9e895962013-05-21 08:26:42511fi
[email protected]3ea42912013-09-06 06:23:57512if package_exists libbrlapi0.6; then
513 dev_list="${dev_list} libbrlapi0.6"
514else
515 dev_list="${dev_list} libbrlapi0.5"
516fi
Tom Anderson0524b2b72017-12-11 20:39:18517if package_exists apache2.2-bin; then
halton.huo3e728c42016-01-20 05:12:23518 dev_list="${dev_list} apache2.2-bin"
Tom Anderson0524b2b72017-12-11 20:39:18519else
520 dev_list="${dev_list} apache2-bin"
halton.huo3e728c42016-01-20 05:12:23521fi
vadimsh278ff0662016-05-19 00:06:28522if package_exists xfonts-mathml; then
halton.huo3e728c42016-01-20 05:12:23523 dev_list="${dev_list} xfonts-mathml"
524fi
marcin38933dd2017-10-30 00:05:52525if package_exists php7.1-cgi; then
526 dev_list="${dev_list} php7.1-cgi libapache2-mod-php7.1"
527elif package_exists php7.0-cgi; then
vadimsh278ff0662016-05-19 00:06:28528 dev_list="${dev_list} php7.0-cgi libapache2-mod-php7.0"
krasineef3d4b2016-04-22 00:52:18529else
vadimsh278ff0662016-05-19 00:06:28530 dev_list="${dev_list} php5-cgi libapache2-mod-php5"
krasineef3d4b2016-04-22 00:52:18531fi
thomasandersonb4a2bca2016-12-08 06:46:05532# ttf-mscorefonts-installer is in the Debian contrib repo, which has
533# dependencies on non-free software. Install it only if the user has already
534# enabled contrib.
535if package_exists ttf-mscorefonts-installer; then
536 dev_list="${dev_list} ttf-mscorefonts-installer"
537elif package_exists msttcorefonts; then
538 dev_list="${dev_list} msttcorefonts"
539fi
[email protected]757c2962012-03-15 19:05:18540
[email protected]dc099772013-09-30 22:06:58541# Some packages are only needed if the distribution actually supports
[email protected]757c2962012-03-15 19:05:18542# installing them.
[email protected]4fc00712013-05-29 23:11:20543if package_exists appmenu-gtk; then
[email protected]757c2962012-03-15 19:05:18544 lib_list="$lib_list appmenu-gtk"
[email protected]4da8fad2011-04-11 18:42:42545fi
546
Tom Anderson81e7f1792017-11-11 03:56:33547# Cross-toolchain strip is needed for building the sysroots.
548if package_exists binutils-arm-linux-gnueabihf; then
549 dev_list="${dev_list} binutils-arm-linux-gnueabihf"
550fi
551if package_exists binutils-aarch64-linux-gnu; then
552 dev_list="${dev_list} binutils-aarch64-linux-gnu"
553fi
554if package_exists binutils-mipsel-linux-gnu; then
555 dev_list="${dev_list} binutils-mipsel-linux-gnu"
556fi
557if package_exists binutils-mips64el-linux-gnuabi64; then
558 dev_list="${dev_list} binutils-mips64el-linux-gnuabi64"
559fi
560
johnme49bb458a2014-11-27 15:45:31561# When cross building for arm/Android on 64-bit systems the host binaries
562# that are part of v8 need to be compiled with -m32 which means
563# that basic multilib support is needed.
ki.stfu0a79d6992015-09-17 07:27:12564if file -L /sbin/init | grep -q 'ELF 64-bit'; then
johnme49bb458a2014-11-27 15:45:31565 # gcc-multilib conflicts with the arm cross compiler (at least in trusty) but
566 # g++-X.Y-multilib gives us the 32-bit support that we need. Find out the
567 # appropriate value of X and Y by seeing what version the current
568 # distribution's g++-multilib package depends on.
569 multilib_package=$(apt-cache depends g++-multilib --important | \
570 grep -E --color=never --only-matching '\bg\+\+-[0-9.]+-multilib\b')
571 lib32_list="$lib32_list $multilib_package"
572fi
573
[email protected]ba48c4ca2013-10-25 16:11:46574if test "$do_inst_syms" = "" && test 0 -eq ${do_quick_check-0}
[email protected]1eae2bfb2010-01-26 18:17:53575then
576 echo "This script installs all tools and libraries needed to build Chromium."
577 echo ""
578 echo "For most of the libraries, it can also install debugging symbols, which"
579 echo "will allow you to debug code in the system libraries. Most developers"
580 echo "won't need these symbols."
581 echo -n "Do you want me to install them for you (y/N) "
582 if yes_no 1; then
583 do_inst_syms=1
584 fi
585fi
586if test "$do_inst_syms" = "1"; then
[email protected]ba48c4ca2013-10-25 16:11:46587 echo "Including debugging symbols."
[email protected]8ada8c52009-03-10 21:53:08588else
[email protected]ba48c4ca2013-10-25 16:11:46589 echo "Skipping debugging symbols."
[email protected]8ada8c52009-03-10 21:53:08590 dbg_list=
591fi
592
johnme49bb458a2014-11-27 15:45:31593if test "$do_inst_lib32" = "1" ; then
594 echo "Including 32-bit libraries for ARM/Android."
595else
596 echo "Skipping 32-bit libraries for ARM/Android."
597 lib32_list=
[email protected]9f28a9cf2012-12-17 23:31:40598fi
599
[email protected]ba48c4ca2013-10-25 16:11:46600if test "$do_inst_arm" = "1" ; then
[email protected]ba48c4ca2013-10-25 16:11:46601 echo "Including ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26602else
[email protected]ba48c4ca2013-10-25 16:11:46603 echo "Skipping ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26604 arm_list=
605fi
606
[email protected]565416362014-01-16 21:26:47607if test "$do_inst_nacl" = "1"; then
[email protected]713eac62014-06-02 23:10:03608 echo "Including NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47609else
[email protected]713eac62014-06-02 23:10:03610 echo "Skipping NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47611 nacl_list=
612fi
613
johnme4bd10302015-01-06 11:25:52614# The `sort -r -s -t: -k2` sorts all the :i386 packages to the front, to avoid
615# confusing dpkg-query (crbug.com/446172).
[email protected]565416362014-01-16 21:26:47616packages="$(
johnme49bb458a2014-11-27 15:45:31617 echo "${dev_list} ${lib_list} ${dbg_list} ${lib32_list} ${arm_list}"\
johnme4bd10302015-01-06 11:25:52618 "${nacl_list}" | tr " " "\n" | sort -u | sort -r -s -t: -k2 | tr "\n" " "
[email protected]565416362014-01-16 21:26:47619)"
[email protected]ba48c4ca2013-10-25 16:11:46620
621if [ 1 -eq "${do_quick_check-0}" ] ; then
thomasanderson73b3a4412016-11-18 23:16:07622 if ! missing_packages="$(dpkg-query -W -f ' ' ${packages} 2>&1)"; then
623 # Distinguish between packages that actually aren't available to the
624 # system (i.e. not in any repo) and packages that just aren't known to
625 # dpkg (i.e. managed by apt).
626 missing_packages="$(echo "${missing_packages}" | awk '{print $NF}')"
627 not_installed=""
628 unknown=""
629 for p in ${missing_packages}; do
630 if apt-cache show ${p} > /dev/null 2>&1; then
631 not_installed="${p}\n${not_installed}"
632 else
633 unknown="${p}\n${unknown}"
[email protected]ba48c4ca2013-10-25 16:11:46634 fi
thomasanderson73b3a4412016-11-18 23:16:07635 done
636 if [ -n "${not_installed}" ]; then
[email protected]ba48c4ca2013-10-25 16:11:46637 echo "WARNING: The following packages are not installed:"
thomasanderson73b3a4412016-11-18 23:16:07638 echo -e "${not_installed}" | sed -e "s/^/ /"
639 fi
640 if [ -n "${unknown}" ]; then
641 echo "WARNING: The following packages are unknown to your system"
642 echo "(maybe missing a repo or need to 'sudo apt-get update'):"
643 echo -e "${unknown}" | sed -e "s/^/ /"
[email protected]ba48c4ca2013-10-25 16:11:46644 fi
645 exit 1
646 fi
647 exit 0
648fi
649
johnme49bb458a2014-11-27 15:45:31650if test "$do_inst_lib32" = "1" || test "$do_inst_nacl" = "1"; then
thomasanderson05c40292017-03-28 19:28:45651 sudo dpkg --add-architecture i386
johnme49bb458a2014-11-27 15:45:31652fi
sbc42564092015-04-01 01:01:28653sudo apt-get update
[email protected]e041ed12009-03-10 16:43:01654
655# We initially run "apt-get" with the --reinstall option and parse its output.
656# This way, we can find all the packages that need to be newly installed
657# without accidentally promoting any packages from "auto" to "manual".
658# We then re-run "apt-get" with just the list of missing packages.
659echo "Finding missing packages..."
[email protected]757c2962012-03-15 19:05:18660# Intentionally leaving $packages unquoted so it's more readable.
[email protected]b6e064522009-08-10 18:47:51661echo "Packages required: " $packages
662echo
[email protected]79a9d2962009-08-06 21:10:58663new_list_cmd="sudo apt-get install --reinstall $(echo $packages)"
[email protected]c3d8b152013-05-10 10:10:03664if new_list="$(yes n | LANGUAGE=en LANG=C $new_list_cmd)"; then
[email protected]b6e064522009-08-10 18:47:51665 # We probably never hit this following line.
thakis3e861de2016-06-14 14:24:01666 echo "No missing packages, and the packages are up to date."
[email protected]b62f11e72010-05-03 17:20:45667elif [ $? -eq 1 ]; then
[email protected]79a9d2962009-08-06 21:10:58668 # We expect apt-get to have exit status of 1.
[email protected]757c2962012-03-15 19:05:18669 # This indicates that we cancelled the install with "yes n|".
[email protected]b6e064522009-08-10 18:47:51670 new_list=$(echo "$new_list" |
[email protected]79a9d2962009-08-06 21:10:58671 sed -e '1,/The following NEW packages will be installed:/d;s/^ //;t;d')
[email protected]b6e064522009-08-10 18:47:51672 new_list=$(echo "$new_list" | sed 's/ *$//')
673 if [ -z "$new_list" ] ; then
thakis3e861de2016-06-14 14:24:01674 echo "No missing packages, and the packages are up to date."
[email protected]b6e064522009-08-10 18:47:51675 else
676 echo "Installing missing packages: $new_list."
[email protected]e2544ed42012-04-23 04:48:31677 sudo apt-get install ${do_quietly-} ${new_list}
[email protected]b6e064522009-08-10 18:47:51678 fi
679 echo
[email protected]79a9d2962009-08-06 21:10:58680else
681 # An apt-get exit status of 100 indicates that a real error has occurred.
[email protected]e041ed12009-03-10 16:43:01682
[email protected]79a9d2962009-08-06 21:10:58683 # I am intentionally leaving out the '"'s around new_list_cmd,
684 # as this makes it easier to cut and paste the output
[email protected]79a9d2962009-08-06 21:10:58685 echo "The following command failed: " ${new_list_cmd}
686 echo
687 echo "It produces the following output:"
688 yes n | $new_list_cmd || true
689 echo
690 echo "You will have to install the above packages yourself."
691 echo
692 exit 100
693fi
[email protected]e041ed12009-03-10 16:43:01694
[email protected]d96cc3472013-09-19 00:53:30695# Install the Chrome OS default fonts. This must go after running
696# apt-get, since install-chromeos-fonts depends on curl.
697if test "$do_inst_chromeos_fonts" != "0"; then
698 echo
699 echo "Installing Chrome OS fonts."
700 dir=`echo $0 | sed -r -e 's/\/[^/]+$//'`
701 if ! sudo $dir/linux/install-chromeos-fonts.py; then
702 echo "ERROR: The installation of the Chrome OS default fonts failed."
703 if [ `stat -f -c %T $dir` == "nfs" ]; then
704 echo "The reason is that your repo is installed on a remote file system."
705 else
706 echo "This is expected if your repo is installed on a remote file system."
707 fi
708 echo "It is recommended to install your repo on a local file system."
709 echo "You can skip the installation of the Chrome OS default founts with"
710 echo "the command line option: --no-chromeos-fonts."
711 exit 1
712 fi
713else
714 echo "Skipping installation of Chrome OS fonts."
715fi
716
thomasanderson5ef5c3d2016-12-08 01:59:19717echo "Installing locales."
718CHROMIUM_LOCALES="da_DK.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 zh_TW.UTF-8"
719LOCALE_GEN=/etc/locale.gen
720if [ -e ${LOCALE_GEN} ]; then
721 OLD_LOCALE_GEN="$(cat /etc/locale.gen)"
722 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
723 sudo sed -i "s/^# ${CHROMIUM_LOCALE}/${CHROMIUM_LOCALE}/" ${LOCALE_GEN}
724 done
725 # Regenerating locales can take a while, so only do it if we need to.
726 if (echo "${OLD_LOCALE_GEN}" | cmp -s ${LOCALE_GEN}); then
727 echo "Locales already up-to-date."
728 else
729 sudo locale-gen
730 fi
731else
732 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
733 sudo locale-gen ${CHROMIUM_LOCALE}
734 done
735fi