blob: 966a16e4d8a67c24bcdc34d0652e1994c168cb5a [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)
marcin38933dd2017-10-30 00:05:52115supported_codenames="(trusty|xenial|zesty|artful)"
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" \
marcin3a0793a2017-06-30 03:51:28123 "\tUbuntu 17.04 (zesty)\n" \
marcin38933dd2017-10-30 00:05:52124 "\tUbuntu 17.10 (artful)\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
marcin38933dd2017-10-30 00:05:52295 libxfixes3-dbg
thomasanderson20032a5c2017-03-02 00:28:20296 libxi6-dbg
297 libxinerama1-dbg
298 libxrandr2-dbg
299 libxrender1-dbg
300 libxtst6-dbg
301 zlib1g-dbg
302"
lfgad917d12015-03-17 23:28:00303
304# Find the proper version of libstdc++6-4.x-dbg.
thomasandersondfefc6c02017-05-04 01:29:11305if [ "x$distro_codename" = "xtrusty" ]; then
lfgad917d12015-03-17 23:28:00306 dbg_list="${dbg_list} libstdc++6-4.8-dbg"
307else
308 dbg_list="${dbg_list} libstdc++6-4.9-dbg"
309fi
[email protected]e041ed12009-03-10 16:43:01310
johnme49bb458a2014-11-27 15:45:31311# 32-bit libraries needed e.g. to compile V8 snapshot for Android or armhf
Tanin Na Nakorn6cbe32e52017-05-30 19:37:04312lib32_list="linux-libc-dev:i386 libpci3:i386"
johnme49bb458a2014-11-27 15:45:31313
[email protected]3f85dac32013-10-29 02:38:46314# arm cross toolchain packages needed to build chrome on armhf
thomasanderson4e3d30fe2016-12-07 18:58:34315EM_REPO="deb http://emdebian.org/tools/debian/ jessie main"
316EM_SOURCE=$(cat <<EOF
317# Repo added by Chromium $0
318${EM_REPO}
319# deb-src http://emdebian.org/tools/debian/ jessie main
320EOF
321)
322EM_ARCHIVE_KEY_FINGER="084C6C6F39159EDB67969AA87DE089671804772E"
323GPP_ARM_PACKAGE="g++-arm-linux-gnueabihf"
thomasandersondfefc6c02017-05-04 01:29:11324case $distro_codename in
kjellander95504ae2017-03-30 12:30:31325 jessie)
thomasanderson4e3d30fe2016-12-07 18:58:34326 eval $(apt-config shell APT_SOURCESDIR 'Dir::Etc::sourceparts/d')
327 CROSSTOOLS_LIST="${APT_SOURCESDIR}/crosstools.list"
328 arm_list="libc6-dev:armhf
329 linux-libc-dev:armhf"
330 if test "$do_inst_arm" = "1"; then
331 if $(dpkg-query -W ${GPP_ARM_PACKAGE} &>/dev/null); then
332 arm_list+=" ${GPP_ARM_PACKAGE}"
333 else
334 echo "The Debian Cross-toolchains repository is necessary to"
335 echo "cross-compile Chromium for arm."
336 echo -n "Do you want me to add it for you (y/N) "
337 if yes_no 1; then
338 gpg --keyserver pgp.mit.edu --recv-keys ${EM_ARCHIVE_KEY_FINGER}
339 gpg -a --export ${EM_ARCHIVE_KEY_FINGER} | sudo apt-key add -
340 if ! grep "^${EM_REPO}" "${CROSSTOOLS_LIST}" &>/dev/null; then
341 echo "${EM_SOURCE}" | sudo tee -a "${CROSSTOOLS_LIST}" >/dev/null
342 fi
343 arm_list+=" ${GPP_ARM_PACKAGE}"
344 fi
345 fi
346 fi
347 ;;
thomasandersondfefc6c02017-05-04 01:29:11348 # All necessary ARM packages are available on the default repos on
349 # Debian 9 and later.
kjellander95504ae2017-03-30 12:30:31350 *)
kjellander74c7e4b2017-01-27 13:15:44351 arm_list="binutils-aarch64-linux-gnu
352 libc6-dev-armhf-cross
thomasanderson4e3d30fe2016-12-07 18:58:34353 linux-libc-dev-armhf-cross
354 ${GPP_ARM_PACKAGE}"
355 ;;
356esac
[email protected]31a605532011-08-23 22:27:35357
sbcb5d4ded2015-04-01 17:49:03358# Work around for dependency issue Ubuntu/Trusty: http://crbug.com/435056
thomasandersondfefc6c02017-05-04 01:29:11359case $distro_codename in
friedmanbf8b90a2016-04-21 01:15:48360 trusty)
361 arm_list+=" g++-4.8-multilib-arm-linux-gnueabihf
362 gcc-4.8-multilib-arm-linux-gnueabihf"
363 ;;
marcin38933dd2017-10-30 00:05:52364 xenial|zesty|artful)
krasineef3d4b2016-04-22 00:52:18365 arm_list+=" g++-5-multilib-arm-linux-gnueabihf
366 gcc-5-multilib-arm-linux-gnueabihf
367 gcc-arm-linux-gnueabihf"
368 ;;
friedmanbf8b90a2016-04-21 01:15:48369esac
sbcb5d4ded2015-04-01 17:49:03370
[email protected]713eac62014-06-02 23:10:03371# Packages to build NaCl, its toolchains, and its ports.
Brad Nelson5e59c2c2014-09-06 06:18:45372naclports_list="ant autoconf bison cmake gawk intltool xutils-dev xsltproc"
thomasanderson20032a5c2017-03-02 00:28:20373nacl_list="\
374 g++-mingw-w64-i686
375 lib32z1-dev
376 libasound2:i386
377 libcap2:i386
378 libelf-dev:i386
Tim Brown357bdbf2017-09-29 19:11:29379 libdconf1:i386
thomasanderson20032a5c2017-03-02 00:28:20380 libfontconfig1:i386
381 libgconf-2-4:i386
382 libglib2.0-0:i386
383 libgpm2:i386
384 libgtk2.0-0:i386
385 libgtk-3-0:i386
386 libncurses5:i386
387 lib32ncurses5-dev
388 libnss3:i386
389 libpango1.0-0:i386
thomasandersondfefc6c02017-05-04 01:29:11390 libssl-dev:i386
thomasanderson20032a5c2017-03-02 00:28:20391 libtinfo-dev
392 libtinfo-dev:i386
393 libtool
394 libxcomposite1:i386
395 libxcursor1:i386
396 libxdamage1:i386
397 libxi6:i386
398 libxrandr2:i386
399 libxss1:i386
400 libxtst6:i386
401 texinfo
402 xvfb
403 ${naclports_list}
404"
[email protected]419a9a62014-06-19 18:26:18405
thomasandersondfefc6c02017-05-04 01:29:11406if package_exists libssl1.0.0; then
407 nacl_list="${nacl_list} libssl1.0.0:i386"
408else
409 nacl_list="${nacl_list} libssl1.0.2:i386"
410fi
411
torne8a6eb692015-11-05 12:43:08412# Find the proper version of packages that depend on mesa. Only one -lts variant
413# of mesa can be installed and everything that depends on it must match.
414
415# Query for the name and status of all mesa LTS variants, filter for only
416# installed packages, extract just the name, and eliminate duplicates (there can
417# be more than one with the same name in the case of multiarch). Expand into an
418# array.
419mesa_packages=($(dpkg-query -Wf'${package} ${status}\n' \
torne12cd9f6c2016-02-24 18:52:23420 libgl1-mesa-glx-lts-\* 2>/dev/null | \
torne8a6eb692015-11-05 12:43:08421 grep " ok installed" | cut -d " " -f 1 | sort -u))
422if [ "${#mesa_packages[@]}" -eq 0 ]; then
423 mesa_variant=""
424elif [ "${#mesa_packages[@]}" -eq 1 ]; then
425 # Strip the base package name and leave just "-lts-whatever"
426 mesa_variant="${mesa_packages[0]#libgl1-mesa-glx}"
427else
428 echo "ERROR: unable to determine which libgl1-mesa-glx variant is installed."
429 exit 1
430fi
[email protected]3a4bd5d2014-06-25 23:55:04431dev_list="${dev_list} libgbm-dev${mesa_variant}
vabrf1e8b17f2015-03-17 10:56:37432 libgles2-mesa-dev${mesa_variant} libgl1-mesa-dev${mesa_variant}
433 mesa-common-dev${mesa_variant}"
[email protected]419a9a62014-06-19 18:26:18434nacl_list="${nacl_list} libgl1-mesa-glx${mesa_variant}:i386"
[email protected]565416362014-01-16 21:26:47435
[email protected]757c2962012-03-15 19:05:18436# Some package names have changed over time
marcin73929a72017-01-04 22:04:58437if package_exists libpng12-0; then
438 lib_list="${lib_list} libpng12-0"
439else
440 lib_list="${lib_list} libpng16-16"
441fi
[email protected]4fc00712013-05-29 23:11:20442if package_exists libnspr4-dbg; then
[email protected]1a0f64a2011-05-20 17:53:55443 dbg_list="${dbg_list} libnspr4-dbg libnss3-dbg"
444 lib_list="${lib_list} libnspr4 libnss3"
[email protected]757c2962012-03-15 19:05:18445else
446 dbg_list="${dbg_list} libnspr4-0d-dbg libnss3-1d-dbg"
447 lib_list="${lib_list} libnspr4-0d libnss3-1d"
448fi
[email protected]4fc00712013-05-29 23:11:20449if package_exists libjpeg-dev; then
[email protected]9e895962013-05-21 08:26:42450 dev_list="${dev_list} libjpeg-dev"
[email protected]b11411c2012-03-21 22:09:41451else
[email protected]9e895962013-05-21 08:26:42452 dev_list="${dev_list} libjpeg62-dev"
[email protected]b11411c2012-03-21 22:09:41453fi
[email protected]4fc00712013-05-29 23:11:20454if package_exists libudev1; then
[email protected]9e895962013-05-21 08:26:42455 dev_list="${dev_list} libudev1"
[email protected]ab9e69082014-06-05 15:28:52456 nacl_list="${nacl_list} libudev1:i386"
[email protected]9e895962013-05-21 08:26:42457else
458 dev_list="${dev_list} libudev0"
[email protected]ab9e69082014-06-05 15:28:52459 nacl_list="${nacl_list} libudev0:i386"
[email protected]9e895962013-05-21 08:26:42460fi
[email protected]3ea42912013-09-06 06:23:57461if package_exists libbrlapi0.6; then
462 dev_list="${dev_list} libbrlapi0.6"
463else
464 dev_list="${dev_list} libbrlapi0.5"
465fi
halton.huo3e728c42016-01-20 05:12:23466if package_exists apache2-bin; then
467 dev_list="${dev_list} apache2-bin"
468else
469 dev_list="${dev_list} apache2.2-bin"
470fi
vadimsh278ff0662016-05-19 00:06:28471if package_exists xfonts-mathml; then
halton.huo3e728c42016-01-20 05:12:23472 dev_list="${dev_list} xfonts-mathml"
473fi
krasineef3d4b2016-04-22 00:52:18474if package_exists fonts-indic; then
vadimsh278ff0662016-05-19 00:06:28475 dev_list="${dev_list} fonts-indic"
krasineef3d4b2016-04-22 00:52:18476else
vadimsh278ff0662016-05-19 00:06:28477 dev_list="${dev_list} ttf-indic-fonts"
krasineef3d4b2016-04-22 00:52:18478fi
marcin38933dd2017-10-30 00:05:52479if package_exists php7.1-cgi; then
480 dev_list="${dev_list} php7.1-cgi libapache2-mod-php7.1"
481elif package_exists php7.0-cgi; then
vadimsh278ff0662016-05-19 00:06:28482 dev_list="${dev_list} php7.0-cgi libapache2-mod-php7.0"
krasineef3d4b2016-04-22 00:52:18483else
vadimsh278ff0662016-05-19 00:06:28484 dev_list="${dev_list} php5-cgi libapache2-mod-php5"
krasineef3d4b2016-04-22 00:52:18485fi
thomasandersonb4a2bca2016-12-08 06:46:05486# ttf-mscorefonts-installer is in the Debian contrib repo, which has
487# dependencies on non-free software. Install it only if the user has already
488# enabled contrib.
489if package_exists ttf-mscorefonts-installer; then
490 dev_list="${dev_list} ttf-mscorefonts-installer"
491elif package_exists msttcorefonts; then
492 dev_list="${dev_list} msttcorefonts"
493fi
[email protected]757c2962012-03-15 19:05:18494
[email protected]dc099772013-09-30 22:06:58495# Some packages are only needed if the distribution actually supports
[email protected]757c2962012-03-15 19:05:18496# installing them.
[email protected]4fc00712013-05-29 23:11:20497if package_exists appmenu-gtk; then
[email protected]757c2962012-03-15 19:05:18498 lib_list="$lib_list appmenu-gtk"
[email protected]4da8fad2011-04-11 18:42:42499fi
500
johnme49bb458a2014-11-27 15:45:31501# When cross building for arm/Android on 64-bit systems the host binaries
502# that are part of v8 need to be compiled with -m32 which means
503# that basic multilib support is needed.
ki.stfu0a79d6992015-09-17 07:27:12504if file -L /sbin/init | grep -q 'ELF 64-bit'; then
johnme49bb458a2014-11-27 15:45:31505 # gcc-multilib conflicts with the arm cross compiler (at least in trusty) but
506 # g++-X.Y-multilib gives us the 32-bit support that we need. Find out the
507 # appropriate value of X and Y by seeing what version the current
508 # distribution's g++-multilib package depends on.
509 multilib_package=$(apt-cache depends g++-multilib --important | \
510 grep -E --color=never --only-matching '\bg\+\+-[0-9.]+-multilib\b')
511 lib32_list="$lib32_list $multilib_package"
512fi
513
[email protected]ba48c4ca2013-10-25 16:11:46514if test "$do_inst_syms" = "" && test 0 -eq ${do_quick_check-0}
[email protected]1eae2bfb2010-01-26 18:17:53515then
516 echo "This script installs all tools and libraries needed to build Chromium."
517 echo ""
518 echo "For most of the libraries, it can also install debugging symbols, which"
519 echo "will allow you to debug code in the system libraries. Most developers"
520 echo "won't need these symbols."
521 echo -n "Do you want me to install them for you (y/N) "
522 if yes_no 1; then
523 do_inst_syms=1
524 fi
525fi
526if test "$do_inst_syms" = "1"; then
[email protected]ba48c4ca2013-10-25 16:11:46527 echo "Including debugging symbols."
thomasandersondfefc6c02017-05-04 01:29:11528 # Many debug packages are not available in Debian stretch,
529 # so exclude the ones that are missing.
530 available_dbg_packages=""
531 for package in ${dbg_list}; do
532 if package_exists ${package}; then
533 available_dbg_packages="${available_dbg_packages} ${package}"
534 fi
535 done
536 dbg_list="${available_dbg_packages}"
[email protected]8ada8c52009-03-10 21:53:08537else
[email protected]ba48c4ca2013-10-25 16:11:46538 echo "Skipping debugging symbols."
[email protected]8ada8c52009-03-10 21:53:08539 dbg_list=
540fi
541
johnme49bb458a2014-11-27 15:45:31542if test "$do_inst_lib32" = "1" ; then
543 echo "Including 32-bit libraries for ARM/Android."
544else
545 echo "Skipping 32-bit libraries for ARM/Android."
546 lib32_list=
[email protected]9f28a9cf2012-12-17 23:31:40547fi
548
[email protected]ba48c4ca2013-10-25 16:11:46549if test "$do_inst_arm" = "1" ; then
[email protected]ba48c4ca2013-10-25 16:11:46550 echo "Including ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26551else
[email protected]ba48c4ca2013-10-25 16:11:46552 echo "Skipping ARM cross toolchain."
[email protected]f2826b6a2012-11-15 01:06:26553 arm_list=
554fi
555
[email protected]565416362014-01-16 21:26:47556if test "$do_inst_nacl" = "1"; then
[email protected]713eac62014-06-02 23:10:03557 echo "Including NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47558else
[email protected]713eac62014-06-02 23:10:03559 echo "Skipping NaCl, NaCl toolchain, NaCl ports dependencies."
[email protected]565416362014-01-16 21:26:47560 nacl_list=
561fi
562
johnme4bd10302015-01-06 11:25:52563# The `sort -r -s -t: -k2` sorts all the :i386 packages to the front, to avoid
564# confusing dpkg-query (crbug.com/446172).
[email protected]565416362014-01-16 21:26:47565packages="$(
johnme49bb458a2014-11-27 15:45:31566 echo "${dev_list} ${lib_list} ${dbg_list} ${lib32_list} ${arm_list}"\
johnme4bd10302015-01-06 11:25:52567 "${nacl_list}" | tr " " "\n" | sort -u | sort -r -s -t: -k2 | tr "\n" " "
[email protected]565416362014-01-16 21:26:47568)"
[email protected]ba48c4ca2013-10-25 16:11:46569
570if [ 1 -eq "${do_quick_check-0}" ] ; then
thomasanderson73b3a4412016-11-18 23:16:07571 if ! missing_packages="$(dpkg-query -W -f ' ' ${packages} 2>&1)"; then
572 # Distinguish between packages that actually aren't available to the
573 # system (i.e. not in any repo) and packages that just aren't known to
574 # dpkg (i.e. managed by apt).
575 missing_packages="$(echo "${missing_packages}" | awk '{print $NF}')"
576 not_installed=""
577 unknown=""
578 for p in ${missing_packages}; do
579 if apt-cache show ${p} > /dev/null 2>&1; then
580 not_installed="${p}\n${not_installed}"
581 else
582 unknown="${p}\n${unknown}"
[email protected]ba48c4ca2013-10-25 16:11:46583 fi
thomasanderson73b3a4412016-11-18 23:16:07584 done
585 if [ -n "${not_installed}" ]; then
[email protected]ba48c4ca2013-10-25 16:11:46586 echo "WARNING: The following packages are not installed:"
thomasanderson73b3a4412016-11-18 23:16:07587 echo -e "${not_installed}" | sed -e "s/^/ /"
588 fi
589 if [ -n "${unknown}" ]; then
590 echo "WARNING: The following packages are unknown to your system"
591 echo "(maybe missing a repo or need to 'sudo apt-get update'):"
592 echo -e "${unknown}" | sed -e "s/^/ /"
[email protected]ba48c4ca2013-10-25 16:11:46593 fi
594 exit 1
595 fi
596 exit 0
597fi
598
johnme49bb458a2014-11-27 15:45:31599if test "$do_inst_lib32" = "1" || test "$do_inst_nacl" = "1"; then
thomasanderson05c40292017-03-28 19:28:45600 sudo dpkg --add-architecture i386
johnme49bb458a2014-11-27 15:45:31601fi
sbc42564092015-04-01 01:01:28602sudo apt-get update
[email protected]e041ed12009-03-10 16:43:01603
604# We initially run "apt-get" with the --reinstall option and parse its output.
605# This way, we can find all the packages that need to be newly installed
606# without accidentally promoting any packages from "auto" to "manual".
607# We then re-run "apt-get" with just the list of missing packages.
608echo "Finding missing packages..."
[email protected]757c2962012-03-15 19:05:18609# Intentionally leaving $packages unquoted so it's more readable.
[email protected]b6e064522009-08-10 18:47:51610echo "Packages required: " $packages
611echo
[email protected]79a9d2962009-08-06 21:10:58612new_list_cmd="sudo apt-get install --reinstall $(echo $packages)"
[email protected]c3d8b152013-05-10 10:10:03613if new_list="$(yes n | LANGUAGE=en LANG=C $new_list_cmd)"; then
[email protected]b6e064522009-08-10 18:47:51614 # We probably never hit this following line.
thakis3e861de2016-06-14 14:24:01615 echo "No missing packages, and the packages are up to date."
[email protected]b62f11e72010-05-03 17:20:45616elif [ $? -eq 1 ]; then
[email protected]79a9d2962009-08-06 21:10:58617 # We expect apt-get to have exit status of 1.
[email protected]757c2962012-03-15 19:05:18618 # This indicates that we cancelled the install with "yes n|".
[email protected]b6e064522009-08-10 18:47:51619 new_list=$(echo "$new_list" |
[email protected]79a9d2962009-08-06 21:10:58620 sed -e '1,/The following NEW packages will be installed:/d;s/^ //;t;d')
[email protected]b6e064522009-08-10 18:47:51621 new_list=$(echo "$new_list" | sed 's/ *$//')
622 if [ -z "$new_list" ] ; then
thakis3e861de2016-06-14 14:24:01623 echo "No missing packages, and the packages are up to date."
[email protected]b6e064522009-08-10 18:47:51624 else
625 echo "Installing missing packages: $new_list."
[email protected]e2544ed42012-04-23 04:48:31626 sudo apt-get install ${do_quietly-} ${new_list}
[email protected]b6e064522009-08-10 18:47:51627 fi
628 echo
[email protected]79a9d2962009-08-06 21:10:58629else
630 # An apt-get exit status of 100 indicates that a real error has occurred.
[email protected]e041ed12009-03-10 16:43:01631
[email protected]79a9d2962009-08-06 21:10:58632 # I am intentionally leaving out the '"'s around new_list_cmd,
633 # as this makes it easier to cut and paste the output
[email protected]79a9d2962009-08-06 21:10:58634 echo "The following command failed: " ${new_list_cmd}
635 echo
636 echo "It produces the following output:"
637 yes n | $new_list_cmd || true
638 echo
639 echo "You will have to install the above packages yourself."
640 echo
641 exit 100
642fi
[email protected]e041ed12009-03-10 16:43:01643
[email protected]d96cc3472013-09-19 00:53:30644# Install the Chrome OS default fonts. This must go after running
645# apt-get, since install-chromeos-fonts depends on curl.
646if test "$do_inst_chromeos_fonts" != "0"; then
647 echo
648 echo "Installing Chrome OS fonts."
649 dir=`echo $0 | sed -r -e 's/\/[^/]+$//'`
650 if ! sudo $dir/linux/install-chromeos-fonts.py; then
651 echo "ERROR: The installation of the Chrome OS default fonts failed."
652 if [ `stat -f -c %T $dir` == "nfs" ]; then
653 echo "The reason is that your repo is installed on a remote file system."
654 else
655 echo "This is expected if your repo is installed on a remote file system."
656 fi
657 echo "It is recommended to install your repo on a local file system."
658 echo "You can skip the installation of the Chrome OS default founts with"
659 echo "the command line option: --no-chromeos-fonts."
660 exit 1
661 fi
662else
663 echo "Skipping installation of Chrome OS fonts."
664fi
665
thomasanderson5ef5c3d2016-12-08 01:59:19666echo "Installing locales."
667CHROMIUM_LOCALES="da_DK.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 zh_TW.UTF-8"
668LOCALE_GEN=/etc/locale.gen
669if [ -e ${LOCALE_GEN} ]; then
670 OLD_LOCALE_GEN="$(cat /etc/locale.gen)"
671 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
672 sudo sed -i "s/^# ${CHROMIUM_LOCALE}/${CHROMIUM_LOCALE}/" ${LOCALE_GEN}
673 done
674 # Regenerating locales can take a while, so only do it if we need to.
675 if (echo "${OLD_LOCALE_GEN}" | cmp -s ${LOCALE_GEN}); then
676 echo "Locales already up-to-date."
677 else
678 sudo locale-gen
679 fi
680else
681 for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do
682 sudo locale-gen ${CHROMIUM_LOCALE}
683 done
684fi