blob: f2ab2668a5ffa65d8547d4e28151594c9edcf566 [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() {
thomasandersonb4a2bca2016-12-08 06:46:0571 [ ! -z "`apt-cache search --names-only "$1"`" ]
[email protected]4fc00712013-05-29 23:11:2072}
73
[email protected]fbeddf22014-01-17 23:59:0174# These default to on because (some) bots need them and it keeps things
75# simple for the bot setup if all bots just run the script in its default
76# mode. Developers who don't want stuff they don't need installed on their
77# own workstations can pass --no-arm --no-nacl when running the script.
78do_inst_arm=1
79do_inst_nacl=1
80
[email protected]1eae2bfb2010-01-26 18:17:5381while test "$1" != ""
82do
83 case "$1" in
[email protected]ce774642011-09-12 23:21:3984 --syms) do_inst_syms=1;;
85 --no-syms) do_inst_syms=0;;
[email protected]ce774642011-09-12 23:21:3986 --lib32) do_inst_lib32=1;;
[email protected]f2826b6a2012-11-15 01:06:2687 --arm) do_inst_arm=1;;
88 --no-arm) do_inst_arm=0;;
[email protected]bd29cdd2013-02-22 03:49:2089 --chromeos-fonts) do_inst_chromeos_fonts=1;;
90 --no-chromeos-fonts) do_inst_chromeos_fonts=0;;
[email protected]565416362014-01-16 21:26:4791 --nacl) do_inst_nacl=1;;
92 --no-nacl) do_inst_nacl=0;;
[email protected]e2544ed42012-04-23 04:48:3193 --no-prompt) do_default=1
94 do_quietly="-qq --assume-yes"
95 ;;
[email protected]ba48c4ca2013-10-25 16:11:4696 --quick-check) do_quick_check=1;;
[email protected]fe63a022013-01-15 22:11:4797 --unsupported) do_unsupported=1;;
[email protected]1eae2bfb2010-01-26 18:17:5398 *) usage;;
99 esac
100 shift
101done
102
johnme49bb458a2014-11-27 15:45:31103if test "$do_inst_arm" = "1"; then
104 do_inst_lib32=1
105fi
106
[email protected]0febc9b2014-05-22 20:07:19107# Check for lsb_release command in $PATH
108if ! which lsb_release > /dev/null; then
109 echo "ERROR: lsb_release not found in \$PATH" >&2
110 exit 1;
111fi
[email protected]f2826b6a2012-11-15 01:06:26112
thomasandersondfefc6c02017-05-04 01:29:11113distro_codename=$(lsb_release --codename --short)
114distro_id=$(lsb_release --id --short)
marcin3a0793a2017-06-30 03:51:28115supported_codenames="(trusty|xenial|yakkety|zesty)"
thomasandersondfefc6c02017-05-04 01:29:11116supported_ids="(Debian)"
[email protected]ba48c4ca2013-10-25 16:11:46117if [ 0 -eq "${do_unsupported-0}" ] && [ 0 -eq "${do_quick_check-0}" ] ; then
thomasandersondfefc6c02017-05-04 01:29:11118 if [[ ! $distro_codename =~ $supported_codenames &&
119 ! $distro_id =~ $supported_ids ]]; then
thomasanderson05c40292017-03-28 19:28:45120 echo -e "ERROR: The only supported distros are\n" \
121 "\tUbuntu 14.04 (trusty)\n" \
122 "\tUbuntu 16.04 (xenial)\n" \
123 "\tUbuntu 16.10 (yakkety)\n" \
marcin3a0793a2017-06-30 03:51:28124 "\tUbuntu 17.04 (zesty)\n" \
thomasandersondfefc6c02017-05-04 01:29:11125 "\tDebian 8 (jessie) or later" >&2
anthonyvd2ae919e52016-11-21 19:47:12126 exit 1
[email protected]fe63a022013-01-15 22:11:47127 fi
[email protected]cf1df402008-10-31 21:45:30128
[email protected]fe63a022013-01-15 22:11:47129 if ! uname -m | egrep -q "i686|x86_64"; then
anthonyvd2ae919e52016-11-21 19:47:12130 echo "Only x86 architectures are currently supported" >&2
[email protected]fe63a022013-01-15 22:11:47131 exit
132 fi
[email protected]e041ed12009-03-10 16:43:01133fi
134
[email protected]ba48c4ca2013-10-25 16:11:46135if [ "x$(id -u)" != x0 ] && [ 0 -eq "${do_quick_check-0}" ]; then
[email protected]e041ed12009-03-10 16:43:01136 echo "Running as non-root user."
137 echo "You might have to enter your password one or more times for 'sudo'."
[email protected]8ada8c52009-03-10 21:53:08138 echo
[email protected]e041ed12009-03-10 16:43:01139fi
140
[email protected]fdc6bf52010-06-07 22:01:57141# Packages needed for chromeos only
dnj6a8491d12015-05-26 21:08:12142chromeos_dev_list="libbluetooth-dev libxkbcommon-dev realpath"
[email protected]fdc6bf52010-06-07 22:01:57143
[email protected]b61f6882013-11-14 20:41:41144# Packages needed for development
thomasanderson20032a5c2017-03-02 00:28:20145dev_list="\
146 bison
147 cdbs
148 curl
149 dpkg-dev
150 elfutils
151 devscripts
152 fakeroot
153 flex
154 fonts-ipafont
155 fonts-thai-tlwg
156 g++
157 git-core
158 git-svn
159 gperf
160 libasound2-dev
161 libbrlapi-dev
162 libav-tools
163 libbz2-dev
164 libcairo2-dev
165 libcap-dev
166 libcups2-dev
167 libcurl4-gnutls-dev
Tim Brown357bdbf2017-09-29 19:11:29168 libdconf-dev
thomasanderson20032a5c2017-03-02 00:28:20169 libdrm-dev
170 libelf-dev
171 libffi-dev
172 libgconf2-dev
173 libglib2.0-dev
174 libglu1-mesa-dev
175 libgnome-keyring-dev
176 libgtk2.0-dev
177 libgtk-3-dev
178 libkrb5-dev
179 libnspr4-dev
180 libnss3-dev
181 libpam0g-dev
182 libpci-dev
183 libpulse-dev
184 libsctp-dev
185 libspeechd-dev
186 libsqlite3-dev
187 libssl-dev
188 libudev-dev
189 libwww-perl
190 libxslt1-dev
191 libxss-dev
192 libxt-dev
193 libxtst-dev
Andrew Grievee41aeae2017-08-21 20:53:21194 locales
thomasanderson20032a5c2017-03-02 00:28:20195 openbox
196 patch
197 perl
198 pkg-config
199 python
200 python-cherrypy3
201 python-crypto
202 python-dev
203 python-numpy
204 python-opencv
205 python-openssl
206 python-psutil
207 python-yaml
208 rpm
209 ruby
210 subversion
211 ttf-dejavu-core
212 wdiff
Tom Andersond79de41d2017-08-08 00:23:23213 x11-utils
thomasanderson20032a5c2017-03-02 00:28:20214 xcompmgr
215 zip
216 $chromeos_dev_list
217"
[email protected]fdc6bf52010-06-07 22:01:57218
[email protected]f16aabf2012-08-15 21:00:14219# 64-bit systems need a minimum set of 32-bit compat packages for the pre-built
[email protected]f8ceadb2014-08-18 12:30:23220# NaCl binaries.
ki.stfu0a79d6992015-09-17 07:27:12221if file -L /sbin/init | grep -q 'ELF 64-bit'; then
[email protected]d93d68b12012-10-15 06:39:53222 dev_list="${dev_list} libc6-i386 lib32gcc1 lib32stdc++6"
[email protected]f16aabf2012-08-15 21:00:14223fi
224
[email protected]fdc6bf52010-06-07 22:01:57225# Run-time libraries required by chromeos only
[email protected]ba48c4ca2013-10-25 16:11:46226chromeos_lib_list="libpulse0 libbz2-1.0"
[email protected]e041ed12009-03-10 16:43:01227
228# Full list of required run-time libraries
thomasanderson20032a5c2017-03-02 00:28:20229lib_list="\
230 libatk1.0-0
231 libc6
232 libasound2
233 libcairo2
234 libcap2
235 libcups2
Tim Brown357bdbf2017-09-29 19:11:29236 libdconf1
thomasanderson20032a5c2017-03-02 00:28:20237 libexpat1
238 libffi6
239 libfontconfig1
240 libfreetype6
241 libglib2.0-0
242 libgnome-keyring0
243 libgtk2.0-0
244 libgtk-3-0
245 libpam0g
246 libpango1.0-0
247 libpci3
248 libpcre3
249 libpixman-1-0
250 libspeechd2
251 libstdc++6
252 libsqlite3-0
253 libx11-6
254 libx11-xcb1
255 libxau6
256 libxcb1
257 libxcomposite1
258 libxcursor1
259 libxdamage1
260 libxdmcp6
261 libxext6
262 libxfixes3
263 libxi6
264 libxinerama1
265 libxrandr2
266 libxrender1
267 libxtst6
268 zlib1g
269 $chromeos_lib_list
270"
[email protected]e041ed12009-03-10 16:43:01271
272# Debugging symbols for all of the run-time libraries
thomasanderson20032a5c2017-03-02 00:28:20273dbg_list="\
274 libatk1.0-dbg
275 libc6-dbg
276 libcairo2-dbg
277 libffi6-dbg
278 libfontconfig1-dbg
279 libglib2.0-0-dbg
280 libgtk2.0-0-dbg
281 libgtk-3-0-dbg
282 libpango1.0-0-dbg
283 libpcre3-dbg
284 libpixman-1-0-dbg
285 libsqlite3-0-dbg
286 libx11-6-dbg
287 libx11-xcb1-dbg
288 libxau6-dbg
289 libxcb1-dbg
290 libxcomposite1-dbg
291 libxcursor1-dbg
292 libxdamage1-dbg
293 libxdmcp6-dbg
294 libxext6-dbg
thomasanderson20032a5c2017-03-02 00:28:20295 libxi6-dbg
296 libxinerama1-dbg
297 libxrandr2-dbg
298 libxrender1-dbg
299 libxtst6-dbg
300 zlib1g-dbg
301"
lfgad917d12015-03-17 23:28:00302
thomasandersondfefc6c02017-05-04 01:29:11303if [[ ! $distro_codename =~ "yakkety" ]]; then
thomasanderson05c40292017-03-28 19:28:45304 dbg_list="${dbg_list} libxfixes3-dbg"
305fi
306
lfgad917d12015-03-17 23:28:00307# Find the proper version of libstdc++6-4.x-dbg.
thomasandersondfefc6c02017-05-04 01:29:11308if [ "x$distro_codename" = "xtrusty" ]; then
lfgad917d12015-03-17 23:28:00309 dbg_list="${dbg_list} libstdc++6-4.8-dbg"
310else
311 dbg_list="${dbg_list} libstdc++6-4.9-dbg"
312fi
[email protected]e041ed12009-03-10 16:43:01313
johnme49bb458a2014-11-27 15:45:31314# 32-bit libraries needed e.g. to compile V8 snapshot for Android or armhf
Tanin Na Nakorn6cbe32e52017-05-30 19:37:04315lib32_list="linux-libc-dev:i386 libpci3:i386"
johnme49bb458a2014-11-27 15:45:31316
[email protected]3f85dac32013-10-29 02:38:46317# arm cross toolchain packages needed to build chrome on armhf
thomasanderson4e3d30fe2016-12-07 18:58:34318EM_REPO="deb http://emdebian.org/tools/debian/ jessie main"
319EM_SOURCE=$(cat <<EOF
320# Repo added by Chromium $0
321${EM_REPO}
322# deb-src http://emdebian.org/tools/debian/ jessie main
323EOF
324)
325EM_ARCHIVE_KEY_FINGER="084C6C6F39159EDB67969AA87DE089671804772E"
326GPP_ARM_PACKAGE="g++-arm-linux-gnueabihf"
thomasandersondfefc6c02017-05-04 01:29:11327case $distro_codename in
kjellander95504ae2017-03-30 12:30:31328 jessie)
thomasanderson4e3d30fe2016-12-07 18:58:34329 eval $(apt-config shell APT_SOURCESDIR 'Dir::Etc::sourceparts/d')
330 CROSSTOOLS_LIST="${APT_SOURCESDIR}/crosstools.list"
331 arm_list="libc6-dev:armhf
332 linux-libc-dev:armhf"
333 if test "$do_inst_arm" = "1"; then
334 if $(dpkg-query -W ${GPP_ARM_PACKAGE} &>/dev/null); then
335 arm_list+=" ${GPP_ARM_PACKAGE}"
336 else
337 echo "The Debian Cross-toolchains repository is necessary to"
338 echo "cross-compile Chromium for arm."
339 echo -n "Do you want me to add it for you (y/N) "
340 if yes_no 1; then
341 gpg --keyserver pgp.mit.edu --recv-keys ${EM_ARCHIVE_KEY_FINGER}
342 gpg -a --export ${EM_ARCHIVE_KEY_FINGER} | sudo apt-key add -
343 if ! grep "^${EM_REPO}" "${CROSSTOOLS_LIST}" &>/dev/null; then
344 echo "${EM_SOURCE}" | sudo tee -a "${CROSSTOOLS_LIST}" >/dev/null
345 fi
346 arm_list+=" ${GPP_ARM_PACKAGE}"
347 fi
348 fi
349 fi
350 ;;
thomasandersondfefc6c02017-05-04 01:29:11351 # All necessary ARM packages are available on the default repos on
352 # Debian 9 and later.
kjellander95504ae2017-03-30 12:30:31353 *)
kjellander74c7e4b2017-01-27 13:15:44354 arm_list="binutils-aarch64-linux-gnu
355 libc6-dev-armhf-cross
thomasanderson4e3d30fe2016-12-07 18:58:34356 linux-libc-dev-armhf-cross
357 ${GPP_ARM_PACKAGE}"
358 ;;
359esac
[email protected]31a605532011-08-23 22:27:35360
sbcb5d4ded2015-04-01 17:49:03361# Work around for dependency issue Ubuntu/Trusty: http://crbug.com/435056
thomasandersondfefc6c02017-05-04 01:29:11362case $distro_codename in
friedmanbf8b90a2016-04-21 01:15:48363 trusty)
364 arm_list+=" g++-4.8-multilib-arm-linux-gnueabihf
365 gcc-4.8-multilib-arm-linux-gnueabihf"
366 ;;
marcin3a0793a2017-06-30 03:51:28367 xenial|yakkety|zesty)
krasineef3d4b2016-04-22 00:52:18368 arm_list+=" g++-5-multilib-arm-linux-gnueabihf
369 gcc-5-multilib-arm-linux-gnueabihf
370 gcc-arm-linux-gnueabihf"
371 ;;
friedmanbf8b90a2016-04-21 01:15:48372esac
sbcb5d4ded2015-04-01 17:49:03373
[email protected]713eac62014-06-02 23:10:03374# Packages to build NaCl, its toolchains, and its ports.
Brad Nelson5e59c2c2014-09-06 06:18:45375naclports_list="ant autoconf bison cmake gawk intltool xutils-dev xsltproc"
thomasanderson20032a5c2017-03-02 00:28:20376nacl_list="\
377 g++-mingw-w64-i686
378 lib32z1-dev
379 libasound2:i386
380 libcap2:i386
381 libelf-dev:i386
Tim Brown357bdbf2017-09-29 19:11:29382 libdconf1:i386
thomasanderson20032a5c2017-03-02 00:28:20383 libfontconfig1:i386
384 libgconf-2-4:i386
385 libglib2.0-0:i386
386 libgpm2:i386
387 libgtk2.0-0:i386
388 libgtk-3-0:i386
389 libncurses5:i386
390 lib32ncurses5-dev
391 libnss3:i386
392 libpango1.0-0:i386
thomasandersondfefc6c02017-05-04 01:29:11393 libssl-dev:i386
thomasanderson20032a5c2017-03-02 00:28:20394 libtinfo-dev
395 libtinfo-dev:i386
396 libtool
397 libxcomposite1:i386
398 libxcursor1:i386
399 libxdamage1:i386
400 libxi6:i386
401 libxrandr2:i386
402 libxss1:i386
403 libxtst6:i386
404 texinfo
405 xvfb
406 ${naclports_list}
407"
[email protected]419a9a62014-06-19 18:26:18408
thomasandersondfefc6c02017-05-04 01:29:11409if package_exists libssl1.0.0; then
410 nacl_list="${nacl_list} libssl1.0.0:i386"
411else
412 nacl_list="${nacl_list} libssl1.0.2:i386"
413fi
414
torne8a6eb692015-11-05 12:43:08415# Find the proper version of packages that depend on mesa. Only one -lts variant
416# of mesa can be installed and everything that depends on it must match.
417
418# Query for the name and status of all mesa LTS variants, filter for only
419# installed packages, extract just the name, and eliminate duplicates (there can
420# be more than one with the same name in the case of multiarch). Expand into an
421# array.
422mesa_packages=($(dpkg-query -Wf'${package} ${status}\n' \
torne12cd9f6c2016-02-24 18:52:23423 libgl1-mesa-glx-lts-\* 2>/dev/null | \
torne8a6eb692015-11-05 12:43:08424 grep " ok installed" | cut -d " " -f 1 | sort -u))
425if [ "${#mesa_packages[@]}" -eq 0 ]; then
426 mesa_variant=""
427elif [ "${#mesa_packages[@]}" -eq 1 ]; then
428 # Strip the base package name and leave just "-lts-whatever"
429 mesa_variant="${mesa_packages[0]#libgl1-mesa-glx}"
430else
431 echo "ERROR: unable to determine which libgl1-mesa-glx variant is installed."
432 exit 1
433fi
[email protected]3a4bd5d2014-06-25 23:55:04434dev_list="${dev_list} libgbm-dev${mesa_variant}
vabrf1e8b17f2015-03-17 10:56:37435 libgles2-mesa-dev${mesa_variant} libgl1-mesa-dev${mesa_variant}
436 mesa-common-dev${mesa_variant}"
[email protected]419a9a62014-06-19 18:26:18437nacl_list="${nacl_list} libgl1-mesa-glx${mesa_variant}:i386"
[email protected]565416362014-01-16 21:26:47438
[email protected]757c2962012-03-15 19:05:18439# Some package names have changed over time
marcin73929a72017-01-04 22:04:58440if package_exists libpng12-0; then
441 lib_list="${lib_list} libpng12-0"
442else
443 lib_list="${lib_list} libpng16-16"
444fi
[email protected]4fc00712013-05-29 23:11:20445if package_exists libnspr4-dbg; then
[email protected]1a0f64a2011-05-20 17:53:55446 dbg_list="${dbg_list} libnspr4-dbg libnss3-dbg"
447 lib_list="${lib_list} libnspr4 libnss3"
[email protected]757c2962012-03-15 19:05:18448else
449 dbg_list="${dbg_list} libnspr4-0d-dbg libnss3-1d-dbg"
450 lib_list="${lib_list} libnspr4-0d libnss3-1d"
451fi
[email protected]4fc00712013-05-29 23:11:20452if package_exists libjpeg-dev; then
[email protected]9e895962013-05-21 08:26:42453 dev_list="${dev_list} libjpeg-dev"
[email protected]b11411c2012-03-21 22:09:41454else
[email protected]9e895962013-05-21 08:26:42455 dev_list="${dev_list} libjpeg62-dev"
[email protected]b11411c2012-03-21 22:09:41456fi
[email protected]4fc00712013-05-29 23:11:20457if package_exists libudev1; then
[email protected]9e895962013-05-21 08:26:42458 dev_list="${dev_list} libudev1"
[email protected]ab9e69082014-06-05 15:28:52459 nacl_list="${nacl_list} libudev1:i386"
[email protected]9e895962013-05-21 08:26:42460else
461 dev_list="${dev_list} libudev0"
[email protected]ab9e69082014-06-05 15:28:52462 nacl_list="${nacl_list} libudev0:i386"
[email protected]9e895962013-05-21 08:26:42463fi
[email protected]3ea42912013-09-06 06:23:57464if package_exists libbrlapi0.6; then
465 dev_list="${dev_list} libbrlapi0.6"
466else
467 dev_list="${dev_list} libbrlapi0.5"
468fi
halton.huo3e728c42016-01-20 05:12:23469if package_exists apache2-bin; then
470 dev_list="${dev_list} apache2-bin"
471else
472 dev_list="${dev_list} apache2.2-bin"
473fi
vadimsh278ff0662016-05-19 00:06:28474if package_exists xfonts-mathml; then
halton.huo3e728c42016-01-20 05:12:23475 dev_list="${dev_list} xfonts-mathml"
476fi
krasineef3d4b2016-04-22 00:52:18477if package_exists fonts-indic; then
vadimsh278ff0662016-05-19 00:06:28478 dev_list="${dev_list} fonts-indic"
krasineef3d4b2016-04-22 00:52:18479else
vadimsh278ff0662016-05-19 00:06:28480 dev_list="${dev_list} ttf-indic-fonts"
krasineef3d4b2016-04-22 00:52:18481fi
482if package_exists php7.0-cgi; then
vadimsh278ff0662016-05-19 00:06:28483 dev_list="${dev_list} php7.0-cgi libapache2-mod-php7.0"
krasineef3d4b2016-04-22 00:52:18484else
vadimsh278ff0662016-05-19 00:06:28485 dev_list="${dev_list} php5-cgi libapache2-mod-php5"
krasineef3d4b2016-04-22 00:52:18486fi
thomasandersonb4a2bca2016-12-08 06:46:05487# ttf-mscorefonts-installer is in the Debian contrib repo, which has
488# dependencies on non-free software. Install it only if the user has already
489# enabled contrib.
490if package_exists ttf-mscorefonts-installer; then
491 dev_list="${dev_list} ttf-mscorefonts-installer"
492elif package_exists msttcorefonts; then
493 dev_list="${dev_list} msttcorefonts"
494fi
[email protected]757c2962012-03-15 19:05:18495
[email protected]dc099772013-09-30 22:06:58496# Some packages are only needed if the distribution actually supports
[email protected]757c2962012-03-15 19:05:18497# installing them.
[email protected]4fc00712013-05-29 23:11:20498if package_exists appmenu-gtk; then
[email protected]757c2962012-03-15 19:05:18499 lib_list="$lib_list appmenu-gtk"
[email protected]4da8fad2011-04-11 18:42:42500fi
501
johnme49bb458a2014-11-27 15:45:31502# When cross building for arm/Android on 64-bit systems the host binaries
503# that are part of v8 need to be compiled with -m32 which means
504# that basic multilib support is needed.
ki.stfu0a79d6992015-09-17 07:27:12505if file -L /sbin/init | grep -q 'ELF 64-bit'; then
johnme49bb458a2014-11-27 15:45:31506 # gcc-multilib conflicts with the arm cross compiler (at least in trusty) but
507 # g++-X.Y-multilib gives us the 32-bit support that we need. Find out the
508 # appropriate value of X and Y by seeing what version the current
509 # distribution's g++-multilib package depends on.
510 multilib_package=$(apt-cache depends g++-multilib --important | \
511 grep -E --color=never --only-matching '\bg\+\+-[0-9.]+-multilib\b')
512 lib32_list="$lib32_list $multilib_package"
513fi
514
[email protected]ba48c4ca2013-10-25 16:11:46515if test "$do_inst_syms" = "" && test 0 -eq ${do_quick_check-0}
[email protected]1eae2bfb2010-01-26 18:17:53516then
517 echo "This script installs all tools and libraries needed to build Chromium."
518 echo ""
519 echo "For most of the libraries, it can also install debugging symbols, which"
520 echo "will allow you to debug code in the system libraries. Most developers"
521 echo "won't need these symbols."
522 echo -n "Do you want me to install them for you (y/N) "
523 if yes_no 1; then
524 do_inst_syms=1
525 fi
526fi
527if test "$do_inst_syms" = "1"; then
[email protected]ba48c4ca2013-10-25 16:11:46528 echo "Including debugging symbols."
thomasandersondfefc6c02017-05-04 01:29:11529 # Many debug packages are not available in Debian stretch,
530 # so exclude the ones that are missing.
531 available_dbg_packages=""
532 for package in ${dbg_list}; do
533 if package_exists ${package}; then
534 available_dbg_packages="${available_dbg_packages} ${package}"
535 fi
536 done
537 dbg_list="${available_dbg_packages}"
[email protected]8ada8c52009-03-10 21:53:08538else
[email protected]ba48c4ca2013-10-25 16:11:46539 echo "Skipping debugging symbols."
[email protected]8ada8c52009-03-10 21:53:08540 dbg_list=
541fi
542
johnme49bb458a2014-11-27 15:45:31543if test "$do_inst_lib32" = "1" ; then
544 echo "Including 32-bit libraries for ARM/Android."
545else
546 echo "Skipping 32-bit libraries for ARM/Android."
547 lib32_list=
[email protected]9f28a9cf2012-12-17 23:31:40548fi
549
[email protected]ba48c4ca2013-10-25 16:11:46550if test "$do_inst_arm" = "1" ; then
[email protected]ba48c4ca2013-10-25 16:11:46551 echo "Including ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26552else
[email protected]ba48c4ca2013-10-25 16:11:46553 echo "Skipping ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26554 arm_list=
555fi
556
[email protected]565416362014-01-16 21:26:47557if test "$do_inst_nacl" = "1"; then
[email protected]713eac62014-06-02 23:10:03558 echo "Including NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47559else
[email protected]713eac62014-06-02 23:10:03560 echo "Skipping NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47561 nacl_list=
562fi
563
johnme4bd10302015-01-06 11:25:52564# The `sort -r -s -t: -k2` sorts all the :i386 packages to the front, to avoid
565# confusing dpkg-query (crbug.com/446172).
[email protected]565416362014-01-16 21:26:47566packages="$(
johnme49bb458a2014-11-27 15:45:31567 echo "${dev_list} ${lib_list} ${dbg_list} ${lib32_list} ${arm_list}"\
johnme4bd10302015-01-06 11:25:52568 "${nacl_list}" | tr " " "\n" | sort -u | sort -r -s -t: -k2 | tr "\n" " "
[email protected]565416362014-01-16 21:26:47569)"
[email protected]ba48c4ca2013-10-25 16:11:46570
571if [ 1 -eq "${do_quick_check-0}" ] ; then
thomasanderson73b3a4412016-11-18 23:16:07572 if ! missing_packages="$(dpkg-query -W -f ' ' ${packages} 2>&1)"; then
573 # Distinguish between packages that actually aren't available to the
574 # system (i.e. not in any repo) and packages that just aren't known to
575 # dpkg (i.e. managed by apt).
576 missing_packages="$(echo "${missing_packages}" | awk '{print $NF}')"
577 not_installed=""
578 unknown=""
579 for p in ${missing_packages}; do
580 if apt-cache show ${p} > /dev/null 2>&1; then
581 not_installed="${p}\n${not_installed}"
582 else
583 unknown="${p}\n${unknown}"
[email protected]ba48c4ca2013-10-25 16:11:46584 fi
thomasanderson73b3a4412016-11-18 23:16:07585 done
586 if [ -n "${not_installed}" ]; then
[email protected]ba48c4ca2013-10-25 16:11:46587 echo "WARNING: The following packages are not installed:"
thomasanderson73b3a4412016-11-18 23:16:07588 echo -e "${not_installed}" | sed -e "s/^/ /"
589 fi
590 if [ -n "${unknown}" ]; then
591 echo "WARNING: The following packages are unknown to your system"
592 echo "(maybe missing a repo or need to 'sudo apt-get update'):"
593 echo -e "${unknown}" | sed -e "s/^/ /"
[email protected]ba48c4ca2013-10-25 16:11:46594 fi
595 exit 1
596 fi
597 exit 0
598fi
599
johnme49bb458a2014-11-27 15:45:31600if test "$do_inst_lib32" = "1" || test "$do_inst_nacl" = "1"; then
thomasanderson05c40292017-03-28 19:28:45601 sudo dpkg --add-architecture i386
johnme49bb458a2014-11-27 15:45:31602fi
sbc42564092015-04-01 01:01:28603sudo apt-get update
[email protected]e041ed12009-03-10 16:43:01604
605# We initially run "apt-get" with the --reinstall option and parse its output.
606# This way, we can find all the packages that need to be newly installed
607# without accidentally promoting any packages from "auto" to "manual".
608# We then re-run "apt-get" with just the list of missing packages.
609echo "Finding missing packages..."
[email protected]757c2962012-03-15 19:05:18610# Intentionally leaving $packages unquoted so it's more readable.
[email protected]b6e064522009-08-10 18:47:51611echo "Packages required: " $packages
612echo
[email protected]79a9d2962009-08-06 21:10:58613new_list_cmd="sudo apt-get install --reinstall $(echo $packages)"
[email protected]c3d8b152013-05-10 10:10:03614if new_list="$(yes n | LANGUAGE=en LANG=C $new_list_cmd)"; then
[email protected]b6e064522009-08-10 18:47:51615 # We probably never hit this following line.
thakis3e861de2016-06-14 14:24:01616 echo "No missing packages, and the packages are up to date."
[email protected]b62f11e72010-05-03 17:20:45617elif [ $? -eq 1 ]; then
[email protected]79a9d2962009-08-06 21:10:58618 # We expect apt-get to have exit status of 1.
[email protected]757c2962012-03-15 19:05:18619 # This indicates that we cancelled the install with "yes n|".
[email protected]b6e064522009-08-10 18:47:51620 new_list=$(echo "$new_list" |
[email protected]79a9d2962009-08-06 21:10:58621 sed -e '1,/The following NEW packages will be installed:/d;s/^ //;t;d')
[email protected]b6e064522009-08-10 18:47:51622 new_list=$(echo "$new_list" | sed 's/ *$//')
623 if [ -z "$new_list" ] ; then
thakis3e861de2016-06-14 14:24:01624 echo "No missing packages, and the packages are up to date."
[email protected]b6e064522009-08-10 18:47:51625 else
626 echo "Installing missing packages: $new_list."
[email protected]e2544ed42012-04-23 04:48:31627 sudo apt-get install ${do_quietly-} ${new_list}
[email protected]b6e064522009-08-10 18:47:51628 fi
629 echo
[email protected]79a9d2962009-08-06 21:10:58630else
631 # An apt-get exit status of 100 indicates that a real error has occurred.
[email protected]e041ed12009-03-10 16:43:01632
[email protected]79a9d2962009-08-06 21:10:58633 # I am intentionally leaving out the '"'s around new_list_cmd,
634 # as this makes it easier to cut and paste the output
[email protected]79a9d2962009-08-06 21:10:58635 echo "The following command failed: " ${new_list_cmd}
636 echo
637 echo "It produces the following output:"
638 yes n | $new_list_cmd || true
639 echo
640 echo "You will have to install the above packages yourself."
641 echo
642 exit 100
643fi
[email protected]e041ed12009-03-10 16:43:01644
[email protected]d96cc3472013-09-19 00:53:30645# Install the Chrome OS default fonts. This must go after running
646# apt-get, since install-chromeos-fonts depends on curl.
647if test "$do_inst_chromeos_fonts" != "0"; then
648 echo
649 echo "Installing Chrome OS fonts."
650 dir=`echo $0 | sed -r -e 's/\/[^/]+$//'`
651 if ! sudo $dir/linux/install-chromeos-fonts.py; then
652 echo "ERROR: The installation of the Chrome OS default fonts failed."
653 if [ `stat -f -c %T $dir` == "nfs" ]; then
654 echo "The reason is that your repo is installed on a remote file system."
655 else
656 echo "This is expected if your repo is installed on a remote file system."
657 fi
658 echo "It is recommended to install your repo on a local file system."
659 echo "You can skip the installation of the Chrome OS default founts with"
660 echo "the command line option: --no-chromeos-fonts."
661 exit 1
662 fi
663else
664 echo "Skipping installation of Chrome OS fonts."
665fi
666
thomasanderson5ef5c3d2016-12-08 01:59:19667echo "Installing locales."
668CHROMIUM_LOCALES="da_DK.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 zh_TW.UTF-8"
669LOCALE_GEN=/etc/locale.gen
670if [ -e ${LOCALE_GEN} ]; then
671 OLD_LOCALE_GEN="$(cat /etc/locale.gen)"
672 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
673 sudo sed -i "s/^# ${CHROMIUM_LOCALE}/${CHROMIUM_LOCALE}/" ${LOCALE_GEN}
674 done
675 # Regenerating locales can take a while, so only do it if we need to.
676 if (echo "${OLD_LOCALE_GEN}" | cmp -s ${LOCALE_GEN}); then
677 echo "Locales already up-to-date."
678 else
679 sudo locale-gen
680 fi
681else
682 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
683 sudo locale-gen ${CHROMIUM_LOCALE}
684 done
685fi