#!/usr/bin/env python # # getversion.py - Parse version numbers from C header files. # import re __all__ = ['Parser', 'Result'] class Result: pass class Parser: def __init__(self): self.patterns = {} def search(self, define_name, value_name): 'Add the name of a define to the list of search pattenrs.' self.patterns[define_name] = value_name def parse(self, file): 'Parse the file, extracting defines into a Result object.' stream = open(file, 'rt') result = Result() regex = re.compile(r'^\s*#\s*define\s+(\w+)\s+(\d+)') for line in stream.readlines(): match = regex.match(line) if match: try: name = self.patterns[match.group(1)] except: continue setattr(result, name, int(match.group(2))) stream.close() return result if __name__ == '__main__': # Extract and print the version number p = Parser() p.search('SVN_VER_MAJOR', 'major') p.search('SVN_VER_MINOR', 'minor') p.search('SVN_VER_PATCH', 'patch') import os, sys r = p.parse(sys.argv[1]) sys.stdout.write("%d.%d.%d" % (r.major, r.minor, r.patch)) ### End of file.