mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-06-25 04:29:38 +00:00
173 lines
6.1 KiB
Python
173 lines
6.1 KiB
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
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
import os
|
|
import sys
|
|
|
|
from mozboot.base import BaseBootstrapper
|
|
|
|
|
|
MERCURIAL_INSTALL_PROMPT = '''
|
|
Mercurial releases a new version every 3 months and your distro's package
|
|
may become out of date. This may cause incompatibility with some
|
|
Mercurial extensions that rely on new Mercurial features. As a result,
|
|
you may not have an optimal version control experience.
|
|
|
|
To have the best Mercurial experience possible, we recommend installing
|
|
Mercurial via the "pip" Python packaging utility. This will likely result
|
|
in files being placed in /usr/local/bin and /usr/local/lib.
|
|
|
|
How would you like to continue?
|
|
|
|
1) Install a modern Mercurial via pip (recommended)
|
|
2) Install a legacy Mercurial via apt
|
|
3) Do not install Mercurial
|
|
|
|
Choice:
|
|
'''.strip()
|
|
|
|
|
|
class DebianBootstrapper(BaseBootstrapper):
|
|
# These are common packages for all Debian-derived distros (such as
|
|
# Ubuntu).
|
|
COMMON_PACKAGES = [
|
|
'autoconf2.13',
|
|
'build-essential',
|
|
'ccache',
|
|
'python-dev',
|
|
'python-pip',
|
|
'python-setuptools',
|
|
'unzip',
|
|
'uuid',
|
|
'zip',
|
|
]
|
|
|
|
# Subclasses can add packages to this variable to have them installed.
|
|
DISTRO_PACKAGES = []
|
|
|
|
# These are common packages for building Firefox for Desktop
|
|
# (browser) for all Debian-derived distros (such as Ubuntu).
|
|
BROWSER_COMMON_PACKAGES = [
|
|
'libasound2-dev',
|
|
'libcurl4-openssl-dev',
|
|
'libdbus-1-dev',
|
|
'libdbus-glib-1-dev',
|
|
'libgconf2-dev',
|
|
'libgstreamer0.10-dev',
|
|
'libgstreamer-plugins-base0.10-dev',
|
|
'libgtk2.0-dev',
|
|
'libgtk-3-dev',
|
|
'libiw-dev',
|
|
'libnotify-dev',
|
|
'libpulse-dev',
|
|
'libxt-dev',
|
|
'mesa-common-dev',
|
|
'python-dbus',
|
|
'yasm',
|
|
'xvfb',
|
|
]
|
|
|
|
# Subclasses can add packages to this variable to have them installed.
|
|
BROWSER_DISTRO_PACKAGES = []
|
|
|
|
# These are common packages for building Firefox for Android
|
|
# (mobile/android) for all Debian-derived distros (such as Ubuntu).
|
|
MOBILE_ANDROID_COMMON_PACKAGES = [
|
|
'zlib1g-dev', # mobile/android requires system zlib.
|
|
'openjdk-7-jdk',
|
|
'ant',
|
|
'wget', # For downloading the Android SDK and NDK.
|
|
'libncurses5:i386', # See comments about i386 below.
|
|
'libstdc++6:i386',
|
|
'zlib1g:i386',
|
|
]
|
|
|
|
# Subclasses can add packages to this variable to have them installed.
|
|
MOBILE_ANDROID_DISTRO_PACKAGES = []
|
|
|
|
def __init__(self, version, dist_id, **kwargs):
|
|
BaseBootstrapper.__init__(self, **kwargs)
|
|
|
|
self.version = version
|
|
self.dist_id = dist_id
|
|
|
|
self.packages = self.COMMON_PACKAGES + self.DISTRO_PACKAGES
|
|
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)
|
|
|
|
def install_mobile_android_packages(self):
|
|
import android
|
|
|
|
# Multi-part process:
|
|
# 1. System packages.
|
|
# 2. Android SDK and NDK.
|
|
# 3. Android packages.
|
|
|
|
# 1. This is hard to believe, but the Android SDK binaries are 32-bit
|
|
# and that conflicts with 64-bit Debian and Ubuntu installations out of
|
|
# the box. The solution is to add the i386 architecture. See
|
|
# "Troubleshooting Ubuntu" at
|
|
# http://developer.android.com/sdk/installing/index.html?pkg=tools.
|
|
self.run_as_root(['dpkg', '--add-architecture', 'i386'])
|
|
# After adding a new arch, the list of packages has to be updated
|
|
self.apt_update()
|
|
self.apt_install(*self.mobile_android_packages)
|
|
|
|
# 2. The user may have an external Android SDK (in which case we save
|
|
# them a lengthy download), or they may have already completed the
|
|
# download. We unpack to ~/.mozbuild/{android-sdk-linux, android-ndk-r10e}.
|
|
mozbuild_path = os.environ.get('MOZBUILD_STATE_PATH', os.path.expanduser(os.path.join('~', '.mozbuild')))
|
|
self.sdk_path = os.environ.get('ANDROID_SDK_HOME', os.path.join(mozbuild_path, 'android-sdk-linux'))
|
|
self.ndk_path = os.environ.get('ANDROID_NDK_HOME', os.path.join(mozbuild_path, 'android-ndk-r10e'))
|
|
self.sdk_url = 'https://dl.google.com/android/android-sdk_r24.0.1-linux.tgz'
|
|
self.ndk_url = android.android_ndk_url('linux')
|
|
|
|
android.ensure_android_sdk_and_ndk(path=mozbuild_path,
|
|
sdk_path=self.sdk_path, sdk_url=self.sdk_url,
|
|
ndk_path=self.ndk_path, ndk_url=self.ndk_url)
|
|
|
|
# 3. We expect the |android| tool to at
|
|
# ~/.mozbuild/android-sdk-linux/tools/android.
|
|
android_tool = os.path.join(self.sdk_path, 'tools', 'android')
|
|
android.ensure_android_packages(android_tool=android_tool)
|
|
|
|
def suggest_mobile_android_mozconfig(self):
|
|
import android
|
|
android.suggest_mozconfig(sdk_path=self.sdk_path,
|
|
ndk_path=self.ndk_path)
|
|
|
|
def _update_package_manager(self):
|
|
self.apt_update()
|
|
|
|
def upgrade_mercurial(self, current):
|
|
"""Install Mercurial from pip because Debian packages typically lag."""
|
|
if self.no_interactive:
|
|
# Install via Apt in non-interactive mode because it is the more
|
|
# conservative option and less likely to make people upset.
|
|
self.apt_install('mercurial')
|
|
return
|
|
|
|
res = self.prompt_int(MERCURIAL_INSTALL_PROMPT, 1, 3)
|
|
|
|
# Apt.
|
|
if res == 2:
|
|
self.apt_install('mercurial')
|
|
return False
|
|
|
|
# No Mercurial.
|
|
if res == 3:
|
|
print('Not installing Mercurial.')
|
|
return False
|
|
|
|
# pip.
|
|
assert res == 1
|
|
self.run_as_root(['pip', 'install', '--upgrade', 'Mercurial'])
|