aboutsummaryrefslogtreecommitdiffstats
path: root/build/scripts/link_asrc.py
blob: 704075f554599b9814aefbc5e456e3018d3a1e34 (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
import argparse 
import itertools 
import os 
import tarfile 
 
 
DELIM_JAVA = '__DELIM_JAVA__' 
DELIM_RES = '__DELIM_RES__' 
DELIM_ASSETS = '__DELIM_ASSETS__' 
DELIM_AIDL = '__DELIM_AIDL__' 
 
DELIMS = ( 
    DELIM_JAVA, 
    DELIM_RES, 
    DELIM_ASSETS, 
    DELIM_AIDL, 
) 
 
DESTS = { 
    DELIM_JAVA: 'src', 
    DELIM_RES: 'res', 
    DELIM_ASSETS: 'assets', 
    DELIM_AIDL: 'aidl', 
} 
 
 
def parse_args(): 
    parser = argparse.ArgumentParser() 
    parser.add_argument('--asrcs', nargs='*') 
    parser.add_argument('--input', nargs='*') 
    parser.add_argument('--jsrcs', nargs='*') 
    parser.add_argument('--output', required=True) 
    parser.add_argument('--work', required=True) 
 
    return parser.parse_args() 
 
 
def main(): 
    args = parse_args() 
 
    files = [] 
    parts = [] 
 
    if args.input and len(args.input) > 0: 
        for x in args.input: 
            if x in DELIMS: 
                assert(len(parts) == 0 or len(parts[-1]) > 1) 
                parts.append([x]) 
            else: 
                assert(len(parts) > 0) 
                parts[-1].append(x) 
        assert(len(parts[-1]) > 1) 
 
    if args.jsrcs and len(args.jsrcs): 
        src_dir = os.path.join(args.work, DESTS[DELIM_JAVA]) 
        os.makedirs(src_dir) 
 
        for jsrc in filter(lambda x: x.endswith('.jsrc'), args.jsrcs): 
            with tarfile.open(jsrc, 'r') as tar: 
                names = tar.getnames() 
                if names and len(names) > 0: 
                    parts.append([DELIM_JAVA, src_dir]) 
                    parts[-1].extend(itertools.imap(lambda x: os.path.join(src_dir, x), names)) 
                    tar.extractall(path=src_dir) 
 
    if args.asrcs and len(args.asrcs): 
        for asrc in filter(lambda x: x.endswith('.asrc') and os.path.exists(x), args.asrcs): 
            with tarfile.open(asrc, 'r') as tar: 
                files.extend(tar.getnames()) 
                tar.extractall(path=args.work) 
 
    with tarfile.open(args.output, 'w') as out: 
        for part in parts: 
            dest = DESTS[part[0]] 
            prefix = part[1] 
            for f in part[2:]: 
                out.add(f, arcname=os.path.join(dest, os.path.relpath(f, prefix))) 
 
        for f in files: 
            out.add(os.path.join(args.work, f), arcname=f) 
 
 
if __name__ == '__main__': 
    main()