1import os, shutil
2import re
3
4from build.project import Project
5
6class BoostProject(Project):
7    def __init__(self, url, md5, installed,
8                 **kwargs):
9        m = re.match(r'.*/boost_(\d+)_(\d+)_(\d+)\.tar\.bz2$', url)
10        version = "%s.%s.%s" % (m.group(1), m.group(2), m.group(3))
11        Project.__init__(self, url, md5, installed,
12                         name='boost', version=version,
13                         **kwargs)
14
15    def _build(self, toolchain):
16        src = self.unpack(toolchain)
17
18        # install the headers manually; don't build any library
19        # (because right now, we only use header-only libraries)
20        includedir = os.path.join(toolchain.install_prefix, 'include')
21        dest = os.path.join(includedir, 'boost')
22        shutil.rmtree(dest, ignore_errors=True)
23        shutil.copytree(os.path.join(src, 'boost'), dest)
24
25        # touch the boost/version.hpp file to ensure it's newer than
26        # the downloaded Boost tarball, to avoid reinstalling Boost on
27        # every run
28        os.utime(os.path.join(toolchain.install_prefix, self.installed))
29