diff options
Diffstat (limited to 'python/build')
-rw-r--r-- | python/build/project.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/python/build/project.py b/python/build/project.py new file mode 100644 index 000000000..9a04e9ce4 --- /dev/null +++ b/python/build/project.py @@ -0,0 +1,60 @@ +import os, shutil +import re + +from build.download import download_and_verify +from build.tar import untar + +class Project: + def __init__(self, url, md5, installed, name=None, version=None, + base=None, + use_cxx=False, use_clang=False): + if base is None: + basename = os.path.basename(url) + m = re.match(r'^(.+)\.(tar(\.(gz|bz2|xz|lzma))?|zip)$', basename) + if not m: raise + self.base = m.group(1) + else: + self.base = base + + if name is None or version is None: + m = re.match(r'^([-\w]+)-(\d[\d.]*[a-z]?)$', self.base) + if name is None: name = m.group(1) + if version is None: version = m.group(2) + + self.name = name + self.version = version + + self.url = url + self.md5 = md5 + self.installed = installed + + self.use_cxx = use_cxx + self.use_clang = use_clang + + def download(self, toolchain): + return download_and_verify(self.url, self.md5, toolchain.tarball_path) + + def is_installed(self, toolchain): + tarball = self.download(toolchain) + installed = os.path.join(toolchain.install_prefix, self.installed) + tarball_mtime = os.path.getmtime(tarball) + try: + return os.path.getmtime(installed) >= tarball_mtime + except FileNotFoundError: + return False + + def unpack(self, toolchain, out_of_tree=True): + if out_of_tree: + parent_path = toolchain.src_path + else: + parent_path = toolchain.build_path + return untar(self.download(toolchain), parent_path, self.base) + + def make_build_path(self, toolchain): + path = os.path.join(toolchain.build_path, self.base) + try: + shutil.rmtree(path) + except FileNotFoundError: + pass + os.makedirs(path, exist_ok=True) + return path |