Beispiel #1
0
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}
Beispiel #2
0
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
Beispiel #3
0
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()
Beispiel #4
0
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
Beispiel #5
0
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' ]
Beispiel #6
0
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
Beispiel #7
0
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
Beispiel #8
0
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
Beispiel #9
0
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')
Beispiel #10
0
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')
Beispiel #11
0
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
Beispiel #12
0
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: