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