Bug 1252976 - Offer |mach artifact| builds in |mach bootstrap| for non-Fennec builds r=nalexander
MozReview-Commit-ID: 2lbrORiTjwH
--- a/python/mozboot/mozboot/archlinux.py
+++ b/python/mozboot/mozboot/archlinux.py
@@ -77,25 +77,32 @@ class ArchlinuxBootstrapper(BaseBootstra
def __init__(self, version, dist_id, **kwargs):
print 'Using an experimental bootstrapper for Archlinux.'
BaseBootstrapper.__init__(self, **kwargs)
def install_system_packages(self):
self.pacman_install(*self.SYSTEM_PACKAGES)
def install_browser_packages(self):
- self.aur_install(*self.BROWSER_AUR_PACKAGES)
- self.pacman_install(*self.BROWSER_PACKAGES)
+ self.ensure_browser_packages()
+
+ def install_browser_artifact_mode_packages(self):
+ self.ensure_browser_packages(artifact_mode=True)
def install_mobile_android_packages(self):
self.ensure_mobile_android_packages()
def install_mobile_android_artifact_mode_packages(self):
self.ensure_mobile_android_packages(artifact_mode=True)
+ def ensure_browser_packages(self, artifact_mode=False):
+ # TODO: Figure out what not to install for artifact mode
+ self.aur_install(*self.BROWSER_AUR_PACKAGES)
+ self.pacman_install(*self.BROWSER_PACKAGES)
+
def ensure_mobile_android_packages(self, artifact_mode=False):
import android
# Multi-part process:
# 1. System packages.
# 2. Android SDK. Android NDK only if we are not in artifact mode.
# 3. Android packages.
--- a/python/mozboot/mozboot/base.py
+++ b/python/mozboot/mozboot/base.py
@@ -68,16 +68,24 @@ the $PATH environment variable.
We recommend the following tools for installing Python:
pyenv -- https://github.com/yyuu/pyenv)
pythonz -- https://github.com/saghul/pythonz
official installers -- http://www.python.org/
'''
+BROWSER_ARTIFACT_MODE_MOZCONFIG = '''
+Paste the lines between the chevrons (>>> and <<<) into your mozconfig file:
+
+<<<
+# Automatically download and use compiled C++ components:
+ac_add_options --enable-artifact-builds
+>>>
+'''
# Upgrade Mercurial older than this.
# This should match OLDEST_NON_LEGACY_VERSION from
# the hg setup wizard in version-control-tools.
MODERN_MERCURIAL_VERSION = LooseVersion('3.7.3')
# Upgrade Python older than this.
MODERN_PYTHON_VERSION = LooseVersion('2.7.3')
@@ -113,16 +121,36 @@ class BaseBootstrapper(object):
Print a message to the console detailing what the user's mozconfig
should contain.
Firefox for Desktop can in simple cases determine its build environment
entirely from configure.
'''
pass
+ def install_browser_artifact_mode_packages(self):
+ '''
+ Install packages required to build Firefox for Desktop (application
+ 'browser') in Artifact Mode.
+ '''
+ raise NotImplementedError(
+ 'Cannot bootstrap Firefox for Desktop Artifact Mode: '
+ '%s does not yet implement install_browser_artifact_mode_packages()' %
+ __name__)
+
+ def suggest_browser_artifact_mode_mozconfig(self):
+ '''
+ Print a message to the console detailing what the user's mozconfig
+ should contain.
+
+ Firefox for Desktop Artifact Mode needs to enable artifact builds and
+ a path where the build artifacts will be written to.
+ '''
+ print(BROWSER_ARTIFACT_MODE_MOZCONFIG)
+
def install_mobile_android_packages(self):
'''
Install packages required to build Firefox for Android (application
'mobile/android', also known as Fennec).
'''
raise NotImplementedError('Cannot bootstrap Firefox for Android: '
'%s does not yet implement install_mobile_android_packages()'
% __name__)
--- a/python/mozboot/mozboot/bootstrap.py
+++ b/python/mozboot/mozboot/bootstrap.py
@@ -49,26 +49,28 @@ later.
You can learn more about Artifact mode builds at
https://developer.mozilla.org/en-US/docs/Artifact_builds.
Your choice:
'''
APPLICATIONS_LIST=[
('Firefox for Desktop', 'browser'),
+ ('Firefox for Desktop Artifact Mode', 'browser_artifact_mode'),
('Firefox for Android Artifact Mode', 'mobile_android_artifact_mode'),
('Firefox for Android', 'mobile_android'),
]
# This is a workaround for the fact that we must support python2.6 (which has
# no OrderedDict)
APPLICATIONS = dict(
browser=APPLICATIONS_LIST[0],
- mobile_android_artifact_mode=APPLICATIONS_LIST[1],
- mobile_android=APPLICATIONS_LIST[2],
+ browser_artifact_mode=APPLICATIONS_LIST[1],
+ mobile_android_artifact_mode=APPLICATIONS_LIST[2],
+ mobile_android=APPLICATIONS_LIST[3],
)
STATE_DIR_INFO = '''
The Firefox build system and related tools store shared, persistent state
in a common directory on the filesystem. On this machine, that directory
is:
{statedir}
--- a/python/mozboot/mozboot/centosfedora.py
+++ b/python/mozboot/mozboot/centosfedora.py
@@ -78,38 +78,45 @@ class CentOSFedoraBootstrapper(BaseBoots
'zlib-devel.i686',
]
def install_system_packages(self):
self.dnf_groupinstall(*self.group_packages)
self.dnf_install(*self.packages)
def install_browser_packages(self):
- self.dnf_groupinstall(*self.browser_group_packages)
- self.dnf_install(*self.browser_packages)
+ self.ensure_browser_packages()
- if self.distro in ('CentOS', 'CentOS Linux'):
- yasm = 'http://pkgs.repoforge.org/yasm/yasm-1.1.0-1.el6.rf.i686.rpm'
- if platform.architecture()[0] == '64bit':
- yasm = 'http://pkgs.repoforge.org/yasm/yasm-1.1.0-1.el6.rf.x86_64.rpm'
-
- self.run_as_root(['rpm', '-ivh', yasm])
+ def install_browser_artifact_mode_packages(self):
+ self.ensure_browser_packages(artifact_mode=True)
def install_mobile_android_packages(self):
if self.distro in ('CentOS', 'CentOS Linux'):
BaseBootstrapper.install_mobile_android_packages(self)
elif self.distro == 'Fedora':
self.install_fedora_mobile_android_packages()
def install_mobile_android_artifact_mode_packages(self):
if self.distro in ('CentOS', 'CentOS Linux'):
BaseBootstrapper.install_mobile_android_artifact_mode_packages(self)
elif self.distro == 'Fedora':
self.install_fedora_mobile_android_packages(artifact_mode=True)
+ def ensure_browser_packages(self, artifact_mode=False):
+ # TODO: Figure out what not to install for artifact mode
+ self.dnf_groupinstall(*self.browser_group_packages)
+ self.dnf_install(*self.browser_packages)
+
+ if self.distro in ('CentOS', 'CentOS Linux'):
+ yasm = 'http://pkgs.repoforge.org/yasm/yasm-1.1.0-1.el6.rf.i686.rpm'
+ if platform.architecture()[0] == '64bit':
+ yasm = 'http://pkgs.repoforge.org/yasm/yasm-1.1.0-1.el6.rf.x86_64.rpm'
+
+ self.run_as_root(['rpm', '-ivh', yasm])
+
def install_fedora_mobile_android_packages(self, artifact_mode=False):
import android
# Install Android specific packages.
self.dnf_install(*self.mobile_android_packages)
# Fetch Android SDK and NDK.
mozbuild_path = os.environ.get('MOZBUILD_STATE_PATH', os.path.expanduser(os.path.join('~', '.mozbuild')))
--- a/python/mozboot/mozboot/debian.py
+++ b/python/mozboot/mozboot/debian.py
@@ -94,24 +94,31 @@ class DebianBootstrapper(BaseBootstrappe
self.browser_packages = self.BROWSER_COMMON_PACKAGES + self.BROWSER_DISTRO_PACKAGES
self.mobile_android_packages = self.MOBILE_ANDROID_COMMON_PACKAGES + self.MOBILE_ANDROID_DISTRO_PACKAGES
def install_system_packages(self):
self.apt_install(*self.packages)
def install_browser_packages(self):
- self.apt_install(*self.browser_packages)
+ self.ensure_browser_packages()
+
+ def install_browser_artifact_mode_packages(self):
+ self.ensure_browser_packages(artifact_mode=True)
def install_mobile_android_packages(self):
self.ensure_mobile_android_packages()
def install_mobile_android_artifact_mode_packages(self):
self.ensure_mobile_android_packages(artifact_mode=True)
+ def ensure_browser_packages(self, artifact_mode=False):
+ # TODO: Figure out what not to install for artifact mode
+ self.apt_install(*self.browser_packages)
+
def ensure_mobile_android_packages(self, artifact_mode=False):
import android
# Multi-part process:
# 1. System packages.
# 2. Android SDK. Android NDK only if we are not in artifact mode.
# 3. Android packages.
--- a/python/mozboot/mozboot/freebsd.py
+++ b/python/mozboot/mozboot/freebsd.py
@@ -46,12 +46,19 @@ class FreeBSDBootstrapper(BaseBootstrapp
command.extend(packages)
self.run_as_root(command)
def install_system_packages(self):
self.pkg_install(*self.packages)
def install_browser_packages(self):
+ self.ensure_browser_packages()
+
+ def install_browser_artifact_mode_packages(self):
+ self.ensure_browser_packages(artifact_mode=True)
+
+ def ensure_browser_packages(self, artifact_mode=False):
+ # TODO: Figure out what not to install for artifact mode
self.pkg_install(*self.browser_packages)
def upgrade_mercurial(self, current):
self.pkg_install('mercurial')
--- a/python/mozboot/mozboot/gentoo.py
+++ b/python/mozboot/mozboot/gentoo.py
@@ -11,16 +11,23 @@ class GentooBootstrapper(BaseBootstrappe
self.version = version
self.dist_id = dist_id
def install_system_packages(self):
self.run_as_root(['emerge', '--quiet', 'dev-vcs/git', 'mercurial'])
def install_browser_packages(self):
+ self.ensure_browser_packages()
+
+ def install_browser_artifact_mode_packages(self):
+ self.ensure_browser_packages(artifact_mode=True)
+
+ def ensure_browser_packages(self, artifact_mode=False):
+ # TODO: Figure out what not to install for artifact mode
self.run_as_root(['emerge', '--onlydeps', '--quiet', 'firefox'])
self.run_as_root(['emerge', '--quiet', 'gtk+'])
def _update_package_manager(self):
self.run_as_root(['emerge', '--sync'])
def upgrade_mercurial(self, current):
self.run_as_root(['emerge', '--update', 'mercurial'])
--- a/python/mozboot/mozboot/openbsd.py
+++ b/python/mozboot/mozboot/openbsd.py
@@ -29,10 +29,17 @@ class OpenBSDBootstrapper(BaseBootstrapp
'pulseaudio',
]
def install_system_packages(self):
# we use -z because there's no other way to say "any autoconf-2.13"
self.run_as_root(['pkg_add', '-z'] + self.packages)
def install_browser_packages(self):
+ self.ensure_browser_packages()
+
+ def install_browser_artifact_mode_packages(self):
+ self.ensure_browser_packages(artifact_mode=True)
+
+ def ensure_browser_packages(self, artifact_mode=False):
+ # TODO: Figure out what not to install for artifact mode
# we use -z because there's no other way to say "any autoconf-2.13"
self.run_as_root(['pkg_add', '-z'] + self.browser_packages)
--- a/python/mozboot/mozboot/osx.py
+++ b/python/mozboot/mozboot/osx.py
@@ -185,16 +185,19 @@ class OSXBootstrapper(BaseBootstrapper):
choice = self.ensure_package_manager()
self.package_manager = choice
getattr(self, 'ensure_%s_system_packages' % self.package_manager)()
def install_browser_packages(self):
getattr(self, 'ensure_%s_browser_packages' % self.package_manager)()
+ def install_browser_artifact_mode_packages(self):
+ getattr(self, 'ensure_%s_browser_packages' % self.package_manager)(artifact_mode=True)
+
def install_mobile_android_packages(self):
getattr(self, 'ensure_%s_mobile_android_packages' % self.package_manager)()
def install_mobile_android_artifact_mode_packages(self):
getattr(self, 'ensure_%s_mobile_android_packages' % self.package_manager)(artifact_mode=True)
def suggest_mobile_android_mozconfig(self):
getattr(self, 'suggest_%s_mobile_android_mozconfig' % self.package_manager)()
@@ -315,17 +318,18 @@ class OSXBootstrapper(BaseBootstrapper):
('git', 'git'),
('autoconf213', HOMEBREW_AUTOCONF213),
('gnu-tar', 'gnu-tar'),
('watchman', 'watchman',),
('terminal-notifier', 'terminal-notifier')
]
self._ensure_homebrew_packages(packages)
- def ensure_homebrew_browser_packages(self):
+ def ensure_homebrew_browser_packages(self, artifact_mode=False):
+ # TODO: Figure out what not to install for artifact mode
packages = [
('yasm', 'yasm'),
]
self._ensure_homebrew_packages(packages)
installed = self.check_output([self.brew, 'list']).split()
if self.os_version < StrictVersion('10.7') and b'llvm' not in installed:
print(PACKAGE_MANAGER_OLD_CLANG % ('Homebrew',))
@@ -403,17 +407,18 @@ class OSXBootstrapper(BaseBootstrapper):
'autoconf213',
'gnutar',
'watchman',
]
self._ensure_macports_packages(packages)
self.run_as_root([self.port, 'select', '--set', 'python', 'python27'])
- def ensure_macports_browser_packages(self):
+ def ensure_macports_browser_packages(self, artifact_mode=False):
+ # TODO: Figure out what not to install for artifact mode
packages = ['yasm']
self._ensure_macports_packages(packages)
installed = set(self.check_output([self.port, 'installed']).split())
if self.os_version < StrictVersion('10.7') and MACPORTS_CLANG_PACKAGE not in installed:
print(PACKAGE_MANAGER_OLD_CLANG % ('MacPorts',))
self.run_as_root([self.port, '-v', 'install', MACPORTS_CLANG_PACKAGE])