| # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| # for details. All rights reserved. Use of this source code is governed by a |
| # BSD-style license that can be found in the LICENSE file. |
| # |
| # This python script creates a version string in a C++ file. |
| |
| import os |
| import sys |
| import subprocess |
| import platform |
| import getpass |
| from os.path import join |
| import time |
| from optparse import OptionParser |
| |
| def debugLog(message): |
| print >> sys.stderr, message |
| sys.stderr.flush() |
| |
| |
| def getVersionPart(version_file, part): |
| command = ['awk', '$1 == "%s" {print $2}' % (part), version_file] |
| proc = subprocess.Popen(command, |
| stdout=subprocess.PIPE, |
| stderr=subprocess.STDOUT) |
| result = proc.communicate()[0].split('\n')[0] |
| return result |
| |
| def getRevision(): |
| is_svn = True |
| if os.path.exists('.svn'): |
| cmd = ['svn', 'info'] |
| else: |
| git_proc = subprocess.Popen( |
| ['git', 'branch', '-r'], |
| stdout=subprocess.PIPE, stderr=subprocess.STDOUT) |
| if 'git-svn' in git_proc.communicate()[0]: |
| cmd = ['git', 'svn', 'info'] |
| else: |
| # Cannot get revision because we are not in svn or |
| # git svn checkout. |
| return '' |
| proc = subprocess.Popen(cmd, |
| stdout=subprocess.PIPE, stderr=subprocess.STDOUT) |
| revision = proc.communicate()[0].split('\n')[4].split(' ')[1] |
| return revision |
| |
| def makeVersionString(version_file): |
| id = platform.system() |
| if id == 'Windows' or id == 'Microsoft': |
| return '0.0.0.0' |
| major = getVersionPart(version_file, 'MAJOR') |
| minor = getVersionPart(version_file, 'MINOR') |
| build = getVersionPart(version_file, 'BUILD') |
| patch = getVersionPart(version_file, 'PATCH') |
| revision = getRevision() |
| user = getpass.getuser() |
| version_string = '%s.%s.%s.%s_%s_%s' % (major, |
| minor, |
| build, |
| patch, |
| revision, |
| user) |
| debugLog("Returning version string: %s " % version_string) |
| return version_string |
| |
| def makeFile(output_file, input_file, version_file): |
| version_cc_text = open(input_file).read() |
| version_string = makeVersionString(version_file) |
| version_cc_text = version_cc_text.replace("{{VERSION_STR}}", |
| version_string) |
| version_time = time.ctime(time.time()) |
| version_cc_text = version_cc_text.replace("{{BUILD_TIME}}", |
| version_time) |
| open(output_file, 'w').write(version_cc_text) |
| return True |
| |
| |
| def main(args): |
| try: |
| # Parse input. |
| parser = OptionParser() |
| parser.add_option("--output", |
| action="store", type="string", |
| help="output file name") |
| parser.add_option("--input", |
| action="store", type="string", |
| help="input template file") |
| parser.add_option("--version", |
| action="store", type="string", |
| help="version file") |
| |
| (options, args) = parser.parse_args() |
| if not options.output: |
| sys.stderr.write('--output not specified\n') |
| return -1 |
| if not len(options.input): |
| sys.stderr.write('--input not specified\n') |
| return -1 |
| |
| files = [ ] |
| for arg in args: |
| files.append(arg) |
| |
| if not makeFile(options.output, |
| options.input, |
| options.version): |
| return -1 |
| |
| return 0 |
| except Exception, inst: |
| sys.stderr.write('make_version.py exception\n') |
| sys.stderr.write(str(inst)) |
| sys.stderr.write('\n') |
| return -1 |
| |
| if __name__ == '__main__': |
| exit_code = main(sys.argv) |
| sys.exit(exit_code) |