mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Sam Ravnborg <sam@ravnborg.org>
To: kbuild <linux-kbuild@vger.kernel.org>,
	lkml <linux-kernel@vger.kernel.org>
Cc: Tim Bird <tim.bird@am.sony.com>, Sam Ravnborg <sam@ravnborg.org>
Subject: [PATCH 19/24] kconfig: add diffconfig utility
Date: Mon, 30 Jun 2008 23:35:13 +0200	[thread overview]
Message-ID: <1214861718-32626-19-git-send-email-sam@ravnborg.org> (raw)
In-Reply-To: <20080630213155.GA32479@uranus.ravnborg.org>

From: Tim Bird <tim.bird@am.sony.com>

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>
---
 scripts/diffconfig |  129 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 129 insertions(+), 0 deletions(-)
 create mode 100755 scripts/diffconfig

diff --git a/scripts/diffconfig b/scripts/diffconfig
new file mode 100755
index 0000000..b91f3e3
--- /dev/null
+++ b/scripts/diffconfig
@@ -0,0 +1,129 @@
+#!/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()
-- 
1.5.6.1.93.gef98


  parent reply	other threads:[~2008-06-30 21:39 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-30 21:31 kbuild - pending stuff, and Maintainer news Sam Ravnborg
2008-06-30 21:34 ` [PATCH 01/24] kbuild: refactor headers_* targets in Makefile Sam Ravnborg
2008-06-30 21:34 ` [PATCH 02/24] kbuild: always unifdef files in headers_install* Sam Ravnborg
2008-06-30 21:34 ` [PATCH 03/24] kbuild: drop support of ALTARCH for headers_* Sam Ravnborg
2008-06-30 21:34 ` [PATCH 04/24] kbuild: code refactoring in Makefile.headerinst Sam Ravnborg
2008-06-30 21:34 ` [PATCH 05/24] kbuild: error out early in make headers_install Sam Ravnborg
2008-06-30 21:35 ` [PATCH 06/24] kbuild: only one call for include/ in make headers_* Sam Ravnborg
2008-06-30 21:35 ` [PATCH 07/24] kbuild: optimize headers_* targets Sam Ravnborg
2008-06-30 21:35 ` [PATCH 08/24] kbuild: make clean removes *.o.* as well Sam Ravnborg
2008-07-01 12:10   ` Jan Engelhardt
2008-07-01 20:21     ` Sam Ravnborg
2008-06-30 21:35 ` [PATCH 09/24] kbuild: install all headers when arch is changed Sam Ravnborg
2008-06-30 21:35 ` [PATCH 10/24] kbuild: prepare headers_* for arch/$ARCH/include Sam Ravnborg
2008-06-30 21:35 ` [PATCH 11/24] kbuild: support arch/$ARCH/include for tags, cscope Sam Ravnborg
2008-06-30 21:35 ` [PATCH 12/24] kbuild: asm symlink support for arch/$ARCH/include Sam Ravnborg
2008-06-30 21:35 ` [PATCH 13/24] kbuild: add arch/$ARCH/include to search path Sam Ravnborg
2008-06-30 21:35 ` [PATCH 15/24] vmlinux.lds: move __attribute__((__cold__)) functions back into final .text section Sam Ravnborg
2008-06-30 21:35 ` [PATCH 16/24] kernel-doc: handle/strip __init Sam Ravnborg
2008-06-30 21:35 ` [PATCH 17/24] kbuild: sparse needs CF not CHECKFLAGS Sam Ravnborg
2008-06-30 21:35 ` [PATCH 18/24] kbuild: remove Module.markers during mrproper Sam Ravnborg
2008-06-30 21:35 ` Sam Ravnborg [this message]
2008-06-30 21:35 ` [PATCH 20/24] kconfig: set all new symbols automatically Sam Ravnborg
2008-06-30 21:35 ` [PATCH 21/24] kconfig: prefix hex values with 0x in .config Sam Ravnborg
2008-07-01  6:41   ` Ingo Molnar
2008-07-01  8:08     ` Sam Ravnborg
2008-06-30 21:35 ` [PATCH 22/24] kconfig: speed up all*config + randconfig Sam Ravnborg
2008-06-30 21:35 ` [PATCH 23/24] kconfig: make oldconfig is now less chatty Sam Ravnborg
2008-06-30 21:35 ` [PATCH 24/24] kconfig: make defconfig is no longer chatty Sam Ravnborg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1214861718-32626-19-git-send-email-sam@ravnborg.org \
    --to=sam@ravnborg.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tim.bird@am.sony.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®