def buildDEB(mode, options): os.chdir(options.buildDir) debPath = os.path.join(options.buildDir, 'internal', 'installers', 'deb') debScript = os.path.join(debPath, 'makeinstaller.sh') version = options.version_info['version'].replace('-', '~') libicu = 'libicu38' if options.platformSubID == 'gutsy': libicu = 'libicu36' cmd = [debScript, debPath, options.buildDir, options.distribName, version, mode, libicu] r = runCommand(cmd) log('DEB created (%d)' % r) if r: raise DistributionError(str(r)) if mode == 'release': m = '_' else: m = '_debug_' return 'Chandler_linux%(mode)s%(version)s-1_i386.deb' % {'mode': m, 'version': version}
def buildPlatform(options): options.platformName = 'Unknown' options.platformID = '' options.platformSubID = '' rv = True if os.name == 'nt': options.platformName = 'Windows' options.platformID = 'win' elif os.name == 'posix': if sys.platform == 'darwin': if platform.machine() == 'i386': options.platformName = 'Mac OS X (intel)' options.platformID = 'intel-osx' else: options.platformName = 'Mac OS X (ppc)' options.platformID = 'ppc-osx' release = platform.release() version = release.split('.') platforms = {'7': 'panther', '8': 'tiger', '9': 'leopard'} if len(version) == 3: options.platformSubID = platforms.get(version[0], version[0]) if options.platformSubID == 'leopard': options.platformID += '-leopard' elif sys.platform == 'cygwin': options.platformName = 'Windows' options.platformID = 'win' else: options.platformName = 'Linux' options.platformID = 'linux' if os.path.exists('/etc/lsb-release'): try: for line in open('/etc/lsb-release', 'r').readlines(): name, value = line.split('=') if name.startswith('DISTRIB_CODENAME'): options.platformSubID = value.strip() break except IOError: pass else: log('Unknown platform: ' + os.name, error=True) rv = False return rv
def generateTinderboxOutput(mode, distribFiles): if mode == 'release': tfilename = 'enduser' else: tfilename = 'developer' tfilename = os.path.join(options.outputDir, tfilename) tfile = open(tfilename, 'w') for distribFile in distribFiles: log('Moving %s from %s to %s' % (distribFile, options.buildDir, options.outputDir)) tfile.write('%s\n' % distribFile) os.rename(os.path.join(options.buildDir, distribFile), os.path.join(options.outputDir, distribFile)) tfile.close()
def buildDMG(mode, options): os.chdir(options.buildDir) distribFile = '%s.dmg' % options.distribName if os.path.isfile(distribFile): os.remove(distribFile) cmd = [ os.path.join(options.toolsDir, 'makediskimage.sh'), options.distribDir ] r = runCommand(cmd) log('OS X disk image file created (%d)' % r) if r: raise DistributionError(str(r)) return distribFile
def buildDistributionList(options): options.distribs = [] # if any of the individual options are set then build distrib list if options.tarball or options.dmg or options.rpm or options.deb or options.exe: if options.tarball: if options.platformID == 'linux' or options.platformID == 'win': options.distribs.append('tarball') else: log('Platform is [%s] -- ignoring tarball request' % options.platformName) if options.dmg: if 'osx' in options.platformID: options.distribs.append('dmg') else: log('Platform is [%s] -- ignoring dmg request' % options.platformName) if options.rpm: if options.platformID == 'linux': options.distribs.append('rpm') else: log('Platform is [%s] -- ignoring rpm request' % options.platformName) if options.deb: if options.platformID == 'linux': options.distribs.append('deb') else: log('Platform is [%s] -- ignoring deb request' % options.platformName) if options.exe: if options.platformID == 'win': options.distribs.append('exe') else: log('Platform is [%s] -- ignoring exe request' % options.platformName) else: if options.platformID == 'linux': if options.platformSubID in ['gutsy', 'hardy', 'intrepid', 'jaunty']: options.distribs = [ 'tarball', 'deb' ] else: options.distribs = [ 'tarball' ] elif options.platformID == 'win': options.distribs = [ 'tarball', 'exe' ] else: options.distribs = [ 'dmg' ]
def buildRPM(mode, options): os.chdir(options.buildDir) rpmPath = os.path.join(options.buildDir, 'internal', 'installers', 'rpm') rpmScript = os.path.join(rpmPath, 'makeinstaller.sh') specFile = os.path.join(rpmPath, 'chandler.spec') version = '%s.%s' % (options.version_info['major'], options.version_info['minor']) release = options.version_info['release'].replace('-', '_') # RPM doesn't like '-' cmd = [ rpmScript, rpmPath, specFile, options.buildDir, options.distribName, version, release ] r = runCommand(cmd) log('RPM created (%d)' % r) if r: raise DistributionError(str(r)) return '%s.i386.rpm' % options.distribName
def buildEXE(mode, options): os.chdir(options.buildDir) result = None nsisBinary = findInPath(os.environ['PATH'], 'makensis.exe') if nsisBinary is None: log('Unable to locate makensis.exe in PATH', error=True) else: nsisPath = os.path.join(options.buildDir, 'internal', 'installers', 'win') nsisScript = os.path.join(nsisPath, 'makeinstaller.sh') scriptFile = getCommand(['cygpath', '-aw', os.path.join(nsisPath, 'chandler.nsi')]) cmd = [ nsisBinary, '/DSNAP_%s' % mode.upper(), '/DDISTRIB_DIR=%s' % options.distribName, '/DDISTRIB_VERSION=%s' % options.version_info['version'], scriptFile ] r = runCommand(cmd) distribFile = '%s.exe' % options.distribName targetFile = os.path.join(options.buildDir, distribFile) sourceFile = os.path.join(nsisPath, 'Setup.exe') if os.path.exists(targetFile): os.remove(targetFile) if os.path.exists(sourceFile): os.rename(sourceFile, targetFile) result = distribFile if r: raise DistributionError(str(r)) return result
def buildTarball(mode, options): os.chdir(options.buildDir) if options.platformID == 'win': distribFile = '%s.zip' % options.distribName cmd = [ findInPath(os.environ['PATH'], 'zip'), '-r', distribFile, options.distribName ] else: distribFile = '%s.tar.gz' % options.distribName cmd = [ 'tar', 'czf', distribFile, options.distribName ] if os.path.isfile(distribFile): os.remove(distribFile) r = runCommand(cmd) log('Compressed distribution file created (%d)' % r) if r: raise DistributionError(str(r)) return distribFile
def build(commands, config): status = 'success' cwd = os.getcwd() timeout = int(config.get('timeout') or 180) bl.initLog('tbox.log', echo=debug_script) starttime = int(time.time()) for command in commands: cmd = config.get(command) if not cmd: cmd = DEFAULT_COMMANDS[command] if not cmd: continue else: cmd = cmd.split() bl.log('*** %s, timeout=%ds' % (' '.join(cmd), timeout)) exit_code = bl.runCommand(cmd, timeout=timeout) if exit_code: bl.log('*** error exit code = %d' % exit_code) if command == 'test': status = 'test_failed' if os.name != 'nt': try: # If tests were killed due to timeout, we may have left # openssl processes running, so try killing zap_servers() except Exception, e: bl.log('*** error: tried to zap_servers: ' + str(e)) else: status = 'build_failed' break if command == 'svn': os.chdir('m2crypto')
def checkOptions(options): options.toolsDir = os.path.abspath(os.path.dirname(__file__)) if not options.sourceDir: if 'CHANDLERHOME' in os.environ: options.sourceDir = os.path.realpath(os.environ['CHANDLERHOME']) else: options.sourceDir = os.getcwd() if not os.path.isfile(os.path.join(options.sourceDir, 'version.py')): options.sourceDir = os.path.abspath(os.path.join(options.toolsDir, '..')) if not options.buildDir: options.buildDir = os.path.abspath(os.path.join(options.sourceDir, '..')) if not os.path.isdir(options.buildDir): sys.stderror.write('Unable to locate build directory [%s]\n' % options.buildDir) return False if not os.path.isdir(options.sourceDir): log('Unable to locate source (aka Chandler) directory [%s]' % options.sourceDir, error=True) return False if not options.binDir: if 'CHANDLERBIN' in os.environ: options.binDir = os.path.realpath(os.environ['CHANDLERBIN']) else: options.binDir = os.getcwd() if not os.path.isfile(os.path.join(options.binDir, 'version.py')): options.binDir = os.path.abspath(os.path.join(options.toolsDir, '..')) if not os.path.isdir(options.binDir): log('Unable to locate bin (aka ChandlerBin) directory [%s]' % options.binDir, error=True) return False if options.outputDir: if not os.path.isdir(options.outputDir): os.makedirs(options.outputDir) else: options.outputDir = options.buildDir if not os.path.isdir(options.outputDir): log('Unable to locate build output directory [%s]' % options.outputDir, error=True) return False if not os.path.isfile(os.path.join(options.sourceDir, 'version.py')): log('Source directory [%s] does not point to a Chandler install' % options.sourceDir, error=True) return False if options.tag is not None: options.tag = options.tag.strip() options.modes = [ 'release', 'debug' ] if options.mode: s = options.mode.lower().strip() if s in options.modes: options.modes = [ s ] else: log('Invalid mode [%s] specified' % s, error=True) return False return True
if __name__ == '__main__': success = True options = parseOptions() if not checkOptions(options): sys.exit(3) if not buildPlatform(options): sys.exit(3) buildDistributionList(options) options.version_info = generateVersionData(options.sourceDir, options.platformName, options.tag) if _debug: log(options) try: if len(options.distribs) > 0: options.distribFiles = {} for mode in options.modes: if os.path.isdir(os.path.join(options.binDir, mode)): if not buildDistributionImage(mode, options): log('An error occurred while creating the %s distribution image' % mode, error=True) success = False break options.distribFiles[mode] = [] for build in options.distribs: