| #!/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() |