__metaclass__ = type import os from jhbuild.errors import BuildStateError from jhbuild.modtypes import Package, get_branch, register_module_type __all__ = ['BundleModule'] class BundleModule(Package): type = 'bundle' PHASE_CHECKOUT = 'checkout' PHASE_FORCE_CHECKOUT = 'force_checkout' PHASE_BUILD = 'build' PHASE_INSTALL = 'install' def __init__(self, name, branch, dependencies=None, after=None): Package.__init__(self, name, dependencies or [], after or []) self.branch = branch def get_srcdir(self, buildscript): return self.branch.srcdir def get_builddir(self, buildscript): return self.get_srcdir(buildscript) def get_revision(self): return self.branch.branchname def do_start(self, buildscript): pass do_start.next_phase = PHASE_CHECKOUT do_start.error_phases = [] def skip_checkout(self, buildscript, last_state): # skip the checkout stage if the nonetwork flag is set return buildscript.config.nonetwork def do_checkout(self, buildscript): srcdir = self.get_srcdir(buildscript) buildscript.set_action('Checking out', self) self.branch.checkout(buildscript) # did the checkout succeed? if not os.path.exists(srcdir): raise BuildStateError('source directory %s was not created' % srcdir) do_checkout.next_phase = PHASE_BUILD do_checkout.error_phases = [PHASE_FORCE_CHECKOUT] def skip_force_checkout(self, buildscript, last_state): return False def do_force_checkout(self, buildscript): buildscript.set_action('Checking out', self) self.branch.force_checkout(buildscript) do_force_checkout.next_phase = PHASE_BUILD do_force_checkout.error_phases = [PHASE_FORCE_CHECKOUT] def skip_build(self, buildscript, last_state): return buildscript.config.nobuild def do_build(self, buildscript): buildscript.set_action('Building', self) srcdir = self.get_srcdir(buildscript) python = os.environ.get('PYTHON', 'python') cmd = [python, 'setup.py', 'fix_manifest'] buildscript.execute(cmd, cwd=srcdir) cmd = [python, 'setup.py', 'build'] buildscript.execute(cmd, cwd=srcdir) do_build.next_phase = PHASE_INSTALL do_build.error_phases = [PHASE_FORCE_CHECKOUT] do_build.depends = [PHASE_CHECKOUT] def skip_install(self, buildscript, last_state): return buildscript.config.nobuild def do_install(self, buildscript): buildscript.set_action('Installing', self) srcdir = self.get_srcdir(buildscript) python = os.environ.get('PYTHON', 'python') cmd = [python, 'setup.py', 'install'] cmd.extend(['--prefix', buildscript.config.prefix]) buildscript.execute(cmd, cwd=srcdir) buildscript.packagedb.add(self.name, self.get_revision() or '') do_install.next_phase = Package.PHASE_DONE do_install.error_phases = [] do_install.depends = [PHASE_BUILD] def parse_bundle(node, config, uri, repositories, default_repo): bundle_id = node.getAttribute('id') branch = get_branch(node, repositories, default_repo, config) return BundleModule(bundle_id, branch) register_module_type('bundle', parse_bundle)