 a717417e7f
			
		
	
	
	a717417e7f
	
	
	
		
			
			Diffconfig is a simple utility for comparing two kernel configuration files. See usage in the script for more info. Signed-off-by: Tim Bird <tim.bird@am.sony.com> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
		
			
				
	
	
		
			129 lines
		
	
	
	
		
			3.6 KiB
			
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
	
		
			3.6 KiB
			
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/python
 | |
| #
 | |
| # diffconfig - a tool to compare .config files.
 | |
| #
 | |
| # originally written in 2006 by Matt Mackall
 | |
| #  (at least, this was in his bloatwatch source code)
 | |
| # last worked on 2008 by Tim Bird
 | |
| #
 | |
| 
 | |
| import sys, os
 | |
| 
 | |
| def usage():
 | |
|     print """Usage: diffconfig [-h] [-m] [<config1> <config2>]
 | |
| 
 | |
| Diffconfig is a simple utility for comparing two .config files.
 | |
| Using standard diff to compare .config files often includes extraneous and
 | |
| distracting information.  This utility produces sorted output with only the
 | |
| changes in configuration values between the two files.
 | |
| 
 | |
| Added and removed items are shown with a leading plus or minus, respectively.
 | |
| Changed items show the old and new values on a single line.
 | |
| 
 | |
| If -m is specified, then output will be in "merge" style, which has the
 | |
| changed and new values in kernel config option format.
 | |
| 
 | |
| If no config files are specified, .config and .config.old are used.
 | |
| 
 | |
| Example usage:
 | |
|  $ diffconfig .config config-with-some-changes
 | |
| -EXT2_FS_XATTR  n
 | |
| -EXT2_FS_XIP  n
 | |
|  CRAMFS  n -> y
 | |
|  EXT2_FS  y -> n
 | |
|  LOG_BUF_SHIFT  14 -> 16
 | |
|  PRINTK_TIME  n -> y
 | |
| """
 | |
|     sys.exit(0)
 | |
| 
 | |
| # returns a dictionary of name/value pairs for config items in the file
 | |
| def readconfig(config_file):
 | |
|     d = {}
 | |
|     for line in config_file:
 | |
|         line = line[:-1]
 | |
|         if line[:7] == "CONFIG_":
 | |
|             name, val = line[7:].split("=", 1)
 | |
|             d[name] = val
 | |
|         if line[-11:] == " is not set":
 | |
|             d[line[9:-11]] = "n"
 | |
|     return d
 | |
| 
 | |
| def print_config(op, config, value, new_value):
 | |
|     global merge_style
 | |
| 
 | |
|     if merge_style:
 | |
|         if new_value:
 | |
|             if new_value=="n":
 | |
|                 print "# CONFIG_%s is not set" % config
 | |
|             else:
 | |
|                 print "CONFIG_%s=%s" % (config, new_value)
 | |
|     else:
 | |
|         if op=="-":
 | |
|             print "-%s %s" % (config, value)
 | |
|         elif op=="+":
 | |
|             print "+%s %s" % (config, new_value)
 | |
|         else:
 | |
|             print " %s %s -> %s" % (config, value, new_value)
 | |
| 
 | |
| def main():
 | |
|     global merge_style
 | |
| 
 | |
|     # parse command line args
 | |
|     if ("-h" in sys.argv or "--help" in sys.argv):
 | |
| 	usage()
 | |
| 
 | |
|     merge_style = 0
 | |
|     if "-m" in sys.argv:
 | |
|         merge_style = 1
 | |
|         sys.argv.remove("-m")
 | |
| 
 | |
|     argc = len(sys.argv)
 | |
|     if not (argc==1 or argc == 3):
 | |
|         print "Error: incorrect number of arguments or unrecognized option"
 | |
|         usage()
 | |
| 
 | |
|     if argc == 1:
 | |
|         # if no filenames given, assume .config and .config.old
 | |
|         build_dir=""
 | |
|         if os.environ.has_key("KBUILD_OUTPUT"):
 | |
|             build_dir = os.environ["KBUILD_OUTPUT"]+"/"
 | |
| 
 | |
|         configa_filename = build_dir + ".config.old"
 | |
|         configb_filename = build_dir + ".config"
 | |
|     else:
 | |
|         configa_filename = sys.argv[1]
 | |
|         configb_filename = sys.argv[2]
 | |
| 
 | |
|     a = readconfig(file(configa_filename))
 | |
|     b = readconfig(file(configb_filename))
 | |
| 
 | |
|     # print items in a but not b (accumulate, sort and print)
 | |
|     old = []
 | |
|     for config in a:
 | |
|         if config not in b:
 | |
|             old.append(config)
 | |
|     old.sort()
 | |
|     for config in old:
 | |
|         print_config("-", config, a[config], None)
 | |
|         del a[config]
 | |
| 
 | |
|     # print items that changed (accumulate, sort, and print)
 | |
|     changed = []
 | |
|     for config in a:
 | |
|         if a[config] != b[config]:
 | |
|             changed.append(config)
 | |
|         else:
 | |
|             del b[config]
 | |
|     changed.sort()
 | |
|     for config in changed:
 | |
|         print_config("->", config, a[config], b[config])
 | |
|         del b[config]
 | |
| 
 | |
|     # now print items in b but not in a
 | |
|     # (items from b that were in a were removed above)
 | |
|     new = b.keys()
 | |
|     new.sort()
 | |
|     for config in new:
 | |
|         print_config("+", config, None, b[config])
 | |
| 
 | |
| main()
 |