[Pkg-mozext-commits] [adblock-plus] 158/464: Added code required to package up K-Meleon extensions
David Prévot
taffit at moszumanska.debian.org
Tue Jul 22 20:44:13 UTC 2014
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository adblock-plus.
commit 9a896362c131cb287cb9de39e62d57ca9523598b
Author: Wladimir Palant <trev at adblockplus.org>
Date: Fri May 20 15:30:56 2011 +0200
Added code required to package up K-Meleon extensions
---
build.py | 20 +++---
packager.py | 7 +--
packagerKMeleon.py | 182 +++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 198 insertions(+), 11 deletions(-)
diff --git a/build.py b/build.py
index 4506f9f..5a23ba5 100644
--- a/build.py
+++ b/build.py
@@ -7,8 +7,6 @@
import os, sys, re, buildtools
from getopt import getopt, GetoptError
-import buildtools.packager as packager
-import buildtools.releaseAutomation as releaseAutomation
class Command(object):
name = property(lambda self: self._name)
@@ -162,10 +160,15 @@ def runBuild(baseDir, scriptName, opts, args, type):
limitMetadata = True
outFile = args[0] if len(args) > 0 else None
- packager.createBuild(baseDir, outFile=outFile, locales=locales, buildNum=buildNum,
- releaseBuild=releaseBuild, keyFile=keyFile,
- limitMetadata=limitMetadata)
-
+ if type == 'gecko':
+ import buildtools.packager as packager
+ packager.createBuild(baseDir, outFile=outFile, locales=locales, buildNum=buildNum,
+ releaseBuild=releaseBuild, keyFile=keyFile,
+ limitMetadata=limitMetadata)
+ elif type == 'kmeleon':
+ import buildtools.packagerKMeleon as packagerKMeleon
+ packagerKMeleon.createBuild(baseDir, outFile=outFile, locales=locales,
+ buildNum=buildNum, releaseBuild=releaseBuild)
def setupTestEnvironment(baseDir, scriptName, opts, args, type):
dirsFile = '.profileDirs'
@@ -178,6 +181,7 @@ def setupTestEnvironment(baseDir, scriptName, opts, args, type):
handle = open(dirsFile, 'rb')
profileDirs = map(str.strip, handle.readlines())
handle.close()
+ import buildtools.packager as packager
packager.setupTestEnvironment(baseDir, profileDirs)
@@ -187,6 +191,7 @@ def showDescriptions(baseDir, scriptName, opts, args, type):
if option in ('-l', '--locales'):
locales = value.split(',')
+ import buildtools.packager as packager
if locales == None:
locales = packager.getLocales(baseDir)
elif locales == 'all':
@@ -233,6 +238,7 @@ def runReleaseAutomation(baseDir, scriptName, opts, args, type):
if keyFile == None:
print 'Warning: no key file specified, creating an unsigned release build\n'
+ import buildtools.releaseAutomation as releaseAutomation
releaseAutomation.run(baseDir, version, keyFile, downloadsRepo, buildtoolsRepo)
with addCommand(lambda baseDir, scriptName, opts, args, type: usage(scriptName, type), ('help', '-h', '--help')) as command:
@@ -247,7 +253,7 @@ with addCommand(runBuild, 'build') as command:
command.addOption('File containing private key and certificates required to sign the package', short='k', long='key', value='file')
command.addOption('Create a release build', short='r', long='release')
command.addOption('Create a build for Babelzilla', long='babelzilla')
- command.supportedTypes = ('gecko')
+ command.supportedTypes = ('gecko', 'kmeleon')
with addCommand(setupTestEnvironment, 'testenv') as command:
command.shortDescription = 'Set up test environment'
diff --git a/packager.py b/packager.py
index f7f36b2..fca04f7 100644
--- a/packager.py
+++ b/packager.py
@@ -26,8 +26,8 @@ KNOWN_APPS = {
defaultLocale = 'en-US'
-def getDefaultFileName(baseDir, metadata, version):
- return os.path.join(baseDir, '%s-%s.xpi' % (metadata.get('general', 'baseName'), version))
+def getDefaultFileName(baseDir, metadata, version, ext='xpi'):
+ return os.path.join(baseDir, '%s-%s.%s' % (metadata.get('general', 'baseName'), version, ext))
def getMetadataPath(baseDir):
return os.path.join(baseDir, 'metadata')
@@ -190,8 +190,7 @@ def fixupLocales(baseDir, files, params):
else:
files[path] = reference[file]['_origData'].encode('utf-8')
-def createChromeJar(baseDir, params):
- files = {}
+def createChromeJar(baseDir, params, files={}):
for name, path in getChromeSubdirs(baseDir, params['locales']).iteritems():
if os.path.isdir(path):
readFile(files, params, path, name)
diff --git a/packagerKMeleon.py b/packagerKMeleon.py
new file mode 100644
index 0000000..3584371
--- /dev/null
+++ b/packagerKMeleon.py
@@ -0,0 +1,182 @@
+# coding: utf-8
+
+# The contents of this file are subject to the Mozilla Public License
+# Version 1.1 (the "License"); you may not use this file except in
+# compliance with the License. You may obtain a copy of the License at
+# http://www.mozilla.org/MPL/
+
+import os, subprocess, re, tempfile, shutil, json
+import buildtools.packager as packager
+
+libs = (
+ 'libcmt.lib', 'kernel32.lib', 'user32.lib', 'gdi32.lib', 'comctl32.lib',
+ 'nspr4.lib', 'plds4.lib', 'plc4.lib', 'xpcom.lib', 'xpcomglue_s.lib',
+ 'embed_base_s.lib', 'unicharutil_external_s.lib', 'js3250.lib'
+)
+compileflags = ('-c', '-O1', '-W3', '-MT', '-DXP_WIN', '-Zc:wchar_t-')
+linkflags = ('-DLL', '-NODEFAULTLIB', '-NOLOGO')
+versionflag = '-DABP_VERSION="%s"'
+
+def getKMeleonSourceDir(baseDir):
+ return os.path.join(baseDir, 'kmeleon_src')
+
+def getGeckoDir(baseDir):
+ return os.path.join(getKMeleonSourceDir(baseDir), 'mozilla', 'mozilla', 'dist')
+
+def getBaseExtensionDir(baseDir):
+ return os.path.join(baseDir, 'adblockplus')
+
+def getIncludeDirs(baseDir):
+ yield os.path.join(getKMeleonSourceDir(baseDir), 'src')
+ geckoIncludeDir = os.path.join(getGeckoDir(baseDir), 'include')
+ for dir in ('caps', 'content', 'dom', 'gfx', 'imglib2', 'js', 'layout',
+ 'necko', 'nspr', 'pref', 'string', 'webbrwsr', 'widget', 'xpcom',
+ 'xpconnect'):
+ yield os.path.join(geckoIncludeDir, dir)
+
+def getLibDirs(baseDir):
+ yield os.path.join(getGeckoDir(baseDir), 'lib')
+
+def getFileList(baseDir, ext):
+ for file in os.listdir(baseDir):
+ path = os.path.join(baseDir, file)
+ if os.path.isfile(path) and file.endswith(ext):
+ yield path
+
+def getSourceFiles(baseDir):
+ return getFileList(baseDir, '.cpp')
+
+def getXULFiles(baseDir):
+ return getFileList(baseDir, '.xul')
+
+def getMacroFiles(baseDir):
+ return getFileList(baseDir, '.kmm')
+
+def getInterfaceFiles(baseDir):
+ return getFileList(baseDir, '.xpt')
+
+def getModuleFiles(baseDir):
+ return getFileList(baseDir, '.jsm')
+
+def getPrefsFiles(baseDir):
+ return getFileList(baseDir, '.js')
+
+def buildDLL(baseDir, fileName, version):
+ tempDir = tempfile.mkdtemp()
+ try:
+ objFiles = []
+ for sourceFile in getSourceFiles(baseDir):
+ objFile = os.path.join(tempDir, os.path.splitext(os.path.basename(sourceFile))[0] + '.obj')
+ objFiles.append(objFile)
+ command = ['cl']
+ command.extend(compileflags)
+ command.append(versionflag % version)
+ command.extend(map(lambda d: '-I%s' % d, getIncludeDirs(baseDir)))
+ command.append(sourceFile)
+ command.append('-Fo%s' % objFile)
+ subprocess.Popen(command).communicate()
+
+ outFile = os.path.join(tempDir, fileName)
+ command = ['link']
+ command.extend(objFiles)
+ command.extend(libs)
+ command.extend(linkflags)
+ command.extend(map(lambda d: '-LIBPATH:%s' % d, getLibDirs(baseDir)))
+ command.append('-OUT:%s' % outFile)
+ subprocess.Popen(command).communicate()
+
+ handle = open(outFile, 'rb')
+ result = handle.read()
+ handle.close()
+ return result
+ finally:
+ shutil.rmtree(tempDir, ignore_errors=True)
+
+def createManifest(baseExtDir, params):
+ localeMetadata = packager.readLocaleMetadata(baseExtDir, params['locales'])
+
+ manifest = {}
+ metadata = params['metadata']
+ manifest['id'] = metadata.get('general', 'id')
+ manifest['version'] = metadata.get('general', 'version')
+ manifest['version'] = params['version']
+ manifest['name'] = localeMetadata[packager.defaultLocale]['name']
+ manifest['description'] = localeMetadata[packager.defaultLocale]['description']
+ manifest['creator'] = metadata.get('general', 'author')
+ manifest['homepage'] = metadata.get('homepage', 'default')
+ if metadata.has_section('contributors'):
+ manifest['contributors'] = map(lambda item: item[1], metadata.items('contributors'))
+ manifest['contributors'].sort()
+ else:
+ manifest['contributors'] = []
+ manifest['translators'] = packager.getTranslators(localeMetadata)
+ return 'var EXPORTED_SYMBOLS = ["manifest"];\nvar manifest = ' + json.dumps(manifest)
+
+def processChromeManifest(data, baseName):
+ # Manifest location is different in K-Meleon, update paths
+ data = re.sub(r'jar:chrome/', 'jar:', data)
+ data = re.sub(r'(\s)modules/', r'\1../modules/%s/' % baseName, data)
+ data = re.sub(r'(\s)defaults/', r'\1../defaults/', data)
+ return data
+
+def createBuild(baseDir, outFile=None, locales=None, buildNum=None, releaseBuild=False):
+ if buildNum == None:
+ buildNum = packager.getBuildNum(baseDir)
+
+ baseExtDir = getBaseExtensionDir(baseDir)
+ if locales == None:
+ locales = packager.getLocales(baseExtDir)
+ elif locales == 'all':
+ locales = packager.getLocales(baseExtDir, True)
+
+ metadata = packager.readMetadata(baseExtDir)
+ version = metadata.get('general', 'version')
+ if not releaseBuild:
+ version += '.' + buildNum
+
+ if outFile == None:
+ outFile = packager.getDefaultFileName(baseDir, metadata, version, 'zip')
+
+ params = {
+ 'locales': locales,
+ 'releaseBuild': releaseBuild,
+ 'buildNum': buildNum,
+ 'version': version.encode('utf-8'),
+ 'metadata': metadata,
+ 'limitMetadata': False,
+ }
+ baseName = metadata.get('general', 'baseName')
+
+ chromeFiles = {}
+ for xulFile in getXULFiles(baseDir):
+ packager.readFile(chromeFiles, params, xulFile, 'content/ui/%s' % os.path.basename(xulFile))
+
+ files = {}
+ files['modules/%s/Manifest.jsm' % baseName] = createManifest(baseExtDir, params)
+ files['kplugins/%s.dll' % baseName] = buildDLL(baseDir, '%s.dll' % baseName, version)
+ files['chrome/%s.jar' % baseName] = packager.createChromeJar(baseExtDir, params, files=chromeFiles)
+
+ packager.readFile(files, params, os.path.join(baseExtDir, 'chrome.manifest'), 'chrome/%s.manifest' % baseName)
+ files['chrome/%s.manifest' % baseName] = processChromeManifest(files['chrome/%s.manifest' % baseName], baseName)
+
+ for macroFile in getMacroFiles(baseDir):
+ packager.readFile(files, params, macroFile, 'macros/%s' % os.path.basename(macroFile))
+ for interfaceFile in getInterfaceFiles(baseDir):
+ packager.readFile(files, params, interfaceFile, 'components/%s' % os.path.basename(interfaceFile))
+ for moduleFile in getModuleFiles(baseDir):
+ packager.readFile(files, params, moduleFile, 'modules/%s/%s' % (baseName, os.path.basename(moduleFile)))
+ for prefsFile in getPrefsFiles(baseDir):
+ packager.readFile(files, params, prefsFile, 'defaults/pref/%s' % os.path.basename(prefsFile))
+
+ packager.readFile(files, params, os.path.join(baseExtDir, 'defaults'), 'defaults')
+ packager.readFile(files, params, os.path.join(baseExtDir, 'modules'), 'modules/%s' %baseName)
+
+ # Correct files names (defaults/preferences/ => defaults/pref/)
+ newFiles = {}
+ for key, value in files.iteritems():
+ if key.startswith('defaults/preferences/'):
+ key = 'defaults/pref/' + key[len('defaults/preferences/'):]
+ newFiles[key] = value
+ files = newFiles
+
+ packager.writeXPI(files, outFile)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/adblock-plus.git
More information about the Pkg-mozext-commits
mailing list