Bug 1398935 - Make |mach bootstrap| support 'mobile/android' builds on Gentoo; r?gps draft
authorGabriele Svelto <gsvelto@mozilla.com>
Mon, 11 Sep 2017 23:42:53 +0200
changeset 662643 4080396697bfd108914ab4d6de0e4d0aea2eb15b
parent 662089 a5f163da8a9be5d2e86138c57d59be69723b5457
child 730931 698eec8492ee6ae9a590801cf85c185067b5539f
push id79149
push usergsvelto@mozilla.com
push dateMon, 11 Sep 2017 22:11:02 +0000
reviewersgps
bugs1398935
milestone57.0a1
Bug 1398935 - Make |mach bootstrap| support 'mobile/android' builds on Gentoo; r?gps This also passes the '--noreplace' option to all the emerge invocations thus preventing already installed packages from being rebuilt from scratch. MozReview-Commit-ID: 4JBuptmgS3Y
python/mozboot/mozboot/gentoo.py
--- a/python/mozboot/mozboot/gentoo.py
+++ b/python/mozboot/mozboot/gentoo.py
@@ -9,26 +9,69 @@ from mozboot.linux_common import StyloIn
 class GentooBootstrapper(StyloInstall, BaseBootstrapper):
     def __init__(self, version, dist_id, **kwargs):
         BaseBootstrapper.__init__(self, **kwargs)
 
         self.version = version
         self.dist_id = dist_id
 
     def install_system_packages(self):
-        self.run_as_root(['emerge', '--quiet', 'dev-vcs/git', 'mercurial'])
+        self.run_as_root(['emerge', '--noreplace', '--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 install_mobile_android_packages(self):
+        self.ensure_mobile_android_packages(artifact_mode=False)
+
+    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.run_as_root(['emerge', '--onlydeps', '--quiet', 'firefox'])
-        self.run_as_root(['emerge', '--quiet', 'gtk+'])
+        self.run_as_root(['emerge', '--noreplace', '--quiet', 'gtk+'])
+
+    def ensure_mobile_android_packages(self, artifact_mode=False):
+        import re
+        import subprocess
+
+        # For downloading the Oracle JDK, Android SDK and NDK.
+        self.run_as_root(['emerge', '--noreplace', '--quiet', 'wget'])
+
+        # Obtain the path held in the DISTDIR portage variable
+        emerge_info = subprocess.check_output(['emerge', '--info'])
+        distdir_re = re.compile('^DISTDIR="(.*)"$', re.MULTILINE)
+        distdir = distdir_re.search(emerge_info).group(1)
+
+        # Fetch the Oracle JDK since portage can't fetch it on its own
+        jdk_file = 'jdk-8u144-linux-x64.tar.gz'
+        self.run_as_root(['wget', '-c', '-O', distdir + '/' + jdk_file,
+                          '--header', 'Cookie: oraclelicense=accept-securebackup-cookie',
+                          'http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/' + jdk_file])
+
+        # Install the Oracle JDK. We explicitly prompt the user to accept the
+        # changes because this command might need to modify the portage
+        # configuration files and doing so without user supervision is dangerous
+        self.run_as_root(['emerge', '--noreplace', '--quiet',
+                          '--autounmask-continue', '--ask',
+                          '=dev-java/oracle-jdk-bin-1.8.0.144'])
+
+        import android
+        android.ensure_android('linux', artifact_mode=artifact_mode,
+                               no_interactive=self.no_interactive)
+
+    def suggest_mobile_android_mozconfig(self, artifact_mode=False):
+        import android
+        android.suggest_mozconfig('linux', artifact_mode=artifact_mode)
+
+    def suggest_mobile_android_artifact_mode_mozconfig(self):
+        self.suggest_mobile_android_mozconfig(artifact_mode=True)
 
     def _update_package_manager(self):
         self.run_as_root(['emerge', '--sync'])
 
     def upgrade_mercurial(self, current):
         self.run_as_root(['emerge', '--update', 'mercurial'])