+++ /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: kread,v 1.1 2006/12/01 16:21:13 mef Exp $
-#
-
-import sys, re, os, stat
-import cStringIO, cPickle
-
-currentconfig = ""
-files = []
-configs = {}
-meta = None
-
-def _config(parts,fb):
- global currentconfig
- currentconfig = parts[1]
- return None
-
-def _help(parts,fb):
- global currentconfig
- helptxt = ""
- lineno = 0
- while True:
- line = fb.readline()
- lineno = lineno + 1
- if len(line)==0: break
- if not line[0].isspace(): break
- if len(line)>1: newline = line.lstrip()
- else: newline = line
- helptxt = helptxt+newline
-
- configs[currentconfig]=helptxt
- return line
-
-def _source(parts,fb):
- filename = "".join(parts[1:])
- if filename[0]=='"' or filename[0]=='\'':
- filename=filename[1:]
- if filename[-1]=='"' or filename[-1]=='\'':
- filename=filename[:-1]
- process(filename)
- return None
-
-def _noop(parts,fb):
- return None
-
-keywords = {"config":_config,
- "help":_help,
- "---help---":_help,
- "source":_source}
-
-def process(filename):
- files.append((filename,os.stat(filename)[stat.ST_MTIME]))
- fb = open(filename)
- lineno = 0
- line = fb.readline()
- while True:
- lineno = lineno + 1
- if len(line)==0:break
-
- line = line.strip()
- parts = line.split()
- if len(parts)==0:
- line = fb.readline()
- else:
- func = keywords.get(parts[0],_noop)
- line = func(parts,fb)
- if line == None:
- line = fb.readline()
-
- fb.close()
-
-def init(force):
- global configs
- global files
- ARCH=os.getenv("ARCH","i386")
- reprocess = True
- try:
- f = open(".kread.db","r")
- meta = cPickle.load(f)
- f.close()
- configs, files = meta
- reprocess = False
- try:
- for file, mtime in files:
- cur_mtime = os.stat(file)[stat.ST_MTIME]
- if mtime <> cur_mtime:
- reprocess = True
- break
- except:
- pass
- except IOError, e:
- pass
- if reprocess or force:
- meta = (configs, files)
- process("arch/%s/Kconfig" % ARCH)
- try:
- f = open(".kread.db.tmp","w")
- cPickle.dump(meta,f,True)
- f.close()
- os.rename(".kread.db.tmp", ".kread.db")
- except IOError, e:
- pass
-
-def gethelp(option):
- if option[:len("CONFIG_")] == "CONFIG_":
- option=option[len("CONFIG_"):]
- helptxt = configs.get(option,"")
- return helptxt
-
-
-if __name__ == '__main__':
- if len(sys.argv) == 1:
- print """USAGE\n%s configoptionname""" % os.path.basename(sys.argv[0])
- else:
- if sys.argv[1] == "-f" and len(sys.argv)>=2:
- force = True
- options=sys.argv[2:]
- else:
- options = sys.argv[1:]
- force = False
-
- init(force)
- for option in options:
- helptxt = gethelp(option)
- print "CONFIG_%s:\n%s" % (option,helptxt)
-