aboutsummaryrefslogtreecommitdiffstats
path: root/build/scripts/gen_ub.py
diff options
context:
space:
mode:
authorDevtools Arcadia <arcadia-devtools@yandex-team.ru>2022-02-07 18:08:42 +0300
committerDevtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net>2022-02-07 18:08:42 +0300
commit1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch)
treee26c9fed0de5d9873cce7e00bc214573dc2195b7 /build/scripts/gen_ub.py
downloadydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'build/scripts/gen_ub.py')
-rw-r--r--build/scripts/gen_ub.py86
1 files changed, 86 insertions, 0 deletions
diff --git a/build/scripts/gen_ub.py b/build/scripts/gen_ub.py
new file mode 100644
index 00000000000..ad79cda9261
--- /dev/null
+++ b/build/scripts/gen_ub.py
@@ -0,0 +1,86 @@
+import argparse
+import os
+import tarfile
+import contextlib
+import hashlib
+import base64
+import io
+
+
+stub = """#!/usr/bin/env python
+
+info = {info}
+data = "{data}"
+
+import platform
+import os
+import sys
+import tarfile
+import contextlib
+import io
+import base64
+
+
+def current_platform():
+ arch = platform.machine().upper()
+
+ if arch == 'AMD64':
+ arch = 'X86_64'
+
+ platf = platform.system().upper()
+
+ if platf.startswith('WIN'):
+ platf = 'WIN'
+
+ return (platf + '-' + arch).lower()
+
+
+def extract_file(fname):
+ with contextlib.closing(tarfile.open(fileobj=io.BytesIO(base64.b64decode(data)))) as f:
+ return f.extractfile(fname).read()
+
+
+fname = info[current_platform()]
+my_path = os.path.realpath(os.path.abspath(__file__))
+tmp_path = my_path + '.tmp'
+
+with open(tmp_path, 'wb') as f:
+ f.write(extract_file(fname))
+
+os.rename(tmp_path, my_path)
+os.chmod(my_path, 0775)
+os.execv(sys.argv[0], sys.argv)
+"""
+
+
+def gen_ub(output, data):
+ info = {}
+ binary = io.BytesIO()
+
+ with contextlib.closing(tarfile.open(mode='w:bz2', fileobj=binary, dereference=True)) as f:
+ for pl, path in data:
+ fname = os.path.basename(path)
+ pl = pl.split('-')
+ pl = pl[1] + '-' + pl[2]
+ info[pl] = fname
+ f.add(path, arcname=fname)
+
+ binary = binary.getvalue()
+ info['md5'] = hashlib.md5(binary).hexdigest()
+
+ with open(output, 'w') as f:
+ f.write(stub.format(info=info, data=base64.b64encode(binary)))
+
+ os.chmod(output, 0775)
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument('--path', action='append')
+ parser.add_argument('--platform', action='append')
+ parser.add_argument('--output', action='store')
+
+ args = parser.parse_args()
+
+ gen_ub(args.output, zip(args.platform, args.path))