blob: 2aac19afdecb92b3f72dc8de8a76dbee78f10332 [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)
Marcin Wiacekd7577c32018-04-30 19:12:51119supported_codenames="(trusty|xenial|artful|bionic)"
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" \
Marcin Wiacekd7577c32018-04-30 19:12:51125 "\tUbuntu 14.04 LTS (trusty)\n" \
126 "\tUbuntu 16.04 LTS (xenial)\n" \
marcin38933dd2017-10-30 00:05:52127 "\tUbuntu 17.10 (artful)\n" \
Marcin Wiacekd7577c32018-04-30 19:12:51128 "\tUbuntu 18.04 LTS (bionic)\n" \
thomasandersondfefc6c02017-05-04 01:29:11129 "\tDebian 8 (jessie) or later" >&2
anthonyvd2ae919e52016-11-21 19:47:12130 exit 1
[email protected]fe63a022013-01-15 22:11:47131 fi
[email protected]cf1df402008-10-31 21:45:30132
[email protected]fe63a022013-01-15 22:11:47133 if ! uname -m | egrep -q "i686|x86_64"; then
anthonyvd2ae919e52016-11-21 19:47:12134 echo "Only x86 architectures are currently supported" >&2
[email protected]fe63a022013-01-15 22:11:47135 exit
136 fi
[email protected]e041ed12009-03-10 16:43:01137fi
138
[email protected]ba48c4ca2013-10-25 16:11:46139if [ "x$(id -u)" != x0 ] && [ 0 -eq "${do_quick_check-0}" ]; then
[email protected]e041ed12009-03-10 16:43:01140 echo "Running as non-root user."
141 echo "You might have to enter your password one or more times for 'sudo'."
[email protected]8ada8c52009-03-10 21:53:08142 echo
[email protected]e041ed12009-03-10 16:43:01143fi
144
[email protected]fdc6bf52010-06-07 22:01:57145# Packages needed for chromeos only
Tom Anderson6b2b2ad52018-02-22 23:28:14146chromeos_dev_list="libbluetooth-dev libxkbcommon-dev"
147
148if package_exists realpath; then
149 chromeos_dev_list="${chromeos_dev_list} realpath"
150fi
[email protected]fdc6bf52010-06-07 22:01:57151
[email protected]b61f6882013-11-14 20:41:41152# Packages needed for development
thomasanderson20032a5c2017-03-02 00:28:20153dev_list="\
154 bison
155 cdbs
156 curl
Tom Anderson8bfb0b02018-02-17 00:44:15157 dbus-x11
thomasanderson20032a5c2017-03-02 00:28:20158 dpkg-dev
159 elfutils
160 devscripts
161 fakeroot
162 flex
163 fonts-ipafont
thomasanderson20032a5c2017-03-02 00:28:20164 g++
165 git-core
166 git-svn
167 gperf
Tim Brown06ee43a2018-02-08 18:42:12168 libappindicator-dev
169 libappindicator3-dev
thomasanderson20032a5c2017-03-02 00:28:20170 libasound2-dev
171 libbrlapi-dev
thomasanderson20032a5c2017-03-02 00:28:20172 libbz2-dev
173 libcairo2-dev
174 libcap-dev
175 libcups2-dev
176 libcurl4-gnutls-dev
177 libdrm-dev
178 libelf-dev
179 libffi-dev
Tom Andersond4ea2522018-03-01 20:34:38180 libgbm-dev
thomasanderson20032a5c2017-03-02 00:28:20181 libglib2.0-dev
182 libglu1-mesa-dev
183 libgnome-keyring-dev
184 libgtk2.0-dev
185 libgtk-3-dev
186 libkrb5-dev
187 libnspr4-dev
188 libnss3-dev
189 libpam0g-dev
190 libpci-dev
191 libpulse-dev
192 libsctp-dev
193 libspeechd-dev
194 libsqlite3-dev
195 libssl-dev
196 libudev-dev
197 libwww-perl
198 libxslt1-dev
199 libxss-dev
200 libxt-dev
201 libxtst-dev
Andrew Grievee41aeae2017-08-21 20:53:21202 locales
thomasanderson20032a5c2017-03-02 00:28:20203 openbox
Nico Webera9fa6a72018-02-23 18:26:02204 p7zip
thomasanderson20032a5c2017-03-02 00:28:20205 patch
206 perl
207 pkg-config
208 python
209 python-cherrypy3
210 python-crypto
211 python-dev
212 python-numpy
213 python-opencv
214 python-openssl
215 python-psutil
216 python-yaml
217 rpm
218 ruby
219 subversion
thomasanderson20032a5c2017-03-02 00:28:20220 wdiff
Tom Andersond79de41d2017-08-08 00:23:23221 x11-utils
thomasanderson20032a5c2017-03-02 00:28:20222 xcompmgr
223 zip
224 $chromeos_dev_list
225"
[email protected]fdc6bf52010-06-07 22:01:57226
[email protected]f16aabf2012-08-15 21:00:14227# 64-bit systems need a minimum set of 32-bit compat packages for the pre-built
[email protected]f8ceadb2014-08-18 12:30:23228# NaCl binaries.
ki.stfu0a79d6992015-09-17 07:27:12229if file -L /sbin/init | grep -q 'ELF 64-bit'; then
[email protected]d93d68b12012-10-15 06:39:53230 dev_list="${dev_list} libc6-i386 lib32gcc1 lib32stdc++6"
[email protected]f16aabf2012-08-15 21:00:14231fi
232
[email protected]fdc6bf52010-06-07 22:01:57233# Run-time libraries required by chromeos only
[email protected]ba48c4ca2013-10-25 16:11:46234chromeos_lib_list="libpulse0 libbz2-1.0"
[email protected]e041ed12009-03-10 16:43:01235
236# Full list of required run-time libraries
thomasanderson20032a5c2017-03-02 00:28:20237lib_list="\
Tim Brown06ee43a2018-02-08 18:42:12238 libappindicator1
239 libappindicator3-1
240 libasound2
thomasanderson20032a5c2017-03-02 00:28:20241 libatk1.0-0
242 libc6
thomasanderson20032a5c2017-03-02 00:28:20243 libcairo2
244 libcap2
245 libcups2
246 libexpat1
247 libffi6
248 libfontconfig1
249 libfreetype6
250 libglib2.0-0
251 libgnome-keyring0
252 libgtk2.0-0
253 libgtk-3-0
254 libpam0g
255 libpango1.0-0
256 libpci3
257 libpcre3
258 libpixman-1-0
259 libspeechd2
260 libstdc++6
261 libsqlite3-0
Scott Violetdd7e2372018-04-12 01:11:26262 libwayland-egl1-mesa
thomasanderson20032a5c2017-03-02 00:28:20263 libx11-6
264 libx11-xcb1
265 libxau6
266 libxcb1
267 libxcomposite1
268 libxcursor1
269 libxdamage1
270 libxdmcp6
271 libxext6
272 libxfixes3
273 libxi6
274 libxinerama1
275 libxrandr2
276 libxrender1
277 libxtst6
278 zlib1g
279 $chromeos_lib_list
280"
[email protected]e041ed12009-03-10 16:43:01281
282# Debugging symbols for all of the run-time libraries
thomasanderson20032a5c2017-03-02 00:28:20283dbg_list="\
thomasanderson20032a5c2017-03-02 00:28:20284 libc6-dbg
thomasanderson20032a5c2017-03-02 00:28:20285 libffi6-dbg
thomasanderson20032a5c2017-03-02 00:28:20286 libgtk2.0-0-dbg
thomasanderson20032a5c2017-03-02 00:28:20287 libpcre3-dbg
288 libpixman-1-0-dbg
thomasanderson20032a5c2017-03-02 00:28:20289 libxau6-dbg
290 libxcb1-dbg
291 libxcomposite1-dbg
thomasanderson20032a5c2017-03-02 00:28:20292 libxdmcp6-dbg
293 libxext6-dbg
thomasanderson20032a5c2017-03-02 00:28:20294 libxinerama1-dbg
thomasanderson20032a5c2017-03-02 00:28:20295 zlib1g-dbg
296"
lfgad917d12015-03-17 23:28:00297
Tom Anderson17d6cdd2017-11-28 04:13:25298if package_exists libstdc++6-6-dbg; then
299 dbg_list="${dbg_list} libstdc++6-6-dbg"
300elif package_exists libstdc++6-4.9-dbg; then
lfgad917d12015-03-17 23:28:00301 dbg_list="${dbg_list} libstdc++6-4.9-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25302else
303 dbg_list="${dbg_list} libstdc++6-4.8-dbg"
304fi
305if package_exists libgtk-3-0-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28306 dbg_list="${dbg_list} libgtk-3-0-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25307elif package_exists libgtk-3-0-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28308 dbg_list="${dbg_list} libgtk-3-0-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25309fi
310if package_exists libatk1.0-0-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28311 dbg_list="${dbg_list} libatk1.0-0-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25312elif package_exists libatk1.0-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28313 dbg_list="${dbg_list} libatk1.0-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25314fi
315if package_exists libcairo2-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28316 dbg_list="${dbg_list} libcairo2-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25317elif package_exists libcairo2-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28318 dbg_list="${dbg_list} libcairo2-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25319fi
320if package_exists libfontconfig1-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28321 dbg_list="${dbg_list} libfontconfig1-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25322else
Tom Anderson1ce9314f2018-02-21 21:04:28323 dbg_list="${dbg_list} libfontconfig1-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25324fi
325if package_exists libxdamage1-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28326 dbg_list="${dbg_list} libxdamage1-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25327elif package_exists libxdamage1-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28328 dbg_list="${dbg_list} libxdamage1-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25329fi
330if package_exists libpango1.0-dev-dbgsym; then
Tom Anderson1ce9314f2018-02-21 21:04:28331 dbg_list="${dbg_list} libpango1.0-dev-dbgsym"
Tom Anderson17d6cdd2017-11-28 04:13:25332elif package_exists libpango1.0-0-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28333 dbg_list="${dbg_list} libpango1.0-0-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25334fi
335if package_exists libx11-6-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28336 dbg_list="${dbg_list} libx11-6-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25337fi
338if package_exists libx11-xcb1-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28339 dbg_list="${dbg_list} libx11-xcb1-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25340fi
341if package_exists libxfixes3-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28342 dbg_list="${dbg_list} libxfixes3-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25343fi
344if package_exists libxi6-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28345 dbg_list="${dbg_list} libxi6-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25346fi
347if package_exists libxrandr2-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28348 dbg_list="${dbg_list} libxrandr2-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25349fi
350if package_exists libxrender1-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28351 dbg_list="${dbg_list} libxrender1-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25352fi
353if package_exists libxtst6-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28354 dbg_list="${dbg_list} libxtst6-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25355fi
356if package_exists libglib2.0-0-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28357 dbg_list="${dbg_list} libglib2.0-0-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25358fi
Tom Andersonb2582042018-02-22 16:56:07359if package_exists libxcursor1-dbgsym; then
360 dbg_list="${dbg_list} libxcursor1-dbgsym"
361elif package_exists libxcursor1-dbg; then
Tom Anderson1ce9314f2018-02-21 21:04:28362 dbg_list="${dbg_list} libxcursor1-dbg"
lfgad917d12015-03-17 23:28:00363fi
Tom Andersonc9790a3b2018-04-11 00:42:28364if package_exists libsqlite3-0-dbgsym; then
365 dbg_list="${dbg_list} libsqlite3-0-dbgsym"
366else
367 dbg_list="${dbg_list} libsqlite3-0-dbg"
368fi
[email protected]e041ed12009-03-10 16:43:01369
johnme49bb458a2014-11-27 15:45:31370# 32-bit libraries needed e.g. to compile V8 snapshot for Android or armhf
Tanin Na Nakorn6cbe32e52017-05-30 19:37:04371lib32_list="linux-libc-dev:i386 libpci3:i386"
johnme49bb458a2014-11-27 15:45:31372
Tom Andersondd47ad32018-03-21 19:30:19373# 32-bit libraries needed for a 32-bit build
374lib32_list="$lib32_list libx11-xcb1:i386"
375
[email protected]3f85dac32013-10-29 02:38:46376# arm cross toolchain packages needed to build chrome on armhf
thomasanderson4e3d30fe2016-12-07 18:58:34377EM_REPO="deb http://emdebian.org/tools/debian/ jessie main"
378EM_SOURCE=$(cat <<EOF
379# Repo added by Chromium $0
380${EM_REPO}
381# deb-src http://emdebian.org/tools/debian/ jessie main
382EOF
383)
384EM_ARCHIVE_KEY_FINGER="084C6C6F39159EDB67969AA87DE089671804772E"
385GPP_ARM_PACKAGE="g++-arm-linux-gnueabihf"
thomasandersondfefc6c02017-05-04 01:29:11386case $distro_codename in
kjellander95504ae2017-03-30 12:30:31387 jessie)
thomasanderson4e3d30fe2016-12-07 18:58:34388 eval $(apt-config shell APT_SOURCESDIR 'Dir::Etc::sourceparts/d')
389 CROSSTOOLS_LIST="${APT_SOURCESDIR}/crosstools.list"
390 arm_list="libc6-dev:armhf
391 linux-libc-dev:armhf"
392 if test "$do_inst_arm" = "1"; then
393 if $(dpkg-query -W ${GPP_ARM_PACKAGE} &>/dev/null); then
394 arm_list+=" ${GPP_ARM_PACKAGE}"
395 else
396 echo "The Debian Cross-toolchains repository is necessary to"
397 echo "cross-compile Chromium for arm."
398 echo -n "Do you want me to add it for you (y/N) "
399 if yes_no 1; then
400 gpg --keyserver pgp.mit.edu --recv-keys ${EM_ARCHIVE_KEY_FINGER}
401 gpg -a --export ${EM_ARCHIVE_KEY_FINGER} | sudo apt-key add -
402 if ! grep "^${EM_REPO}" "${CROSSTOOLS_LIST}" &>/dev/null; then
403 echo "${EM_SOURCE}" | sudo tee -a "${CROSSTOOLS_LIST}" >/dev/null
404 fi
405 arm_list+=" ${GPP_ARM_PACKAGE}"
406 fi
407 fi
408 fi
409 ;;
thomasandersondfefc6c02017-05-04 01:29:11410 # All necessary ARM packages are available on the default repos on
411 # Debian 9 and later.
kjellander95504ae2017-03-30 12:30:31412 *)
Tom Anderson81e7f1792017-11-11 03:56:33413 arm_list="libc6-dev-armhf-cross
thomasanderson4e3d30fe2016-12-07 18:58:34414 linux-libc-dev-armhf-cross
415 ${GPP_ARM_PACKAGE}"
416 ;;
417esac
[email protected]31a605532011-08-23 22:27:35418
sbcb5d4ded2015-04-01 17:49:03419# Work around for dependency issue Ubuntu/Trusty: http://crbug.com/435056
thomasandersondfefc6c02017-05-04 01:29:11420case $distro_codename in
friedmanbf8b90a2016-04-21 01:15:48421 trusty)
422 arm_list+=" g++-4.8-multilib-arm-linux-gnueabihf
423 gcc-4.8-multilib-arm-linux-gnueabihf"
424 ;;
Marcin Wiacekd7577c32018-04-30 19:12:51425 xenial|artful|bionic)
krasineef3d4b2016-04-22 00:52:18426 arm_list+=" g++-5-multilib-arm-linux-gnueabihf
427 gcc-5-multilib-arm-linux-gnueabihf
428 gcc-arm-linux-gnueabihf"
429 ;;
friedmanbf8b90a2016-04-21 01:15:48430esac
sbcb5d4ded2015-04-01 17:49:03431
[email protected]713eac62014-06-02 23:10:03432# Packages to build NaCl, its toolchains, and its ports.
Brad Nelson5e59c2c2014-09-06 06:18:45433naclports_list="ant autoconf bison cmake gawk intltool xutils-dev xsltproc"
thomasanderson20032a5c2017-03-02 00:28:20434nacl_list="\
435 g++-mingw-w64-i686
436 lib32z1-dev
437 libasound2:i386
438 libcap2:i386
439 libelf-dev:i386
440 libfontconfig1:i386
thomasanderson20032a5c2017-03-02 00:28:20441 libglib2.0-0:i386
442 libgpm2:i386
443 libgtk2.0-0:i386
444 libgtk-3-0:i386
445 libncurses5:i386
446 lib32ncurses5-dev
447 libnss3:i386
448 libpango1.0-0:i386
thomasandersondfefc6c02017-05-04 01:29:11449 libssl-dev:i386
thomasanderson20032a5c2017-03-02 00:28:20450 libtinfo-dev
451 libtinfo-dev:i386
452 libtool
453 libxcomposite1:i386
454 libxcursor1:i386
455 libxdamage1:i386
456 libxi6:i386
457 libxrandr2:i386
458 libxss1:i386
459 libxtst6:i386
460 texinfo
461 xvfb
462 ${naclports_list}
463"
[email protected]419a9a62014-06-19 18:26:18464
Tom Anderson0524b2b72017-12-11 20:39:18465if package_exists libssl1.1; then
466 nacl_list="${nacl_list} libssl1.1:i386"
467elif package_exists libssl1.0.2; then
thomasandersondfefc6c02017-05-04 01:29:11468 nacl_list="${nacl_list} libssl1.0.2:i386"
Tom Anderson0524b2b72017-12-11 20:39:18469else
470 nacl_list="${nacl_list} libssl1.0.0:i386"
thomasandersondfefc6c02017-05-04 01:29:11471fi
472
[email protected]757c2962012-03-15 19:05:18473# Some package names have changed over time
Tom Anderson0524b2b72017-12-11 20:39:18474if package_exists libpng16-16; then
marcin73929a72017-01-04 22:04:58475 lib_list="${lib_list} libpng16-16"
Tom Anderson0524b2b72017-12-11 20:39:18476else
477 lib_list="${lib_list} libpng12-0"
marcin73929a72017-01-04 22:04:58478fi
[email protected]4fc00712013-05-29 23:11:20479if package_exists libnspr4-dbg; then
[email protected]1a0f64a2011-05-20 17:53:55480 dbg_list="${dbg_list} libnspr4-dbg libnss3-dbg"
481 lib_list="${lib_list} libnspr4 libnss3"
[email protected]757c2962012-03-15 19:05:18482else
483 dbg_list="${dbg_list} libnspr4-0d-dbg libnss3-1d-dbg"
484 lib_list="${lib_list} libnspr4-0d libnss3-1d"
485fi
[email protected]4fc00712013-05-29 23:11:20486if package_exists libjpeg-dev; then
[email protected]9e895962013-05-21 08:26:42487 dev_list="${dev_list} libjpeg-dev"
[email protected]b11411c2012-03-21 22:09:41488else
[email protected]9e895962013-05-21 08:26:42489 dev_list="${dev_list} libjpeg62-dev"
[email protected]b11411c2012-03-21 22:09:41490fi
[email protected]4fc00712013-05-29 23:11:20491if package_exists libudev1; then
[email protected]9e895962013-05-21 08:26:42492 dev_list="${dev_list} libudev1"
[email protected]ab9e69082014-06-05 15:28:52493 nacl_list="${nacl_list} libudev1:i386"
[email protected]9e895962013-05-21 08:26:42494else
495 dev_list="${dev_list} libudev0"
[email protected]ab9e69082014-06-05 15:28:52496 nacl_list="${nacl_list} libudev0:i386"
[email protected]9e895962013-05-21 08:26:42497fi
[email protected]3ea42912013-09-06 06:23:57498if package_exists libbrlapi0.6; then
499 dev_list="${dev_list} libbrlapi0.6"
500else
501 dev_list="${dev_list} libbrlapi0.5"
502fi
Tom Anderson0524b2b72017-12-11 20:39:18503if package_exists apache2.2-bin; then
halton.huo3e728c42016-01-20 05:12:23504 dev_list="${dev_list} apache2.2-bin"
Tom Anderson0524b2b72017-12-11 20:39:18505else
506 dev_list="${dev_list} apache2-bin"
halton.huo3e728c42016-01-20 05:12:23507fi
vadimsh278ff0662016-05-19 00:06:28508if package_exists xfonts-mathml; then
halton.huo3e728c42016-01-20 05:12:23509 dev_list="${dev_list} xfonts-mathml"
510fi
Marcin Wiacekd7577c32018-04-30 19:12:51511if package_exists libav-tools; then
512 dev_list="${dev_list} libav-tools"
513fi
514if package_exists php7.2-cgi; then
515 dev_list="${dev_list} php7.2-cgi libapache2-mod-php7.2"
516elif package_exists php7.1-cgi; then
marcin38933dd2017-10-30 00:05:52517 dev_list="${dev_list} php7.1-cgi libapache2-mod-php7.1"
518elif package_exists php7.0-cgi; then
vadimsh278ff0662016-05-19 00:06:28519 dev_list="${dev_list} php7.0-cgi libapache2-mod-php7.0"
krasineef3d4b2016-04-22 00:52:18520else
vadimsh278ff0662016-05-19 00:06:28521 dev_list="${dev_list} php5-cgi libapache2-mod-php5"
krasineef3d4b2016-04-22 00:52:18522fi
thomasandersonb4a2bca2016-12-08 06:46:05523# ttf-mscorefonts-installer is in the Debian contrib repo, which has
524# dependencies on non-free software. Install it only if the user has already
525# enabled contrib.
526if package_exists ttf-mscorefonts-installer; then
527 dev_list="${dev_list} ttf-mscorefonts-installer"
528elif package_exists msttcorefonts; then
529 dev_list="${dev_list} msttcorefonts"
530fi
[email protected]757c2962012-03-15 19:05:18531
[email protected]dc099772013-09-30 22:06:58532# Some packages are only needed if the distribution actually supports
[email protected]757c2962012-03-15 19:05:18533# installing them.
[email protected]4fc00712013-05-29 23:11:20534if package_exists appmenu-gtk; then
[email protected]757c2962012-03-15 19:05:18535 lib_list="$lib_list appmenu-gtk"
[email protected]4da8fad2011-04-11 18:42:42536fi
537
Tom Anderson81e7f1792017-11-11 03:56:33538# Cross-toolchain strip is needed for building the sysroots.
539if package_exists binutils-arm-linux-gnueabihf; then
540 dev_list="${dev_list} binutils-arm-linux-gnueabihf"
541fi
542if package_exists binutils-aarch64-linux-gnu; then
543 dev_list="${dev_list} binutils-aarch64-linux-gnu"
544fi
545if package_exists binutils-mipsel-linux-gnu; then
546 dev_list="${dev_list} binutils-mipsel-linux-gnu"
547fi
548if package_exists binutils-mips64el-linux-gnuabi64; then
549 dev_list="${dev_list} binutils-mips64el-linux-gnuabi64"
550fi
551
johnme49bb458a2014-11-27 15:45:31552# When cross building for arm/Android on 64-bit systems the host binaries
553# that are part of v8 need to be compiled with -m32 which means
554# that basic multilib support is needed.
ki.stfu0a79d6992015-09-17 07:27:12555if file -L /sbin/init | grep -q 'ELF 64-bit'; then
johnme49bb458a2014-11-27 15:45:31556 # gcc-multilib conflicts with the arm cross compiler (at least in trusty) but
557 # g++-X.Y-multilib gives us the 32-bit support that we need. Find out the
558 # appropriate value of X and Y by seeing what version the current
559 # distribution's g++-multilib package depends on.
560 multilib_package=$(apt-cache depends g++-multilib --important | \
561 grep -E --color=never --only-matching '\bg\+\+-[0-9.]+-multilib\b')
562 lib32_list="$lib32_list $multilib_package"
563fi
564
[email protected]ba48c4ca2013-10-25 16:11:46565if test "$do_inst_syms" = "" && test 0 -eq ${do_quick_check-0}
[email protected]1eae2bfb2010-01-26 18:17:53566then
567 echo "This script installs all tools and libraries needed to build Chromium."
568 echo ""
569 echo "For most of the libraries, it can also install debugging symbols, which"
570 echo "will allow you to debug code in the system libraries. Most developers"
571 echo "won't need these symbols."
572 echo -n "Do you want me to install them for you (y/N) "
573 if yes_no 1; then
574 do_inst_syms=1
575 fi
576fi
577if test "$do_inst_syms" = "1"; then
[email protected]ba48c4ca2013-10-25 16:11:46578 echo "Including debugging symbols."
[email protected]8ada8c52009-03-10 21:53:08579else
[email protected]ba48c4ca2013-10-25 16:11:46580 echo "Skipping debugging symbols."
[email protected]8ada8c52009-03-10 21:53:08581 dbg_list=
582fi
583
johnme49bb458a2014-11-27 15:45:31584if test "$do_inst_lib32" = "1" ; then
Tom Andersondd47ad32018-03-21 19:30:19585 echo "Including 32-bit libraries."
johnme49bb458a2014-11-27 15:45:31586else
Tom Andersondd47ad32018-03-21 19:30:19587 echo "Skipping 32-bit libraries."
johnme49bb458a2014-11-27 15:45:31588 lib32_list=
[email protected]9f28a9cf2012-12-17 23:31:40589fi
590
[email protected]ba48c4ca2013-10-25 16:11:46591if test "$do_inst_arm" = "1" ; then
[email protected]ba48c4ca2013-10-25 16:11:46592 echo "Including ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26593else
[email protected]ba48c4ca2013-10-25 16:11:46594 echo "Skipping ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26595 arm_list=
596fi
597
[email protected]565416362014-01-16 21:26:47598if test "$do_inst_nacl" = "1"; then
[email protected]713eac62014-06-02 23:10:03599 echo "Including NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47600else
[email protected]713eac62014-06-02 23:10:03601 echo "Skipping NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47602 nacl_list=
603fi
604
johnme4bd10302015-01-06 11:25:52605# The `sort -r -s -t: -k2` sorts all the :i386 packages to the front, to avoid
606# confusing dpkg-query (crbug.com/446172).
[email protected]565416362014-01-16 21:26:47607packages="$(
johnme49bb458a2014-11-27 15:45:31608 echo "${dev_list} ${lib_list} ${dbg_list} ${lib32_list} ${arm_list}"\
johnme4bd10302015-01-06 11:25:52609 "${nacl_list}" | tr " " "\n" | sort -u | sort -r -s -t: -k2 | tr "\n" " "
[email protected]565416362014-01-16 21:26:47610)"
[email protected]ba48c4ca2013-10-25 16:11:46611
612if [ 1 -eq "${do_quick_check-0}" ] ; then
thomasanderson73b3a4412016-11-18 23:16:07613 if ! missing_packages="$(dpkg-query -W -f ' ' ${packages} 2>&1)"; then
614 # Distinguish between packages that actually aren't available to the
615 # system (i.e. not in any repo) and packages that just aren't known to
616 # dpkg (i.e. managed by apt).
617 missing_packages="$(echo "${missing_packages}" | awk '{print $NF}')"
618 not_installed=""
619 unknown=""
620 for p in ${missing_packages}; do
621 if apt-cache show ${p} > /dev/null 2>&1; then
622 not_installed="${p}\n${not_installed}"
623 else
624 unknown="${p}\n${unknown}"
[email protected]ba48c4ca2013-10-25 16:11:46625 fi
thomasanderson73b3a4412016-11-18 23:16:07626 done
627 if [ -n "${not_installed}" ]; then
[email protected]ba48c4ca2013-10-25 16:11:46628 echo "WARNING: The following packages are not installed:"
thomasanderson73b3a4412016-11-18 23:16:07629 echo -e "${not_installed}" | sed -e "s/^/ /"
630 fi
631 if [ -n "${unknown}" ]; then
632 echo "WARNING: The following packages are unknown to your system"
633 echo "(maybe missing a repo or need to 'sudo apt-get update'):"
634 echo -e "${unknown}" | sed -e "s/^/ /"
[email protected]ba48c4ca2013-10-25 16:11:46635 fi
636 exit 1
637 fi
638 exit 0
639fi
640
johnme49bb458a2014-11-27 15:45:31641if test "$do_inst_lib32" = "1" || test "$do_inst_nacl" = "1"; then
thomasanderson05c40292017-03-28 19:28:45642 sudo dpkg --add-architecture i386
johnme49bb458a2014-11-27 15:45:31643fi
sbc42564092015-04-01 01:01:28644sudo apt-get update
[email protected]e041ed12009-03-10 16:43:01645
646# We initially run "apt-get" with the --reinstall option and parse its output.
647# This way, we can find all the packages that need to be newly installed
648# without accidentally promoting any packages from "auto" to "manual".
649# We then re-run "apt-get" with just the list of missing packages.
650echo "Finding missing packages..."
[email protected]757c2962012-03-15 19:05:18651# Intentionally leaving $packages unquoted so it's more readable.
[email protected]b6e064522009-08-10 18:47:51652echo "Packages required: " $packages
653echo
[email protected]79a9d2962009-08-06 21:10:58654new_list_cmd="sudo apt-get install --reinstall $(echo $packages)"
[email protected]c3d8b152013-05-10 10:10:03655if new_list="$(yes n | LANGUAGE=en LANG=C $new_list_cmd)"; then
[email protected]b6e064522009-08-10 18:47:51656 # We probably never hit this following line.
thakis3e861de2016-06-14 14:24:01657 echo "No missing packages, and the packages are up to date."
[email protected]b62f11e72010-05-03 17:20:45658elif [ $? -eq 1 ]; then
[email protected]79a9d2962009-08-06 21:10:58659 # We expect apt-get to have exit status of 1.
[email protected]757c2962012-03-15 19:05:18660 # This indicates that we cancelled the install with "yes n|".
[email protected]b6e064522009-08-10 18:47:51661 new_list=$(echo "$new_list" |
[email protected]79a9d2962009-08-06 21:10:58662 sed -e '1,/The following NEW packages will be installed:/d;s/^ //;t;d')
[email protected]b6e064522009-08-10 18:47:51663 new_list=$(echo "$new_list" | sed 's/ *$//')
664 if [ -z "$new_list" ] ; then
thakis3e861de2016-06-14 14:24:01665 echo "No missing packages, and the packages are up to date."
[email protected]b6e064522009-08-10 18:47:51666 else
667 echo "Installing missing packages: $new_list."
[email protected]e2544ed42012-04-23 04:48:31668 sudo apt-get install ${do_quietly-} ${new_list}
[email protected]b6e064522009-08-10 18:47:51669 fi
670 echo
[email protected]79a9d2962009-08-06 21:10:58671else
672 # An apt-get exit status of 100 indicates that a real error has occurred.
[email protected]e041ed12009-03-10 16:43:01673
[email protected]79a9d2962009-08-06 21:10:58674 # I am intentionally leaving out the '"'s around new_list_cmd,
675 # as this makes it easier to cut and paste the output
[email protected]79a9d2962009-08-06 21:10:58676 echo "The following command failed: " ${new_list_cmd}
677 echo
678 echo "It produces the following output:"
679 yes n | $new_list_cmd || true
680 echo
681 echo "You will have to install the above packages yourself."
682 echo
683 exit 100
684fi
[email protected]e041ed12009-03-10 16:43:01685
[email protected]d96cc3472013-09-19 00:53:30686# Install the Chrome OS default fonts. This must go after running
687# apt-get, since install-chromeos-fonts depends on curl.
688if test "$do_inst_chromeos_fonts" != "0"; then
689 echo
690 echo "Installing Chrome OS fonts."
691 dir=`echo $0 | sed -r -e 's/\/[^/]+$//'`
692 if ! sudo $dir/linux/install-chromeos-fonts.py; then
693 echo "ERROR: The installation of the Chrome OS default fonts failed."
694 if [ `stat -f -c %T $dir` == "nfs" ]; then
695 echo "The reason is that your repo is installed on a remote file system."
696 else
697 echo "This is expected if your repo is installed on a remote file system."
698 fi
699 echo "It is recommended to install your repo on a local file system."
700 echo "You can skip the installation of the Chrome OS default founts with"
701 echo "the command line option: --no-chromeos-fonts."
702 exit 1
703 fi
704else
705 echo "Skipping installation of Chrome OS fonts."
706fi
707
thomasanderson5ef5c3d2016-12-08 01:59:19708echo "Installing locales."
709CHROMIUM_LOCALES="da_DK.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 zh_TW.UTF-8"
710LOCALE_GEN=/etc/locale.gen
711if [ -e ${LOCALE_GEN} ]; then
712 OLD_LOCALE_GEN="$(cat /etc/locale.gen)"
713 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
714 sudo sed -i "s/^# ${CHROMIUM_LOCALE}/${CHROMIUM_LOCALE}/" ${LOCALE_GEN}
715 done
716 # Regenerating locales can take a while, so only do it if we need to.
717 if (echo "${OLD_LOCALE_GEN}" | cmp -s ${LOCALE_GEN}); then
718 echo "Locales already up-to-date."
719 else
720 sudo locale-gen
721 fi
722else
723 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
724 sudo locale-gen ${CHROMIUM_LOCALE}
725 done
726fi