Source code
Revision control
Copy as Markdown
Other Tools
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# Updater
# ==============================================================
@depends(build_project, target)
def updater_default(build_project, target):
if build_project == "tools/update-programs":
return True
return build_project != "mobile/android" and target.os != "iOS"
option(
"--enable-updater",
default=updater_default,
help="{Enable|Disable} building the updater",
)
set_config("MOZ_UPDATER", True, when="--enable-updater")
set_define("MOZ_UPDATER", True, when="--enable-updater")
# Updates that do not verify signatures
# ==============================================================
option(
"--enable-unverified-updates",
default=False,
help="Enable application update without verifying MAR or updater binary signatures",
)
@depends("--enable-unverified-updates", "--enable-compile-environment")
def disable_unverified_updates(unverified_updates, compile_environment):
if unverified_updates:
if not compile_environment:
die("--enable-unverified-updates requires --enable-compile-environment")
return not unverified_updates
set_define(
"MOZ_VERIFY_MAR_SIGNATURE",
depends_if(disable_unverified_updates)(lambda _: True),
)
set_config(
"MOZ_VERIFY_MAR_SIGNATURE",
True,
depends_if(disable_unverified_updates)(lambda _: True),
)
set_config(
"DISABLE_UPDATER_AUTHENTICODE_CHECK",
True,
depends_if("--enable-unverified-updates")(lambda _: True),
)
option(env="MAR_CHANNEL_ID", nargs=1, help="MAR channel identifier")
set_config(
"MAR_CHANNEL_ID",
depends_if("MAR_CHANNEL_ID")(lambda channel: channel[0]),
)
option(
env="ACCEPTED_MAR_CHANNEL_IDS", nargs="+", help="Accepted MAR channel identifiers"
)
set_config(
"ACCEPTED_MAR_CHANNEL_IDS",
depends_if("ACCEPTED_MAR_CHANNEL_IDS")(lambda channels: ",".join(channels)),
)
# Use NSS for MAR signatures even on platforms where system libraries are
# supported (currently Windows and macOS).
# ==============================================================
can_toggle_nss_mar = target_is_windows | target_is_osx
option(
"--enable-nss-mar",
when=can_toggle_nss_mar,
help="Enable using NSS to check MAR signatures instead of system crypto",
)
@depends(
depends("--enable-nss-mar", when=can_toggle_nss_mar)(lambda x: x),
can_toggle_nss_mar,
)
def enable_nss_mar(enabled, can_toggle_nss_mar):
return enabled or not can_toggle_nss_mar
set_config("MOZ_USE_NSS_FOR_MAR", True, when=enable_nss_mar)
# Maintenance service (Windows only)
# ==============================================================
@depends("--enable-updater")
def maintenance_service_default(updater):
return bool(updater)
option(
"--enable-maintenance-service",
when=target_is_windows,
default=maintenance_service_default,
help="{Enable|Disable} building of maintenance service",
)
set_define(
"MOZ_MAINTENANCE_SERVICE",
depends_if("--enable-maintenance-service", when=target_is_windows)(lambda _: True),
)
set_config(
"MOZ_MAINTENANCE_SERVICE",
depends_if("--enable-maintenance-service", when=target_is_windows)(lambda _: True),
)
@depends("--enable-maintenance-service", "--enable-updater", when=target_is_windows)
def check_maintenance_service(mainteance_service, updater):
if mainteance_service and not updater:
die("--enable-updater is required to --enable-maintenance-service")
return mainteance_service
# Update agent (currently Windows and macOS only)
# This is an independent task that runs on a schedule to
# check for, download, and install updates.
# ==============================================================
@depends("--enable-backgroundtasks", "--enable-updater", build_project)
def update_agent_default(backgroundtasks, updater, build_project):
return bool(backgroundtasks) and bool(updater) and build_project == "browser"
option(
"--disable-update-agent",
when=target_is_windows | target_is_osx,
default=update_agent_default,
help="{Enable|Disable} building update agent",
)
set_config(
"MOZ_UPDATE_AGENT",
depends_if("--enable-update-agent", when=target_is_windows | target_is_osx)(
lambda _: True
),
)
@depends(
"--enable-update-agent",
"--enable-backgroundtasks",
"--enable-updater",
when=target_is_windows | target_is_osx,
)
def check_update_agent(update_agent, backgroundtasks, updater):
if update_agent and not backgroundtasks:
die("--enable-backgroundtasks is required to --enable-update-agent")
if update_agent and not updater:
die("--enable-updater is required to --enable-update-agent")
return update_agent
# Enable or disable the default browser agent, which monitors the user's default
# browser setting on Windows.
# ==============================================================================
@depends(target, build_project)
def default_browser_agent_default(target, build_project):
return target.os == "WINNT" and build_project == "browser"
option(
"--enable-default-browser-agent",
default=default_browser_agent_default,
help="{Enable|Disable} building the default browser agent",
)
@depends("--enable-default-browser-agent", when=target_is_windows)
def default_agent_flag(enabled):
if enabled:
return True
set_config("MOZ_DEFAULT_BROWSER_AGENT", default_agent_flag)
# Enable or disable the notification server, which allows Windows native
# notifications to persist when the application is not running and relaunch as
# necessary.
# ==============================================================================
@depends(target, build_project)
def notification_server_default(target, build_project):
return target.os == "WINNT" and build_project in (
"browser",
"comm/mail",
)
option(
"--disable-notification-server",
when=notification_server_default,
help="Disable building the notification server",
)
set_config("MOZ_NOTIFICATION_SERVER", True, when="--enable-notification-server")