Bug 1275437 - Windows bootstrapper installs necessary system and browser packages that come from pacman. r?gps draft
authorNathan Hakkakzadeh <nhakkakzadeh@mozilla.com>
Thu, 26 May 2016 09:53:14 -0700
changeset 374686 06c11a1371f5da8fded0384e9213455cfe332f58
parent 371482 c1511267eeb5da93d7fbafff4cf153b2ff0cb645
child 374687 d5a66ea6da584605e5f184be044af1809bb93bb2
push id20064
push userbmo:nhakkakzadeh@mozilla.com
push dateThu, 02 Jun 2016 19:38:21 +0000
reviewersgps
bugs1275437
milestone49.0a1
Bug 1275437 - Windows bootstrapper installs necessary system and browser packages that come from pacman. r?gps Windows bootstrapper checks if pacman is installed before continuing. Added a convenience method similar to BaseBootstrapper.which that works with the mingw version of python in msys2. MozReview-Commit-ID: 6AG2c18KF0U
python/mozboot/mozboot/windows.py
--- a/python/mozboot/mozboot/windows.py
+++ b/python/mozboot/mozboot/windows.py
@@ -5,24 +5,67 @@
 import os
 import sys
 import subprocess
 
 from mozboot.base import BaseBootstrapper
 
 class WindowsBootstrapper(BaseBootstrapper):
     '''Bootstrapper for msys2 based environments for building in Windows.'''
+
+    SYSTEM_PACKAGES = [
+        'mingw-w64-x86_64-make',
+        'mingw-w64-x86_64-python2',
+        'mingw-w64-x86_64-python2-pip',
+        'mingw-w64-x86_64-perl',
+        'patch',
+        'patchutils',
+        'diffutils',
+        'autoconf2.13',
+        'tar',
+        'zip',
+        'unzip',
+        'mingw-w64-x86_64-toolchain', # TODO: Should be removed when Mercurial is installable from a wheel.
+        'mingw-w64-i686-toolchain'
+    ]
+
+    BROWSER_PACKAGES = [
+        'mingw-w64-x86_64-yasm',
+        'mingw-w64-i686-nsis'
+    ]
+
+    MOBILE_ANDROID_COMMON_PACKAGES = [
+        'wget'
+    ]
+
     def __init__(self, **kwargs):
         if 'MOZ_WINDOWS_BOOTSTRAP' not in os.environ or os.environ['MOZ_WINDOWS_BOOTSTRAP'] != '1':
             raise NotImplementedError('Bootstrap support for Windows is under development. For now, use MozillaBuild '
                                       'to set up a build environment on Windows. If you are testing Windows Bootstrap support, '
                                       'try `export MOZ_WINDOWS_BOOTSTRAP=1`')
         BaseBootstrapper.__init__(self, **kwargs)
-        raise NotImplementedError('Bootstrap support is not yet available for Windows. '
-                                  'For now, use MozillaBuild to set up a build environment on Windows.')
+        if not self.which('pacman.exe'):
+            raise NotImplementedError('The Windows bootstrapper only works with msys2 with pacman. Get msys2 at '
+                                      'http://msys2.github.io/')
+        print 'Using an experimental bootstrapper for Windows.'
+
+    def install_system_packages(self):
+        self.pacman_install(*self.SYSTEM_PACKAGES)
+
+    def install_browser_packages(self):
+        self.pacman_install(*self.BROWSER_PACKAGES)
+
+    def install_mobile_android_packages(self):
+        raise NotImplementedError('We do not support building Android on Windows. Sorry!')
+
+    def install_mobile_android_artifact_mode_packages(self):
+        raise NotImplementedError('We do not support building Android on Windows. Sorry!')
+
+    def _update_package_manager(self):
+        self.pacman_update()
 
     def run(self, command):
         subprocess.check_call(command, stdin=sys.stdin)
 
     def pacman_update(self):
         command = ['pacman', '--sync', '--refresh']
         self.run(command)