Added a hammer command for buildbot.

This commit is contained in:
Nick Bolton 2009-11-02 21:17:45 +00:00
parent d85c266aa0
commit 075043a877
2 changed files with 75 additions and 29 deletions

View File

@ -1,2 +1,3 @@
@echo off
python hm.py %*
exit /b %errorlevel%

103
hm.py
View File

@ -49,6 +49,7 @@ commands = [
'usage',
'revision',
'help',
'hammer',
'--help',
'-h',
'/?'
@ -96,9 +97,14 @@ sln_filename = '%s.sln' % project
xcodeproj_filename = '%s.xcodeproj' % project
config_filename = '%s.cfg' % this_cmd
config_filepath = '%s/%s' % (bin_dir, config_filename)
sln_filepath = '%s\%s' % (bin_dir, sln_filename)
xcodeproj_filepath= '%s/%s' % (bin_dir, xcodeproj_filename)
def config_filepath():
return '%s/%s' % (bin_dir, config_filename)
def sln_filepath():
return '%s\%s' % (bin_dir, sln_filename)
def xcodeproj_filepath():
return '%s/%s' % (bin_dir, xcodeproj_filename)
# try_chdir(...) and restore_chdir() will use this
prevdir = ''
@ -119,6 +125,7 @@ def usage():
' revision Display the current source code revision\n'
' package Create a distribution package (e.g. tar.gz)\n'
' install Installs the program\n'
' hammer Golden hammer (config, build, package)\n'
' usage Shows the help screen\n'
'\n'
'Alias commands:\n'
@ -266,10 +273,10 @@ def clean(mode):
def open_project():
generator = get_generator()
if generator.startswith('Visual Studio'):
open_project_internal(sln_filepath)
open_project_internal(sln_filepath())
return True
elif generator.startswith('Xcode'):
open_project_internal(xcodeproj_filepath, 'open')
open_project_internal(xcodeproj_filepath(), 'open')
return True
else:
print 'Not supported with generator:',generator
@ -301,14 +308,9 @@ def package(type):
if type == None:
package_usage()
elif type == 'src-tgz':
elif type == 'src':
if sys.platform in ['linux2', 'darwin']:
package_src()
else:
package_unsupported = True
elif type == 'src-zip':
if sys.platform == 'win32':
package_src()
package_tgz()
else:
package_unsupported = True
elif type == 'rpm':
@ -338,8 +340,7 @@ def package(type):
print ('Package type, %s is not '
'supported for platform, %s') % (type, sys.platform)
def package_src():
# Enter the temp build dir, to preserve source tree.
def package_tgz():
try_chdir(bin_dir)
os.system('make package_source')
restore_chdir()
@ -368,12 +369,11 @@ def package_usage():
print ('Usage: %s package [package-type]\n'
'\n'
'Replace [package-type] with one of:\n'
' src-tgz Create a .tar.gz source distribution\n'
' src-zip Create a .zip source distribution\n'
' rpm Create a .rpm package (Red Hat)\n'
' deb Create a .deb paclage (Debian)\n'
' win Create a .exe installer (Windows)\n'
' mac Create a .dmg package (Mac OS X)\n'
' src .tar.gz source (Posix only)\n'
' rpm .rpm package (Red Hat)\n'
' deb .deb paclage (Debian)\n'
' win .exe installer (Windows)\n'
' mac .dmg package (Mac OS X)\n'
'\n'
'Example: %s package src-tgz') % (this_cmd, this_cmd)
@ -442,6 +442,8 @@ def main(argv):
destroy()
elif cmd in ['setup']:
setup()
elif cmd in ['hammer']:
hammer()
else:
print 'Command not yet implemented:',cmd
@ -504,9 +506,9 @@ def setup(generator = None):
if not os.path.exists(bin_dir):
os.mkdir(bin_dir)
if os.path.exists(config_filepath):
if os.path.exists(config_filepath()):
config = ConfigParser.ConfigParser()
config.read(config_filepath)
config.read(config_filepath())
else:
config = ConfigParser.ConfigParser()
@ -529,18 +531,18 @@ def setup(generator = None):
print "\nSetup complete."
def write_config(config):
configfile = open(config_filepath, 'wb')
configfile = open(config_filepath(), 'wb')
config.write(configfile)
def get_generator():
config = ConfigParser.RawConfigParser()
config.read(config_filepath)
config.read(config_filepath())
return config.get('cmake', 'generator')
def has_setup_version(version):
if os.path.exists(config_filepath):
if os.path.exists(config_filepath()):
config = ConfigParser.RawConfigParser()
config.read(config_filepath)
config.read(config_filepath())
try:
return config.getint('hm', 'setup_version') >= version
@ -552,7 +554,7 @@ def has_setup_version(version):
def has_conf_run():
if has_setup_version(2):
config = ConfigParser.RawConfigParser()
config.read(config_filepath)
config.read(config_filepath())
try:
return config.getboolean('hm', 'has_conf_run')
except:
@ -563,7 +565,7 @@ def has_conf_run():
def set_conf_run():
if has_setup_version(3):
config = ConfigParser.RawConfigParser()
config.read(config_filepath)
config.read(config_filepath())
config.set('hm', 'has_conf_run', True)
write_config(config)
else:
@ -654,7 +656,7 @@ def run_vcbuild(generator, mode, args=''):
cmd = ('@echo off\n'
'call "%s" %s \n'
'vcbuild /nologo %s "%s" "%s"'
) % (get_vcvarsall(generator), vcvars_platform, args, sln_filepath, config)
) % (get_vcvarsall(generator), vcvars_platform, args, sln_filepath(), config)
print cmd
# Generate a batch file, since we can't use environment variables directly.
temp_bat = bin_dir + r'\vcbuild.bat'
@ -668,5 +670,48 @@ def ensure_setup_latest(generator = None):
if not has_setup_version(setup_version):
setup(generator)
class HammerBuild:
generator = None
target_dir = None
def __init__(self, _generator, _target_dir):
self.generator = _generator
self.target_dir = _target_dir
def run(self):
global bin_dir
bin_dir = self.target_dir
configure(self.generator)
build('debug')
build('release')
def hammer():
hammer_builds = []
if sys.platform == 'win32':
hammer_builds += [
HammerBuild('Visual Studio 9 2008', 'bin32'),
HammerBuild('Visual Studio 9 2008 Win64', 'bin64')]
elif sys.platform in ['linux2', 'sunos5', 'freebsd7']:
hammer_builds += [
HammerBuild('Unix Makefiles', 'bin')]
elif sys.platform == 'darwin':
hammer_builds += [
HammerBuild('Xcode', 'bin')]
for hb in hammer_builds:
hb.run()
package_types = []
if sys.platform == 'win32':
package_types += ['win']
elif sys.platform == 'linux2':
package_types += ['src', 'rpm', 'deb']
elif sys.platform == 'darwin':
package_types += ['mac']
for pt in package_types:
package(pt)
# Start the program.
main(sys.argv)