--- /dev/null
+#!/bin/env python
+#
+# compare: a tool to compare kernel config files
+#
+# Marc E. Fiuczynski <mef@cs.princeton.edu>
+# Copyright (C) 2006 The Trustees of Princeton University
+#
+# $Id:$
+#
+
+import sys, re, os
+
+def process(file):
+ ORDER = []
+ CONFIGS = {}
+ for line in file.readlines():
+ iline = line.lower()
+
+ offset=iline.find(" is not set")
+ if offset <> -1:
+ config = line[line.find("CONFIG"):offset].strip()
+ if CONFIGS.has_key(config): print "duplicate entry %s" % config
+ CONFIGS[config]=0
+ ORDER.append(config)
+ continue
+
+ offset = iline.find("=y")
+ if offset <> -1:
+ config = line[line.find("CONFIG"):offset].strip()
+ if CONFIGS.has_key(config): print "duplicate entry %s" % config
+ CONFIGS[config]=1
+ ORDER.append(config)
+ continue
+
+ offset = iline.find("=m")
+ if iline.find("=m") <> -1:
+ config = line[line.find("CONFIG"):offset].strip()
+ if CONFIGS.has_key(config): print "duplicate entry %s" % config
+ CONFIGS[config]=2
+ ORDER.append(config)
+ continue
+
+ return (CONFIGS,ORDER)
+
+
+showall=False
+args = sys.argv[1:]
+
+if len(args) <=1:
+ name = os.path.basename(sys.argv[0])
+ print "USAGE: %s [options] from.config to.config" % name
+ print """
+Options
+ -a Show all differences
+
+State Legend
+ A Added config (exists in to.config, but not in from.config)
+ R Removed config (exists in from.config, but not in to.config)
+ B Builtin
+ M Module
+ D Disabled
+ """
+ sys.exit(0)
+
+if args[0] == "-a":
+ showall = True
+ args = args[1:]
+
+(old,oldorder)= process(open(args[0]))
+(new,neworder)= process(open(args[1]))
+
+oldstate = {-1:'A',0:'D',1:'B',2:'M'}
+newstate = {-1:'R',0:'D',1:'B',2:'M'}
+
+keys = neworder
+for key in keys:
+ o = old.get(key,-1)
+ n = new[key]
+ if n==o and not showall: continue
+ print "%c -> %c : %s" % (newstate[o],newstate[n],key)
+
+# not sure we care about what options have been removed
+# from from.config file
+sys.exit(0)
+keys = oldorder
+for key in keys:
+ n = new.get(key,-1)
+ o = old[key]
+ if n == -1 and not showall:
+ print "%c -> %c : %s" % (oldstate[o],oldstate[n],key)
+
--- /dev/null
+#!/bin/env python
+#
+# compare: a tool to compare kernel config files
+#
+# Marc E. Fiuczynski <mef@cs.princeton.edu>
+# Copyright (C) 2006 The Trustees of Princeton University
+#
+# $Id: compare,v 1.1 2006/11/30 16:39:29 mef Exp $
+#
+
+import sys, re, os
+
+def process(file):
+ ORDER = []
+ CONFIGS = {}
+ for line in file.readlines():
+ iline = line.lower()
+
+ offset=iline.find(" is not set")
+ if offset <> -1:
+ config = line[line.find("CONFIG"):offset].strip()
+ if CONFIGS.has_key(config): print "duplicate entry %s" % config
+ CONFIGS[config]=0
+ ORDER.append(config)
+ continue
+
+ offset = iline.find("=y")
+ if offset <> -1:
+ config = line[line.find("CONFIG"):offset].strip()
+ if CONFIGS.has_key(config): print "duplicate entry %s" % config
+ CONFIGS[config]=1
+ ORDER.append(config)
+ continue
+
+ offset = iline.find("=m")
+ if iline.find("=m") <> -1:
+ config = line[line.find("CONFIG"):offset].strip()
+ if CONFIGS.has_key(config): print "duplicate entry %s" % config
+ CONFIGS[config]=2
+ ORDER.append(config)
+ continue
+
+ return (CONFIGS,ORDER)
+
+
+showall=False
+args = sys.argv[1:]
+
+if len(args) <=1:
+ name = os.path.basename(sys.argv[0])
+ print "USAGE: %s [options] from.config to.config" % name
+ print """
+Options
+ -a Show all differences
+
+State Legend
+ A Added config (exists in to.config, but not in from.config)
+ R Removed config (exists in from.config, but not in to.config)
+ B Builtin
+ M Module
+ D Disabled
+ """
+ sys.exit(0)
+
+if args[0] == "-a":
+ showall = True
+ args = args[1:]
+
+(old,oldorder)= process(open(args[0]))
+(new,neworder)= process(open(args[1]))
+
+oldstate = {-1:'A',0:'D',1:'B',2:'M'}
+newstate = {-1:'R',0:'D',1:'B',2:'M'}
+
+keys = neworder
+for key in keys:
+ o = old.get(key,-1)
+ n = new[key]
+ if n==o and not showall: continue
+ print "%c -> %c : %s" % (newstate[o],newstate[n],key)
+
+# not sure we care about what options have been removed
+# from from.config file
+sys.exit(0)
+keys = oldorder
+for key in keys:
+ n = new.get(key,-1)
+ o = old[key]
+ if n == -1 and not showall:
+ print "%c -> %c : %s" % (oldstate[o],oldstate[n],key)
+