class Processor:
"""This class processes all source files and create the init module."""
- def __init__(self, dir):
- self.dir = dir
+ def __init__(self, dirs):
+ self.dirs = dirs
self.ignore_dirs = { "CVS" : "CVS directory" }
- self.allowed_sfx = [ ".c", ".h" ]
+ self.allowed_suffixes = [ ".c" ]
self.reg_string = re.compile(r"BE_REGISTER_MODULE_CONSTRUCTOR\((\w+)\)")
self._verbose = False
self.constructors = []
if os.path.isfile(path):
self.process_file(path)
- os.path.walk(self.dir, _visit, self)
+ # code of process_dirs
+ for dir in self.dirs:
+ os.path.walk(dir, _visit, self)
def process_file(self, path):
"""process a file"""
if index < 0:
return
suffix = path[index:]
- if suffix in self.allowed_sfx:
+ if suffix in self.allowed_suffixes:
# we found an allowed suffix
self.process_src(path)
fkt = m.group(1)
if self._verbose:
print " Found constructor", fkt
- self.constructors.append(fkt)
+ self.constructors.append((fkt, path))
f.close()
- def gen_output(self, name):
+ def update_init_func(self, name):
"""generate the output"""
self.process_dirs()
s = ""
# generate prototypes
- for fkt in self.constructors:
+ for fkt,path in self.constructors:
+ s += "/* %s */\n" % path
s += "void %s(void);\n" % fkt
s += self.prolog
- for fkt in self.constructors:
+ for fkt,path in self.constructors:
s += "\t%s();\n" % fkt
s += self.epilog
def usage(progname):
"""Prints the usage"""
- print "usage: %s [options] directory outname" % progname
+ print "usage: %s [options] outname directory+ " % progname
print "Options are:"
print "-v verbose"
def main(argv):
"""the main function"""
- dir = None
+ dirs = []
gen_name = None
verbose = False
elif option in ('-v', '--verbose'):
verbose = True
- if len(args) != 2:
+ if len(args) < 2:
usage(argv[0])
sys.exit(2)
else:
gen_name = args[0]
- dir = args[1]
+ dirs = args[1:]
- processor = Processor(dir)
+ processor = Processor(dirs)
processor.verbose(verbose)
- processor.gen_output(gen_name)
+ # process the directory and update the requested file
+ processor.update_init_func(gen_name)
if __name__ == "__main__":
main(sys.argv)