aboutsummaryrefslogtreecommitdiffstats
path: root/python/servo/bootstrapper/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/servo/bootstrapper/base.py')
-rw-r--r--python/servo/bootstrapper/base.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/python/servo/bootstrapper/base.py b/python/servo/bootstrapper/base.py
new file mode 100644
index 00000000000..40f3d1f5ebc
--- /dev/null
+++ b/python/servo/bootstrapper/base.py
@@ -0,0 +1,62 @@
+# 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/.
+
+from __future__ import print_function, unicode_literals
+
+import distutils
+import subprocess
+
+
+class BaseBootstrapper(object):
+ """Base class for system bootstrappers."""
+
+ def __init__(self, interactive=False):
+ self.package_manager_updated = False
+ self.interactive = interactive
+
+ def ensure_system_packages(self):
+ '''
+ Check for missing packages.
+ '''
+ raise NotImplementedError('%s must implement ensure_system_packages()' %
+ __name__)
+
+ def install_system_packages(self):
+ '''
+ Install packages required to build Servo.
+ '''
+ raise NotImplementedError('%s must implement install_system_packages()' %
+ __name__)
+
+ def install_mobile_android_packages(self):
+ '''
+ Install packages required to build Servo for Android.
+ '''
+ raise NotImplementedError('Cannot bootstrap Servo for Android: '
+ '%s does not yet implement install_mobile_android_packages()'
+ % __name__)
+
+ def which(self, name):
+ """Python implementation of which.
+
+ It returns the path of an executable or None if it couldn't be found.
+ """
+ return distutils.spawn.find_executable(name)
+
+ def check_output(self, *args, **kwargs):
+ """Run subprocess.check_output."""
+ return subprocess.check_output(*args, **kwargs)
+
+ def _ensure_package_manager_updated(self):
+ if self.package_manager_updated:
+ return
+
+ self._update_package_manager()
+ self.package_manager_updated = True
+
+ def _update_package_manager(self):
+ """Updates the package manager's manifests/package list.
+
+ This should be defined in child classes.
+ """