|  | #!/usr/bin/env python | 
|  |  | 
|  | import os | 
|  | import re | 
|  | import sys | 
|  |  | 
|  | allconfigs = {} | 
|  |  | 
|  | # Parse config files | 
|  | for config in os.listdir("."): | 
|  | # Only config.* | 
|  | if not config.startswith("config."): | 
|  | continue | 
|  | # Ignore emacs backups | 
|  | if config.endswith("~"): | 
|  | continue | 
|  | # Nothing that is disabled, or remnant | 
|  | if re.search("\.(default|disabled|stub)$", config): | 
|  | continue | 
|  |  | 
|  | allconfigs[config] = set() | 
|  |  | 
|  | for line in open(config): | 
|  | m = re.match("#*\s*CONFIG_(\w+)[\s=](.*)$", line) | 
|  | if not m: | 
|  | continue | 
|  | option, value = m.groups() | 
|  | allconfigs[config].add((option, value)) | 
|  |  | 
|  | # Split out common config options | 
|  | common = allconfigs.values()[0].copy() | 
|  | for config in allconfigs.keys(): | 
|  | common &= allconfigs[config] | 
|  | for config in allconfigs.keys(): | 
|  | allconfigs[config] -= common | 
|  | allconfigs["config.common"] = common | 
|  |  | 
|  | # Generate new splitconfigs | 
|  | for config in allconfigs.keys(): | 
|  | f = open(config, "w") | 
|  | command = os.path.basename(sys.argv[0]) | 
|  | print >>f, "#\n# Config options generated by %s\n#" % command | 
|  | for option, value in sorted(list(allconfigs[config])): | 
|  | if value == "is not set": | 
|  | print >>f, "# CONFIG_%s %s" % (option, value) | 
|  | else: | 
|  | print >>f, "CONFIG_%s=%s" % (option, value) | 
|  |  | 
|  | f.close() |