aboutsummaryrefslogtreecommitdiffstats
path: root/python/build
diff options
context:
space:
mode:
Diffstat (limited to 'python/build')
-rw-r--r--python/build/project.py60
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