aboutsummaryrefslogtreecommitdiffstats
path: root/build/scripts/gen_ub.py
blob: cced92e99bde22b58958ebb6b7db207f5229b050 (plain) (blame)
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
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))