1eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien#!/usr/bin/env python
2eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien
3eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chienimport re
4eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chienimport sys
5eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien
6eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chiendef extract_config(f):
74885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien    conf_patt = re.compile('# Configurations')
84885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien    split_patt = re.compile('#={69}')
9eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien    var_patt = re.compile('libbcc_([A-Z_]+)\\s*:=\\s*([01])')
10eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien
114885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien    STATE_PRE_CONFIG = 0
124885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien    STATE_FOUND_CONFIG = 1
134885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien    STATE_IN_CONFIG = 2
144885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien
154885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien    state = STATE_PRE_CONFIG
164885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien
17eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien    for line in f:
184885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien        if state == STATE_PRE_CONFIG:
194885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien            if conf_patt.match(line.strip()):
204885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien                state = STATE_FOUND_CONFIG
214885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien
224885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien        elif state == STATE_FOUND_CONFIG:
234885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien            if split_patt.match(line.strip()):
244885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien                # Start reading the configuration
254885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien                print '/* BEGIN USER CONFIG */'
264885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien                state = STATE_IN_CONFIG
274885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien
284885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien        elif state == STATE_IN_CONFIG:
294885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien            match = var_patt.match(line.strip())
304885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien            if match:
314885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien                print '#define', match.group(1), match.group(2)
324885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien
334885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien            elif split_patt.match(line.strip()):
344885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien                # Stop reading the configuration
354885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien                print '/* END USER CONFIG */'
364885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien                break
37eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien
38eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chiendef main():
39eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien    if len(sys.argv) != 1:
40eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien        print >> sys.stderr, 'USAGE:', sys.argv[0]
41eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien        sys.exit(1)
42eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien
43eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien    extract_config(sys.stdin)
44eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien
45eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien
46eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chienif __name__ == '__main__':
47eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien    main()
48