def fixupLocales(params, files):
    global defaultLocale

    # Read in default locale data, it might not be included in package files
    defaultLocaleDir = os.path.join(getLocalesDir(params['baseDir']),
                                    defaultLocale)
    reference_files = Files(getPackageFiles(params), getIgnoredFiles(params))
    reference_files.read(defaultLocaleDir,
                         archive_path(defaultLocaleDir, params['baseDir']))
    reference_params = dict(params)
    reference_params['locales'] = [defaultLocale]
    importLocales(reference_params, reference_files)

    reference = {}
    for path, data in reference_files.iteritems():
        filename = path.split('/')[-1]
        data = localeTools.parseString(data.decode('utf-8'), filename)
        if data:
            reference[filename] = data

    for locale in params['locales']:
        for file in reference.iterkeys():
            path = 'chrome/locale/%s/%s' % (locale, file)
            if path in files:
                data = localeTools.parseString(files[path].decode('utf-8'),
                                               path)
                for key, value in reference[file].iteritems():
                    if not key in data:
                        files[path] += localeTools.generateStringEntry(
                            key, value, path).encode('utf-8')
            else:
                files[path] = reference[file]['_origData'].encode('utf-8')
def createBuild(baseDir,
                type='chrome',
                outFile=None,
                buildNum=None,
                releaseBuild=False,
                keyFile=None,
                devenv=False):
    metadata = readMetadata(baseDir, type)
    version = getBuildVersion(baseDir, metadata, releaseBuild, buildNum)

    if outFile == None:
        file_extension = get_extension(type, keyFile is not None)
        outFile = getDefaultFileName(metadata, version, file_extension)

    params = {
        'type': type,
        'baseDir': baseDir,
        'releaseBuild': releaseBuild,
        'version': version,
        'devenv': devenv,
        'metadata': metadata,
    }

    mapped = metadata.items('mapping') if metadata.has_section(
        'mapping') else []
    files = Files(getPackageFiles(params),
                  getIgnoredFiles(params),
                  process=lambda path, data: processFile(path, data, params))

    files.readMappedFiles(mapped)
    files.read(baseDir, skip=[opt for opt, _ in mapped])

    if metadata.has_section('bundles'):
        bundle_tests = devenv and metadata.has_option('general', 'testScripts')
        create_bundles(params, files, bundle_tests)

    if metadata.has_section('preprocess'):
        files.preprocess(
            [f for f, _ in metadata.items('preprocess')],
            {'needsExt': True},
        )

    if metadata.has_section('import_locales'):
        import_locales(params, files)

    files['manifest.json'] = createManifest(params, files)
    if type == 'chrome':
        fix_translations_for_chrome(files)

    if devenv:
        add_devenv_requirements(files, metadata, params)

    zipdata = files.zipToString()
    signature = None
    pubkey = None
    if keyFile != None:
        signature = signBinary(zipdata, keyFile)
        pubkey = getPublicKey(keyFile)
    writePackage(outFile, pubkey, signature, zipdata)
def createBuild(baseDir,
                type,
                outFile=None,
                buildNum=None,
                releaseBuild=False,
                keyFile=None):
    metadata = readMetadata(baseDir, type)
    version = getBuildVersion(baseDir, metadata, releaseBuild, buildNum)

    if not outFile:
        outFile = getDefaultFileName(baseDir, metadata, version,
                                     'safariextz' if keyFile else 'zip')

    params = {
        'type': type,
        'baseDir': baseDir,
        'releaseBuild': releaseBuild,
        'version': version,
        'devenv': False,
        'metadata': metadata,
    }

    files = Files(getPackageFiles(params),
                  getIgnoredFiles(params),
                  process=lambda path, data: processFile(path, data, params))
    if metadata.has_section('mapping'):
        files.readMappedFiles(metadata.items('mapping'))
    files.read(baseDir)

    if metadata.has_section('convert_js'):
        convertJS(params, files)

    if metadata.has_section('convert_img'):
        from imageConversion import convertImages
        convertImages(params, files)

    if metadata.has_section('preprocess'):
        files.preprocess([f for f, _ in metadata.items('preprocess')],
                         {'needsExt': True})

    if metadata.has_section('import_locales'):
        importGeckoLocales(params, files)

    files['lib/info.js'] = createInfoModule(params)
    files['background.html'] = createBackgroundPage(params)
    files['Info.plist'] = createManifest(params, files)

    fixAbsoluteUrls(files)

    dirname = metadata.get('general', 'basename') + '.safariextension'
    for filename in files.keys():
        files[os.path.join(dirname, filename)] = files.pop(filename)

    if keyFile:
        createSignedXarArchive(outFile, files, keyFile)
    else:
        files.zip(outFile)
def createBuild(baseDir,
                type='gecko',
                outFile=None,
                locales=None,
                buildNum=None,
                releaseBuild=False,
                keyFile=None,
                multicompartment=False):
    if locales == None:
        locales = getLocales(baseDir)
    elif locales == 'all':
        locales = getLocales(baseDir, True)

    metadata = readMetadata(baseDir, type)
    version = getBuildVersion(baseDir, metadata, releaseBuild, buildNum)

    if outFile == None:
        outFile = getDefaultFileName(metadata, version, 'xpi')

    contributors = getContributors(metadata)

    params = {
        'baseDir': baseDir,
        'locales': locales,
        'releaseBuild': releaseBuild,
        'version': version.encode('utf-8'),
        'metadata': metadata,
        'contributors': contributors,
        'multicompartment': multicompartment,
        'jsonRequires': {},
    }

    mapped = metadata.items('mapping') if metadata.has_section(
        'mapping') else []
    skip = [opt for opt, _ in mapped] + ['chrome']
    files = Files(getPackageFiles(params),
                  getIgnoredFiles(params),
                  process=lambda path, data: processFile(path, data, params))
    files['install.rdf'] = createManifest(params)
    files.readMappedFiles(mapped)
    files.read(baseDir, skip=skip)
    for name, path in getChromeSubdirs(baseDir, params['locales']).iteritems():
        if os.path.isdir(path):
            files.read(path, 'chrome/%s' % name, skip=skip)
    importLocales(params, files)
    fixupLocales(params, files)
    processJSONFiles(params, files)
    if not 'bootstrap.js' in files:
        addMissingFiles(params, files)
    if metadata.has_section('preprocess'):
        files.preprocess([f for f, _ in metadata.items('preprocess')])
    if keyFile:
        signFiles(files, keyFile)
    files.zip(outFile,
              sortKey=lambda x: '!' if x == 'META-INF/zigbert.rsa' else x)
Exemple #5
0
def createBuild(baseDir,
                type,
                outFile=None,
                buildNum=None,
                releaseBuild=False,
                keyFile=None,
                devenv=False):
    metadata = readMetadata(baseDir, type)
    version = getBuildVersion(baseDir, metadata, releaseBuild, buildNum)

    if not outFile:
        outFile = getDefaultFileName(metadata, version,
                                     'safariextz' if keyFile else 'zip')

    params = {
        'type': type,
        'baseDir': baseDir,
        'releaseBuild': releaseBuild,
        'version': version,
        'devenv': devenv,
        'metadata': metadata,
    }

    mapped = metadata.items('mapping') if metadata.has_section(
        'mapping') else []
    files = Files(getPackageFiles(params),
                  getIgnoredFiles(params),
                  process=lambda path, data: processFile(path, data, params))
    files.readMappedFiles(mapped)
    files.read(baseDir, skip=[opt for opt, _ in mapped])

    if metadata.has_section('convert_js'):
        convertJS(params, files)

    if metadata.has_section('preprocess'):
        files.preprocess([f for f, _ in metadata.items('preprocess')],
                         {'needsExt': True})

    if metadata.has_section('import_locales'):
        importGeckoLocales(params, files)

    if metadata.has_option('general', 'testScripts'):
        files['qunit/index.html'] = createScriptPage(
            params, 'testIndex.html.tmpl', ('general', 'testScripts'))

    if keyFile:
        from buildtools import xarfile
        certs, key = xarfile.read_certificates_and_key(keyFile)
        params['developerIdentifier'] = get_developer_identifier(certs)

    files['lib/info.js'] = createInfoModule(params)
    files['background.html'] = createScriptPage(
        params, 'background.html.tmpl', ('general', 'backgroundScripts'))
    files['Info.plist'] = createManifest(params, files)

    dirname = metadata.get('general', 'basename') + '.safariextension'
    for filename in files.keys():
        files[os.path.join(dirname, filename)] = files.pop(filename)

    if not devenv and keyFile:
        from buildtools import xarfile
        xarfile.create(outFile, files, keyFile)
    else:
        files.zip(outFile)
def createBuild(baseDir,
                type='chrome',
                outFile=None,
                buildNum=None,
                releaseBuild=False,
                keyFile=None,
                devenv=False):
    metadata = readMetadata(baseDir, type)
    version = getBuildVersion(baseDir, metadata, releaseBuild, buildNum)

    if outFile == None:
        outFile = getDefaultFileName(metadata, version,
                                     'crx' if keyFile else 'zip')

    params = {
        'type': type,
        'baseDir': baseDir,
        'releaseBuild': releaseBuild,
        'version': version,
        'devenv': devenv,
        'metadata': metadata,
    }

    mapped = metadata.items('mapping') if metadata.has_section(
        'mapping') else []
    files = Files(getPackageFiles(params),
                  getIgnoredFiles(params),
                  process=lambda path, data: processFile(path, data, params))

    files.readMappedFiles(mapped)
    files.read(baseDir, skip=[opt for opt, _ in mapped])

    if metadata.has_section('convert_js'):
        convertJS(params, files)

    if metadata.has_section('preprocess'):
        files.preprocess([f for f, _ in metadata.items('preprocess')],
                         {'needsExt': True})

    if metadata.has_section('import_locales'):
        importGeckoLocales(params, files)

    files['manifest.json'] = createManifest(params, files)
    if type == 'chrome':
        fixTranslationsForCWS(files)

    if devenv:
        import buildtools
        import random
        files.read(os.path.join(buildtools.__path__[0],
                                'chromeDevenvPoller__.js'),
                   relpath='devenvPoller__.js')
        files['devenvVersion__'] = str(random.random())

    if (metadata.has_option('general', 'backgroundScripts') and 'lib/info.js'
            in metadata.get('general', 'backgroundScripts').split()
            and 'lib/info.js' not in files):
        files['lib/info.js'] = createInfoModule(params)

    if metadata.has_option('general', 'testScripts'):
        files['qunit/index.html'] = createScriptPage(
            params, 'testIndex.html.tmpl', ('general', 'testScripts'))

    zipdata = files.zipToString()
    signature = None
    pubkey = None
    if keyFile != None:
        signature = signBinary(zipdata, keyFile)
        pubkey = getPublicKey(keyFile)
    writePackage(outFile, pubkey, signature, zipdata)