-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgenerate.py
More file actions
66 lines (59 loc) · 2.16 KB
/
generate.py
File metadata and controls
66 lines (59 loc) · 2.16 KB
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
import sys
from collections import defaultdict
def lines():
while True:
try:
yield input()
except:
break
def extractFileLists(reader, desired: set[str]):
result = defaultdict(list)
inside = None
for line in reader:
if inside is None and '=' in line:
sep = '+=' if '+=' in line else '='
assigned, value = map(str.strip, line.split(sep, 1))
if assigned in desired:
if value and value[-1] == '\\':
inside = assigned
value = value[:-1].strip()
if value:
result[assigned].append(value)
elif inside:
value = line.strip()
dest = inside
if value and value[-1] == '\\':
value = value[:-1].strip()
else:
inside = None
if value:
result[dest].append(value)
return result
def extractSubLists(prefix, current):
sublists = defaultdict(list)
for e in current:
a, b, f = e.split('/', 2)
sublists[f'{prefix}_{a}_{b.replace("-", "_")}'].append(f)
return sublists
def splitByLanguage(prefix, current):
sublists = defaultdict(list)
for e in current:
if e.endswith('.c'):
sublists[f'{prefix}_c'].append(e)
else:
sublists[f'{prefix}_cpp'].append(e)
return sublists
filelists = extractFileLists(lines(), {'LIBGRPC_SRC', 'PUBLIC_HEADERS_C', 'LIBBORINGSSL_SRC', 'LIBCARES_SRC', 'LIBZ_SRC'})
libgrpc = extractSubLists('libgrpc', filelists.pop('LIBGRPC_SRC'))
filelists |= libgrpc
libgrpc = splitByLanguage('libgrpc_src_core', filelists.pop('libgrpc_src_core'))
filelists |= libgrpc
filelists['libcares_src'] = [f.split('/', 3)[-1] for f in filelists.pop('LIBCARES_SRC')]
filelists['libboringssl_src'] = [f.split('/', 3)[-1] for f in filelists.pop('LIBBORINGSSL_SRC')]
filelists['libz_src'] = [f.split('/', 2)[-1] for f in filelists.pop('LIBZ_SRC')]
for name, files in filelists.items():
print(name.lower(), file=sys.stderr)
print('pub const ' + name.lower() + ' = .{')
for f in files:
print(f' "{f}",')
print('};')