[thunderbird-lightning/el5] Add more RHEL5 TB patches
Orion Poplawski
orion at fedoraproject.org
Thu Mar 15 16:46:30 UTC 2012
commit 052331fc9596848ee25a6647754dd2ddd523da9c
Author: Orion Poplawski <orion at cora.nwra.com>
Date: Thu Mar 15 10:46:29 2012 -0600
Add more RHEL5 TB patches
mozilla-python.patch | 833 +++++++++++++++++++++++++++++++++++++++
thunderbird-lightning.spec | 16 +
thunderbird-python.patch | 12 +
xulrunner-gc-sections-ppc.patch | 12 +
4 files changed, 873 insertions(+), 0 deletions(-)
---
diff --git a/mozilla-python.patch b/mozilla-python.patch
new file mode 100644
index 0000000..1f1aa9a
--- /dev/null
+++ b/mozilla-python.patch
@@ -0,0 +1,833 @@
+diff -up mozilla-beta/config/expandlibs_exec.py.python mozilla-beta/config/expandlibs_exec.py
+--- mozilla-beta/config/expandlibs_exec.py.python 2012-01-04 20:11:29.000000000 +0100
++++ mozilla-beta/config/expandlibs_exec.py 2012-01-11 16:24:30.000000000 +0100
+@@ -49,13 +49,11 @@ EXPAND_LIBS_LIST_STYLE variable: 'list'
+ or 'linkerscript' for GNU ld linker scripts.
+ See https://bugzilla.mozilla.org/show_bug.cgi?id=584474#c59 for more details.
+ '''
+-from __future__ import with_statement
+ import sys
+ import os
+ from expandlibs import ExpandArgs, relativize
+ import expandlibs_config as conf
+ from optparse import OptionParser
+-import subprocess
+ import tempfile
+ import shutil
+
+@@ -90,7 +88,11 @@ class ExpandArgsMore(ExpandArgs):
+ elif os.path.exists(arg) and len(ar_extract):
+ tmp = tempfile.mkdtemp(dir=os.curdir)
+ self.tmp.append(tmp)
+- subprocess.call(ar_extract + [os.path.abspath(arg)], cwd=tmp)
++ tmp_arg = ar_extract + [os.path.abspath(arg)]
++ oldir = os.getcwd()
++ os.chdir(tmp)
++ os.system(' '.join(tmp_arg))
++ os.chdir(oldir)
+ objs = []
+ for root, dirs, files in os.walk(tmp):
+ objs += [relativize(os.path.join(root, f)) for f in files if os.path.splitext(f)[1] in [conf.OBJ_SUFFIX, '.i_o']]
+@@ -136,20 +138,26 @@ def main():
+
+ (options, args) = parser.parse_args()
+
+- with ExpandArgsMore(args) as args:
++
++ args2 = ExpandArgsMore(args)
++ args2.__enter__()
++ try:
+ if options.extract:
+- args.extract()
++ args2.extract()
+ if options.uselist:
+- args.makelist()
++ args2.makelist()
+
+ if options.verbose:
+- print >>sys.stderr, "Executing: " + " ".join(args)
+- for tmp in [f for f in args.tmp if os.path.isfile(f)]:
++ print >>sys.stderr, "Executing: " + " ".join(args2)
++ for tmp in [f for f in args2.tmp if os.path.isfile(f)]:
+ print >>sys.stderr, tmp + ":"
+- with open(tmp) as file:
+- print >>sys.stderr, "".join([" " + l for l in file.readlines()])
++ ff = open(tmp)
++ print >>sys.stderr, "".join([" " + l for l in ff.readlines()])
+ sys.stderr.flush()
+- exit(subprocess.call(args))
++ ret = os.system(' '.join(args2))
++ sys.exit(ret)
++ finally:
++ args2.__exit__(0, 0, 0)
+
+ if __name__ == '__main__':
+ main()
+diff -up mozilla-beta/config/expandlibs.py.python mozilla-beta/config/expandlibs.py
+--- mozilla-beta/config/expandlibs.py.python 2012-01-04 20:11:29.000000000 +0100
++++ mozilla-beta/config/expandlibs.py 2012-01-11 16:24:30.000000000 +0100
+@@ -59,7 +59,6 @@ ${LIB_PREFIX}${ROOT}.${LIB_SUFFIX} follo
+ descriptor contains. And for each of these LIBS, also apply the same
+ rules.
+ '''
+-from __future__ import with_statement
+ import sys, os
+ import expandlibs_config as conf
+
+@@ -93,15 +92,15 @@ class LibDescriptor(dict):
+ '''Creates an instance of a lib descriptor, initialized with contents
+ from a list of strings when given. This is intended for use with
+ file.readlines()'''
+- if isinstance(content, list) and all([isinstance(item, str) for item in content]):
+- pass
+- elif content is not None:
+- raise TypeError("LibDescriptor() arg 1 must be None or a list of strings")
+ super(LibDescriptor, self).__init__()
+ for key in self.KEYS:
+ self[key] = []
+- if not content:
++ if content == None:
+ return
++ if isinstance(content, list):
++ for item in content:
++ if not isinstance(item, str):
++ raise TypeError("LibDescriptor() arg 1 must be None or a list of strings")
+ for key, value in [(s.strip() for s in item.split('=', 2)) for item in content if item.find('=') >= 0]:
+ if key in self.KEYS:
+ self[key] = value.split()
+@@ -136,8 +135,8 @@ class ExpandArgs(list):
+ def _expand_desc(self, arg):
+ '''Internal function taking care of lib descriptor expansion only'''
+ if os.path.exists(arg + conf.LIBS_DESC_SUFFIX):
+- with open(arg + conf.LIBS_DESC_SUFFIX, 'r') as f:
+- desc = LibDescriptor(f.readlines())
++ f = open(arg + conf.LIBS_DESC_SUFFIX, 'r')
++ desc = LibDescriptor(f.readlines())
+ objs = [relativize(o) for o in desc['OBJS']]
+ for lib in desc['LIBS']:
+ objs += self._expand(lib)
+diff -up mozilla-beta/config/optimizejars.py.python mozilla-beta/config/optimizejars.py
+--- mozilla-beta/config/optimizejars.py.python 2012-01-04 20:11:29.000000000 +0100
++++ mozilla-beta/config/optimizejars.py 2012-01-11 16:24:30.000000000 +0100
+@@ -320,14 +320,17 @@ def optimizejar(jar, outjar, inlog = Non
+ outfd.write(dirend_data)
+
+ print "Stripped %d bytes" % total_stripped
+- print "%s %d/%d in %s" % (("Ordered" if inlog is not None else "Deoptimized"),
++ tmp_str = "Ordered"
++ if inlog is None:
++ tmp_str = "Deoptimized"
++ print "%s %d/%d in %s" % (tmp_str,
+ reordered_count, len(central_directory), outjar)
+ outfd.close()
+ return outlog
+
+ if len(sys.argv) != 5:
+ print "Usage: --optimize|--deoptimize %s JAR_LOG_DIR IN_JAR_DIR OUT_JAR_DIR" % sys.argv[0]
+- exit(1)
++ sys.exit(1)
+
+ def optimize(JAR_LOG_DIR, IN_JAR_DIR, OUT_JAR_DIR):
+ ls = os.listdir(IN_JAR_DIR)
+diff -up mozilla-beta/configure.python mozilla-beta/configure
+--- mozilla-beta/configure.python 2012-01-04 20:29:59.000000000 +0100
++++ mozilla-beta/configure 2012-01-11 16:24:30.000000000 +0100
+@@ -1094,7 +1094,7 @@ NSS_VERSION=3
+
+ GLIB_VERSION=1.2.0
+ PERL_VERSION=5.006
+-PYTHON_VERSION=2.5
++PYTHON_VERSION=2.4
+ CAIRO_VERSION=1.10
+ PANGO_VERSION=1.14.0
+ GTK2_VERSION=2.10.0
+diff -up mozilla-beta/config/writemozinfo.py.python mozilla-beta/config/writemozinfo.py
+--- mozilla-beta/config/writemozinfo.py.python 2012-01-04 20:11:29.000000000 +0100
++++ mozilla-beta/config/writemozinfo.py 2012-01-11 16:24:30.000000000 +0100
+@@ -5,7 +5,6 @@
+ # configuration, such as the target OS and CPU.
+ #
+ # The output file is intended to be used as input to the mozinfo package.
+-from __future__ import with_statement
+ import os, re, sys
+
+ def build_dict(env=os.environ):
+@@ -98,8 +97,9 @@ def write_json(file, env=os.environ):
+ """
+ s = jsonify(build_dict(env))
+ if isinstance(file, basestring):
+- with open(file, "w") as f:
+- f.write(s)
++ f = open(file, "w")
++ f.write(s)
++ f.close()
+ else:
+ file.write(s)
+
+diff -up mozilla-beta/js/src/config/expandlibs_exec.py.python mozilla-beta/js/src/config/expandlibs_exec.py
+--- mozilla-beta/js/src/config/expandlibs_exec.py.python 2012-01-04 20:11:41.000000000 +0100
++++ mozilla-beta/js/src/config/expandlibs_exec.py 2012-01-11 16:24:30.000000000 +0100
+@@ -49,13 +49,11 @@ EXPAND_LIBS_LIST_STYLE variable: 'list'
+ or 'linkerscript' for GNU ld linker scripts.
+ See https://bugzilla.mozilla.org/show_bug.cgi?id=584474#c59 for more details.
+ '''
+-from __future__ import with_statement
+ import sys
+ import os
+ from expandlibs import ExpandArgs, relativize
+ import expandlibs_config as conf
+ from optparse import OptionParser
+-import subprocess
+ import tempfile
+ import shutil
+
+@@ -90,7 +88,11 @@ class ExpandArgsMore(ExpandArgs):
+ elif os.path.exists(arg) and len(ar_extract):
+ tmp = tempfile.mkdtemp(dir=os.curdir)
+ self.tmp.append(tmp)
+- subprocess.call(ar_extract + [os.path.abspath(arg)], cwd=tmp)
++ tmp_arg = ar_extract + [os.path.abspath(arg)]
++ oldir = os.getcwd()
++ os.chdir(tmp)
++ os.system(' '.join(tmp_arg))
++ os.chdir(oldir)
+ objs = []
+ for root, dirs, files in os.walk(tmp):
+ objs += [relativize(os.path.join(root, f)) for f in files if os.path.splitext(f)[1] in [conf.OBJ_SUFFIX, '.i_o']]
+@@ -136,20 +138,26 @@ def main():
+
+ (options, args) = parser.parse_args()
+
+- with ExpandArgsMore(args) as args:
++
++ args2 = ExpandArgsMore(args)
++ args2.__enter__()
++ try:
+ if options.extract:
+- args.extract()
++ args2.extract()
+ if options.uselist:
+- args.makelist()
++ args2.makelist()
+
+ if options.verbose:
+- print >>sys.stderr, "Executing: " + " ".join(args)
+- for tmp in [f for f in args.tmp if os.path.isfile(f)]:
++ print >>sys.stderr, "Executing: " + " ".join(args2)
++ for tmp in [f for f in args2.tmp if os.path.isfile(f)]:
+ print >>sys.stderr, tmp + ":"
+- with open(tmp) as file:
+- print >>sys.stderr, "".join([" " + l for l in file.readlines()])
++ ff = open(tmp)
++ print >>sys.stderr, "".join([" " + l for l in ff.readlines()])
+ sys.stderr.flush()
+- exit(subprocess.call(args))
++ ret = os.system(' '.join(args2))
++ sys.exit(ret)
++ finally:
++ args2.__exit__(0, 0, 0)
+
+ if __name__ == '__main__':
+ main()
+diff -up mozilla-beta/js/src/config/expandlibs.py.python mozilla-beta/js/src/config/expandlibs.py
+--- mozilla-beta/js/src/config/expandlibs.py.python 2012-01-04 20:11:41.000000000 +0100
++++ mozilla-beta/js/src/config/expandlibs.py 2012-01-11 16:24:30.000000000 +0100
+@@ -59,7 +59,6 @@ ${LIB_PREFIX}${ROOT}.${LIB_SUFFIX} follo
+ descriptor contains. And for each of these LIBS, also apply the same
+ rules.
+ '''
+-from __future__ import with_statement
+ import sys, os
+ import expandlibs_config as conf
+
+@@ -93,15 +92,15 @@ class LibDescriptor(dict):
+ '''Creates an instance of a lib descriptor, initialized with contents
+ from a list of strings when given. This is intended for use with
+ file.readlines()'''
+- if isinstance(content, list) and all([isinstance(item, str) for item in content]):
+- pass
+- elif content is not None:
+- raise TypeError("LibDescriptor() arg 1 must be None or a list of strings")
+ super(LibDescriptor, self).__init__()
+ for key in self.KEYS:
+ self[key] = []
+- if not content:
++ if content == None:
+ return
++ if isinstance(content, list):
++ for item in content:
++ if not isinstance(item, str):
++ raise TypeError("LibDescriptor() arg 1 must be None or a list of strings")
+ for key, value in [(s.strip() for s in item.split('=', 2)) for item in content if item.find('=') >= 0]:
+ if key in self.KEYS:
+ self[key] = value.split()
+@@ -136,8 +135,8 @@ class ExpandArgs(list):
+ def _expand_desc(self, arg):
+ '''Internal function taking care of lib descriptor expansion only'''
+ if os.path.exists(arg + conf.LIBS_DESC_SUFFIX):
+- with open(arg + conf.LIBS_DESC_SUFFIX, 'r') as f:
+- desc = LibDescriptor(f.readlines())
++ f = open(arg + conf.LIBS_DESC_SUFFIX, 'r')
++ desc = LibDescriptor(f.readlines())
+ objs = [relativize(o) for o in desc['OBJS']]
+ for lib in desc['LIBS']:
+ objs += self._expand(lib)
+diff -up mozilla-beta/js/src/configure.python mozilla-beta/js/src/configure
+--- mozilla-beta/js/src/configure.python 2012-01-04 20:29:59.000000000 +0100
++++ mozilla-beta/js/src/configure 2012-01-11 16:24:30.000000000 +0100
+@@ -863,7 +863,7 @@ _SUBDIR_CONFIG_ARGS="$ac_configure_args"
+ NSPR_VERSION=4
+
+ PERL_VERSION=5.006
+-PYTHON_VERSION=2.5
++PYTHON_VERSION=2.4
+ WINDRES_VERSION=2.14.90
+ W32API_VERSION=3.14
+
+diff -up mozilla-beta/js/xpconnect/src/codegen.py.python mozilla-beta/js/xpconnect/src/codegen.py
+--- mozilla-beta/js/xpconnect/src/codegen.py.python 2012-01-11 16:35:16.000000000 +0100
++++ mozilla-beta/js/xpconnect/src/codegen.py 2012-01-11 16:36:26.000000000 +0100
+@@ -508,8 +508,11 @@ def writeStub(f, customMethodCalls, memb
+ argumentValues = (customMethodCall['additionalArgumentValues']
+ % header.methodNativeName(member))
+ if isAttr:
++ strict_str = ""
++ if isSetter:
++ strict_str = ", strict"
+ callTemplate += (" return %s(cx, obj, id%s, %s, vp);\n"
+- % (templateName, ", strict" if isSetter else "", argumentValues))
++ % (templateName, strict_str, argumentValues))
+ else:
+ callTemplate += (" return %s(cx, argc, %s, vp);\n"
+ % (templateName, argumentValues))
+diff -up mozilla-beta/js/xpconnect/src/dombindingsgen.py.python mozilla-beta/js/xpconnect/src/dombindingsgen.py
+--- mozilla-beta/js/xpconnect/src/dombindingsgen.py.python 2012-01-11 16:32:22.000000000 +0100
++++ mozilla-beta/js/xpconnect/src/dombindingsgen.py 2012-01-11 16:35:04.000000000 +0100
+@@ -190,7 +190,10 @@ class DOMClass(UserDict.DictMixin):
+
+ def ops(getterType, setterType):
+ def opType(type):
+- return type + (" " if type.endswith('>') else "")
++ if type.endswith('>'):
++ return type + " "
++ else:
++ return type
+
+ if getterType or setterType:
+ opsClass = ", Ops<"
+@@ -209,7 +212,10 @@ class DOMClass(UserDict.DictMixin):
+ if key == 'indexOps':
+ return ops(self.indexGetter and self.indexGetterType, self.indexSetter and self.indexSetterType)
+ if key == 'nameOps':
+- return ops(self.nameGetter and self.nameGetterType, self.nameSetter and self.nameSetterType) if self.nameGetter else ""
++ if self.nameGetter:
++ return ops(self.nameGetter and self.nameGetterType, self.nameSetter and self.nameSetterType)
++ else:
++ return ""
+
+ if key == 'listClass':
+ if self.base:
+@@ -222,7 +228,10 @@ class DOMClass(UserDict.DictMixin):
+
+ def __cmp__(x, y):
+ if x.isBase != y.isBase:
+- return -1 if x.isBase else 1
++ if x.isBase:
++ return -1
++ else:
++ return 1;
+ return cmp(x.name, y.name)
+
+ class Configuration:
+diff -up mozilla-beta/js/xpconnect/src/qsgen.py.python mozilla-beta/js/xpconnect/src/qsgen.py
+--- mozilla-beta/js/xpconnect/src/qsgen.py.python 2012-01-04 20:11:45.000000000 +0100
++++ mozilla-beta/js/xpconnect/src/qsgen.py 2012-01-11 16:24:30.000000000 +0100
+@@ -822,9 +822,12 @@ def writeQuickStub(f, customMethodCalls,
+ or header.firstCap(member.name))
+ argumentValues = (customMethodCall['additionalArgumentValues']
+ % nativeName)
++ templateStrict = ", strict"
++ if not isSetter:
++ templateStrict = ""
+ if isAttr:
+ callTemplate += (" return %s(cx, obj, id%s, %s, vp);\n"
+- % (templateName, ", strict" if isSetter else "", argumentValues))
++ % (templateName, templateStrict, argumentValues))
+ else:
+ callTemplate += (" return %s(cx, argc, %s, vp);\n"
+ % (templateName, argumentValues))
+diff -up mozilla-beta/xpcom/idl-parser/header.py.python mozilla-beta/xpcom/idl-parser/header.py
+--- mozilla-beta/xpcom/idl-parser/header.py.python 2012-01-04 20:12:02.000000000 +0100
++++ mozilla-beta/xpcom/idl-parser/header.py 2012-01-11 16:30:54.000000000 +0100
+@@ -40,7 +40,7 @@
+
+ """Print a C++ header file for the IDL files specified on the command line"""
+
+-import sys, os.path, re, xpidl
++import sys, os.path, re, xpidl, string
+
+ printdoccomments = False
+
+@@ -198,7 +198,7 @@ forward_decl = """class %(name)s; /* for
+
+ def idl_basename(f):
+ """returns the base name of a file with the last extension stripped"""
+- return os.path.basename(f).rpartition('.')[0]
++ return string.split(os.path.basename(f), '.')[0]
+
+ def print_header(idl, fd, filename):
+ fd.write(header % {'filename': filename,
+@@ -486,7 +486,9 @@ if __name__ == '__main__':
+ o.add_option('--regen', action='store_true', dest='regen', default=False,
+ help="Regenerate IDL Parser cache")
+ options, args = o.parse_args()
+- file = args[0] if args else None
++ file = None
++ if args:
++ file = args[0]
+
+ if options.cachedir is not None:
+ if not os.path.isdir(options.cachedir):
+diff -up mozilla-beta/xpcom/idl-parser/typelib.py.python mozilla-beta/xpcom/idl-parser/typelib.py
+--- mozilla-beta/xpcom/idl-parser/typelib.py.python 2012-01-11 16:40:39.000000000 +0100
++++ mozilla-beta/xpcom/idl-parser/typelib.py 2012-01-11 16:41:24.000000000 +0100
+@@ -285,7 +285,9 @@ if __name__ == '__main__':
+ o.add_option('--regen', action='store_true', dest='regen', default=False,
+ help="Regenerate IDL Parser cache")
+ options, args = o.parse_args()
+- file = args[0] if args else None
++ file = None
++ if args:
++ file = args[0]
+
+ if options.cachedir is not None:
+ if not os.path.isdir(options.cachedir):
+diff -up mozilla-beta/xpcom/typelib/xpt/tools/xpt.py.python mozilla-beta/xpcom/typelib/xpt/tools/xpt.py
+--- mozilla-beta/xpcom/typelib/xpt/tools/xpt.py.python 2012-01-04 20:12:02.000000000 +0100
++++ mozilla-beta/xpcom/typelib/xpt/tools/xpt.py 2012-01-11 16:24:30.000000000 +0100
+@@ -65,7 +65,6 @@ InterfaceType() - construct a new
+
+ """
+
+-from __future__ import with_statement
+ import os, sys
+ import struct
+
+@@ -101,7 +100,7 @@ class Type(object):
+ this class directly. Rather, use one of its subclasses.
+
+ """
+- _prefixdescriptor = struct.Struct(">B")
++ _prefixdescriptor = struct
+ Tags = enum(
+ # The first 18 entries are SimpleTypeDescriptor
+ 'int8',
+@@ -183,13 +182,13 @@ class Type(object):
+
+ """
+ start = data_pool + offset - 1
+- (data,) = Type._prefixdescriptor.unpack(map[start:start + Type._prefixdescriptor.size])
++ (data,) = Type._prefixdescriptor.unpack(">B", map[start:start + Type._prefixdescriptor.calcsize(">B")])
+ # first three bits are the flags
+ flags = data & 0xE0
+ flags = Type.decodeflags(flags)
+ # last five bits is the tag
+ tag = data & 0x1F
+- offset += Type._prefixdescriptor.size
++ offset += Type._prefixdescriptor.calcsize(">B")
+ t = None
+ if tag <= Type.Tags.wchar_t_ptr or tag >= Type.Tags.UTF8String:
+ t = SimpleType.get(data, tag, flags)
+@@ -213,7 +212,7 @@ class Type(object):
+ and the subclass method must be called.
+
+ """
+- file.write(Type._prefixdescriptor.pack(self.encodeflags() | self.tag))
++ file.write(Type._prefixdescriptor.pack(">B", self.encodeflags() | self.tag))
+
+ class SimpleType(Type):
+ """
+@@ -262,7 +261,7 @@ class InterfaceType(Type):
+ (InterfaceTypeDescriptor from the typelib specification.)
+
+ """
+- _descriptor = struct.Struct(">H")
++ _descriptor = struct
+
+ def __init__(self, iface, pointer=True, **kwargs):
+ if not pointer:
+@@ -284,8 +283,8 @@ class InterfaceType(Type):
+ if not flags['pointer']:
+ return None, offset
+ start = data_pool + offset - 1
+- (iface_index,) = InterfaceType._descriptor.unpack(map[start:start + InterfaceType._descriptor.size])
+- offset += InterfaceType._descriptor.size
++ (iface_index,) = InterfaceType._descriptor.unpack(">H", map[start:start + InterfaceType._descriptor.calcsize(">H")])
++ offset += InterfaceType._descriptor.calcsize(">H")
+ iface = None
+ # interface indices are 1-based
+ if iface_index > 0 and iface_index <= len(typelib.interfaces):
+@@ -300,7 +299,7 @@ class InterfaceType(Type):
+ """
+ Type.write(self, typelib, file)
+ # write out the interface index (1-based)
+- file.write(InterfaceType._descriptor.pack(typelib.interfaces.index(self.iface) + 1))
++ file.write(InterfaceType._descriptor.pack(">H", typelib.interfaces.index(self.iface) + 1))
+
+ def __str__(self):
+ if self.iface:
+@@ -314,7 +313,7 @@ class InterfaceIsType(Type):
+ typelib specification.)
+
+ """
+- _descriptor = struct.Struct(">B")
++ _descriptor = struct
+ _cache = {}
+
+ def __init__(self, param_index, pointer=True, **kwargs):
+@@ -338,8 +337,8 @@ class InterfaceIsType(Type):
+ if not flags['pointer']:
+ return None, offset
+ start = data_pool + offset - 1
+- (param_index,) = InterfaceIsType._descriptor.unpack(map[start:start + InterfaceIsType._descriptor.size])
+- offset += InterfaceIsType._descriptor.size
++ (param_index,) = InterfaceIsType._descriptor.unpack(">B", map[start:start + InterfaceIsType._descriptor.calcsize(">B")])
++ offset += InterfaceIsType._descriptor.calcsize(">B")
+ if param_index not in InterfaceIsType._cache:
+ InterfaceIsType._cache[param_index] = InterfaceIsType(param_index, **flags)
+ return InterfaceIsType._cache[param_index], offset
+@@ -351,7 +350,7 @@ class InterfaceIsType(Type):
+
+ """
+ Type.write(self, typelib, file)
+- file.write(InterfaceIsType._descriptor.pack(self.param_index))
++ file.write(InterfaceIsType._descriptor.pack(">B", self.param_index))
+
+ def __str__(self):
+ return "InterfaceIs *"
+@@ -363,7 +362,7 @@ class ArrayType(Type):
+ (ArrayTypeDescriptor from the typelib specification.)
+
+ """
+- _descriptor = struct.Struct(">BB")
++ _descriptor = struct
+
+ def __init__(self, element_type, size_is_arg_num, length_is_arg_num,
+ pointer=True, **kwargs):
+@@ -387,8 +386,8 @@ class ArrayType(Type):
+ if not flags['pointer']:
+ return None, offset
+ start = data_pool + offset - 1
+- (size_is_arg_num, length_is_arg_num) = ArrayType._descriptor.unpack(map[start:start + ArrayType._descriptor.size])
+- offset += ArrayType._descriptor.size
++ (size_is_arg_num, length_is_arg_num) = ArrayType._descriptor.unpack(">BB", map[start:start + ArrayType._descriptor.calcsize(">BB")])
++ offset += ArrayType._descriptor.calcsize(">BB")
+ t, offset = Type.read(typelib, map, data_pool, offset)
+ return ArrayType(t, size_is_arg_num, length_is_arg_num, **flags), offset
+
+@@ -399,7 +398,7 @@ class ArrayType(Type):
+
+ """
+ Type.write(self, typelib, file)
+- file.write(ArrayType._descriptor.pack(self.size_is_arg_num,
++ file.write(ArrayType._descriptor.pack(">BB", self.size_is_arg_num,
+ self.length_is_arg_num))
+ self.element_type.write(typelib, file)
+
+@@ -413,7 +412,7 @@ class StringWithSizeType(Type):
+ from the typelib specification.)
+
+ """
+- _descriptor = struct.Struct(">BB")
++ _descriptor = struct
+
+ def __init__(self, size_is_arg_num, length_is_arg_num,
+ pointer=True, **kwargs):
+@@ -436,8 +435,8 @@ class StringWithSizeType(Type):
+ if not flags['pointer']:
+ return None, offset
+ start = data_pool + offset - 1
+- (size_is_arg_num, length_is_arg_num) = StringWithSizeType._descriptor.unpack(map[start:start + StringWithSizeType._descriptor.size])
+- offset += StringWithSizeType._descriptor.size
++ (size_is_arg_num, length_is_arg_num) = StringWithSizeType._descriptor.unpack(">BB", map[start:start + StringWithSizeType._descriptor.calcsize(">BB")])
++ offset += StringWithSizeType._descriptor.calcsize(">BB")
+ return StringWithSizeType(size_is_arg_num, length_is_arg_num, **flags), offset
+
+ def write(self, typelib, file):
+@@ -447,7 +446,7 @@ class StringWithSizeType(Type):
+
+ """
+ Type.write(self, typelib, file)
+- file.write(StringWithSizeType._descriptor.pack(self.size_is_arg_num,
++ file.write(StringWithSizeType._descriptor.pack(">BB", self.size_is_arg_num,
+ self.length_is_arg_num))
+
+ def __str__(self):
+@@ -460,7 +459,7 @@ class WideStringWithSizeType(Type):
+ (WideStringWithSizeTypeDescriptor from the typelib specification.)
+
+ """
+- _descriptor = struct.Struct(">BB")
++ _descriptor = struct
+
+ def __init__(self, size_is_arg_num, length_is_arg_num,
+ pointer=True, **kwargs):
+@@ -483,8 +482,8 @@ class WideStringWithSizeType(Type):
+ if not flags['pointer']:
+ return None, offset
+ start = data_pool + offset - 1
+- (size_is_arg_num, length_is_arg_num) = WideStringWithSizeType._descriptor.unpack(map[start:start + WideStringWithSizeType._descriptor.size])
+- offset += WideStringWithSizeType._descriptor.size
++ (size_is_arg_num, length_is_arg_num) = WideStringWithSizeType._descriptor.unpack(">BB", map[start:start + WideStringWithSizeType._descriptor.calcsize(">BB")])
++ offset += WideStringWithSizeType._descriptor.calcsize(">BB")
+ return WideStringWithSizeType(size_is_arg_num, length_is_arg_num, **flags), offset
+
+ def write(self, typelib, file):
+@@ -494,7 +493,7 @@ class WideStringWithSizeType(Type):
+
+ """
+ Type.write(self, typelib, file)
+- file.write(WideStringWithSizeType._descriptor.pack(self.size_is_arg_num,
++ file.write(WideStringWithSizeType._descriptor.pack(">BB", self.size_is_arg_num,
+ self.length_is_arg_num))
+
+ def __str__(self):
+@@ -506,7 +505,7 @@ class Param(object):
+ (ParamDescriptor from the typelib specification.)
+
+ """
+- _descriptorstart = struct.Struct(">B")
++ _descriptorstart = struct
+
+ def __init__(self, type, in_=True, out=False, retval=False,
+ shared=False, dipper=False, optional=False):
+@@ -573,11 +572,11 @@ class Param(object):
+ following this ParamDescriptor.
+ """
+ start = data_pool + offset - 1
+- (flags,) = Param._descriptorstart.unpack(map[start:start + Param._descriptorstart.size])
++ (flags,) = Param._descriptorstart.unpack(">B", map[start:start + Param._descriptorstart.calcsize(">B")])
+ # only the first five bits are flags
+ flags &= 0xFC
+ flags = Param.decodeflags(flags)
+- offset += Param._descriptorstart.size
++ offset += Param._descriptorstart.calcsize(">B")
+ t, offset = Type.read(typelib, map, data_pool, offset)
+ p = Param(t, **flags)
+ return p, offset
+@@ -588,7 +587,7 @@ class Param(object):
+ to the correct position.
+
+ """
+- file.write(Param._descriptorstart.pack(self.encodeflags()))
++ file.write(Param._descriptorstart.pack(">B", self.encodeflags()))
+ self.type.write(typelib, file)
+
+ def prefix(self):
+@@ -625,7 +624,7 @@ class Method(object):
+ (MethodDescriptor from the typelib specification.)
+
+ """
+- _descriptorstart = struct.Struct(">BIB")
++ _descriptorstart = struct
+
+ def __init__(self, name, result,
+ params=[], getter=False, setter=False, notxpcom=False,
+@@ -723,13 +722,13 @@ class Method(object):
+
+ """
+ start = data_pool + offset - 1
+- flags, name_offset, num_args = Method._descriptorstart.unpack(map[start:start + Method._descriptorstart.size])
++ flags, name_offset, num_args = Method._descriptorstart.unpack(">BIB", map[start:start + Method._descriptorstart.calcsize(">BIB")])
+ # only the first seven bits are flags
+ flags &= 0xFE
+ flags = Method.decodeflags(flags)
+ name = Typelib.read_string(map, data_pool, name_offset)
+ m = Method(name, None, **flags)
+- offset += Method._descriptorstart.size
++ offset += Method._descriptorstart.calcsize(">BIB")
+ offset = m.read_params(typelib, map, data_pool, offset, num_args)
+ offset = m.read_result(typelib, map, data_pool, offset)
+ return m, offset
+@@ -740,7 +739,7 @@ class Method(object):
+ seeked to the right position.
+
+ """
+- file.write(Method._descriptorstart.pack(self.encodeflags(),
++ file.write(Method._descriptorstart.pack(">BIB", self.encodeflags(),
+ self._name_offset,
+ len(self.params)))
+ for p in self.params:
+@@ -766,7 +765,7 @@ class Constant(object):
+ (ConstantDesciptor from the typelib specification.)
+
+ """
+- _descriptorstart = struct.Struct(">I")
++ _descriptorstart = struct
+ # Actual value is restricted to this set of types
+ #XXX: the spec lies, the source allows a bunch more
+ # http://hg.mozilla.org/mozilla-central/annotate/9c85f9aaec8c/xpcom/typelib/xpt/src/xpt_struct.c#l689
+@@ -791,9 +790,9 @@ class Constant(object):
+
+ """
+ start = data_pool + offset - 1
+- (name_offset,) = Constant._descriptorstart.unpack(map[start:start + Constant._descriptorstart.size])
++ (name_offset,) = Constant._descriptorstart.unpack(">I", map[start:start + Constant._descriptorstart.calcsize(">I")])
+ name = Typelib.read_string(map, data_pool, name_offset)
+- offset += Constant._descriptorstart.size
++ offset += Constant._descriptorstart.calcsize(">I")
+ # Read TypeDescriptor
+ t, offset = Type.read(typelib, map, data_pool, offset)
+ c = None
+@@ -811,7 +810,7 @@ class Constant(object):
+ to be seeked to the proper position.
+
+ """
+- file.write(Constant._descriptorstart.pack(self._name_offset))
++ file.write(Constant._descriptorstart.pack(">I", self._name_offset))
+ self.type.write(typelib, file)
+ tt = Constant.typemap[self.type.tag]
+ file.write(struct.pack(tt, self.value))
+@@ -839,8 +838,8 @@ class Interface(object):
+ (InterfaceDescriptor from the typelib specification.)
+
+ """
+- _direntry = struct.Struct(">16sIII")
+- _descriptorstart = struct.Struct(">HH")
++ _direntry = struct
++ _descriptorstart = struct
+
+ UNRESOLVED_IID = "00000000-0000-0000-0000-000000000000"
+
+@@ -904,11 +903,11 @@ class Interface(object):
+ if offset == 0:
+ return
+ start = data_pool + offset - 1
+- parent, num_methods = Interface._descriptorstart.unpack(map[start:start + Interface._descriptorstart.size])
++ parent, num_methods = Interface._descriptorstart.unpack(">HH", map[start:start + Interface._descriptorstart.calcsize(">HH")])
+ if parent > 0 and parent <= len(typelib.interfaces):
+ self.parent = typelib.interfaces[parent - 1]
+ # Read methods
+- offset += Interface._descriptorstart.size
++ offset += Interface._descriptorstart.calcsize(">HH")
+ for i in range(num_methods):
+ m, offset = Method.read(typelib, map, data_pool, offset)
+ self.methods.append(m)
+@@ -939,7 +938,7 @@ class Interface(object):
+ to |file|, which is assumed to be seeked to the correct offset.
+
+ """
+- file.write(Interface._direntry.pack(Typelib.string_to_iid(self.iid),
++ file.write(Interface._direntry.pack(">16sIII", Typelib.string_to_iid(self.iid),
+ self._name_offset,
+ self._namespace_offset,
+ self._descriptor_offset))
+@@ -958,7 +957,7 @@ class Interface(object):
+ parent_idx = 0
+ if self.parent:
+ parent_idx = typelib.interfaces.index(self.parent) + 1
+- file.write(Interface._descriptorstart.pack(parent_idx, len(self.methods)))
++ file.write(Interface._descriptorstart.pack(">HH", parent_idx, len(self.methods)))
+ for m in self.methods:
+ m.write(typelib, file)
+ file.write(struct.pack(">H", len(self.constants)))
+@@ -1006,7 +1005,7 @@ class Typelib(object):
+ or the static Typelib.read method may be called to read one from a file.
+
+ """
+- _header = struct.Struct(">16sBBHIII")
++ _header = struct
+
+ def __init__(self, version=TYPELIB_VERSION, interfaces=[], annotations=[]):
+ """
+@@ -1049,15 +1048,15 @@ class Typelib(object):
+
+ @staticmethod
+ def read(filename):
+- """
+- Read a typelib from the file named |filename| and return
+- the constructed Typelib object.
+-
+- """
+- with open(filename, "r+b") as f:
++ """
++ Read a typelib from the file named |filename| and return
++ the constructed Typelib object.
++
++ """
++ f = open(filename, "r+b")
+ st = os.fstat(f.fileno())
+ map = f.read(st.st_size)
+- data = Typelib._header.unpack(map[:Typelib._header.size])
++ data = Typelib._header.unpack(">16sBBHIII", map[:Typelib._header.calcsize(">16sBBHIII")])
+ if data[0] != XPT_MAGIC:
+ raise FileFormatError, "Bad magic: %s" % data[0]
+ xpt = Typelib((data[1], data[2]))
+@@ -1074,7 +1073,7 @@ class Typelib(object):
+ data_pool_offset = data[6]
+ # make a half-hearted attempt to read Annotations,
+ # since XPIDL doesn't produce any anyway.
+- start = Typelib._header.size
++ start = Typelib._header.calcsize(">16sBBHIII")
+ (anno, ) = struct.unpack(">B", map[start:start + struct.calcsize(">B")])
+ islast = anno & 0x80
+ tag = anno & 0x7F
+@@ -1084,9 +1083,9 @@ class Typelib(object):
+
+ for i in range(num_interfaces):
+ # iid, name, namespace, interface_descriptor
+- start = interface_directory_offset + i * Interface._direntry.size
+- end = interface_directory_offset + (i+1) * Interface._direntry.size
+- ide = Interface._direntry.unpack(map[start:end])
++ start = interface_directory_offset + i * Interface._direntry.calcsize(">16sIII")
++ end = interface_directory_offset + (i+1) * Interface._direntry.calcsize(">16sIII")
++ ide = Interface._direntry.unpack(">16sIII", map[start:end])
+ iid = Typelib.iid_to_string(ide[0])
+ name = Typelib.read_string(map, data_pool_offset, ide[1])
+ namespace = Typelib.read_string(map, data_pool_offset, ide[2])
+@@ -1095,7 +1094,7 @@ class Typelib(object):
+ xpt.interfaces.append(iface)
+ for iface in xpt.interfaces:
+ iface.read_descriptor(xpt, map, data_pool_offset)
+- return xpt
++ return xpt
+
+ def __repr__(self):
+ return "<Typelib with %d interfaces>" % len(self.interfaces)
+@@ -1122,14 +1121,14 @@ class Typelib(object):
+ def writefd(self, fd):
+ # write out space for a header + one empty annotation,
+ # padded to 4-byte alignment.
+- headersize = (Typelib._header.size + 1)
++ headersize = (Typelib._header.calcsize(">16sBBHIII") + 1)
+ if headersize % 4:
+ headersize += 4 - headersize % 4
+ fd.write("\x00" * headersize)
+ # save this offset, it's the interface directory offset.
+ interface_directory_offset = fd.tell()
+ # write out space for an interface directory
+- fd.write("\x00" * Interface._direntry.size * len(self.interfaces))
++ fd.write("\x00" * Interface._direntry.calcsize(">16sIII") * len(self.interfaces))
+ # save this offset, it's the data pool offset.
+ data_pool_offset = fd.tell()
+ # write out all the interface descriptors to the data pool
+@@ -1139,7 +1138,7 @@ class Typelib(object):
+ # now, seek back and write the header
+ file_len = fd.tell()
+ fd.seek(0)
+- fd.write(Typelib._header.pack(XPT_MAGIC,
++ fd.write(Typelib._header.pack(">16sBBHIII", XPT_MAGIC,
+ TYPELIB_VERSION[0],
+ TYPELIB_VERSION[1],
+ len(self.interfaces),
+@@ -1161,8 +1160,8 @@ class Typelib(object):
+
+ """
+ self._sanityCheck()
+- with open(filename, "wb") as f:
+- self.writefd(f)
++ f = open(filename, "wb")
++ self.writefd(f)
+
+ def merge(self, other, sanitycheck=True):
+ """
diff --git a/thunderbird-lightning.spec b/thunderbird-lightning.spec
index f91b58e..d25e0cb 100644
--- a/thunderbird-lightning.spec
+++ b/thunderbird-lightning.spec
@@ -50,6 +50,13 @@ Patch2: xulrunner-10.0-secondary-ipc.patch
# Patch from EL6 TB for PCRE issues on ppc
Patch15: mozilla-691898.patch
+# RHEL5 patches
+# xulrunner
+Patch5: mozilla-python.patch
+Patch10: xulrunner-gc-sections-ppc.patch
+# thunderbird
+Patch101: thunderbird-python.patch
+
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: nspr-devel >= %{nspr_version}
BuildRequires: nss-devel >= %{nss_version}
@@ -114,6 +121,15 @@ cd mozilla
%patch15 -p1 -b .691898
cd ..
+# RHEL 5 patches
+%if (0%{?rhel} == 5)
+cd mozilla
+%patch5 -p1 -b .python
+%patch10 -p2 -b .gc-sections
+cd -
+%patch101 -p1 -b .tb-python
+%endif
+
%{__rm} -f .mozconfig
%{__cp} %{SOURCE10} .mozconfig
diff --git a/thunderbird-python.patch b/thunderbird-python.patch
new file mode 100644
index 0000000..8188a4e
--- /dev/null
+++ b/thunderbird-python.patch
@@ -0,0 +1,12 @@
+diff -up comm-beta/configure.tb-python comm-beta/configure
+--- comm-beta/configure.tb-python 2011-08-18 02:03:36.000000000 +0200
++++ comm-beta/configure 2011-08-30 09:46:48.000000000 +0200
+@@ -979,7 +979,7 @@ NSS_VERSION=3
+
+ GLIB_VERSION=1.2.0
+ PERL_VERSION=5.006
+-PYTHON_VERSION=2.5
++PYTHON_VERSION=2.4
+ CAIRO_VERSION=1.10
+ PANGO_VERSION=1.14.0
+ GTK2_VERSION=2.10.0
diff --git a/xulrunner-gc-sections-ppc.patch b/xulrunner-gc-sections-ppc.patch
new file mode 100644
index 0000000..a3cfeb2
--- /dev/null
+++ b/xulrunner-gc-sections-ppc.patch
@@ -0,0 +1,12 @@
+diff -up comm-beta/mozilla/configure.gc-sections-ppc comm-beta/mozilla/configure
+--- comm-beta/mozilla/configure.gc-sections-ppc 2011-10-05 08:29:41.000000000 +0200
++++ comm-beta/mozilla/configure 2011-10-05 08:39:12.875102361 +0200
+@@ -21331,7 +21331,7 @@ fi
+
+ echo "$ac_t""$GC_SECTIONS_BREAKS_DEBUG_RANGES" 1>&6
+ if test "$GC_SECTIONS_BREAKS_DEBUG_RANGES" = no; then
+- DSO_LDOPTS="$DSO_LDOPTS -Wl,--gc-sections"
++ DSO_LDOPTS="$DSO_LDOPTS"
+ case "$CFLAGS" in
+ *-ffunction-sections*)
+ CFLAGS="$CFLAGS -fdata-sections"
More information about the scm-commits
mailing list