mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	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()
 |