Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sjhbuild/bundlemodule.py
blob: 2d1b3896108140b67204be59fda5c7ec0fabe0ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
__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)