blob: 0082ca40f4a97d381cbfb46a495444448fb524ea [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" \
marcin3a0793a2017-06-30 03:51:28127 "\tUbuntu 17.04 (zesty)\n" \
marcin38933dd2017-10-30 00:05:52128 "\tUbuntu 17.10 (artful)\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
dnj6a8491d12015-05-26 21:08:12146chromeos_dev_list="libbluetooth-dev libxkbcommon-dev realpath"
[email protected]fdc6bf52010-06-07 22:01:57147
[email protected]b61f6882013-11-14 20:41:41148# Packages needed for development
thomasanderson20032a5c2017-03-02 00:28:20149dev_list="\
150 bison
151 cdbs
152 curl
153 dpkg-dev
154 elfutils
155 devscripts
156 fakeroot
157 flex
158 fonts-ipafont
Conley Owens3aeec4442017-12-11 18:15:36159 fonts-tlwg-garuda
thomasanderson20032a5c2017-03-02 00:28:20160 g++
161 git-core
162 git-svn
163 gperf
164 libasound2-dev
165 libbrlapi-dev
166 libav-tools
167 libbz2-dev
168 libcairo2-dev
169 libcap-dev
170 libcups2-dev
171 libcurl4-gnutls-dev
Tim Brown357bdbf2017-09-29 19:11:29172 libdconf-dev
thomasanderson20032a5c2017-03-02 00:28:20173 libdrm-dev
174 libelf-dev
175 libffi-dev
176 libgconf2-dev
177 libglib2.0-dev
178 libglu1-mesa-dev
179 libgnome-keyring-dev
180 libgtk2.0-dev
181 libgtk-3-dev
182 libkrb5-dev
183 libnspr4-dev
184 libnss3-dev
185 libpam0g-dev
186 libpci-dev
187 libpulse-dev
188 libsctp-dev
189 libspeechd-dev
190 libsqlite3-dev
191 libssl-dev
192 libudev-dev
193 libwww-perl
194 libxslt1-dev
195 libxss-dev
196 libxt-dev
197 libxtst-dev
Andrew Grievee41aeae2017-08-21 20:53:21198 locales
thomasanderson20032a5c2017-03-02 00:28:20199 openbox
200 patch
201 perl
202 pkg-config
203 python
204 python-cherrypy3
205 python-crypto
206 python-dev
207 python-numpy
208 python-opencv
209 python-openssl
210 python-psutil
211 python-yaml
212 rpm
213 ruby
214 subversion
thomasanderson20032a5c2017-03-02 00:28:20215 wdiff
Tom Andersond79de41d2017-08-08 00:23:23216 x11-utils
thomasanderson20032a5c2017-03-02 00:28:20217 xcompmgr
218 zip
219 $chromeos_dev_list
220"
[email protected]fdc6bf52010-06-07 22:01:57221
[email protected]f16aabf2012-08-15 21:00:14222# 64-bit systems need a minimum set of 32-bit compat packages for the pre-built
[email protected]f8ceadb2014-08-18 12:30:23223# NaCl binaries.
ki.stfu0a79d6992015-09-17 07:27:12224if file -L /sbin/init | grep -q 'ELF 64-bit'; then
[email protected]d93d68b12012-10-15 06:39:53225 dev_list="${dev_list} libc6-i386 lib32gcc1 lib32stdc++6"
[email protected]f16aabf2012-08-15 21:00:14226fi
227
[email protected]fdc6bf52010-06-07 22:01:57228# Run-time libraries required by chromeos only
[email protected]ba48c4ca2013-10-25 16:11:46229chromeos_lib_list="libpulse0 libbz2-1.0"
[email protected]e041ed12009-03-10 16:43:01230
231# Full list of required run-time libraries
thomasanderson20032a5c2017-03-02 00:28:20232lib_list="\
233 libatk1.0-0
234 libc6
235 libasound2
236 libcairo2
237 libcap2
238 libcups2
Tim Brown357bdbf2017-09-29 19:11:29239 libdconf1
thomasanderson20032a5c2017-03-02 00:28:20240 libexpat1
241 libffi6
242 libfontconfig1
243 libfreetype6
244 libglib2.0-0
245 libgnome-keyring0
246 libgtk2.0-0
247 libgtk-3-0
248 libpam0g
249 libpango1.0-0
250 libpci3
251 libpcre3
252 libpixman-1-0
253 libspeechd2
254 libstdc++6
255 libsqlite3-0
256 libx11-6
257 libx11-xcb1
258 libxau6
259 libxcb1
260 libxcomposite1
261 libxcursor1
262 libxdamage1
263 libxdmcp6
264 libxext6
265 libxfixes3
266 libxi6
267 libxinerama1
268 libxrandr2
269 libxrender1
270 libxtst6
271 zlib1g
272 $chromeos_lib_list
273"
[email protected]e041ed12009-03-10 16:43:01274
275# Debugging symbols for all of the run-time libraries
thomasanderson20032a5c2017-03-02 00:28:20276dbg_list="\
thomasanderson20032a5c2017-03-02 00:28:20277 libc6-dbg
thomasanderson20032a5c2017-03-02 00:28:20278 libffi6-dbg
thomasanderson20032a5c2017-03-02 00:28:20279 libgtk2.0-0-dbg
thomasanderson20032a5c2017-03-02 00:28:20280 libpcre3-dbg
281 libpixman-1-0-dbg
282 libsqlite3-0-dbg
thomasanderson20032a5c2017-03-02 00:28:20283 libxau6-dbg
284 libxcb1-dbg
285 libxcomposite1-dbg
thomasanderson20032a5c2017-03-02 00:28:20286 libxdmcp6-dbg
287 libxext6-dbg
thomasanderson20032a5c2017-03-02 00:28:20288 libxinerama1-dbg
thomasanderson20032a5c2017-03-02 00:28:20289 zlib1g-dbg
290"
lfgad917d12015-03-17 23:28:00291
Tom Anderson17d6cdd2017-11-28 04:13:25292if package_exists libstdc++6-6-dbg; then
293 dbg_list="${dbg_list} libstdc++6-6-dbg"
294elif package_exists libstdc++6-4.9-dbg; then
lfgad917d12015-03-17 23:28:00295 dbg_list="${dbg_list} libstdc++6-4.9-dbg"
Tom Anderson17d6cdd2017-11-28 04:13:25296else
297 dbg_list="${dbg_list} libstdc++6-4.8-dbg"
298fi
299if package_exists libgtk-3-0-dbgsym; then
300 lib_list="${lib_list} libgtk-3-0-dbgsym"
301elif package_exists libgtk-3-0-dbg; then
302 lib_list="${lib_list} libgtk-3-0-dbg"
303fi
304if package_exists libatk1.0-0-dbgsym; then
305 lib_list="${lib_list} libatk1.0-0-dbgsym"
306elif package_exists libatk1.0-dbg; then
307 lib_list="${lib_list} libatk1.0-dbg"
308fi
309if package_exists libcairo2-dbgsym; then
310 lib_list="${lib_list} libcairo2-dbgsym"
311elif package_exists libcairo2-dbg; then
312 lib_list="${lib_list} libcairo2-dbg"
313fi
314if package_exists libfontconfig1-dbgsym; then
315 lib_list="${lib_list} libfontconfig1-dbgsym"
316else
317 lib_list="${lib_list} libfontconfig1-dbg"
318fi
319if package_exists libxdamage1-dbgsym; then
320 lib_list="${lib_list} libxdamage1-dbgsym"
321elif package_exists libxdamage1-dbg; then
322 lib_list="${lib_list} libxdamage1-dbg"
323fi
324if package_exists libpango1.0-dev-dbgsym; then
325 lib_list="${lib_list} libpango1.0-dev-dbgsym"
326elif package_exists libpango1.0-0-dbg; then
327 lib_list="${lib_list} libpango1.0-0-dbg"
328fi
329if package_exists libx11-6-dbg; then
330 lib_list="${lib_list} libx11-6-dbg"
331fi
332if package_exists libx11-xcb1-dbg; then
333 lib_list="${lib_list} libx11-xcb1-dbg"
334fi
335if package_exists libxfixes3-dbg; then
336 lib_list="${lib_list} libxfixes3-dbg"
337fi
338if package_exists libxi6-dbg; then
339 lib_list="${lib_list} libxi6-dbg"
340fi
341if package_exists libxrandr2-dbg; then
342 lib_list="${lib_list} libxrandr2-dbg"
343fi
344if package_exists libxrender1-dbg; then
345 lib_list="${lib_list} libxrender1-dbg"
346fi
347if package_exists libxtst6-dbg; then
348 lib_list="${lib_list} libxtst6-dbg"
349fi
350if package_exists libglib2.0-0-dbg; then
351 lib_list="${lib_list} libglib2.0-0-dbg"
352fi
353if package_exists libxcursor1-dbg; then
354 lib_list="${lib_list} libxcursor1-dbg"
lfgad917d12015-03-17 23:28:00355fi
[email protected]e041ed12009-03-10 16:43:01356
johnme49bb458a2014-11-27 15:45:31357# 32-bit libraries needed e.g. to compile V8 snapshot for Android or armhf
Tanin Na Nakorn6cbe32e52017-05-30 19:37:04358lib32_list="linux-libc-dev:i386 libpci3:i386"
johnme49bb458a2014-11-27 15:45:31359
[email protected]3f85dac32013-10-29 02:38:46360# arm cross toolchain packages needed to build chrome on armhf
thomasanderson4e3d30fe2016-12-07 18:58:34361EM_REPO="deb http://emdebian.org/tools/debian/ jessie main"
362EM_SOURCE=$(cat <<EOF
363# Repo added by Chromium $0
364${EM_REPO}
365# deb-src http://emdebian.org/tools/debian/ jessie main
366EOF
367)
368EM_ARCHIVE_KEY_FINGER="084C6C6F39159EDB67969AA87DE089671804772E"
369GPP_ARM_PACKAGE="g++-arm-linux-gnueabihf"
thomasandersondfefc6c02017-05-04 01:29:11370case $distro_codename in
kjellander95504ae2017-03-30 12:30:31371 jessie)
thomasanderson4e3d30fe2016-12-07 18:58:34372 eval $(apt-config shell APT_SOURCESDIR 'Dir::Etc::sourceparts/d')
373 CROSSTOOLS_LIST="${APT_SOURCESDIR}/crosstools.list"
374 arm_list="libc6-dev:armhf
375 linux-libc-dev:armhf"
376 if test "$do_inst_arm" = "1"; then
377 if $(dpkg-query -W ${GPP_ARM_PACKAGE} &>/dev/null); then
378 arm_list+=" ${GPP_ARM_PACKAGE}"
379 else
380 echo "The Debian Cross-toolchains repository is necessary to"
381 echo "cross-compile Chromium for arm."
382 echo -n "Do you want me to add it for you (y/N) "
383 if yes_no 1; then
384 gpg --keyserver pgp.mit.edu --recv-keys ${EM_ARCHIVE_KEY_FINGER}
385 gpg -a --export ${EM_ARCHIVE_KEY_FINGER} | sudo apt-key add -
386 if ! grep "^${EM_REPO}" "${CROSSTOOLS_LIST}" &>/dev/null; then
387 echo "${EM_SOURCE}" | sudo tee -a "${CROSSTOOLS_LIST}" >/dev/null
388 fi
389 arm_list+=" ${GPP_ARM_PACKAGE}"
390 fi
391 fi
392 fi
393 ;;
thomasandersondfefc6c02017-05-04 01:29:11394 # All necessary ARM packages are available on the default repos on
395 # Debian 9 and later.
kjellander95504ae2017-03-30 12:30:31396 *)
Tom Anderson81e7f1792017-11-11 03:56:33397 arm_list="libc6-dev-armhf-cross
thomasanderson4e3d30fe2016-12-07 18:58:34398 linux-libc-dev-armhf-cross
399 ${GPP_ARM_PACKAGE}"
400 ;;
401esac
[email protected]31a605532011-08-23 22:27:35402
sbcb5d4ded2015-04-01 17:49:03403# Work around for dependency issue Ubuntu/Trusty: http://crbug.com/435056
thomasandersondfefc6c02017-05-04 01:29:11404case $distro_codename in
friedmanbf8b90a2016-04-21 01:15:48405 trusty)
406 arm_list+=" g++-4.8-multilib-arm-linux-gnueabihf
407 gcc-4.8-multilib-arm-linux-gnueabihf"
408 ;;
marcin38933dd2017-10-30 00:05:52409 xenial|zesty|artful)
krasineef3d4b2016-04-22 00:52:18410 arm_list+=" g++-5-multilib-arm-linux-gnueabihf
411 gcc-5-multilib-arm-linux-gnueabihf
412 gcc-arm-linux-gnueabihf"
413 ;;
friedmanbf8b90a2016-04-21 01:15:48414esac
sbcb5d4ded2015-04-01 17:49:03415
[email protected]713eac62014-06-02 23:10:03416# Packages to build NaCl, its toolchains, and its ports.
Brad Nelson5e59c2c2014-09-06 06:18:45417naclports_list="ant autoconf bison cmake gawk intltool xutils-dev xsltproc"
thomasanderson20032a5c2017-03-02 00:28:20418nacl_list="\
419 g++-mingw-w64-i686
420 lib32z1-dev
421 libasound2:i386
422 libcap2:i386
423 libelf-dev:i386
Tim Brown357bdbf2017-09-29 19:11:29424 libdconf1:i386
thomasanderson20032a5c2017-03-02 00:28:20425 libfontconfig1:i386
426 libgconf-2-4:i386
427 libglib2.0-0:i386
428 libgpm2:i386
429 libgtk2.0-0:i386
430 libgtk-3-0:i386
431 libncurses5:i386
432 lib32ncurses5-dev
433 libnss3:i386
434 libpango1.0-0:i386
thomasandersondfefc6c02017-05-04 01:29:11435 libssl-dev:i386
thomasanderson20032a5c2017-03-02 00:28:20436 libtinfo-dev
437 libtinfo-dev:i386
438 libtool
439 libxcomposite1:i386
440 libxcursor1:i386
441 libxdamage1:i386
442 libxi6:i386
443 libxrandr2:i386
444 libxss1:i386
445 libxtst6:i386
446 texinfo
447 xvfb
448 ${naclports_list}
449"
[email protected]419a9a62014-06-19 18:26:18450
Tom Anderson0524b2b72017-12-11 20:39:18451if package_exists libssl1.1; then
452 nacl_list="${nacl_list} libssl1.1:i386"
453elif package_exists libssl1.0.2; then
thomasandersondfefc6c02017-05-04 01:29:11454 nacl_list="${nacl_list} libssl1.0.2:i386"
Tom Anderson0524b2b72017-12-11 20:39:18455else
456 nacl_list="${nacl_list} libssl1.0.0:i386"
thomasandersondfefc6c02017-05-04 01:29:11457fi
458
torne8a6eb692015-11-05 12:43:08459# Find the proper version of packages that depend on mesa. Only one -lts variant
460# of mesa can be installed and everything that depends on it must match.
461
462# Query for the name and status of all mesa LTS variants, filter for only
463# installed packages, extract just the name, and eliminate duplicates (there can
464# be more than one with the same name in the case of multiarch). Expand into an
465# array.
466mesa_packages=($(dpkg-query -Wf'${package} ${status}\n' \
torne12cd9f6c2016-02-24 18:52:23467 libgl1-mesa-glx-lts-\* 2>/dev/null | \
torne8a6eb692015-11-05 12:43:08468 grep " ok installed" | cut -d " " -f 1 | sort -u))
469if [ "${#mesa_packages[@]}" -eq 0 ]; then
470 mesa_variant=""
471elif [ "${#mesa_packages[@]}" -eq 1 ]; then
472 # Strip the base package name and leave just "-lts-whatever"
473 mesa_variant="${mesa_packages[0]#libgl1-mesa-glx}"
474else
475 echo "ERROR: unable to determine which libgl1-mesa-glx variant is installed."
476 exit 1
477fi
[email protected]3a4bd5d2014-06-25 23:55:04478dev_list="${dev_list} libgbm-dev${mesa_variant}
vabrf1e8b17f2015-03-17 10:56:37479 libgles2-mesa-dev${mesa_variant} libgl1-mesa-dev${mesa_variant}
480 mesa-common-dev${mesa_variant}"
[email protected]419a9a62014-06-19 18:26:18481nacl_list="${nacl_list} libgl1-mesa-glx${mesa_variant}:i386"
[email protected]565416362014-01-16 21:26:47482
[email protected]757c2962012-03-15 19:05:18483# Some package names have changed over time
Tom Anderson0524b2b72017-12-11 20:39:18484if package_exists libpng16-16; then
marcin73929a72017-01-04 22:04:58485 lib_list="${lib_list} libpng16-16"
Tom Anderson0524b2b72017-12-11 20:39:18486else
487 lib_list="${lib_list} libpng12-0"
marcin73929a72017-01-04 22:04:58488fi
[email protected]4fc00712013-05-29 23:11:20489if package_exists libnspr4-dbg; then
[email protected]1a0f64a2011-05-20 17:53:55490 dbg_list="${dbg_list} libnspr4-dbg libnss3-dbg"
491 lib_list="${lib_list} libnspr4 libnss3"
[email protected]757c2962012-03-15 19:05:18492else
493 dbg_list="${dbg_list} libnspr4-0d-dbg libnss3-1d-dbg"
494 lib_list="${lib_list} libnspr4-0d libnss3-1d"
495fi
[email protected]4fc00712013-05-29 23:11:20496if package_exists libjpeg-dev; then
[email protected]9e895962013-05-21 08:26:42497 dev_list="${dev_list} libjpeg-dev"
[email protected]b11411c2012-03-21 22:09:41498else
[email protected]9e895962013-05-21 08:26:42499 dev_list="${dev_list} libjpeg62-dev"
[email protected]b11411c2012-03-21 22:09:41500fi
[email protected]4fc00712013-05-29 23:11:20501if package_exists libudev1; then
[email protected]9e895962013-05-21 08:26:42502 dev_list="${dev_list} libudev1"
[email protected]ab9e69082014-06-05 15:28:52503 nacl_list="${nacl_list} libudev1:i386"
[email protected]9e895962013-05-21 08:26:42504else
505 dev_list="${dev_list} libudev0"
[email protected]ab9e69082014-06-05 15:28:52506 nacl_list="${nacl_list} libudev0:i386"
[email protected]9e895962013-05-21 08:26:42507fi
[email protected]3ea42912013-09-06 06:23:57508if package_exists libbrlapi0.6; then
509 dev_list="${dev_list} libbrlapi0.6"
510else
511 dev_list="${dev_list} libbrlapi0.5"
512fi
Tom Anderson0524b2b72017-12-11 20:39:18513if package_exists apache2.2-bin; then
halton.huo3e728c42016-01-20 05:12:23514 dev_list="${dev_list} apache2.2-bin"
Tom Anderson0524b2b72017-12-11 20:39:18515else
516 dev_list="${dev_list} apache2-bin"
halton.huo3e728c42016-01-20 05:12:23517fi
vadimsh278ff0662016-05-19 00:06:28518if package_exists xfonts-mathml; then
halton.huo3e728c42016-01-20 05:12:23519 dev_list="${dev_list} xfonts-mathml"
520fi
marcin38933dd2017-10-30 00:05:52521if package_exists php7.1-cgi; then
522 dev_list="${dev_list} php7.1-cgi libapache2-mod-php7.1"
523elif package_exists php7.0-cgi; then
vadimsh278ff0662016-05-19 00:06:28524 dev_list="${dev_list} php7.0-cgi libapache2-mod-php7.0"
krasineef3d4b2016-04-22 00:52:18525else
vadimsh278ff0662016-05-19 00:06:28526 dev_list="${dev_list} php5-cgi libapache2-mod-php5"
krasineef3d4b2016-04-22 00:52:18527fi
thomasandersonb4a2bca2016-12-08 06:46:05528# ttf-mscorefonts-installer is in the Debian contrib repo, which has
529# dependencies on non-free software. Install it only if the user has already
530# enabled contrib.
531if package_exists ttf-mscorefonts-installer; then
532 dev_list="${dev_list} ttf-mscorefonts-installer"
533elif package_exists msttcorefonts; then
534 dev_list="${dev_list} msttcorefonts"
535fi
[email protected]757c2962012-03-15 19:05:18536
[email protected]dc099772013-09-30 22:06:58537# Some packages are only needed if the distribution actually supports
[email protected]757c2962012-03-15 19:05:18538# installing them.
[email protected]4fc00712013-05-29 23:11:20539if package_exists appmenu-gtk; then
[email protected]757c2962012-03-15 19:05:18540 lib_list="$lib_list appmenu-gtk"
[email protected]4da8fad2011-04-11 18:42:42541fi
542
Tom Anderson81e7f1792017-11-11 03:56:33543# Cross-toolchain strip is needed for building the sysroots.
544if package_exists binutils-arm-linux-gnueabihf; then
545 dev_list="${dev_list} binutils-arm-linux-gnueabihf"
546fi
547if package_exists binutils-aarch64-linux-gnu; then
548 dev_list="${dev_list} binutils-aarch64-linux-gnu"
549fi
550if package_exists binutils-mipsel-linux-gnu; then
551 dev_list="${dev_list} binutils-mipsel-linux-gnu"
552fi
553if package_exists binutils-mips64el-linux-gnuabi64; then
554 dev_list="${dev_list} binutils-mips64el-linux-gnuabi64"
555fi
556
johnme49bb458a2014-11-27 15:45:31557# When cross building for arm/Android on 64-bit systems the host binaries
558# that are part of v8 need to be compiled with -m32 which means
559# that basic multilib support is needed.
ki.stfu0a79d6992015-09-17 07:27:12560if file -L /sbin/init | grep -q 'ELF 64-bit'; then
johnme49bb458a2014-11-27 15:45:31561 # gcc-multilib conflicts with the arm cross compiler (at least in trusty) but
562 # g++-X.Y-multilib gives us the 32-bit support that we need. Find out the
563 # appropriate value of X and Y by seeing what version the current
564 # distribution's g++-multilib package depends on.
565 multilib_package=$(apt-cache depends g++-multilib --important | \
566 grep -E --color=never --only-matching '\bg\+\+-[0-9.]+-multilib\b')
567 lib32_list="$lib32_list $multilib_package"
568fi
569
[email protected]ba48c4ca2013-10-25 16:11:46570if test "$do_inst_syms" = "" && test 0 -eq ${do_quick_check-0}
[email protected]1eae2bfb2010-01-26 18:17:53571then
572 echo "This script installs all tools and libraries needed to build Chromium."
573 echo ""
574 echo "For most of the libraries, it can also install debugging symbols, which"
575 echo "will allow you to debug code in the system libraries. Most developers"
576 echo "won't need these symbols."
577 echo -n "Do you want me to install them for you (y/N) "
578 if yes_no 1; then
579 do_inst_syms=1
580 fi
581fi
582if test "$do_inst_syms" = "1"; then
[email protected]ba48c4ca2013-10-25 16:11:46583 echo "Including debugging symbols."
[email protected]8ada8c52009-03-10 21:53:08584else
[email protected]ba48c4ca2013-10-25 16:11:46585 echo "Skipping debugging symbols."
[email protected]8ada8c52009-03-10 21:53:08586 dbg_list=
587fi
588
johnme49bb458a2014-11-27 15:45:31589if test "$do_inst_lib32" = "1" ; then
590 echo "Including 32-bit libraries for ARM/Android."
591else
592 echo "Skipping 32-bit libraries for ARM/Android."
593 lib32_list=
[email protected]9f28a9cf2012-12-17 23:31:40594fi
595
[email protected]ba48c4ca2013-10-25 16:11:46596if test "$do_inst_arm" = "1" ; then
[email protected]ba48c4ca2013-10-25 16:11:46597 echo "Including ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26598else
[email protected]ba48c4ca2013-10-25 16:11:46599 echo "Skipping ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26600 arm_list=
601fi
602
[email protected]565416362014-01-16 21:26:47603if test "$do_inst_nacl" = "1"; then
[email protected]713eac62014-06-02 23:10:03604 echo "Including NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47605else
[email protected]713eac62014-06-02 23:10:03606 echo "Skipping NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47607 nacl_list=
608fi
609
johnme4bd10302015-01-06 11:25:52610# The `sort -r -s -t: -k2` sorts all the :i386 packages to the front, to avoid
611# confusing dpkg-query (crbug.com/446172).
[email protected]565416362014-01-16 21:26:47612packages="$(
johnme49bb458a2014-11-27 15:45:31613 echo "${dev_list} ${lib_list} ${dbg_list} ${lib32_list} ${arm_list}"\
johnme4bd10302015-01-06 11:25:52614 "${nacl_list}" | tr " " "\n" | sort -u | sort -r -s -t: -k2 | tr "\n" " "
[email protected]565416362014-01-16 21:26:47615)"
[email protected]ba48c4ca2013-10-25 16:11:46616
617if [ 1 -eq "${do_quick_check-0}" ] ; then
thomasanderson73b3a4412016-11-18 23:16:07618 if ! missing_packages="$(dpkg-query -W -f ' ' ${packages} 2>&1)"; then
619 # Distinguish between packages that actually aren't available to the
620 # system (i.e. not in any repo) and packages that just aren't known to
621 # dpkg (i.e. managed by apt).
622 missing_packages="$(echo "${missing_packages}" | awk '{print $NF}')"
623 not_installed=""
624 unknown=""
625 for p in ${missing_packages}; do
626 if apt-cache show ${p} > /dev/null 2>&1; then
627 not_installed="${p}\n${not_installed}"
628 else
629 unknown="${p}\n${unknown}"
[email protected]ba48c4ca2013-10-25 16:11:46630 fi
thomasanderson73b3a4412016-11-18 23:16:07631 done
632 if [ -n "${not_installed}" ]; then
[email protected]ba48c4ca2013-10-25 16:11:46633 echo "WARNING: The following packages are not installed:"
thomasanderson73b3a4412016-11-18 23:16:07634 echo -e "${not_installed}" | sed -e "s/^/ /"
635 fi
636 if [ -n "${unknown}" ]; then
637 echo "WARNING: The following packages are unknown to your system"
638 echo "(maybe missing a repo or need to 'sudo apt-get update'):"
639 echo -e "${unknown}" | sed -e "s/^/ /"
[email protected]ba48c4ca2013-10-25 16:11:46640 fi
641 exit 1
642 fi
643 exit 0
644fi
645
johnme49bb458a2014-11-27 15:45:31646if test "$do_inst_lib32" = "1" || test "$do_inst_nacl" = "1"; then
thomasanderson05c40292017-03-28 19:28:45647 sudo dpkg --add-architecture i386
johnme49bb458a2014-11-27 15:45:31648fi
sbc42564092015-04-01 01:01:28649sudo apt-get update
[email protected]e041ed12009-03-10 16:43:01650
651# We initially run "apt-get" with the --reinstall option and parse its output.
652# This way, we can find all the packages that need to be newly installed
653# without accidentally promoting any packages from "auto" to "manual".
654# We then re-run "apt-get" with just the list of missing packages.
655echo "Finding missing packages..."
[email protected]757c2962012-03-15 19:05:18656# Intentionally leaving $packages unquoted so it's more readable.
[email protected]b6e064522009-08-10 18:47:51657echo "Packages required: " $packages
658echo
[email protected]79a9d2962009-08-06 21:10:58659new_list_cmd="sudo apt-get install --reinstall $(echo $packages)"
[email protected]c3d8b152013-05-10 10:10:03660if new_list="$(yes n | LANGUAGE=en LANG=C $new_list_cmd)"; then
[email protected]b6e064522009-08-10 18:47:51661 # We probably never hit this following line.
thakis3e861de2016-06-14 14:24:01662 echo "No missing packages, and the packages are up to date."
[email protected]b62f11e72010-05-03 17:20:45663elif [ $? -eq 1 ]; then
[email protected]79a9d2962009-08-06 21:10:58664 # We expect apt-get to have exit status of 1.
[email protected]757c2962012-03-15 19:05:18665 # This indicates that we cancelled the install with "yes n|".
[email protected]b6e064522009-08-10 18:47:51666 new_list=$(echo "$new_list" |
[email protected]79a9d2962009-08-06 21:10:58667 sed -e '1,/The following NEW packages will be installed:/d;s/^ //;t;d')
[email protected]b6e064522009-08-10 18:47:51668 new_list=$(echo "$new_list" | sed 's/ *$//')
669 if [ -z "$new_list" ] ; then
thakis3e861de2016-06-14 14:24:01670 echo "No missing packages, and the packages are up to date."
[email protected]b6e064522009-08-10 18:47:51671 else
672 echo "Installing missing packages: $new_list."
[email protected]e2544ed42012-04-23 04:48:31673 sudo apt-get install ${do_quietly-} ${new_list}
[email protected]b6e064522009-08-10 18:47:51674 fi
675 echo
[email protected]79a9d2962009-08-06 21:10:58676else
677 # An apt-get exit status of 100 indicates that a real error has occurred.
[email protected]e041ed12009-03-10 16:43:01678
[email protected]79a9d2962009-08-06 21:10:58679 # I am intentionally leaving out the '"'s around new_list_cmd,
680 # as this makes it easier to cut and paste the output
[email protected]79a9d2962009-08-06 21:10:58681 echo "The following command failed: " ${new_list_cmd}
682 echo
683 echo "It produces the following output:"
684 yes n | $new_list_cmd || true
685 echo
686 echo "You will have to install the above packages yourself."
687 echo
688 exit 100
689fi
[email protected]e041ed12009-03-10 16:43:01690
[email protected]d96cc3472013-09-19 00:53:30691# Install the Chrome OS default fonts. This must go after running
692# apt-get, since install-chromeos-fonts depends on curl.
693if test "$do_inst_chromeos_fonts" != "0"; then
694 echo
695 echo "Installing Chrome OS fonts."
696 dir=`echo $0 | sed -r -e 's/\/[^/]+$//'`
697 if ! sudo $dir/linux/install-chromeos-fonts.py; then
698 echo "ERROR: The installation of the Chrome OS default fonts failed."
699 if [ `stat -f -c %T $dir` == "nfs" ]; then
700 echo "The reason is that your repo is installed on a remote file system."
701 else
702 echo "This is expected if your repo is installed on a remote file system."
703 fi
704 echo "It is recommended to install your repo on a local file system."
705 echo "You can skip the installation of the Chrome OS default founts with"
706 echo "the command line option: --no-chromeos-fonts."
707 exit 1
708 fi
709else
710 echo "Skipping installation of Chrome OS fonts."
711fi
712
thomasanderson5ef5c3d2016-12-08 01:59:19713echo "Installing locales."
714CHROMIUM_LOCALES="da_DK.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 zh_TW.UTF-8"
715LOCALE_GEN=/etc/locale.gen
716if [ -e ${LOCALE_GEN} ]; then
717 OLD_LOCALE_GEN="$(cat /etc/locale.gen)"
718 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
719 sudo sed -i "s/^# ${CHROMIUM_LOCALE}/${CHROMIUM_LOCALE}/" ${LOCALE_GEN}
720 done
721 # Regenerating locales can take a while, so only do it if we need to.
722 if (echo "${OLD_LOCALE_GEN}" | cmp -s ${LOCALE_GEN}); then
723 echo "Locales already up-to-date."
724 else
725 sudo locale-gen
726 fi
727else
728 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
729 sudo locale-gen ${CHROMIUM_LOCALE}
730 done
731fi