diff options
author | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-08-22 14:29:52 +0100 |
---|---|---|
committer | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-08-22 14:29:52 +0100 |
commit | f1bdf13786f0752c0846cf36f0d91e4fc6747929 (patch) | |
tree | 4223b2035bf2240d681a53822808b3c7f687b905 /build/getversion.py | |
download | subversion-tarball-f1bdf13786f0752c0846cf36f0d91e4fc6747929.tar.gz |
Tarball conversion
Diffstat (limited to 'build/getversion.py')
-rwxr-xr-x | build/getversion.py | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/build/getversion.py b/build/getversion.py new file mode 100755 index 0000000..7ed1e53 --- /dev/null +++ b/build/getversion.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python +# +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# +# +# getversion.py - Parse version numbers from C header files. +# + +import os +import re +import sys + +__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 + +def svn_extractor(parser, include_file): + '''Pull values from svn.version.h''' + p.search('SVN_VER_MAJOR', 'major') + p.search('SVN_VER_MINOR', 'minor') + p.search('SVN_VER_PATCH', 'patch') + + try: + r = p.parse(include_file) + except IOError, e: + usage_and_exit(str(e)) + sys.stdout.write("%d.%d.%d" % (r.major, r.minor, r.patch)) + + +def sqlite_extractor(parser, include_file): + '''Pull values from sqlite3.h''' + p.search('SQLITE_VERSION_NUMBER', 'version') + + try: + r = p.parse(include_file) + except IOError, e: + usage_and_exit(str(e)) + major = r.version / 1000000 + minor = (r.version - (major * 1000000)) / 1000 + micro = (r.version - (major * 1000000) - (minor * 1000)) + sys.stdout.write("%d.%d.%d" % (major, minor, micro)) + + +extractors = { + 'SVN' : svn_extractor, + 'SQLITE' : sqlite_extractor, + } + +def usage_and_exit(msg): + if msg: + sys.stderr.write("%s\n\n" % msg) + sys.stderr.write("usage: %s [SVN|SQLITE] [header_file]\n" % \ + os.path.basename(sys.argv[0])) + sys.stderr.flush() + sys.exit(1) + + +if __name__ == '__main__': + if len(sys.argv) == 3: + extractor = extractors[sys.argv[1]] + include_file = sys.argv[2] + else: + usage_and_exit("Incorrect number of arguments") + + # Extract and print the version number + p = Parser() + extractor(p, include_file) |