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
|
#!/usr/bin/env python
from __future__ import print_function
import re, sys
from dist import all_c_files, all_h_files, compare_srcfile
# Automatically build flags values: read through all of the header files, and
# for each group of flags, sort them and give them a unique value.
#
# To add a new flag declare it at the top of the flags list as:
# #define WT_NEW_FLAG_NAME 0x0u
#
# and it will be automatically alphabetized and assigned the proper value.
def flag_declare(name):
tmp_file = '__tmp'
with open(name, 'r') as f:
tfile = open(tmp_file, 'w')
lcnt = 0
parsing = False
for line in f:
lcnt = lcnt + 1
if line.find('AUTOMATIC FLAG VALUE GENERATION START') != -1:
header = line
defines = []
parsing = True
elif line.find('AUTOMATIC FLAG VALUE GENERATION STOP') != -1:
# We only support 64 bits.
if len(defines) > 64:
print(name + ": line " + str(lcnt) +\
": exceeds maximum 64 bit flags", file=sys.stderr)
sys.exit(1)
# Calculate number of hex bytes, create format string
fmt = "0x%%0%dxu" % ((len(defines) + 3) / 4)
tfile.write(header)
v = 1
for d in sorted(defines):
tfile.write(re.sub("0x[01248u]*", fmt % v, d))
v = v * 2
tfile.write(line)
parsing = False
elif parsing and line.find('#define') == -1:
print(name + ": line " + str(lcnt) +\
": unexpected flag line, no #define", file=sys.stderr)
sys.exit(1)
elif parsing:
defines.append(line)
else:
tfile.write(line)
tfile.close()
compare_srcfile(tmp_file, name)
# Update function argument declarations.
for name in all_h_files():
flag_declare(name)
for name in all_c_files():
flag_declare(name)
|