22437faa4d
Review URL: https://codereview.chromium.org//11340005 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@14180 260f80e4-7a28-3924-810f-c04153c831b5
120 lines
3.7 KiB
Python
120 lines
3.7 KiB
Python
# 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)
|