blob: fbf86a5726a4be3c9c77f6b25e6aad24b296e3e5 [file] [log] [blame]
brettwa874dcc2015-08-28 23:59:181# Copyright 2015 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
thomasanderson018ffc7f2017-06-22 01:25:335import("//build/config/c++/c++.gni")
brettwa874dcc2015-08-28 23:59:186import("//build/config/chrome_build.gni")
dpranke3b870612015-09-10 23:42:047import("//build/config/features.gni")
brettw4cab0f12015-09-14 21:40:018import("//build/config/sanitizers/sanitizers.gni")
thomasanderson7a01af42016-10-18 21:22:429import("//build/config/sysroot.gni")
raphael.kubo.da.costadc683d22016-09-17 19:41:1310import("//build/util/process_version.gni")
brettwa874dcc2015-08-28 23:59:1811import("//build/util/version.gni")
raphael.kubo.da.costadc683d22016-09-17 19:41:1312import("//chrome/process_version_rc_template.gni") # For branding_file_path.
Dirk Prankeccc0c362017-09-28 22:15:1113import("//components/nacl/features.gni")
brettwa874dcc2015-08-28 23:59:1814
xhwangc3a252b2016-05-23 02:35:4815if (current_cpu == "x86" || current_cpu == "x64") {
16 import("//media/cdm/ppapi/cdm_paths.gni")
17}
18
sbcfa8f43b2016-10-05 17:11:3519assert(is_linux)
brettwa874dcc2015-08-28 23:59:1820
Tom Anderson7f6acf62017-09-08 03:13:0921packaging_files_executables = [
Tom Andersone068dcb2017-09-01 18:31:2122 "$root_out_dir/chrome",
23 "$root_out_dir/chrome_sandbox",
24]
Tom Anderson7f6acf62017-09-08 03:13:0925packaging_files_shlibs = []
Tom Andersone068dcb2017-09-01 18:31:2126
27if (enable_nacl) {
Tom Anderson7f6acf62017-09-08 03:13:0928 packaging_files_executables += [
Tom Andersone068dcb2017-09-01 18:31:2129 "$root_out_dir/nacl_helper",
30 "$root_out_dir/nacl_helper_bootstrap",
31 ]
32
33 if (current_cpu == "x86") {
Tom Anderson7f6acf62017-09-08 03:13:0934 packaging_files_executables += [ "$root_out_dir/nacl_irt_x86_32.nexe" ]
Tom Andersone068dcb2017-09-01 18:31:2135 } else if (current_cpu == "x64") {
Tom Anderson7f6acf62017-09-08 03:13:0936 packaging_files_executables += [ "$root_out_dir/nacl_irt_x86_64.nexe" ]
Tom Andersone068dcb2017-09-01 18:31:2137 } else if (current_cpu == "arm") {
Tom Anderson7f6acf62017-09-08 03:13:0938 packaging_files_executables += [ "$root_out_dir/nacl_irt_arm.nexe" ]
Milko Leporis0f74ee82017-10-02 22:37:0739 } else if (current_cpu == "mipsel") {
40 packaging_files_executables += [ "$root_out_dir/nacl_irt_mips32.nexe" ]
Tom Andersone068dcb2017-09-01 18:31:2141 }
42}
43
44# The widevine BUILD.gn only produces shared libraries for x86 and x64
45if (is_chrome_branded && (current_cpu == "x86" || current_cpu == "x64")) {
Tom Anderson7f6acf62017-09-08 03:13:0946 packaging_files_shlibs += [
Tom Andersone068dcb2017-09-01 18:31:2147 "$root_out_dir/$widevine_cdm_path/libwidevinecdmadapter.so",
48 "$root_out_dir/$widevine_cdm_path/libwidevinecdm.so",
49 ]
50}
51
52if (!libcpp_is_static && use_custom_libcxx) {
Tom Anderson7f6acf62017-09-08 03:13:0953 packaging_files_shlibs += [ "$root_out_dir/libc++.so" ]
Tom Andersone068dcb2017-09-01 18:31:2154}
55
Tom Anderson7f6acf62017-09-08 03:13:0956packaging_files_binaries = packaging_files_executables + packaging_files_shlibs
57
Tom Andersone068dcb2017-09-01 18:31:2158# TODO(mmoss) Any convenient way to get all the relevant build files?
59# (e.g. all locales, resources, etc.)
60packaging_files = packaging_files_binaries + [
61 "$root_out_dir/xdg-mime",
62 "$root_out_dir/xdg-settings",
63 "$root_out_dir/locales/en-US.pak",
Becca Hughesd89f6ff2017-12-13 13:20:4464 "$root_out_dir/MEIPreload/manifest.json",
65 "$root_out_dir/MEIPreload/preloaded_data.pb",
Tom Andersone068dcb2017-09-01 18:31:2166 ]
67
Tom Andersona80a9b42017-09-07 02:35:3368action_foreach("calculate_deb_dependencies") {
Tom Andersone068dcb2017-09-01 18:31:2169 deps = [
70 ":installer_deps",
71 ]
Tom Andersona80a9b42017-09-07 02:35:3372 script = "debian/calculate_package_deps.py"
Tom Andersone068dcb2017-09-01 18:31:2173 sources = packaging_files_binaries
Tom Anderson3a3c5882017-09-12 21:16:2474 inputs = [
75 "debian/deb_version.py",
Lei Zhange680353b2017-09-25 23:03:5076 "debian/dist_package_versions.json",
Tom Anderson3a3c5882017-09-12 21:16:2477 "debian/package_version_interval.py",
78 ]
Tom Andersone068dcb2017-09-01 18:31:2179 outputs = [
Tom Andersona80a9b42017-09-07 02:35:3380 "$root_out_dir/deb_{{source_name_part}}.deps",
Tom Andersone068dcb2017-09-01 18:31:2181 ]
82 args = [
83 "{{source}}",
84 rebase_path(sysroot, root_build_dir),
85 target_cpu,
Tom Andersona80a9b42017-09-07 02:35:3386 "deb_{{source_name_part}}.deps",
Tom Andersone068dcb2017-09-01 18:31:2187 ]
Tom Andersoncedcf7962017-10-04 00:29:5588 if (is_desktop_linux && target_cpu == "x64") {
Tom Andersonc92bc272017-09-15 23:12:5789 args += [ "--distro-check" ]
90 }
Tom Andersone068dcb2017-09-01 18:31:2191}
92
Tom Andersona80a9b42017-09-07 02:35:3393action("merge_deb_dependencies") {
94 deps = [
95 ":calculate_deb_dependencies",
96 ]
97 script = "debian/merge_package_versions.py"
Tom Anderson21254bb2017-09-07 04:07:1898 additional_deps = "debian/additional_deps"
99 inputs = [
100 additional_deps,
Tom Anderson3a3c5882017-09-12 21:16:24101 "debian/deb_version.py",
102 "debian/package_version_interval.py",
Tom Andersona80a9b42017-09-07 02:35:33103 ]
Tom Anderson21254bb2017-09-07 04:07:18104 outputs = [
105 "$root_out_dir/deb_common.deps",
106 ]
107 args = [
108 "deb_common.deps",
109 rebase_path(additional_deps, root_build_dir),
110 ]
Tom Andersona80a9b42017-09-07 02:35:33111 args += rebase_path(get_target_outputs(":calculate_deb_dependencies"),
112 root_build_dir)
113}
114
Tom Anderson7f6acf62017-09-08 03:13:09115action_foreach("calculate_rpm_dependencies") {
116 deps = [
117 ":installer_deps",
118 ]
119 script = "rpm/calculate_package_deps.py"
120 sources = packaging_files_binaries
Tom Anderson3a3c5882017-09-12 21:16:24121 inputs = [
Lei Zhange680353b2017-09-25 23:03:50122 "rpm/dist_package_provides.json",
Tom Anderson3a3c5882017-09-12 21:16:24123 ]
Tom Anderson7f6acf62017-09-08 03:13:09124 outputs = [
125 "$root_out_dir/rpm_{{source_name_part}}.deps",
126 ]
127 args = [
128 "{{source}}",
129 "rpm_{{source_name_part}}.deps",
130 ]
131 args += rebase_path(packaging_files_shlibs, root_build_dir)
Tom Andersoncedcf7962017-10-04 00:29:55132 if (is_desktop_linux && target_cpu == "x64") {
Tom Andersonc92bc272017-09-15 23:12:57133 args += [ "--distro-check" ]
134 }
Tom Anderson7f6acf62017-09-08 03:13:09135}
136
137action("merge_rpm_dependencies") {
138 deps = [
139 ":calculate_rpm_dependencies",
140 ]
141 script = "rpm/merge_package_deps.py"
Tom Anderson3a3c5882017-09-12 21:16:24142 additional_deps = "rpm/additional_deps"
143 inputs = [
144 additional_deps,
145 ]
Tom Anderson7f6acf62017-09-08 03:13:09146 outputs = [
147 "$root_out_dir/rpm_common.deps",
148 ]
Tom Anderson3a3c5882017-09-12 21:16:24149 args = [
150 "rpm_common.deps",
151 rebase_path(additional_deps, root_build_dir),
152 ]
Tom Anderson7f6acf62017-09-08 03:13:09153 args += rebase_path(get_target_outputs(":calculate_rpm_dependencies"),
154 root_build_dir)
155}
156
Tom Andersonce16a0c2017-09-02 00:27:51157action("strip_chrome_binary") {
158 prog_name = "$root_out_dir/chrome"
159 debug_file = prog_name + ".debug"
160 stripped_file = prog_name + ".stripped"
161 deps = [
162 "//chrome",
163 ]
Tom Anderson2bb2b382017-09-26 20:21:53164 script = "//build/gn_run_binary.py"
Tom Andersonce16a0c2017-09-02 00:27:51165 sources = [
166 prog_name,
167 ]
168 outputs = [
169 debug_file,
170 stripped_file,
171 ]
172 args = [
173 rebase_path("//third_party/eu-strip/bin/eu-strip", root_build_dir),
Tom Anderson2bb2b382017-09-26 20:21:53174 "-o",
Tom Andersonce16a0c2017-09-02 00:27:51175 rebase_path(stripped_file, root_build_dir),
Tom Anderson2bb2b382017-09-26 20:21:53176 "-f",
177 rebase_path(debug_file, root_build_dir),
178 rebase_path(prog_name, root_build_dir),
Tom Andersonce16a0c2017-09-02 00:27:51179 ]
180}
181
brettwa874dcc2015-08-28 23:59:18182# This target builds all "normal" Linux installers.
brettwa874dcc2015-08-28 23:59:18183#
184# The bot setup is to build stable, unstable, and beta packages for the current
185# build. Then a later step picks up the package corresponding to what the
186# current build is supposed to be. This is wasteful since one build will only
Tom Anderson1d582482017-09-05 20:41:28187# be one of these.
brettwa874dcc2015-08-28 23:59:18188#
189# TODO it would be much nicer to have a build variable so the bot can tell us
190# what the current build should be, so we only have to make one .deb/.rpm pair.
191#
192#
193# TO BUILD LINUX INSTALLER PACKAGES
194#
195# The packages list the exact versions of each library used. The versions used
196# on the bots are likely different than those on your workstation, so you'll
197# get a stream of errors like:
198# < libasound2 (>= 1.0.23)
199# ---
200# > libasound2 (>= 1.0.16)
201#
202# To avoid these warnings for testing purposes, do:
203#
204# export IGNORE_DEPS_CHANGES=1
205#
206# before you build.
207group("linux") {
208 deps = [
209 ":beta",
210 ":stable",
211 ":unstable",
212 ]
213}
214
215branding_dir = "//chrome/app/theme/$branding_path_component"
216branding_dir_100 =
217 "//chrome/app/theme/default_100_percent/$branding_path_component"
218
219copy("common_packaging_files") {
220 visibility = [ ":*" ]
221 sources = [
Tom Anderson64b96142017-09-26 21:00:54222 "//chrome/app/resources/manpage.1.in",
brettwa874dcc2015-08-28 23:59:18223 "common/apt.include",
224 "common/default-app-block.template",
225 "common/default-app.template",
226 "common/desktop.template",
brettwa874dcc2015-08-28 23:59:18227 "common/installer.include",
228 "common/postinst.include",
229 "common/prerm.include",
230 "common/repo.cron",
231 "common/rpm.include",
232 "common/rpmrepo.cron",
233 "common/symlinks.include",
234 "common/variables.include",
235 "common/wrapper",
236 ]
237
sbcfa8f43b2016-10-05 17:11:35238 if (is_chrome_branded) {
tomas.popeladd765c02017-03-21 14:44:16239 sources += [
240 "common/google-chrome/google-chrome.appdata.xml.template",
241 "common/google-chrome/google-chrome.info",
242 ]
sbcfa8f43b2016-10-05 17:11:35243 } else {
tomas.popeladd765c02017-03-21 14:44:16244 sources += [
245 "common/chromium-browser/chromium-browser.appdata.xml",
246 "common/chromium-browser/chromium-browser.info",
247 ]
sbcfa8f43b2016-10-05 17:11:35248 }
249
Tom Anderson4312d5e2017-06-22 21:07:43250 sources += [ "//third_party/eu-strip/bin/eu-strip" ]
brettwa874dcc2015-08-28 23:59:18251
252 outputs = [
253 "$root_out_dir/installer/common/{{source_file_part}}",
254 ]
255}
256
257copy("deb_packaging_files") {
258 visibility = [ ":*" ]
259 sources = [
260 "debian/build.sh",
261 "debian/changelog.template",
262 "debian/control.template",
263 "debian/debian.menu",
brettwa874dcc2015-08-28 23:59:18264 "debian/postinst",
265 "debian/postrm",
266 "debian/prerm",
267 ]
268 outputs = [
269 "$root_out_dir/installer/debian/{{source_file_part}}",
270 ]
271}
272
273copy("theme_files") {
274 visibility = [ ":*" ]
275 sources = [
276 "$branding_dir/BRANDING",
277 "$branding_dir/linux/product_logo_32.xpm",
278 "$branding_dir/product_logo_128.png",
279 "$branding_dir/product_logo_22.png",
280 "$branding_dir/product_logo_24.png",
281 "$branding_dir/product_logo_256.png",
282 "$branding_dir/product_logo_48.png",
283 "$branding_dir/product_logo_64.png",
284 "$branding_dir_100/product_logo_16.png",
285 "$branding_dir_100/product_logo_32.png",
286 ]
Tom Andersonc8ebf272017-11-17 23:41:33287 if (is_chrome_branded) {
288 sources += [
289 "$branding_dir/linux/product_logo_32_beta.xpm",
290 "$branding_dir/linux/product_logo_32_dev.xpm",
291 "$branding_dir/product_logo_128_beta.png",
292 "$branding_dir/product_logo_128_dev.png",
293 "$branding_dir/product_logo_22_beta.png",
294 "$branding_dir/product_logo_22_dev.png",
295 "$branding_dir/product_logo_24_beta.png",
296 "$branding_dir/product_logo_24_dev.png",
297 "$branding_dir/product_logo_256_beta.png",
298 "$branding_dir/product_logo_256_dev.png",
299 "$branding_dir/product_logo_48_beta.png",
300 "$branding_dir/product_logo_48_dev.png",
301 "$branding_dir/product_logo_64_beta.png",
302 "$branding_dir/product_logo_64_dev.png",
303 "$branding_dir_100/product_logo_16_beta.png",
304 "$branding_dir_100/product_logo_16_dev.png",
305 "$branding_dir_100/product_logo_32_beta.png",
306 "$branding_dir_100/product_logo_32_dev.png",
307 ]
308 }
brettwa874dcc2015-08-28 23:59:18309 outputs = [
310 "$root_out_dir/installer/theme/{{source_file_part}}",
311 ]
312}
313
314if (!is_chromeos) {
315 copy("rpm_packaging_files") {
316 visibility = [ ":*" ]
317 sources = [
318 "rpm/build.sh",
319 "rpm/chrome.spec.template",
brettwa874dcc2015-08-28 23:59:18320 ]
321 outputs = [
322 "$root_out_dir/installer/rpm/{{source_file_part}}",
323 ]
324 }
325}
326
327process_version("save_build_info") {
328 # Just output the default version info variables (no template).
329 process_only = true
raphael.kubo.da.costadc683d22016-09-17 19:41:13330 sources = [
331 "//build/util/LASTCHANGE",
332 "//chrome/VERSION",
333 branding_file_path,
334 ]
brettwa874dcc2015-08-28 23:59:18335 output = "$root_out_dir/installer/version.txt"
336}
337
338# Dependencies for all Linux installer targets.
339group("installer_deps") {
mcgrathr6edf192f2015-10-19 19:39:11340 # Though many of these things appear in data_deps further down the
341 # dependency chain, they must appear here as public_deps so that they can
342 # be listed as inputs to the actions that depend on ":installer_deps"
343 # and are guaranteed to have been built before those actions run.
344
brettwa874dcc2015-08-28 23:59:18345 public_deps = [
346 ":common_packaging_files",
347 ":deb_packaging_files",
348 ":save_build_info",
Tom Andersonce16a0c2017-09-02 00:27:51349 ":strip_chrome_binary",
brettwa874dcc2015-08-28 23:59:18350 ":theme_files",
351 "//chrome",
352 "//chrome:packed_resources",
Becca Hughesd89f6ff2017-12-13 13:20:44353 "//chrome/browser/resources/media/mei_preload:component",
brettwa874dcc2015-08-28 23:59:18354 "//sandbox/linux:chrome_sandbox",
brettwa874dcc2015-08-28 23:59:18355 ]
dpranke3b870612015-09-10 23:42:04356 if (enable_nacl) {
mcgrathr6edf192f2015-10-19 19:39:11357 public_deps += [
brettwf4b4a4282015-12-16 00:41:13358 "//components/nacl/loader:nacl_helper",
mcgrathr6edf192f2015-10-19 19:39:11359
360 # These are data_deps of nacl_helper, but that is not enough,
361 # as explained above.
362 "//native_client/src/trusted/service_runtime/linux:bootstrap",
363 "//ppapi/native_client:irt",
364 ]
dpranke3b870612015-09-10 23:42:04365 }
brettwa874dcc2015-08-28 23:59:18366 if (current_cpu == "x86" || current_cpu == "x64") {
367 public_deps += [
368 "//third_party/widevine/cdm:widevinecdm",
369 "//third_party/widevine/cdm:widevinecdmadapter",
370 ]
371 }
372 if (!is_chromeos) {
373 public_deps += [ ":rpm_packaging_files" ]
374 }
Tom Anderson45583c72017-07-08 02:53:34375
Tom Anderson45583c72017-07-08 02:53:34376 if (!libcpp_is_static && use_custom_libcxx) {
377 public_deps += [ "//buildtools/third_party/libc++:libc++" ]
378 }
brettwa874dcc2015-08-28 23:59:18379}
380
381# Creates .deb and .rpm (RPM for non-ChromeOS only) installer packages.
382#
383# channel:
384# Name of the channel.
385template("linux_package") {
386 assert(defined(invoker.channel))
387 channel = invoker.channel
388
389 if (current_cpu == "x86") {
mcgrathr6edf192f2015-10-19 19:39:11390 # The shell scripts use "ia32" instead of "x86".
brettwa874dcc2015-08-28 23:59:18391 build_script_arch = "ia32"
392 } else {
393 build_script_arch = current_cpu
394 }
395
brettwa874dcc2015-08-28 23:59:18396 deb_target_name = "${target_name}_deb"
397 action(deb_target_name) {
398 visibility = [ ":*" ]
Tom Anderson2bb2b382017-09-26 20:21:53399 script = "//build/gn_run_binary.py"
brettwa874dcc2015-08-28 23:59:18400
401 if (current_cpu == "x86") {
402 deb_arch = "i386"
403 } else if (current_cpu == "x64") {
404 deb_arch = "amd64"
405 } else if (current_cpu == "arm") {
406 deb_arch = "arm"
Milko Leporis0f74ee82017-10-02 22:37:07407 } else if (current_cpu == "mipsel") {
408 deb_arch = "mipsel"
brettwa874dcc2015-08-28 23:59:18409 } else {
410 assert(false, "Linux installer not configured for this architecture.")
411 }
412
Tom Andersone068dcb2017-09-01 18:31:21413 inputs = packaging_files
Tom Andersonfa4860c2017-09-15 23:23:40414 if (is_chrome_branded) {
415 package = "google-chrome"
416 } else {
417 package = "chromium-browser"
418 }
brettwa874dcc2015-08-28 23:59:18419 outputs = [
Tom Andersonfa4860c2017-09-15 23:23:40420 "$root_out_dir/${package}-${channel}_${chrome_version_full}-1_${deb_arch}.deb",
brettwa874dcc2015-08-28 23:59:18421 ]
422
423 args = [
brettwa874dcc2015-08-28 23:59:18424 rebase_path("$root_out_dir/installer/debian/build.sh", root_build_dir),
brettwa874dcc2015-08-28 23:59:18425 "-a",
426 build_script_arch,
Tom Andersoncae008e2017-09-01 01:47:35427 "-b",
428 rebase_path(root_out_dir, root_build_dir),
brettwa874dcc2015-08-28 23:59:18429 "-c",
430 invoker.channel,
431 "-d",
432 branding_path_component,
Tom Andersoncae008e2017-09-01 01:47:35433 "-o",
434 rebase_path(root_out_dir, root_build_dir),
thomasanderson7a01af42016-10-18 21:22:42435 "-s",
Tom Anderson04125932017-11-28 03:13:13436 rebase_path(sysroot, root_build_dir),
Tom Andersond7f95c632017-12-07 02:18:42437 "-t",
438 target_os,
brettwa874dcc2015-08-28 23:59:18439 ]
Tom Andersoncae008e2017-09-01 01:47:35440 if (is_official_build) {
441 args += [ "-f" ]
442 }
brettwa874dcc2015-08-28 23:59:18443 deps = [
444 ":installer_deps",
Tom Anderson21254bb2017-09-07 04:07:18445 ":merge_deb_dependencies",
brettwa874dcc2015-08-28 23:59:18446 ]
447 }
448
449 if (!is_chromeos) {
450 rpm_target_name = "${target_name}_rpm"
451 action(rpm_target_name) {
452 visibility = [ ":*" ]
Tom Anderson2bb2b382017-09-26 20:21:53453 script = "//build/gn_run_binary.py"
brettwa874dcc2015-08-28 23:59:18454
455 if (current_cpu == "x86") {
456 rpm_arch = "i386"
457 } else if (current_cpu == "x64") {
458 rpm_arch = "x86_64"
459 } else if (current_cpu == "arm") {
460 rpm_arch = "arm"
Milko Leporis0f74ee82017-10-02 22:37:07461 } else if (current_cpu == "mipsel") {
462 rpm_arch = "mipsel"
brettwa874dcc2015-08-28 23:59:18463 } else {
464 assert(false, "Linux installer not configured for this architecture.")
465 }
466
Tom Andersone068dcb2017-09-01 18:31:21467 inputs = packaging_files
Tom Andersonfa4860c2017-09-15 23:23:40468 if (is_chrome_branded) {
469 package = "google-chrome"
470 } else {
471 package = "chromium-browser"
472 }
brettwa874dcc2015-08-28 23:59:18473 outputs = [
Tom Andersonfa4860c2017-09-15 23:23:40474 "$root_out_dir/${package}-${channel}-${chrome_version_full}-1.${rpm_arch}.rpm",
brettwa874dcc2015-08-28 23:59:18475 ]
476
477 args = [
brettwa874dcc2015-08-28 23:59:18478 rebase_path("$root_out_dir/installer/rpm/build.sh", root_build_dir),
brettwa874dcc2015-08-28 23:59:18479 "-a",
480 build_script_arch,
Tom Andersoncae008e2017-09-01 01:47:35481 "-b",
482 rebase_path(root_out_dir, root_build_dir),
brettwa874dcc2015-08-28 23:59:18483 "-c",
484 invoker.channel,
485 "-d",
486 branding_path_component,
Tom Andersoncae008e2017-09-01 01:47:35487 "-o",
488 rebase_path(root_out_dir, root_build_dir),
Tom Andersond7f95c632017-12-07 02:18:42489 "-t",
490 target_os,
brettwa874dcc2015-08-28 23:59:18491 ]
Tom Andersoncae008e2017-09-01 01:47:35492 if (is_official_build) {
493 args += [ "-f" ]
494 }
brettwa874dcc2015-08-28 23:59:18495 deps = [
496 ":installer_deps",
Tom Anderson3a3c5882017-09-12 21:16:24497 ":merge_rpm_dependencies",
brettwa874dcc2015-08-28 23:59:18498 ]
499 }
500 }
501
502 group(target_name) {
503 deps = [
504 ":$deb_target_name",
505 ]
506 if (!is_chromeos) {
507 deps += [ ":$rpm_target_name" ]
508 }
509 }
510}
511
512# Standard packages.
513linux_package("stable") {
514 channel = "stable"
515}
516linux_package("beta") {
517 channel = "beta"
518}
519linux_package("unstable") {
520 channel = "unstable"
521}