Merge lp:~cmiller/firefox/googapi into lp:firefox

Proposed by Rhykim scottie
Status: Rejected
Rejected by: Nathan Teodosio
Proposed branch: lp:~cmiller/firefox/googapi
Merge into: lp:firefox
Diff against target: 21407 lines (+20306/-132) (has conflicts)
140 files modified
.bzrignore (+4/-0)
debian/README.Debian.in (+15/-0)
debian/README.source (+5/-0)
debian/apport/blacklist.in (+4/-0)
debian/apport/native-origins.in (+3/-0)
debian/apport/source_firefox.py.in.OTHER (+1482/-0)
debian/build/Expression.py (+188/-0)
debian/build/Preprocessor.py (+452/-0)
debian/build/config.mk (+57/-0)
debian/build/create-tarball.py (+334/-0)
debian/build/dump-langpack-control-entries.pl (+51/-0)
debian/build/fix-mozinfo-appname.py (+42/-0)
debian/build/keepalive-wrapper.py (+91/-0)
debian/build/refresh-supported-locales.pl (+156/-0)
debian/build/rules.mk (+423/-0)
debian/build/testsuite.mk (+74/-0)
debian/build/xpi-id.py (+22/-0)
debian/changelog (+3879/-125)
debian/compat (+4/-0)
debian/config/branch.mk (+10/-0)
debian/config/locales.all (+78/-0)
debian/config/locales.blacklist (+10/-0)
debian/config/locales.shipped (+82/-0)
debian/config/mozconfig.in (+83/-0)
debian/config/searchplugins.conf (+83/-0)
debian/config/tarball.conf (+36/-0)
debian/control (+927/-0)
debian/control.in.OTHER (+182/-0)
debian/control.langpacks (+10/-0)
debian/control.langpacks.unavail (+11/-0)
debian/copyright (+741/-0)
debian/distribution.ini.OTHER (+9/-0)
debian/firefox-dev.install.in (+11/-0)
debian/firefox-dev.links.in (+12/-0)
debian/firefox-locale.preinst.in (+23/-0)
debian/firefox-mozsymbols.install.in (+3/-0)
debian/firefox-testsuite.install.in (+14/-0)
debian/firefox-testsuite.links.in (+1/-0)
debian/firefox-testsuite.lintian-overrides.in (+1/-0)
debian/firefox.1.in (+71/-0)
debian/firefox.desktop.in (+226/-0)
debian/firefox.dirs.in.OTHER (+8/-0)
debian/firefox.install.in.OTHER (+44/-0)
debian/firefox.links.in (+22/-7)
debian/firefox.lintian-overrides.in (+6/-0)
debian/firefox.manpages.in (+1/-0)
debian/firefox.postinst.in (+130/-0)
debian/firefox.preinst.in (+112/-0)
debian/firefox.prerm.in (+8/-0)
debian/firefox.sh.in.OTHER (+117/-0)
debian/ga (+1/-0)
debian/go (+1/-0)
debian/install-distribution-searchplugins.py (+116/-0)
debian/patches/allow-lockPref-everywhere.patch (+125/-0)
debian/patches/disable-geo-specific-search-defaults-for-us.patch (+18/-0)
debian/patches/dont-override-general-useragent-locale.patch (+22/-0)
debian/patches/fix-make-package-tests-without-webrtc.patch (+17/-0)
debian/patches/normalize-distribution-searchplugins.patch (+35/-0)
debian/patches/revert-upstream-search-engine-changes.patch (+15/-0)
debian/patches/series.OTHER (+24/-0)
debian/patches/set-prgname-to-remoting-name.patch (+19/-0)
debian/patches/support-coinstallable-trunk-build.patch (+38/-0)
debian/patches/test-fixes/mochitest-content-reset-permissions-when-done.patch (+18/-0)
debian/patches/test-fixes/xpcshell-chrome-fix-test_bug848297-with-locale-matchOS.patch (+17/-0)
debian/patches/test-fixes/xpcshell-exthandler-no-writes-to-appdir.patch (+67/-0)
debian/patches/test-fixes/xpcshell-search-fix-tests-when-plugins-are-not-in-appdir.patch (+110/-0)
debian/patches/test-fixes/xpcshell-xunit-output-no-bell.patch (+17/-0)
debian/patches/test-integration/automation-output-junit-xml.patch (+449/-0)
debian/patches/test-integration/mochitest-allow-test-manifest-for-browser-chrome.patch (+43/-0)
debian/patches/test-integration/xpcshell-disable-addon-select-dialog-test-for-adt.patch (+31/-0)
debian/patches/test-integration/xpcshell-disable-tests-which-need-appdir-write-access.patch (+40/-0)
debian/patches/test-integration/xpcshell-dont-return-nonzero-on-test-failure.patch (+44/-0)
debian/patches/test-integration/xpcshell-output-valid-junit-xml.patch (+30/-0)
debian/patches/test-integration/xpcshell-write-time-for-failed-test.patch (+28/-0)
debian/patches/ubuntu-bookmarks.patch.OTHER (+37/-0)
debian/patches/ubuntu-search-defaults.patch (+55/-0)
debian/patches/ubuntu-ua-string-changes.patch (+78/-0)
debian/patches/unity-menubar.patch (+5707/-0)
debian/pkgconfig/mozilla-plugin.pc.in (+8/-0)
debian/rules (+127/-0)
debian/searchplugins/de/amazondotcom-de.xml (+13/-0)
debian/searchplugins/en-GB/amazon-en-GB.xml (+13/-0)
debian/searchplugins/en-GB/google.xml (+16/-0)
debian/searchplugins/en-US/amazondotcom.xml (+17/-0)
debian/searchplugins/en-US/duckduckgo.xml (+10/-0)
debian/searchplugins/en-US/google.xml (+15/-0)
debian/searchplugins/en-ZA/google.xml (+16/-0)
debian/searchplugins/fr/amazon-france.xml (+13/-0)
debian/searchplugins/it/amazon-it.xml (+13/-0)
debian/searchplugins/ja/amazon-jp.xml (+27/-0)
debian/searchplugins/ku/google-ku.xml (+16/-0)
debian/searchplugins/sq/amazon-en-GB.xml (+13/-0)
debian/searchplugins/zh-CN/amazondotcn.xml (+17/-0)
debian/searchplugins/zh-CN/baidu.xml (+14/-0)
debian/source/format (+4/-0)
debian/source/options (+3/-0)
debian/syspref.js (+4/-0)
debian/testing/extra/mochitest/mochitest-a11y.json (+7/-0)
debian/testing/extra/mochitest/mochitest-browser-chrome.json (+23/-0)
debian/testing/extra/mochitest/mochitest-chrome.json (+7/-0)
debian/testing/extra/mochitest/mochitest.json (+18/-0)
debian/testing/extra/xpcshell/package-tests/head_package_tests.js (+192/-0)
debian/testing/extra/xpcshell/package-tests/test_langpack_chrome.js (+50/-0)
debian/testing/extra/xpcshell/package-tests/test_langpack_load.js (+41/-0)
debian/testing/extra/xpcshell/package-tests/test_locale_matchOS.js (+39/-0)
debian/testing/extra/xpcshell/package-tests/test_locale_matchOS_real.js (+34/-0)
debian/testing/extra/xpcshell/package-tests/test_searchplugins_valid.js (+30/-0)
debian/testing/extra/xpcshell/package-tests/test_searchplugins_valid_real.js (+36/-0)
debian/testing/extra/xpcshell/package-tests/test_ubuntu_searchplugins.js (+30/-0)
debian/testing/extra/xpcshell/package-tests/test_ubuntu_searchplugins_real.js (+259/-0)
debian/testing/extra/xpcshell/package-tests/test_ubuntu_useragent.js (+16/-0)
debian/testing/extra/xpcshell/package-tests/xpcshell.ini (+11/-0)
debian/testing/filter_results (+244/-0)
debian/testing/results-filter-manifest.json (+123/-0)
debian/testing/run_mochitest.in (+73/-0)
debian/testing/run_reftest.in (+41/-0)
debian/testing/run_xpcshell_tests (+67/-0)
debian/testing/testrunhelper.py (+262/-0)
debian/testing/xpcshell-build.ini (+20/-0)
debian/tests/control.in (+2/-0)
debian/tests/crashtest (+11/-0)
debian/tests/jstestbrowser (+14/-0)
debian/tests/mochitest-1 (+12/-0)
debian/tests/mochitest-2 (+12/-0)
debian/tests/mochitest-3 (+12/-0)
debian/tests/mochitest-4 (+12/-0)
debian/tests/mochitest-5 (+12/-0)
debian/tests/mochitest-a11y (+12/-0)
debian/tests/mochitest-browser (+12/-0)
debian/tests/mochitest-chrome (+12/-0)
debian/tests/mochitest-ipcplugins (+12/-0)
debian/tests/post-process (+8/-0)
debian/tests/reftest (+11/-0)
debian/tests/xpcshell-package-tests (+11/-0)
debian/tests/xpcshell-tests (+11/-0)
debian/usr.bin.firefox.apparmor.12.04 (+170/-0)
debian/usr.bin.firefox.apparmor.13.10 (+173/-0)
debian/usr.bin.firefox.apparmor.14.10 (+227/-0)
debian/vendor-firefox.js (+10/-0)
debian/vendor-gre.js (+8/-0)
Text conflict in .bzrignore
Conflict adding files to debian/apport.  Created directory.
Conflict because debian/apport is not versioned, but has versioned children.  Versioned directory.
Contents conflict in debian/apport/source_firefox.py.in
Text conflict in debian/changelog
Text conflict in debian/compat
Text conflict in debian/config/branch.mk
Text conflict in debian/config/locales.all
Text conflict in debian/config/locales.blacklist
Text conflict in debian/config/locales.shipped
Text conflict in debian/config/mozconfig.in
Text conflict in debian/config/tarball.conf
Text conflict in debian/control
Contents conflict in debian/control.in
Text conflict in debian/copyright
Contents conflict in debian/distribution.ini
Path conflict: debian/firefox.desktop / debian/firefox.desktop.in
Text conflict in debian/firefox.desktop.in
Contents conflict in debian/firefox.dirs.in
Contents conflict in debian/firefox.install.in
Text conflict in debian/firefox.links.in
Path conflict: debian/firefox.lintian-overrides / debian/firefox.lintian-overrides.in
Text conflict in debian/firefox.lintian-overrides.in
Path conflict: debian/firefox.postinst / debian/firefox.postinst.in
Text conflict in debian/firefox.postinst.in
Path conflict: debian/firefox.preinst / debian/firefox.preinst.in
Text conflict in debian/firefox.preinst.in
Path conflict: debian/firefox.prerm / debian/firefox.prerm.in
Text conflict in debian/firefox.prerm.in
Contents conflict in debian/firefox.sh.in
Conflict adding files to debian/patches.  Created directory.
Conflict because debian/patches is not versioned, but has versioned children.  Versioned directory.
Contents conflict in debian/patches/series
Contents conflict in debian/patches/ubuntu-bookmarks.patch
Text conflict in debian/rules
Text conflict in debian/source/format
To merge this branch: bzr merge lp:~cmiller/firefox/googapi
Reviewer Review Type Date Requested Status
Mozilla Team Pending
Review via email: mp+434281@code.launchpad.net

Description of the change

Welll
Oh well

To post a comment you must log in.

Unmerged revisions

2054. By Chad Miller

Update GOOG API keys for Ubuntu distro.

2053. By Rico Tzschichholz

* Add Kaqchikel language pack
  - update debian/config/locales.all
  - update debian/config/locales.shipped
  - update debian/control
  - update debian/config/searchplugins.conf

2052. By Chris Coulson

releasing package firefox-trunk version 50.0~a1~hg20160801r307508-0ubuntu1

2051. By Chris Coulson

* Refresh patches:
  - update debian/patches/allow-lockPref-everywhere.patch
  - update debian/patches/support-coinstallable-trunk-build.patch

2050. By Chris Coulson

* Disable startup notification for now
  - update debian/config/mozconfig.in

2049. By Chris Coulson

Remove google-jp searchplugin

2048. By Chris Coulson

releasing package firefox-trunk version 49.0~a1~hg20160602r300071-0ubuntu1

2047. By Chris Coulson

Update debian/config/searchplugins.conf now that ja uses the en-US version
of the Google search plugin

2046. By Chris Coulson

update debian/patches/unity-menubar.patch

2045. By Chris Coulson

* Refresh patches:
  - update debian/patches/allow-lockPref-everywhere.patch

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2022-03-22 08:58:19 +0000
3+++ .bzrignore 2022-12-07 23:06:52 +0000
4@@ -1,3 +1,4 @@
5+<<<<<<< TREE
6 debian/*.debhelper
7 debian/debhelper-build-stamp
8 debian/files
9@@ -5,3 +6,6 @@
10 debian/firefox-locale-*/
11 debian/*.substvars
12 debian/tmp
13+=======
14+*.old
15+>>>>>>> MERGE-SOURCE
16
17=== added file 'debian/README.Debian.in'
18--- debian/README.Debian.in 1970-01-01 00:00:00 +0000
19+++ debian/README.Debian.in 2022-12-07 23:06:52 +0000
20@@ -0,0 +1,15 @@
21+Apparmor Profile
22+----------------
23+If your system uses AppArmor, please note that the shipped profile is disabled
24+by default. The profile can be enabled by performing:
25+
26+$ sudo aa-enforce /etc/apparmor.d/usr.bin.@MOZ_PKG_NAME@
27+
28+The profile can be disabled by performing:
29+$ sudo aparmor_parser -R /etc/apparmor.d/usr.bin.@MOZ_PKG_NAME@
30+$ sudo ln -s /etc/apparmor.d/usr.bin.@MOZ_PKG_NAME@ /etc/apparmor.d/disable/usr.bin.@MOZ_PKG_NAME@
31+
32+This profile should work without modification for most plugins available in
33+Ubuntu, but may require adjusting for your environment. Please see
34+https://wiki.ubuntu.com/DebuggingApparmor before filing a bug against this
35+software.
36
37=== added file 'debian/README.source'
38--- debian/README.source 1970-01-01 00:00:00 +0000
39+++ debian/README.source 2022-12-07 23:06:52 +0000
40@@ -0,0 +1,5 @@
41+1) Even though we are using source format 3.0 (quilt), we don't build or extract the source packages with patches applied. This is because we preprocess the series file to allow for per-arch and per-release patchsets, from a single packaging branch
42+
43+2) To create the fully patched source, just run "debian/rules apply-patches" in the source directory
44+
45+3) To remove any changes applied to the packaging, run "fakeroot debian/rules clean". This will remove all patches and delete auto-generated files
46
47=== added directory 'debian/apport'
48=== added file 'debian/apport/blacklist.in'
49--- debian/apport/blacklist.in 1970-01-01 00:00:00 +0000
50+++ debian/apport/blacklist.in 2022-12-07 23:06:52 +0000
51@@ -0,0 +1,4 @@
52+%%ifdef MOZ_ENABLE_BREAKPAD
53+/@MOZ_LIBDIR@/@MOZ_APP_NAME@
54+/@MOZ_LIBDIR@/plugin-container
55+%%endif
56
57=== added file 'debian/apport/native-origins.in'
58--- debian/apport/native-origins.in 1970-01-01 00:00:00 +0000
59+++ debian/apport/native-origins.in 2022-12-07 23:06:52 +0000
60@@ -0,0 +1,3 @@
61+LP-PPA-ubuntu-mozilla-daily
62+LP-PPA-ubuntu-mozilla-daily-firefox-aurora
63+LP-PPA-mozillateam-firefox-next
64
65=== added file 'debian/apport/source_firefox.py.in.OTHER'
66--- debian/apport/source_firefox.py.in.OTHER 1970-01-01 00:00:00 +0000
67+++ debian/apport/source_firefox.py.in.OTHER 2022-12-07 23:06:52 +0000
68@@ -0,0 +1,1482 @@
69+'''firefox apport hook
70+
71+/usr/share/apport/package-hooks/firefox.py
72+
73+Copyright (c) 2007: Hilario J. Montoliu <hmontoliu@gmail.com>
74+ (c) 2011: Chris Coulson <chris.coulson@canonical.com>
75+
76+This program is free software; you can redistribute it and/or modify it
77+under the terms of the GNU General Public License as published by the
78+Free Software Foundation; either version 2 of the License, or (at your
79+option) any later version. See http://www.gnu.org/copyleft/gpl.html for
80+the full text of the license.
81+'''
82+
83+import os
84+import os.path
85+import sys
86+import fcntl
87+import subprocess
88+import struct
89+from subprocess import Popen
90+try:
91+ from configparser import ConfigParser
92+except ImportError:
93+ from ConfigParser import ConfigParser
94+import sqlite3
95+import tempfile
96+import re
97+import apport.packaging
98+from apport.hookutils import *
99+from glob import glob
100+import zipfile
101+import stat
102+import functools
103+if sys.version_info[0] < 3:
104+ import codecs
105+
106+DISTRO_ADDONS = [
107+ '@MOZ_PKG_NAME@',
108+ 'xul-ext-ubufox'
109+]
110+
111+class PrefParseError(Exception):
112+ def __init__(self, msg, filename, linenum):
113+ super(PrefParseError, self).__init__(msg)
114+ self.msg = msg
115+ self.filename = filename
116+ self.linenum = linenum
117+
118+ def __str__(self):
119+ return self.msg + ' @ ' + self.filename + ':' + str(self.linenum)
120+
121+class PluginRegParseError(Exception):
122+ def __init__(self, msg, linenum):
123+ super(PluginRegParseError, self).__init__(msg)
124+ self.msg = msg
125+ self.linenum = linenum
126+
127+ def __str__(self):
128+ return self.msg + ' @ line ' + str(self.linenum)
129+
130+
131+class ExtensionTypeNotRecognised(Exception):
132+ def __init__(self, ext_type, ext_id):
133+ super(ExtensionTypeNotRecognised, self).__init__(ext_type, ext_id)
134+ self.ext_type = ext_type
135+ self.ext_id = ext_id
136+
137+ def __str__(self):
138+ return "Extension type not recognised: %s (ID: %s)" % (self.ext_type, self.ext_id)
139+
140+
141+class VersionCompareFailed(Exception):
142+ def __init__(self, a, b, e):
143+ if a == None:
144+ a = ''
145+ if b == None:
146+ b = ''
147+ super(VersionCompareFailed, self).__init__(a, b, e)
148+ self.a = a
149+ self.b = b
150+ self.e = e
151+
152+ def __str__(self):
153+ return "Failed to compare versions A = %s, B = %s (%s)" % (self.a, self.b, str(self.e))
154+
155+
156+def _open(filename, mode):
157+ if sys.version_info[0] < 3:
158+ return codecs.open(filename, mode, 'utf-8')
159+ return open(filename, mode)
160+
161+def mkstemp_copy(path):
162+ '''Make a copy of a file to a temporary file, and return the path'''
163+ (outfd, outpath) = tempfile.mkstemp()
164+ outfile = os.fdopen(outfd, 'wb')
165+ infile = open(path, 'rb')
166+
167+ total = 0
168+ while True:
169+ data = infile.read(4096)
170+ total += len(data)
171+ outfile.write(data)
172+ infile.seek(total)
173+ outfile.seek(total)
174+ if len(data) < 4096: break
175+
176+ return outpath
177+
178+
179+def anonymize_path(path, profiledir = None):
180+ if profiledir != None and path == os.path.join(profiledir, 'prefs.js'):
181+ return 'prefs.js'
182+ elif profiledir != None and path == os.path.join(profiledir, 'user.js'):
183+ return 'user.js'
184+ elif profiledir != None and path.startswith(profiledir):
185+ return os.path.join('[Profile]', os.path.relpath(path, profiledir))
186+ elif path.startswith(os.environ['HOME']):
187+ return os.path.join('[HomeDir]', os.path.relpath(path, os.environ['HOME']))
188+ else:
189+ return path
190+
191+
192+class CompatINIParser(ConfigParser):
193+ def __init__(self, path):
194+ ConfigParser.__init__(self)
195+ self.read(os.path.join(path, "compatibility.ini"))
196+
197+ @property
198+ def last_version(self):
199+ if not self.has_section("Compatibility") or not self.has_option("Compatibility", "LastVersion"):
200+ return None
201+ return re.sub(r'([^_]*)(.*)', r'\1', self.get("Compatibility", "LastVersion"))
202+
203+ @property
204+ def last_buildid(self):
205+ if not self.has_section("Compatibility") or not self.has_option("Compatibility", "LastVersion"):
206+ return None
207+ return re.sub(r'([^_]*)_([^/]*)/(.*)', r'\2', self.get("Compatibility", "LastVersion"))
208+
209+
210+class AppINIParser(ConfigParser):
211+ def __init__(self, path):
212+ ConfigParser.__init__(self)
213+ self.read(os.path.join(path, "application.ini"))
214+
215+ @property
216+ def buildid(self):
217+ if not self.has_section('App') or not self.has_option('App', 'BuildID'):
218+ return None
219+ return self.get('App', 'BuildID')
220+
221+ @property
222+ def appid(self):
223+ if not self.has_section('App') or not self.has_option('App', 'ID'):
224+ return None
225+ return self.get('App', 'ID')
226+
227+
228+class ExtensionINIParser(ConfigParser):
229+ def __init__(self, path):
230+ ConfigParser.__init__(self)
231+ self.read(os.path.join(path, "extensions.ini"))
232+
233+ self._extensions = []
234+
235+ if self.has_section('ExtensionDirs'):
236+ items = self.items('ExtensionDirs')
237+ for item in items:
238+ self._extensions.append(item[1])
239+
240+ def __getitem__(self, key):
241+ if key > len(self) - 1:
242+ raise IndexError
243+ return self._extensions[key]
244+
245+ def __iter__(self):
246+
247+ class ExtensionINIParserIter:
248+ def __init__(self, parser):
249+ self.parser = parser
250+ self.index = 0
251+
252+ def __next__(self):
253+ if self.index == len(self.parser):
254+ raise StopIteration
255+ res = self.parser[self.index]
256+ self.index += 1
257+ return res
258+
259+ def next(self):
260+ return self.__next__()
261+
262+ return ExtensionINIParserIter(self)
263+
264+ def __len__(self):
265+ return len(self._extensions)
266+
267+def compare_versions(a, b):
268+ '''Compare 2 version numbers, returns -1 for a<b, 0 for a=b and 1 for a>b
269+ This is basically just a python reimplementation of nsVersionComparator'''
270+ class VersionPart:
271+ def __init__(self):
272+ self.numA = 0
273+ self.strB = None
274+ self.numC = 0
275+ self.extraD = None
276+
277+ def parse_version(part):
278+ res = VersionPart()
279+ if part == None or part == '':
280+ return (part, res)
281+ spl = part.split('.')
282+
283+ if part == '*' and len(part) == 1:
284+ try:
285+ res.numA = sys.maxint
286+ except:
287+ res.numA = sys.maxsize # python3
288+ res.strB = ""
289+ else:
290+ res.numA = int(re.sub(r'([0-9]*)(.*)', r'\1', spl[0]))
291+ res.strB = re.sub(r'([0-9]*)(.*)', r'\2', spl[0])
292+
293+ if res.strB == '':
294+ res.strB = None
295+
296+ if res.strB != None:
297+ if res.strB[0] == '+':
298+ res.numA += 1
299+ res.strB = "pre"
300+ else:
301+ tmp = res.strB
302+ res.strB = re.sub(r'([^0-9+-]*)([0-9]*)(.*)', r'\1', tmp)
303+ strC = re.sub(r'([^0-9+-]*)([0-9]*)(.*)', r'\2', tmp)
304+ if strC != '':
305+ res.numC = int(strC)
306+ res.extraD = re.sub(r'([^0-9+-]*)([0-9]*)(.*)', r'\3', tmp)
307+ if res.extraD == '':
308+ res.extraD = None
309+
310+ return (re.sub(r'([^\.]*)\.*(.*)', r'\2', part), res)
311+
312+ def strcmp(stra, strb):
313+ if stra == None and strb == None:
314+ return 0
315+ elif stra == None and strb != None:
316+ return 1
317+ elif stra != None and strb == None:
318+ return -1
319+ if stra < strb:
320+ return -1
321+ elif stra > strb:
322+ return 1
323+ else:
324+ return 0
325+
326+ def do_compare(apart, bpart):
327+ if apart.numA < bpart.numA:
328+ return -1
329+ elif apart.numA > bpart.numA:
330+ return 1
331+
332+ res = strcmp(apart.strB, bpart.strB)
333+ if res != 0:
334+ return res
335+
336+ if apart.numC < bpart.numC:
337+ return -1
338+ elif apart.numC > bpart.numC:
339+ return 1
340+
341+ return strcmp(apart.extraD, bpart.extraD)
342+
343+ try:
344+ saved_a = a
345+ saved_b = b
346+ while a or b:
347+ (a, va) = parse_version(a)
348+ (b, vb) = parse_version(b)
349+
350+ res = do_compare(va, vb)
351+ if res != 0:
352+ break
353+ except Exception as e:
354+ raise VersionCompareFailed(saved_a, saved_b, e)
355+
356+ return res
357+
358+
359+class Plugin(object):
360+ def __init__(self):
361+ self.lib = None
362+ self.path = None
363+ self.desc = None
364+ self._package = None
365+ self._checked_package = False
366+
367+ def dump(self):
368+ if self.path.startswith(os.path.join(os.environ['HOME'], '.mozilla', '@MOZ_APP_NAME@')):
369+ location = "[Profile]"
370+ else:
371+ location = os.path.dirname(self.path)
372+
373+ pkgname = ' (%s)' % self.package if self.package != None else ''
374+ return ("%s - %s%s" % (self.desc, os.path.join(location, self.lib), pkgname))
375+
376+ @property
377+ def package(self):
378+ if self._checked_package == False:
379+ self._package = apport.packaging.get_file_package(self.path)
380+ self._checked_package = True
381+ return self._package
382+
383+class PluginRegistry:
384+
385+ STATE_PENDING = 0
386+ STATE_START = 1
387+ STATE_PROCESSING_1 = 2
388+ STATE_PROCESSING_2 = 3
389+ STATE_PROCESSING_3 = 4
390+ STATE_FINISHED = 5
391+
392+ def __init__(self, path):
393+ self.plugins = []
394+ self._state = PluginRegistry.STATE_PENDING
395+ self._current_plugin = None
396+ self._profile_path = path
397+ self.error = None
398+
399+ fd = None
400+ try:
401+ fd = _open(os.path.join(path, 'pluginreg.dat'), 'r')
402+ try:
403+ skip = 0
404+ linenum = 1
405+ for line in fd.readlines():
406+ if skip == 0:
407+ skip = self._parseline(line, linenum)
408+ if skip == -1:
409+ break
410+ else:
411+ skip -= 1
412+ linenum += 1
413+ if skip > 0:
414+ raise PluginRegParseError("Unexpected EOF", linenum)
415+ except Exception as e:
416+ self.error = str(e)
417+ except:
418+ pass
419+ finally:
420+ if fd != None:
421+ fd.close()
422+
423+ def _parseline(self, line, linenum):
424+ line = line.strip()
425+ if line != '' and line[0] == '[' and self._state != PluginRegistry.STATE_START and self._state != PluginRegistry.STATE_PENDING:
426+ raise PluginRegParseError('Unexpected section header', linenum)
427+
428+ if self._state == PluginRegistry.STATE_PENDING:
429+ if line == '[PLUGINS]':
430+ self._state += 1
431+ return 0
432+ elif self._state == PluginRegistry.STATE_START:
433+ if line == '':
434+ return 0
435+ if line[0] == '[':
436+ self._state = PluginRegistry.STATE_FINISHED
437+ return -1
438+ self._current_plugin = Plugin()
439+ self._current_plugin.lib = line.split(':')[0]
440+ self._state += 1
441+ return 0
442+ elif self._state == PluginRegistry.STATE_PROCESSING_1:
443+ path = line.split(':')[0]
444+ if path[0] != '/':
445+ raise PluginRegParseError("Invalid path", linenum)
446+ self._current_plugin.path = anonymize_path(path, self._profile_path)
447+ self._state += 1
448+ return 3
449+ elif self._state == PluginRegistry.STATE_PROCESSING_2:
450+ self._current_plugin.desc = line.split(':')[0]
451+ self._state += 1
452+ return 0
453+ elif self._state == PluginRegistry.STATE_PROCESSING_3:
454+ self.plugins.append(self._current_plugin)
455+ self._state = PluginRegistry.STATE_START
456+ return int(line.strip())
457+ else:
458+ return -1
459+
460+ def __getitem__(self, key):
461+ if key > len(self) - 1:
462+ raise IndexError
463+ return self.plugins[key]
464+
465+ def __iter__(self):
466+
467+ class PluginRegistryIter:
468+ def __init__(self, registry):
469+ self.registry = registry
470+ self.index = 0
471+
472+ def __next__(self):
473+ if self.index == len(self.registry):
474+ raise StopIteration
475+ ret = self.registry[self.index]
476+ self.index += 1
477+ return ret
478+
479+ def next(self):
480+ return self.__next__()
481+
482+ return PluginRegistryIter(self)
483+
484+ def __len__(self):
485+ return len(self.plugins)
486+
487+
488+class Prefs:
489+ '''Class which represents a pref file. Handles all of the parsing, and can be accessed
490+ like a normal python dictionary'''
491+ PREF_WHITELIST = [
492+ r'accessibility\.*',
493+ r'browser\.fixup\.*',
494+ r'browser\.history_expire_*',
495+ r'browser\.link\.open_newwindow',
496+ r'browser\.mousewheel\.*',
497+ r'browser\.places\.*',
498+ r'browser\.startup\.homepage',
499+ r'browser\.tabs\.*',
500+ r'browser\.zoom\.*',
501+ r'dom\.*',
502+ r'extensions\.autoDisableScopes',
503+ r'extensions\.checkCompatibility\.*',
504+ r'extensions\.enabledScopes',
505+ r'extensions\.lastAppVersion',
506+ r'extensions\.minCompatibleAppVersion',
507+ r'extensions\.minCompatiblePlatformVersion',
508+ r'extensions\.strictCompatibility',
509+ r'font\.*',
510+ r'general\.skins\.*',
511+ r'general\.useragent\.*',
512+ r'gfx\.*',
513+ r'html5\.*',
514+ r'mozilla\.widget\.render\-mode',
515+ r'layers\.*',
516+ r'javascript\.*',
517+ r'keyword\.*',
518+ r'layout\.css\.dpi',
519+ r'network\.*',
520+ r'places\.*',
521+ r'plugin\.*',
522+ r'plugins\.*',
523+ r'print\.*',
524+ r'privacy\.*',
525+ r'security\.*',
526+ r'webgl\.*'
527+ ]
528+
529+ PREF_BLACKLIST = [
530+ r'^network.*proxy\.*',
531+ r'.*print_to_filename$',
532+ r'print\.tmp\.',
533+ r'print\.printer_*',
534+ r'printer_*'
535+ ]
536+
537+ STATE_READY = 0
538+ STATE_COMMENT_MAYBE_START = 1
539+ STATE_COMMENT_BLOCK = 2
540+ STATE_COMMENT_BLOCK_MAYBE_END = 3
541+ STATE_PARSE_UNTIL_OPEN_PAREN = 4
542+ STATE_PARSE_UNTIL_NAME = 5
543+ STATE_PARSE_UNTIL_COMMA = 6
544+ STATE_PARSE_UNTIL_VALUE = 7
545+ STATE_PARSE_UNTIL_CLOSE_PAREN = 8
546+ STATE_PARSE_UNTIL_SEMICOLON = 9
547+ STATE_PARSE_STRING = 10
548+ STATE_PARSE_ESC_SEQ = 11
549+ STATE_PARSE_INT = 12
550+ STATE_SKIP = 13
551+ STATE_PARSE_UNTIL_EOL = 14
552+
553+ def __init__(self, profile_path, extra_paths=None, whitelist=None, blacklist=None):
554+ self.whitelist = whitelist if whitelist != None else Prefs.PREF_WHITELIST
555+ self.blacklist = blacklist if blacklist != None else Prefs.PREF_BLACKLIST
556+ self.prefs = {}
557+ self.pref_sources = []
558+ self.errors = {}
559+
560+ self._profile_path = profile_path
561+
562+ # Read all preferences. Note that we hide preferences that are considered
563+ # default (ie, all of those set by the Firefox package or bundled addons,
564+ # unless any of the pref files have been modified by the user).
565+ # The load order is *very important*
566+ if profile_path != None:
567+ locations = [
568+ "/@MOZ_LIBDIR@/omni.ja:greprefs.js",
569+ "/@MOZ_LIBDIR@/omni.ja:defaults/pref/*.js",
570+ "/@MOZ_LIBDIR@/defaults/pref/*.js",
571+ "/@MOZ_LIBDIR@/defaults/pref/unix.js",
572+ "/@MOZ_LIBDIR@/omni.ja:defaults/preferences/*.js"
573+ "/@MOZ_LIBDIR@/defaults/preferences/*.js"
574+ ]
575+
576+ append_dirs = [ 'defaults/preferences/*.js' ]
577+ if os.path.isdir('/@MOZ_LIBDIR@/distribution/bundles'):
578+ bundles = os.listdir('/@MOZ_LIBDIR@/distribution/bundles')
579+ bundles.sort(reverse=True)
580+ for d in append_dirs:
581+ for bundle in bundles:
582+ path = os.path.join('/@MOZ_LIBDIR@/distribution/bundles', bundle)
583+ if path.endswith('.xpi'):
584+ locations.append(path + ':' + d)
585+ elif os.path.isdir(path):
586+ locations.append(os.path.join(path, d))
587+
588+ locations.append(os.path.join(profile_path, "prefs.js"))
589+ locations.append(os.path.join(profile_path, "user.js"))
590+
591+ extensions = ExtensionINIParser(profile_path)
592+ for extension in extensions:
593+ if extension.endswith('.xpi'):
594+ locations.append(extension + ':defaults/preferences/*.(J|j)(S|s)')
595+ elif os.path.isdir(extension):
596+ locations.append(os.path.join(extension, 'defaults/preferences/*.js'))
597+
598+ locations.append(os.path.join(profile_path, 'preferences/*.js'))
599+ else: locations = []
600+
601+ if extra_paths != None:
602+ for extra in extra_paths:
603+ locations.append(extra)
604+
605+ for location in locations:
606+ m = re.match(r'^([^:]*):?(.*)', location)
607+ if m.group(2) == '':
608+ files = glob(location)
609+ files.sort(reverse=True)
610+ for f in files:
611+ self._parse_file(f)
612+ else:
613+ self._parse_jar(m.group(1), m.group(2))
614+
615+ def _should_ignore_file(self, filename):
616+ realpath = os.path.realpath(filename)
617+ package = apport.packaging.get_file_package(realpath)
618+ if package and apport.packaging.is_distro_package(package) and \
619+ package in DISTRO_ADDONS and \
620+ realpath[1:] not in apport.packaging.get_modified_files(package):
621+ return True
622+
623+ return False
624+
625+ def _parse_file(self, filename):
626+ f = None
627+ self._state = Prefs.STATE_READY
628+ try:
629+ f = _open(filename, 'r')
630+ try:
631+ linenum = 1
632+ state = None
633+ for line in f.readlines():
634+ state = self._parseline(line, filename, linenum, state)
635+ linenum += 1
636+ except Exception as e:
637+ self.errors[filename] = str(e)
638+ except:
639+ pass
640+ finally:
641+ if f != None:
642+ f.close()
643+ if filename not in self.errors \
644+ and not self._should_ignore_file(filename):
645+ self.pref_sources.append(filename)
646+
647+ def _parse_jar(self, jar, match):
648+ jarfile = None
649+ try:
650+ jarfile = zipfile.ZipFile(jar)
651+ entries = jarfile.namelist()
652+ entries.sort(reverse=True)
653+ for entry in entries:
654+ if re.match(r'^' + match + '$', entry):
655+ source = '%s:%s' % (jar, entry)
656+ try:
657+ f = jarfile.open(entry, 'r')
658+ linenum = 1
659+ state = None
660+ for line in f.readlines():
661+ state = self._parseline(line.decode('utf-8'),
662+ source, linenum, state)
663+ linenum += 1
664+ except Exception as e:
665+ self.errors[source] = str(e)
666+ finally:
667+ if source not in self.errors \
668+ and not self._should_ignore_file(jar):
669+ self.pref_sources.append(source)
670+ except:
671+ pass
672+ finally:
673+ if jarfile != None:
674+ jarfile.close()
675+
676+ def _maybe_add_pref(self, key, value, source, default, locked):
677+
678+ class Pref(object):
679+ def __init__(self, profile_path):
680+ self._default = None
681+ self._value = None
682+ self._default_source = None
683+ self._value_source = None
684+ self.locked = False
685+ self._profile_path = profile_path
686+
687+ @property
688+ def value(self):
689+ if self._value != None:
690+ return self._value
691+ return self._default
692+
693+ @property
694+ def source(self):
695+ if self._value != None:
696+ return self._value_source
697+ return self._default_source
698+
699+ @property
700+ def anon_source(self):
701+ if self._value != None:
702+ return anonymize_path(self._value_source, self._profile_path)
703+ return anonymize_path(self._default_source, self._profile_path)
704+
705+ def set_value(self, value, source, default, locked):
706+ if self.locked == True:
707+ return
708+
709+ if default == True:
710+ self._default = value
711+ self._default_source = source
712+ else:
713+ self._value = value
714+ self._value_source = source
715+ self.locked = locked
716+
717+ for match in self.blacklist:
718+ if re.match(match, key):
719+ return
720+
721+ for match in self.whitelist:
722+ if re.match(match, key):
723+ if key not in self.prefs:
724+ self.prefs[key] = Pref(self._profile_path)
725+
726+ self.prefs[key].set_value(value, source, default, locked)
727+
728+ def _parseline(self, line, source, linenum, old_state):
729+ # XXX: I pity the poor soul who ever needs to change anything inside this function
730+
731+ class PrefParseState(object):
732+ def __init__(self):
733+ self.state = Prefs.STATE_READY
734+
735+ def _reset(self):
736+ self.next_state = Prefs.STATE_READY
737+ self.default = False
738+ self.locked = False
739+ self.name = None
740+ self.value = None
741+ self.tmp = None
742+ self.skip = None
743+ self.quote = None
744+
745+ def _get_state(self):
746+ return self._state
747+
748+ def _set_state(self, state):
749+ self._state = state
750+ if state == Prefs.STATE_READY:
751+ self._reset()
752+
753+ state = property(_get_state, _set_state)
754+
755+ state = old_state
756+
757+ if state == None:
758+ state = PrefParseState()
759+
760+ index = 0
761+ for c in line:
762+ if state.state == Prefs.STATE_READY:
763+ if c == '/':
764+ state.state = Prefs.STATE_COMMENT_MAYBE_START
765+ elif c == '#':
766+ state.state = Prefs.STATE_PARSE_UNTIL_EOL
767+ elif line.startswith('pref', index):
768+ state.default == True
769+ state.next_state = Prefs.STATE_PARSE_UNTIL_OPEN_PAREN
770+ state.state = Prefs.STATE_SKIP
771+ state.skip = 3
772+ elif line.startswith('user_pref', index):
773+ state.next_state = Prefs.STATE_PARSE_UNTIL_OPEN_PAREN
774+ state.state = Prefs.STATE_SKIP
775+ state.skip = 8
776+ elif line.startswith('lockPref', index):
777+ state.default = True
778+ state.locked = True
779+ state.next_state = Prefs.STATE_PARSE_UNTIL_OPEN_PAREN
780+ state.state = Prefs.STATE_SKIP
781+ state.skip = 7
782+ elif not c.isspace():
783+ raise PrefParseError("Unexpected character '%s' before pref" % c,
784+ anonymize_path(source, self._profile_path),
785+ linenum)
786+
787+ elif state.state == Prefs.STATE_SKIP:
788+ state.skip -= 1
789+ if state.skip == 0:
790+ state.state = state.next_state
791+ state.next_state = Prefs.STATE_READY
792+
793+ elif state.state == Prefs.STATE_COMMENT_MAYBE_START:
794+ if c == '*':
795+ state.state = Prefs.STATE_COMMENT_BLOCK
796+ elif c == '/':
797+ state.state = Prefs.STATE_PARSE_UNTIL_EOL
798+ else:
799+ raise PrefParseError("Unexpected '/'",
800+ anonymize_path(source, self._profile_path),
801+ linenum)
802+
803+ elif state.state == Prefs.STATE_PARSE_UNTIL_EOL:
804+ pass
805+
806+ elif state.state == Prefs.STATE_COMMENT_BLOCK:
807+ if c == '*':
808+ state.state = Prefs.STATE_COMMENT_BLOCK_MAYBE_END
809+
810+ elif state.state == Prefs.STATE_COMMENT_BLOCK_MAYBE_END:
811+ if c == '/':
812+ state.state = state.next_state
813+ state.next_state = Prefs.STATE_READY
814+ else:
815+ state.state = Prefs.STATE_COMMENT_BLOCK
816+
817+ elif state.state == Prefs.STATE_PARSE_UNTIL_OPEN_PAREN:
818+ if c == '(':
819+ state.state = Prefs.STATE_PARSE_UNTIL_NAME
820+ elif c == '/':
821+ state.next_state = state.state
822+ state.state = Prefs.STATE_COMMENT_MAYBE_START
823+ elif not c.isspace():
824+ raise PrefParseError("Unexpected character '%s' before open parenthesis" % c,
825+ anonymize_path(source, self._profile_path),
826+ linenum)
827+
828+ elif state.state == Prefs.STATE_PARSE_UNTIL_NAME:
829+ if c == '"' or c == '\'':
830+ state.tmp = ''
831+ state.quote = c
832+ state.state = Prefs.STATE_PARSE_STRING
833+ state.next_state = Prefs.STATE_PARSE_UNTIL_COMMA
834+ elif c == '/':
835+ state.next_state = state.state
836+ state.state = Prefs.STATE_COMMENT_MAYBE_START
837+ elif not c.isspace():
838+ raise PrefParseError("Unexpected character '%s' before pref name" % c,
839+ anonymize_path(source, self._profile_path),
840+ linenum)
841+
842+ elif state.state == Prefs.STATE_PARSE_STRING:
843+ if c == '\\':
844+ state.state = Prefs.STATE_PARSE_ESC_SEQ
845+ elif c == state.quote:
846+ state.state = state.next_state
847+ state.next_state = Prefs.STATE_READY
848+ else:
849+ state.tmp += c
850+
851+ elif state.state == Prefs.STATE_PARSE_ESC_SEQ:
852+ # XXX: We don't handle UTF16 / hex here
853+ if c == 'n':
854+ c = '\n'
855+ elif c == 'r':
856+ c = '\r'
857+ state.tmp += c
858+ state.state = Prefs.STATE_PARSE_STRING
859+
860+ elif state.state == Prefs.STATE_PARSE_UNTIL_COMMA:
861+ if state.tmp != None:
862+ state.name = state.tmp
863+ state.tmp = None
864+ if c == ',':
865+ state.state = Prefs.STATE_PARSE_UNTIL_VALUE
866+ elif c == '/':
867+ state.next_state = state.state
868+ state.state = Prefs.STATE_COMMENT_MAYBE_START
869+ elif not c.isspace():
870+ raise PrefParseError("Unexpected character '%s' before comma" % c,
871+ anonymize_path(source, self._profile_path),
872+ linenum)
873+
874+ elif state.state == Prefs.STATE_PARSE_UNTIL_VALUE:
875+ if c == '"' or c == '\'':
876+ state.tmp = ''
877+ state.quote = c
878+ state.state = Prefs.STATE_PARSE_STRING
879+ state.next_state = Prefs.STATE_PARSE_UNTIL_CLOSE_PAREN
880+ elif line.startswith('true', index):
881+ state.tmp = True
882+ state.next_state = Prefs.STATE_PARSE_UNTIL_CLOSE_PAREN
883+ state.state = Prefs.STATE_SKIP
884+ state.skip = 3
885+ elif line.startswith('false', index):
886+ state.tmp = False
887+ state.next_state = Prefs.STATE_PARSE_UNTIL_CLOSE_PAREN
888+ state.state = Prefs.STATE_SKIP
889+ state.skip = 4
890+ elif (c >= '0' and c <= '9') or c == '+' or c == '-':
891+ state.tmp = c
892+ state.state = Prefs.STATE_PARSE_INT
893+ elif c == '/':
894+ state.next_state = state
895+ state.state = Prefs.STATE_COMMENT_MAYBE_START
896+ elif not c.isspace():
897+ raise PrefParseError("Unexpected character '%s' before value" % c,
898+ anonymize_path(source, self._profile_path),
899+ linenum)
900+
901+ elif state.state == Prefs.STATE_PARSE_INT:
902+ if c >= '0' and c <= '9':
903+ state.tmp += c
904+ elif c == ')':
905+ state.value = int(state.tmp)
906+ state.tmp = None
907+ state.state = Prefs.STATE_PARSE_UNTIL_SEMICOLON
908+ elif c.isspace():
909+ state.tmp = int(state.tmp)
910+ state.state = Prefs.STATE_PARSE_UNTIL_CLOSE_PAREN
911+ elif c == '/':
912+ state.tmp = int(state.tmp)
913+ state.next_state = Prefs.STATE_PARSE_UNTIL_CLOSE_PAREN
914+ state.state = Prefs.STATE_COMMENT_MAYBE_START
915+ else:
916+ raise PrefParseError("Unexpected character '%s' whilst parsing int" % c,
917+ anonymize_path(source, self._profile_path),
918+ linenum)
919+
920+ elif state.state == Prefs.STATE_PARSE_UNTIL_CLOSE_PAREN:
921+ if state.tmp != None:
922+ state.value = state.tmp
923+ state.tmp = None
924+ if c == ')':
925+ state.state = Prefs.STATE_PARSE_UNTIL_SEMICOLON
926+ elif c == '/':
927+ state.next_state = state.state
928+ state.state = Prefs.STATE_COMMENT_MAYBE_START
929+ elif not c.isspace():
930+ raise PrefParseError("Unexpected character '%s' before close parenthesis" % c,
931+ anonymize_path(source, self._profile_path),
932+ linenum)
933+
934+ elif state.state == Prefs.STATE_PARSE_UNTIL_SEMICOLON:
935+ if c == ';':
936+ self._maybe_add_pref(state.name, state.value, source,
937+ state.default, state.locked)
938+ state.state = Prefs.STATE_READY
939+ elif c == '/':
940+ state.next_state = state.state
941+ state.state = Prefs.STATE_COMMENT_MAYBE_START
942+ elif not c.isspace():
943+ raise PrefParseError("Unexpected character '%s' before semicolon" % c,
944+ anonymize_path(source, self._profile_path),
945+ linenum)
946+
947+ index += 1
948+
949+ if state.state == Prefs.STATE_PARSE_UNTIL_EOL:
950+ state.state = Prefs.STATE_READY
951+
952+ return state
953+
954+ def __getitem__(self, key):
955+ res = self.prefs[key]
956+ if res.source in self.pref_sources:
957+ return res
958+ raise KeyError
959+
960+ def __iter__(self):
961+
962+ class PrefsIter:
963+ def __init__(self, prefs):
964+ self.index = 0
965+ self.keys = []
966+ for k in prefs.prefs.keys():
967+ try:
968+ test = prefs[k]
969+ self.keys.append(k)
970+ except:
971+ pass
972+ self.keys.sort()
973+
974+ def __next__(self):
975+ if self.index == len(self.keys):
976+ raise StopIteration
977+ res = self.keys[self.index]
978+ self.index += 1
979+ return res
980+
981+ def next(self):
982+ return self.__next__()
983+
984+ return PrefsIter(self)
985+
986+ def __len__(self):
987+ i = 0
988+ for k in self:
989+ i += 1
990+ return i
991+
992+
993+class Extension:
994+ '''Small class representing an extension'''
995+ def __init__(self, ext_id, location, ver, ext_type, active, desc, min_appver,
996+ max_appver, cur_appver, visible, userDisabled, appDisabled,
997+ softDisabled, foreign, hasBinary, strictCompat, appStrictCompat):
998+ self.ext_id = ext_id;
999+ self.location = location
1000+ self.ver = ver
1001+ self.ext_type = ext_type
1002+ self.active = active
1003+ self.desc = desc
1004+ self.min_appver = min_appver
1005+ self.max_appver = max_appver
1006+ self.cur_appver = cur_appver
1007+ self.visible = visible
1008+ self.userDisabled = userDisabled
1009+ self.appDisabled = appDisabled
1010+ self.softDisabled = softDisabled
1011+ self.foreign = foreign
1012+ self.hasBinary = hasBinary
1013+ self.strictCompat = strictCompat
1014+ self.appStrictCompat = appStrictCompat
1015+
1016+ def dump(self):
1017+ active = "Yes" if self.active == True else "No"
1018+ foreign = "Yes" if self.foreign == True else "No"
1019+ visible = "Yes" if self.visible == True else "No"
1020+ hasBinary = "Yes" if self.hasBinary == True else "No"
1021+ strictCompat = "Yes" if self.strictCompat == True else "No"
1022+ if self.active == True:
1023+ disabled_reason = ""
1024+ elif self.softDisabled == True:
1025+ disabled_reason = "(Soft-blocked)"
1026+ elif self.appDisabled == True:
1027+ disabled_reason = "(Application disabled)"
1028+ elif self.userDisabled == True:
1029+ disabled_reason = "(User disabled)"
1030+ else:
1031+ disabled_reason = "(Reason unknown)"
1032+
1033+ return ("%s - ID=%s, Version=%s, minVersion=%s, maxVersion=%s, Location=%s, " +
1034+ "Type=%s, Foreign=%s, Visible=%s, BinaryComponents=%s, StrictCompat=%s, " +
1035+ "Active=%s %s") % \
1036+ (self.desc, self.ext_id, self.ver, self.min_appver, self.max_appver,
1037+ self.location, self.ext_type, foreign, visible, hasBinary,
1038+ strictCompat, active, disabled_reason)
1039+
1040+ @property
1041+ def active_but_incompatible(self):
1042+ return self.active and (self.cur_appver != None and \
1043+ (compare_versions(self.cur_appver, self.min_appver) == -1 or \
1044+ compare_versions(self.cur_appver, self.max_appver) == 1) and \
1045+ (self.hasBinary or self.strictCompat or self.appStrictCompat))
1046+
1047+
1048+class Profile:
1049+ '''Container to represent a profile'''
1050+ def __init__(self, id, name, path, is_default, appini):
1051+ self.extensions = {}
1052+ self.locales = {}
1053+ self.themes = {}
1054+ self.id = id
1055+ self.name = name
1056+ self.path = path
1057+ self.default = is_default
1058+ self.appini = appini
1059+
1060+ self.prefs = Prefs(path)
1061+ self.plugins = PluginRegistry(path)
1062+
1063+ try:
1064+ self._populate_extensions()
1065+ except:
1066+ self.extensions = None
1067+
1068+ def _populate_extensions(self):
1069+ # We copy the db as it's locked whilst Firefox is open. This is still racy
1070+ # though, as it could be modified during the copy, leaving us with a corrupt
1071+ # DB. Can we detect this somehow?
1072+ tmp_db = mkstemp_copy(os.path.join(self.path, "extensions.sqlite"))
1073+ conn = sqlite3.connect(tmp_db)
1074+
1075+ def get_extension_from_row(row):
1076+ moz_id = row[0]
1077+ ext_id = row[1]
1078+ location = row[2]
1079+ ext_ver = row[3]
1080+ ext_type = row[4]
1081+ visible = True if row[6] == 1 else False
1082+ active = True if row[7] == 1 else False
1083+ userDisabled = True if row[8] == 1 else False
1084+ appDisabled = True if row[9] == 1 else False
1085+ softDisabled = True if row[10] == 1 else False
1086+ foreign = True if row[11] == 1 else False
1087+ hasBinary = True if row[12] == 1 else False
1088+ strictCompat = True if row[13] == 1 else False
1089+
1090+ cur = conn.cursor()
1091+ cur.execute("select name from locale where id=:id", { "id": row[5] })
1092+ desc = cur.fetchone()[0]
1093+
1094+ cur = conn.cursor()
1095+ cur.execute("select minVersion, maxVersion from targetApplication where addon_internal_id=:id and (id=:appid or id=:tkid)", \
1096+ { "id": row[0], "appid": self.appini.appid, "tkid": "toolkit@mozilla.org" })
1097+ (min_ver, max_ver) = cur.fetchone()
1098+
1099+ appStrictCompat = 'extensions.strictCompatibility' in self.prefs and \
1100+ self.prefs['extensions.strictCompatibility'].value == 'true'
1101+ return Extension(ext_id, location, ext_ver, ext_type, active, desc,
1102+ min_ver, max_ver, self.last_version, visible,
1103+ userDisabled, appDisabled, softDisabled, foreign,
1104+ hasBinary, strictCompat, appStrictCompat)
1105+
1106+ cur = conn.cursor()
1107+ cur.execute("select internal_id, id, location, version, type, defaultLocale, " + \
1108+ "visible, active, userDisabled, appDisabled, softDisabled, " + \
1109+ "isForeignInstall, hasBinaryComponents, strictCompatibility from addon")
1110+ rows = cur.fetchall()
1111+ for row in rows:
1112+ extension = get_extension_from_row(row)
1113+ if extension.ext_type == "extension":
1114+ storage_array = self.extensions
1115+ elif extension.ext_type == "locale":
1116+ storage_array = self.locales
1117+ elif extension.ext_type == "theme":
1118+ storage_array = self.themes
1119+ else:
1120+ raise ExtensionTypeNotRecognised(extension.type, extension.ext_id)
1121+
1122+ if not extension.location in storage_array:
1123+ storage_array[extension.location] = []
1124+ storage_array[extension.location].append(extension)
1125+
1126+ os.remove(tmp_db)
1127+
1128+ def _do_dump(self, storage_array):
1129+ if self.extensions == None:
1130+ return "extensions.sqlite corrupt or missing"
1131+
1132+ ret = ""
1133+ for location in storage_array:
1134+ ret += "Location: " + location + "\n\n"
1135+ for extension in storage_array[location]:
1136+ prefix = " (Inactive) " if not extension.active else ""
1137+ ret += '\t%s%s\n' % (prefix, extension.dump())
1138+ ret += "\n\n\n"
1139+ return ret
1140+
1141+ @property
1142+ def running(self):
1143+ if not hasattr(self, '_running'):
1144+ # We detect if this profile is running or not by trying to lock the lockfile
1145+ # If we can't lock it, then Firefox is running
1146+ fd = os.open(os.path.join(self.path, ".parentlock"), os.O_WRONLY|os.O_CREAT|os.O_TRUNC, 0o666)
1147+ lock = struct.pack("hhqqi", 1, 0, 0, 0, 0)
1148+ try:
1149+ fcntl.fcntl(fd, fcntl.F_SETLK, lock)
1150+ self._running = False
1151+ # If we acquired the lock, ensure that we unlock again immediately
1152+ lock = struct.pack("hhqqi", 2, 0, 0, 0, 0)
1153+ fcntl.fcntl(fd, fcntl.F_SETLK, lock)
1154+ except:
1155+ self._running = True
1156+
1157+ return self._running
1158+
1159+ def dump_extensions(self):
1160+ return self._do_dump(self.extensions)
1161+
1162+ def dump_locales(self):
1163+ return self._do_dump(self.locales)
1164+
1165+ def dump_themes(self):
1166+ return self._do_dump(self.themes)
1167+
1168+ def dump_prefs(self):
1169+ ret = ''
1170+ for pref in self.prefs:
1171+ if type(self.prefs[pref].value) == int:
1172+ value = str(self.prefs[pref].value)
1173+ elif type(self.prefs[pref].value) == bool:
1174+ value = 'true' if self.prefs[pref].value == True else 'false'
1175+ else:
1176+ value = "\"%s\"" % self.prefs[pref].value
1177+ ret += pref + ': ' + value + ' (' + self.prefs[pref].anon_source + ')\n'
1178+ return ret
1179+
1180+ def dump_pref_sources(self):
1181+ ret = ''
1182+ for source in self.prefs.pref_sources:
1183+ ret += anonymize_path(source, self.path) + '\n'
1184+ return ret
1185+
1186+ def dump_pref_errors(self):
1187+ ret = ''
1188+ for source in self.prefs.errors:
1189+ ret += self.prefs.errors[source] + '\n'
1190+ return ret
1191+
1192+ def dump_plugins(self):
1193+ if self.plugins.error != None:
1194+ return "pluginreg.dat exists but isn't parseable. %s" % self.plugins.error
1195+
1196+ ret = ''
1197+ for plugin in self.plugins:
1198+ ret += plugin.dump() + '\n'
1199+ return ret
1200+
1201+ def get_plugin_packages(self, pkglist):
1202+ if self.plugins.error != None:
1203+ return None
1204+
1205+ for plugin in self.plugins:
1206+ if plugin.package != None and plugin.package not in pkglist:
1207+ pkglist.append(plugin.package)
1208+
1209+ @property
1210+ def current(self):
1211+ return True if self.appini.buildid == self.last_buildid or self.appini.buildid == None else False
1212+
1213+ @property
1214+ def has_active_but_incompatible_extensions(self):
1215+ if self.last_version == None or self.extensions == None:
1216+ return False
1217+ for storage_array in self.extensions, self.locales, self.themes:
1218+ for location in storage_array:
1219+ for extension in storage_array[location]:
1220+ if extension.active_but_incompatible:
1221+ return True
1222+ return False
1223+
1224+ def dump_active_but_incompatible_extensions(self):
1225+ if self.last_version == None or self.extensions == None:
1226+ return "Unavailable (corrupt or non-existant compatibility.ini or extensions.sqlite)"
1227+ res = ''
1228+ for storage_array in self.extensions, self.locales, self.themes:
1229+ for location in storage_array:
1230+ for extension in storage_array[location]:
1231+ if extension.active_but_incompatible:
1232+ res += extension.desc + " - " + extension.ext_id + "\n"
1233+ return res
1234+
1235+ def dump_files_with_broken_permissions(self):
1236+ broken = []
1237+ blacklist = [
1238+ r'^lock$'
1239+ ]
1240+
1241+ for dirpath, dirnames, filenames in os.walk(self.path):
1242+
1243+ def check_path(path):
1244+ relpath = os.path.relpath(path, self.path)
1245+ for i in blacklist:
1246+ if re.match(i, relpath):
1247+ return
1248+
1249+ flags = os.R_OK | os.W_OK
1250+ if os.path.isdir(path):
1251+ flags |= os.X_OK
1252+ if not os.access(path, flags):
1253+ broken.append(relpath)
1254+
1255+ check_path(dirpath)
1256+ for name in filenames:
1257+ check_path(os.path.join(dirpath, name))
1258+
1259+ uid = os.getuid()
1260+ broken.sort()
1261+ broken_txt = ''
1262+ for file in broken:
1263+ fstat = os.stat(os.path.join(self.path, file))
1264+ summary = "%#o" % (fstat.st_mode & (stat.S_IRWXU | stat.S_IRWXG |
1265+ stat.S_IRWXO))
1266+ if fstat.st_uid != uid:
1267+ summary += ', wrong owner'
1268+ broken_txt += file + ' (' + summary + ')\n'
1269+
1270+ return broken_txt
1271+
1272+ @property
1273+ def has_forced_layers_acceleration(self):
1274+ if "layers.acceleration.force-enabled" in self.prefs and self.prefs["layers.acceleration.force-enabled"].value == "true":
1275+ return True
1276+
1277+ return False
1278+
1279+ @property
1280+ def compatini(self):
1281+ if not hasattr(self, '_compatini'):
1282+ self._compatini = CompatINIParser(self.path)
1283+ return self._compatini
1284+
1285+ @property
1286+ def last_version(self):
1287+ return self.compatini.last_version
1288+
1289+ @property
1290+ def last_buildid(self):
1291+ return self.compatini.last_buildid
1292+
1293+ @property
1294+ def addon_compat_check_disabled(self):
1295+ is_nightly = re.sub(r'^[^\.]+\.[0-9]+([a-z0-9]*).*', r'\1', self.last_version) == 'a1'
1296+ if is_nightly == True:
1297+ pref = "extensions.checkCompatibility.nightly"
1298+ else:
1299+ pref = "extensions.checkCompatibility.%s" % re.sub(r'(^[^\.]+\.[0-9]+[a-z]*).*', r'\1', self.last_version)
1300+ return pref in self.prefs and self.prefs[pref].value == 'false'
1301+
1302+
1303+class Profiles:
1304+ '''Small class to build an array of profiles from a profile.ini.
1305+ Can be accessed like a normal array'''
1306+ def __init__(self, ini_file, appini):
1307+ self.profiles = []
1308+
1309+ parser = ConfigParser()
1310+ parser.read(ini_file)
1311+ profile_folder = os.path.dirname(ini_file)
1312+
1313+ for section in parser.sections():
1314+ if section == "General": continue
1315+ if not parser.has_option(section, "Path"): continue
1316+ path = parser.get(section, "Path")
1317+ name = parser.get(section, "Name")
1318+ is_default = True if parser.has_option(section, "Default") and parser.getint(section, "Default") == 1 else False
1319+ self.profiles.append(Profile(section, name, os.path.join(profile_folder, path), is_default, appini))
1320+
1321+ # No "Default" entry when there is one profile
1322+ if len(self) == 1: self[0].default = True
1323+
1324+ def __getitem__(self, key):
1325+ if key > len(self) - 1:
1326+ raise IndexError
1327+ return self.profiles[key]
1328+
1329+ def __iter__(self):
1330+
1331+ class ProfilesIter:
1332+ def __init__(self, profiles):
1333+ self.profiles = profiles
1334+ self.index = 0
1335+
1336+ def __next__(self):
1337+ if self.index == len(self.profiles):
1338+ raise StopIteration
1339+ res = self.profiles[self.index]
1340+ self.index += 1
1341+ return res
1342+
1343+ def next(self):
1344+ return self.__next__()
1345+
1346+ return ProfilesIter(self)
1347+
1348+ def __len__(self):
1349+ return len(self.profiles)
1350+
1351+ def dump_profile_summaries(self):
1352+ res = ''
1353+ for profile in self:
1354+ running = " (In use)" if profile.running == True else ""
1355+ default = " (Default)" if profile.default else ""
1356+ outdated = " (Out of date)" if not profile.current else ""
1357+ res += "%s%s - LastVersion=%s/%s%s%s\n" % (profile.id, default, profile.last_version, profile.last_buildid, running, outdated)
1358+ return res
1359+
1360+
1361+def recent_kernlog(pattern):
1362+ '''Extract recent messages from kern.log or message which match a regex.
1363+ pattern should be a "re" object. '''
1364+ lines = ''
1365+ if os.path.exists('/var/log/kern.log'):
1366+ file = '/var/log/kern.log'
1367+ elif os.path.exists('/var/log/messages'):
1368+ file = '/var/log/messages'
1369+ else:
1370+ return lines
1371+
1372+ for line in open(file):
1373+ if pattern.search(line):
1374+ lines += line
1375+ return lines
1376+
1377+
1378+def recent_auditlog(pattern):
1379+ '''Extract recent messages from kern.log or message which match a regex.
1380+ pattern should be a "re" object. '''
1381+ lines = ''
1382+ if os.path.exists('/var/log/audit/audit.log'):
1383+ file = '/var/log/audit/audit.log'
1384+ else:
1385+ return lines
1386+
1387+ for line in open(file):
1388+ if pattern.search(line):
1389+ lines += line
1390+ return lines
1391+
1392+
1393+def add_info(report, ui):
1394+ '''Entry point for apport'''
1395+
1396+ def populate_item(key, data):
1397+ if data != None and data.strip() != '':
1398+ report[key] = data
1399+
1400+ def append_tag(tag):
1401+ tags = report.get('Tags', '')
1402+ if tags:
1403+ tags += ' '
1404+ report['Tags'] = tags + tag
1405+
1406+ ddproc = Popen(['dpkg-divert', '--truename', '/usr/bin/@MOZ_APP_NAME@'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
1407+ truename = ddproc.communicate()
1408+ if ddproc.returncode == 0 and truename[0].strip() != '/usr/bin/@MOZ_APP_NAME@':
1409+ ddproc = Popen(['dpkg-divert', '--listpackage', '/usr/bin/@MOZ_APP_NAME@'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
1410+ diverter = ddproc.communicate()
1411+ report['UnreportableReason'] = "/usr/bin/@MOZ_APP_NAME@ has been diverted by a third party package (%s)" % diverter[0].strip()
1412+ return
1413+
1414+ conf_dir = os.path.join(os.environ["HOME"], ".mozilla", "@MOZ_APP_NAME@")
1415+ appini = AppINIParser('/@MOZ_LIBDIR@')
1416+ populate_item("BuildID", appini.buildid)
1417+
1418+ profiles = Profiles(os.path.join(conf_dir, "profiles.ini"), appini)
1419+ populate_item("Profiles", profiles.dump_profile_summaries())
1420+ if len(profiles) == 0: report["NoProfiles"] = 'True'
1421+
1422+ for profile in profiles:
1423+ if profile.running and not profile.current:
1424+ report["UnreportableReason"] = "Firefox has been upgraded since you started it. Please restart all instances of Firefox and try again"
1425+ return
1426+
1427+ seen_default = False
1428+ running_incompatible_addons = False
1429+ forced_layers_accel = False
1430+ addon_compat_check_disabled = False
1431+ for profile in profiles:
1432+ if profile.default and not seen_default and len(profiles) > 1:
1433+ prefix = 'DefaultProfile'
1434+ seen_default = True
1435+ elif len(profiles) > 1:
1436+ prefix = profile.id
1437+ else:
1438+ prefix = ''
1439+
1440+ populate_item(prefix + "Extensions", profile.dump_extensions())
1441+ populate_item(prefix + "Locales", profile.dump_locales())
1442+ populate_item(prefix + "Themes", profile.dump_themes())
1443+ populate_item(prefix + "Plugins", profile.dump_plugins())
1444+ populate_item(prefix + "IncompatibleExtensions", profile.dump_active_but_incompatible_extensions())
1445+ populate_item(prefix + "Prefs", profile.dump_prefs())
1446+ populate_item(prefix + "PrefSources", profile.dump_pref_sources())
1447+ populate_item(prefix + "PrefErrors", profile.dump_pref_errors())
1448+ populate_item(prefix + "BrokenPermissions", profile.dump_files_with_broken_permissions())
1449+
1450+ if (profile.current or profile.default) and profile.has_active_but_incompatible_extensions:
1451+ running_incompatible_addons = True
1452+ if (profile.current or profile.default) and profile.has_forced_layers_acceleration:
1453+ forced_layers_accel = True
1454+ if (profile.current or profile.default) and profile.addon_compat_check_disabled:
1455+ addon_compat_check_disabled = True
1456+
1457+ crash_reports = []
1458+ report_to_mtime = {}
1459+ most_recent_report = None
1460+ most_recent_mtime = 0
1461+ for crash in glob(os.path.join(conf_dir, 'Crash Reports', 'submitted', '*.txt')):
1462+ id = re.sub(r'\.txt$', '', os.path.basename(crash))
1463+ report_to_mtime[id] = os.stat(crash).st_mtime
1464+ crash_reports.append(id)
1465+ if most_recent_report == None or report_to_mtime[id] > most_recent_mtime:
1466+ most_recent_report = id
1467+ most_recent_mtime = report_to_mtime[id]
1468+
1469+ def crashes_sort(a, b):
1470+ if report_to_mtime[b] > report_to_mtime[a]:
1471+ return 1
1472+ elif report_to_mtime[b] < report_to_mtime[a]:
1473+ return -1
1474+ else:
1475+ return 0
1476+
1477+ # Put the most recent first
1478+ crash_reports.sort(key=functools.cmp_to_key(crashes_sort))
1479+
1480+ crash_reports_str = ''
1481+ i = 0
1482+ for crash in crash_reports:
1483+ crash_reports_str += crash + '\n'
1484+ i += 1
1485+ if i == 15: break
1486+
1487+ populate_item('SubmittedCrashIDs', crash_reports_str)
1488+ populate_item('MostRecentCrashID', most_recent_report)
1489+
1490+ plugin_packages = []
1491+ for profile in profiles:
1492+ profile.get_plugin_packages(plugin_packages)
1493+ if len(plugin_packages) > 0: attach_related_packages(report, plugin_packages)
1494+
1495+ report["RunningIncompatibleAddons"] = 'True' if running_incompatible_addons == True else 'False'
1496+ report["ForcedLayersAccel"] = 'True' if forced_layers_accel == True else 'False'
1497+ report["AddonCompatCheckDisabled"] = 'True' if addon_compat_check_disabled == True else 'False'
1498+
1499+ if '@MOZ_APP_NAME@' == 'firefox-trunk':
1500+ report["Channel"] = 'nightly'
1501+ append_tag('nightly-channel')
1502+ if report["SourcePackage"] == 'firefox-trunk':
1503+ report["SourcePackage"] = 'firefox'
1504+ else:
1505+ channelpref = Prefs(None, ['/@MOZ_LIBDIR@/defaults/pref/channel-prefs.js'], whitelist = [ r'app\.update\.channel' ])
1506+ if "app.update.channel" in channelpref:
1507+ report["Channel"] = channelpref["app.update.channel"].value
1508+ append_tag(channelpref["app.update.channel"].value + '-channel')
1509+ else:
1510+ report["Channel"] = 'Unavailable'
1511+
1512+ if os.path.exists('/sys/bus/pci'):
1513+ report['Lspci'] = command_output(['lspci','-vvnn'])
1514+ attach_alsa(report)
1515+ attach_network(report)
1516+ attach_wifi(report)
1517+
1518+ # Get apparmor stuff if the profile isn't disabled. copied from
1519+ # source_apparmor.py until apport runs hooks via attach_related_packages
1520+ apparmor_disable_dir = "/etc/apparmor.d/disable"
1521+ add_apparmor = True
1522+ if os.path.isdir(apparmor_disable_dir):
1523+ for f in os.listdir(apparmor_disable_dir):
1524+ if f.startswith("usr.bin.@MOZ_PKG_NAME@"):
1525+ add_apparmor = False
1526+ break
1527+ if add_apparmor:
1528+ attach_related_packages(report, ['apparmor', 'libapparmor1',
1529+ 'libapparmor-perl', 'apparmor-utils', 'auditd', 'libaudit0'])
1530+
1531+ attach_file(report, '/proc/version_signature', 'ProcVersionSignature')
1532+ attach_file(report, '/proc/cmdline', 'ProcCmdline')
1533+
1534+ sec_re = re.compile('audit\(|apparmor|selinux|security', re.IGNORECASE)
1535+ report['KernLog'] = recent_kernlog(sec_re)
1536+
1537+ if os.path.exists("/var/log/audit"):
1538+ # this needs to be run as root
1539+ report['AuditLog'] = recent_auditlog(sec_re)
1540+
1541+
1542+if __name__ == "__main__":
1543+ import apport
1544+ from apport import packaging
1545+ D = {}
1546+ D['Package'] = '@MOZ_PKG_NAME@'
1547+ D['SourcePackage'] = '@MOZ_PKG_NAME@'
1548+ add_info(D, None)
1549+ for KEY in D.keys():
1550+ print('''-------------------%s: ------------------\n%s''' % (KEY, D[KEY]))
1551
1552=== added directory 'debian/build'
1553=== added file 'debian/build/Expression.py'
1554--- debian/build/Expression.py 1970-01-01 00:00:00 +0000
1555+++ debian/build/Expression.py 2022-12-07 23:06:52 +0000
1556@@ -0,0 +1,188 @@
1557+# This Source Code Form is subject to the terms of the Mozilla Public
1558+# License, v. 2.0. If a copy of the MPL was not distributed with this
1559+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
1560+
1561+"""
1562+Parses and evaluates simple statements for Preprocessor:
1563+
1564+Expression currently supports the following grammar, whitespace is ignored:
1565+
1566+expression :
1567+ unary ( ( '==' | '!=' ) unary ) ? ;
1568+unary :
1569+ '!'? value ;
1570+value :
1571+ [0-9]+ # integer
1572+ | \w+ # string identifier or value;
1573+"""
1574+
1575+import re
1576+
1577+class Expression:
1578+ def __init__(self, expression_string):
1579+ """
1580+ Create a new expression with this string.
1581+ The expression will already be parsed into an Abstract Syntax Tree.
1582+ """
1583+ self.content = expression_string
1584+ self.offset = 0
1585+ self.__ignore_whitespace()
1586+ self.e = self.__get_equality()
1587+ if self.content:
1588+ raise Expression.ParseError, self
1589+
1590+ def __get_equality(self):
1591+ """
1592+ Production: unary ( ( '==' | '!=' ) unary ) ?
1593+ """
1594+ if not len(self.content):
1595+ return None
1596+ rv = Expression.__AST("equality")
1597+ # unary
1598+ rv.append(self.__get_unary())
1599+ self.__ignore_whitespace()
1600+ if not re.match('([=!]=|[<>]=?|=[<>])', self.content):
1601+ # no equality needed, short cut to our prime unary
1602+ return rv[0]
1603+ # append operator
1604+ op_length = 1 if re.match('[<>][^=]', self.content) else 2
1605+ rv.append(Expression.__ASTLeaf('op', self.content[:op_length]))
1606+ self.__strip(op_length)
1607+ self.__ignore_whitespace()
1608+ rv.append(self.__get_unary())
1609+ self.__ignore_whitespace()
1610+ return rv
1611+
1612+ def __get_unary(self):
1613+ """
1614+ Production: '!'? value
1615+ """
1616+ # eat whitespace right away, too
1617+ not_ws = re.match('!\s*', self.content)
1618+ if not not_ws:
1619+ return self.__get_value()
1620+ rv = Expression.__AST('not')
1621+ self.__strip(not_ws.end())
1622+ rv.append(self.__get_value())
1623+ self.__ignore_whitespace()
1624+ return rv
1625+
1626+ def __get_value(self):
1627+ """
1628+ Production: ( [0-9]+ | \w+)
1629+ Note that the order is important, and the expression is kind-of
1630+ ambiguous as \w includes 0-9. One could make it unambiguous by
1631+ removing 0-9 from the first char of a string literal.
1632+ """
1633+ rv = None
1634+ word_len = re.match('[\-\+]?[0-9]*', self.content).end()
1635+ if word_len:
1636+ value = int(self.content[:word_len])
1637+ rv = Expression.__ASTLeaf('int', value)
1638+ else:
1639+ word_len = re.match('\w*', self.content).end()
1640+ if word_len:
1641+ rv = Expression.__ASTLeaf('string', self.content[:word_len])
1642+ else:
1643+ raise Expression.ParseError, self
1644+ self.__strip(word_len)
1645+ self.__ignore_whitespace()
1646+ return rv
1647+
1648+ def __ignore_whitespace(self):
1649+ ws_len = re.match('\s*', self.content).end()
1650+ self.__strip(ws_len)
1651+ return
1652+
1653+ def __strip(self, length):
1654+ """
1655+ Remove a given amount of chars from the input and update
1656+ the offset.
1657+ """
1658+ self.content = self.content[length:]
1659+ self.offset += length
1660+
1661+ def evaluate(self, context):
1662+ """
1663+ Evaluate the expression with the given context
1664+ """
1665+
1666+ # Helper function to evaluate __get_equality results
1667+ def eval_equality(tok):
1668+ left = opmap[tok[0].type](tok[0])
1669+ right = opmap[tok[2].type](tok[2])
1670+ rv = left == right
1671+ if tok[1].value == '==':
1672+ return left == right
1673+ elif tok[1].value == '!=':
1674+ return not left == right
1675+ elif tok[1].value == '<':
1676+ return left < right
1677+ elif tok[1].value == '>':
1678+ return left > right
1679+ elif tok[1].value == '<=' or tok[1].value == '=<':
1680+ return left <= right
1681+ elif tok[1].value == '>=' or tok[1].value == '=>':
1682+ return left >= right
1683+ raise RuntimeError('Invalid operator "%s"' % tok[1].value)
1684+
1685+ # Mapping from token types to evaluator functions
1686+ # Apart from (non-)equality, all these can be simple lambda forms.
1687+ opmap = {
1688+ 'equality': eval_equality,
1689+ 'not': lambda tok: not opmap[tok[0].type](tok[0]),
1690+ 'string': lambda tok: context[tok.value],
1691+ 'int': lambda tok: tok.value}
1692+
1693+ return opmap[self.e.type](self.e);
1694+
1695+ class __AST(list):
1696+ """
1697+ Internal class implementing Abstract Syntax Tree nodes
1698+ """
1699+ def __init__(self, type):
1700+ self.type = type
1701+ super(self.__class__, self).__init__(self)
1702+
1703+ class __ASTLeaf:
1704+ """
1705+ Internal class implementing Abstract Syntax Tree leafs
1706+ """
1707+ def __init__(self, type, value):
1708+ self.value = value
1709+ self.type = type
1710+ def __str__(self):
1711+ return self.value.__str__()
1712+ def __repr__(self):
1713+ return self.value.__repr__()
1714+
1715+ class ParseError(StandardError):
1716+ """
1717+ Error raised when parsing fails.
1718+ It has two members, offset and content, which give the offset of the
1719+ error and the offending content.
1720+ """
1721+ def __init__(self, expression):
1722+ self.offset = expression.offset
1723+ self.content = expression.content[:3]
1724+ def __str__(self):
1725+ return 'Unexpected content at offset %i, "%s"'%(self.offset, self.content)
1726+
1727+class Context(dict):
1728+ """
1729+ This class holds variable values by subclassing dict, and while it
1730+ truthfully reports True and False on
1731+
1732+ name in context
1733+
1734+ it returns the variable name itself on
1735+
1736+ context["name"]
1737+
1738+ to reflect the ambiguity between string literals and preprocessor
1739+ variables.
1740+ """
1741+ def __getitem__(self, key):
1742+ if key in self:
1743+ return super(self.__class__, self).__getitem__(key)
1744+ return key
1745
1746=== added file 'debian/build/Preprocessor.py'
1747--- debian/build/Preprocessor.py 1970-01-01 00:00:00 +0000
1748+++ debian/build/Preprocessor.py 2022-12-07 23:06:52 +0000
1749@@ -0,0 +1,452 @@
1750+"""
1751+This is a very primitive line based preprocessor, for times when using
1752+a C preprocessor isn't an option.
1753+"""
1754+
1755+# This Source Code Form is subject to the terms of the Mozilla Public
1756+# License, v. 2.0. If a copy of the MPL was not distributed with this
1757+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
1758+
1759+import sys
1760+import os
1761+import os.path
1762+import re
1763+from optparse import OptionParser
1764+
1765+# hack around win32 mangling our line endings
1766+# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65443
1767+if sys.platform == "win32":
1768+ import msvcrt
1769+ msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
1770+ os.linesep = '\n'
1771+
1772+import Expression
1773+
1774+__all__ = ['Preprocessor', 'preprocess']
1775+
1776+
1777+class Preprocessor:
1778+ """
1779+ Class for preprocessing text files.
1780+ """
1781+ class Error(RuntimeError):
1782+ def __init__(self, cpp, MSG, context):
1783+ self.file = cpp.context['FILE']
1784+ self.line = cpp.context['LINE']
1785+ self.key = MSG
1786+ RuntimeError.__init__(self, (self.file, self.line, self.key, context))
1787+ def __init__(self):
1788+ self.context = Expression.Context()
1789+ for k,v in {'FILE': '',
1790+ 'LINE': 0,
1791+ 'DIRECTORY': os.path.abspath('.')}.iteritems():
1792+ self.context[k] = v
1793+ self.disableLevel = 0
1794+ # ifStates can be
1795+ # 0: hadTrue
1796+ # 1: wantsTrue
1797+ # 2: #else found
1798+ self.ifStates = []
1799+ self.checkLineNumbers = False
1800+ self.writtenLines = 0
1801+ self.filters = []
1802+ self.cmds = {}
1803+ for cmd, level in {'define': 0,
1804+ 'undef': 0,
1805+ 'if': sys.maxint,
1806+ 'ifdef': sys.maxint,
1807+ 'ifndef': sys.maxint,
1808+ 'else': 1,
1809+ 'elif': 1,
1810+ 'elifdef': 1,
1811+ 'elifndef': 1,
1812+ 'endif': sys.maxint,
1813+ 'expand': 0,
1814+ 'literal': 0,
1815+ 'filter': 0,
1816+ 'unfilter': 0,
1817+ 'include': 0,
1818+ 'includesubst': 0,
1819+ 'error': 0}.iteritems():
1820+ self.cmds[cmd] = (level, getattr(self, 'do_' + cmd))
1821+ self.out = sys.stdout
1822+ self.setMarker('#')
1823+ self.LE = '\n'
1824+ self.varsubst = re.compile('@(?P<VAR>\w+)@', re.U)
1825+
1826+ def setLineEndings(self, aLE):
1827+ """
1828+ Set the line endings to be used for output.
1829+ """
1830+ self.LE = {'cr': '\x0D', 'lf': '\x0A', 'crlf': '\x0D\x0A'}[aLE]
1831+
1832+ def setMarker(self, aMarker):
1833+ """
1834+ Set the marker to be used for processing directives.
1835+ Used for handling CSS files, with pp.setMarker('%'), for example.
1836+ """
1837+ self.marker = aMarker
1838+ self.instruction = re.compile('%s(?P<cmd>[a-z]+)(?:\s(?P<args>.*))?$'%aMarker, re.U)
1839+ self.comment = re.compile(aMarker, re.U)
1840+
1841+ def clone(self):
1842+ """
1843+ Create a clone of the current processor, including line ending
1844+ settings, marker, variable definitions, output stream.
1845+ """
1846+ rv = Preprocessor()
1847+ rv.context.update(self.context)
1848+ rv.setMarker(self.marker)
1849+ rv.LE = self.LE
1850+ rv.out = self.out
1851+ return rv
1852+
1853+ def applyFilters(self, aLine):
1854+ for f in self.filters:
1855+ aLine = f[1](aLine)
1856+ return aLine
1857+
1858+ def write(self, aLine):
1859+ """
1860+ Internal method for handling output.
1861+ """
1862+ if self.checkLineNumbers:
1863+ self.writtenLines += 1
1864+ ln = self.context['LINE']
1865+ if self.writtenLines != ln:
1866+ self.out.write('//@line %(line)d "%(file)s"%(le)s'%{'line': ln,
1867+ 'file': self.context['FILE'],
1868+ 'le': self.LE})
1869+ self.writtenLines = ln
1870+ aLine = self.applyFilters(aLine)
1871+ # ensure our line ending. Only need to handle \n, as we're reading
1872+ # with universal line ending support, at least for files.
1873+ aLine = re.sub('\n', self.LE, aLine)
1874+ self.out.write(aLine)
1875+
1876+ def handleCommandLine(self, args, defaultToStdin = False):
1877+ """
1878+ Parse a commandline into this parser.
1879+ Uses OptionParser internally, no args mean sys.argv[1:].
1880+ """
1881+ p = self.getCommandLineParser()
1882+ (options, args) = p.parse_args(args=args)
1883+ includes = options.I
1884+ if defaultToStdin and len(args) == 0:
1885+ args = [sys.stdin]
1886+ includes.extend(args)
1887+ for f in includes:
1888+ self.do_include(f, False)
1889+ pass
1890+
1891+ def getCommandLineParser(self, unescapeDefines = False):
1892+ escapedValue = re.compile('".*"$')
1893+ numberValue = re.compile('[\-\+]?\d+$')
1894+ def handleE(option, opt, value, parser):
1895+ for k,v in os.environ.iteritems():
1896+ self.context[k] = v
1897+ def handleD(option, opt, value, parser):
1898+ vals = value.split('=', 1)
1899+ if len(vals) == 1:
1900+ vals.append(1)
1901+ elif unescapeDefines and escapedValue.match(vals[1]):
1902+ # strip escaped string values
1903+ vals[1] = vals[1][1:-1]
1904+ elif numberValue.match(vals[1]):
1905+ vals[1] = int(vals[1])
1906+ self.context[vals[0]] = vals[1]
1907+ def handleU(option, opt, value, parser):
1908+ del self.context[value]
1909+ def handleF(option, opt, value, parser):
1910+ self.do_filter(value)
1911+ def handleLE(option, opt, value, parser):
1912+ self.setLineEndings(value)
1913+ def handleMarker(option, opt, value, parser):
1914+ self.setMarker(value)
1915+ p = OptionParser()
1916+ p.add_option('-I', action='append', type="string", default = [],
1917+ metavar="FILENAME", help='Include file')
1918+ p.add_option('-E', action='callback', callback=handleE,
1919+ help='Import the environment into the defined variables')
1920+ p.add_option('-D', action='callback', callback=handleD, type="string",
1921+ metavar="VAR[=VAL]", help='Define a variable')
1922+ p.add_option('-U', action='callback', callback=handleU, type="string",
1923+ metavar="VAR", help='Undefine a variable')
1924+ p.add_option('-F', action='callback', callback=handleF, type="string",
1925+ metavar="FILTER", help='Enable the specified filter')
1926+ p.add_option('--line-endings', action='callback', callback=handleLE,
1927+ type="string", metavar="[cr|lr|crlf]",
1928+ help='Use the specified line endings [Default: OS dependent]')
1929+ p.add_option('--marker', action='callback', callback=handleMarker,
1930+ type="string",
1931+ help='Use the specified marker instead of #')
1932+ return p
1933+
1934+ def handleLine(self, aLine):
1935+ """
1936+ Handle a single line of input (internal).
1937+ """
1938+ m = self.instruction.match(aLine)
1939+ if m:
1940+ args = None
1941+ cmd = m.group('cmd')
1942+ try:
1943+ args = m.group('args')
1944+ except IndexError:
1945+ pass
1946+ if cmd not in self.cmds:
1947+ raise Preprocessor.Error(self, 'INVALID_CMD', aLine)
1948+ level, cmd = self.cmds[cmd]
1949+ if (level >= self.disableLevel):
1950+ cmd(args)
1951+ elif self.disableLevel == 0 and not self.comment.match(aLine):
1952+ self.write(aLine)
1953+ pass
1954+
1955+ # Instruction handlers
1956+ # These are named do_'instruction name' and take one argument
1957+
1958+ # Variables
1959+ def do_define(self, args):
1960+ m = re.match('(?P<name>\w+)(?:\s(?P<value>.*))?', args, re.U)
1961+ if not m:
1962+ raise Preprocessor.Error(self, 'SYNTAX_DEF', args)
1963+ val = 1
1964+ if m.group('value'):
1965+ val = self.applyFilters(m.group('value'))
1966+ try:
1967+ val = int(val)
1968+ except:
1969+ pass
1970+ self.context[m.group('name')] = val
1971+ def do_undef(self, args):
1972+ m = re.match('(?P<name>\w+)$', args, re.U)
1973+ if not m:
1974+ raise Preprocessor.Error(self, 'SYNTAX_DEF', args)
1975+ if args in self.context:
1976+ del self.context[args]
1977+ # Logic
1978+ def ensure_not_else(self):
1979+ if len(self.ifStates) == 0 or self.ifStates[-1] == 2:
1980+ sys.stderr.write('WARNING: bad nesting of #else\n')
1981+ def do_if(self, args, replace=False):
1982+ if self.disableLevel and not replace:
1983+ self.disableLevel += 1
1984+ return
1985+ val = None
1986+ try:
1987+ e = Expression.Expression(args)
1988+ val = e.evaluate(self.context)
1989+ except Exception:
1990+ # XXX do real error reporting
1991+ raise Preprocessor.Error(self, 'SYNTAX_ERR', args)
1992+ if type(val) == str:
1993+ # we're looking for a number value, strings are false
1994+ val = False
1995+ if not val:
1996+ self.disableLevel = 1
1997+ if replace:
1998+ if val:
1999+ self.disableLevel = 0
2000+ self.ifStates[-1] = self.disableLevel
2001+ else:
2002+ self.ifStates.append(self.disableLevel)
2003+ pass
2004+ def do_ifdef(self, args, replace=False):
2005+ if self.disableLevel and not replace:
2006+ self.disableLevel += 1
2007+ return
2008+ if re.match('\W', args, re.U):
2009+ raise Preprocessor.Error(self, 'INVALID_VAR', args)
2010+ if args not in self.context:
2011+ self.disableLevel = 1
2012+ if replace:
2013+ if args in self.context:
2014+ self.disableLevel = 0
2015+ self.ifStates[-1] = self.disableLevel
2016+ else:
2017+ self.ifStates.append(self.disableLevel)
2018+ pass
2019+ def do_ifndef(self, args, replace=False):
2020+ if self.disableLevel and not replace:
2021+ self.disableLevel += 1
2022+ return
2023+ if re.match('\W', args, re.U):
2024+ raise Preprocessor.Error(self, 'INVALID_VAR', args)
2025+ if args in self.context:
2026+ self.disableLevel = 1
2027+ if replace:
2028+ if args not in self.context:
2029+ self.disableLevel = 0
2030+ self.ifStates[-1] = self.disableLevel
2031+ else:
2032+ self.ifStates.append(self.disableLevel)
2033+ pass
2034+ def do_else(self, args, ifState = 2):
2035+ self.ensure_not_else()
2036+ hadTrue = self.ifStates[-1] == 0
2037+ self.ifStates[-1] = ifState # in-else
2038+ if hadTrue:
2039+ self.disableLevel = 1
2040+ return
2041+ self.disableLevel = 0
2042+ def do_elif(self, args):
2043+ if self.disableLevel == 1:
2044+ if self.ifStates[-1] == 1:
2045+ self.do_if(args, replace=True)
2046+ else:
2047+ self.do_else(None, self.ifStates[-1])
2048+ def do_elifdef(self, args):
2049+ if self.disableLevel == 1:
2050+ if self.ifStates[-1] == 1:
2051+ self.do_ifdef(args, replace=True)
2052+ else:
2053+ self.do_else(None, self.ifStates[-1])
2054+ def do_elifndef(self, args):
2055+ if self.disableLevel == 1:
2056+ if self.ifStates[-1] == 1:
2057+ self.do_ifndef(args, replace=True)
2058+ else:
2059+ self.do_else(None, self.ifStates[-1])
2060+ def do_endif(self, args):
2061+ if self.disableLevel > 0:
2062+ self.disableLevel -= 1
2063+ if self.disableLevel == 0:
2064+ self.ifStates.pop()
2065+ # output processing
2066+ def do_expand(self, args):
2067+ lst = re.split('__(\w+)__', args, re.U)
2068+ do_replace = False
2069+ def vsubst(v):
2070+ if v in self.context:
2071+ return str(self.context[v])
2072+ return ''
2073+ for i in range(1, len(lst), 2):
2074+ lst[i] = vsubst(lst[i])
2075+ lst.append('\n') # add back the newline
2076+ self.write(reduce(lambda x, y: x+y, lst, ''))
2077+ def do_literal(self, args):
2078+ self.write(args + self.LE)
2079+ def do_filter(self, args):
2080+ filters = [f for f in args.split(' ') if hasattr(self, 'filter_' + f)]
2081+ if len(filters) == 0:
2082+ return
2083+ current = dict(self.filters)
2084+ for f in filters:
2085+ current[f] = getattr(self, 'filter_' + f)
2086+ filterNames = current.keys()
2087+ filterNames.sort()
2088+ self.filters = [(fn, current[fn]) for fn in filterNames]
2089+ return
2090+ def do_unfilter(self, args):
2091+ filters = args.split(' ')
2092+ current = dict(self.filters)
2093+ for f in filters:
2094+ if f in current:
2095+ del current[f]
2096+ filterNames = current.keys()
2097+ filterNames.sort()
2098+ self.filters = [(fn, current[fn]) for fn in filterNames]
2099+ return
2100+ # Filters
2101+ #
2102+ # emptyLines
2103+ # Strips blank lines from the output.
2104+ def filter_emptyLines(self, aLine):
2105+ if aLine == '\n':
2106+ return ''
2107+ return aLine
2108+ # slashslash
2109+ # Strips everything after //
2110+ def filter_slashslash(self, aLine):
2111+ [aLine, rest] = aLine.split('//', 1)
2112+ if rest:
2113+ aLine += '\n'
2114+ return aLine
2115+ # spaces
2116+ # Collapses sequences of spaces into a single space
2117+ def filter_spaces(self, aLine):
2118+ return re.sub(' +', ' ', aLine).strip(' ')
2119+ # substition
2120+ # helper to be used by both substition and attemptSubstitution
2121+ def filter_substitution(self, aLine, fatal=True):
2122+ def repl(matchobj):
2123+ varname = matchobj.group('VAR')
2124+ if varname in self.context:
2125+ return str(self.context[varname])
2126+ if fatal:
2127+ raise Preprocessor.Error(self, 'UNDEFINED_VAR', varname)
2128+ return ''
2129+ return self.varsubst.sub(repl, aLine)
2130+ def filter_attemptSubstitution(self, aLine):
2131+ return self.filter_substitution(aLine, fatal=False)
2132+ # File ops
2133+ def do_include(self, args, filters=True):
2134+ """
2135+ Preprocess a given file.
2136+ args can either be a file name, or a file-like object.
2137+ Files should be opened, and will be closed after processing.
2138+ """
2139+ isName = type(args) == str or type(args) == unicode
2140+ oldWrittenLines = self.writtenLines
2141+ oldCheckLineNumbers = self.checkLineNumbers
2142+ self.checkLineNumbers = False
2143+ if isName:
2144+ try:
2145+ args = str(args)
2146+ if filters:
2147+ args = self.applyFilters(args)
2148+ if not os.path.isabs(args):
2149+ args = os.path.join(self.context['DIRECTORY'], args)
2150+ args = open(args, 'rU')
2151+ except Preprocessor.Error:
2152+ raise
2153+ except:
2154+ raise Preprocessor.Error(self, 'FILE_NOT_FOUND', str(args))
2155+ self.checkLineNumbers = bool(re.search('\.(js|java)(?:\.in)?$', args.name))
2156+ oldFile = self.context['FILE']
2157+ oldLine = self.context['LINE']
2158+ oldDir = self.context['DIRECTORY']
2159+ if args.isatty():
2160+ # we're stdin, use '-' and '' for file and dir
2161+ self.context['FILE'] = '-'
2162+ self.context['DIRECTORY'] = ''
2163+ else:
2164+ abspath = os.path.abspath(args.name)
2165+ self.context['FILE'] = abspath
2166+ self.context['DIRECTORY'] = os.path.dirname(abspath)
2167+ self.context['LINE'] = 0
2168+ self.writtenLines = 0
2169+ for l in args:
2170+ self.context['LINE'] += 1
2171+ self.handleLine(l)
2172+ args.close()
2173+ self.context['FILE'] = oldFile
2174+ self.checkLineNumbers = oldCheckLineNumbers
2175+ self.writtenLines = oldWrittenLines
2176+ self.context['LINE'] = oldLine
2177+ self.context['DIRECTORY'] = oldDir
2178+ def do_includesubst(self, args):
2179+ args = self.filter_substitution(args)
2180+ self.do_include(args)
2181+ def do_error(self, args):
2182+ raise Preprocessor.Error(self, 'Error: ', str(args))
2183+
2184+def main():
2185+ pp = Preprocessor()
2186+ pp.handleCommandLine(None, True)
2187+ return
2188+
2189+def preprocess(includes=[sys.stdin], defines={},
2190+ output = sys.stdout,
2191+ line_endings='\n', marker='#'):
2192+ pp = Preprocessor()
2193+ pp.context.update(defines)
2194+ pp.setLineEndings(line_endings)
2195+ pp.setMarker(marker)
2196+ pp.out = output
2197+ for f in includes:
2198+ pp.do_include(f, False)
2199+
2200+if __name__ == "__main__":
2201+ main()
2202
2203=== added file 'debian/build/config.mk'
2204--- debian/build/config.mk 1970-01-01 00:00:00 +0000
2205+++ debian/build/config.mk 2022-12-07 23:06:52 +0000
2206@@ -0,0 +1,57 @@
2207+#!/usr/bin/make -f
2208+
2209+DISTRIB_VERSION_MAJOR := $(shell lsb_release -s -r | cut -d '.' -f 1)
2210+DISTRIB_VERSION_MINOR := $(shell lsb_release -s -r | cut -d '.' -f 2)
2211+DISTRIB_CODENAME := $(shell lsb_release -s -c)
2212+
2213+include $(CURDIR)/debian/config/branch.mk
2214+-include /usr/share/cdbs/1/rules/buildvars.mk
2215+
2216+# Various build defaults
2217+# 1 = Build crashreporter (if supported)
2218+MOZ_ENABLE_BREAKPAD ?= 0
2219+# 1 = Build without jemalloc suitable for valgrind debugging
2220+MOZ_VALGRIND ?= 0
2221+# 1 = Profile guided build
2222+MOZ_BUILD_PGO ?= 0
2223+# 1 = Build and run the testsuite
2224+MOZ_WANT_UNIT_TESTS ?= 0
2225+# 1 = Turn on debugging bits and disable optimizations
2226+MOZ_DEBUG ?= 0
2227+# 1 = Disable optimizations
2228+MOZ_NO_OPTIMIZE ?= 0
2229+
2230+# The package name
2231+MOZ_PKG_NAME := $(shell dpkg-parsechangelog | sed -n 's/^Source: *\(.*\)$$/\1/ p')
2232+# The binary name to use (derived from the package name by default)
2233+MOZ_APP_NAME ?= $(MOZ_PKG_NAME)
2234+
2235+# Define other variables used throughout the build
2236+MOZ_DEFAULT_APP_NAME ?= $(MOZ_PKG_BASENAME)
2237+
2238+MOZ_FORCE_UNOFFICIAL_BRANDING = 0
2239+
2240+ifeq (1,$(MOZ_VALGRIND))
2241+MOZ_FORCE_UNOFFICIAL_BRANDING = 1
2242+endif
2243+
2244+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
2245+MOZ_BUILD_PGO = 0
2246+MOZ_NO_OPTIMIZE = 1
2247+MOZ_FORCE_UNOFFICIAL_BRANDING = 1
2248+endif
2249+
2250+ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
2251+MOZ_NO_OPTIMIZE = 1
2252+MOZ_DEBUG = 1
2253+MOZ_FORCE_UNOFFICIAL_BRANDING = 1
2254+endif
2255+
2256+ifneq ($(MOZ_APP_NAME),$(MOZ_DEFAULT_APP_NAME))
2257+# If we change MOZ_APP_NAME, don't use official branding
2258+MOZ_FORCE_UNOFFICIAL_BRANDING = 1
2259+endif
2260+
2261+MOZ_LOCALE_PKGS = $(strip $(shell dh_listpackages | grep $(MOZ_PKG_NAME)-locale-))
2262+
2263+MOZ_LOCALES := $(shell sed -n 's/\#.*//;/^$$/d;s/\([^\:]*\)\:\?.*/\1/ p' < $(CURDIR)/debian/config/locales.shipped)
2264
2265=== added file 'debian/build/create-tarball.py'
2266--- debian/build/create-tarball.py 1970-01-01 00:00:00 +0000
2267+++ debian/build/create-tarball.py 2022-12-07 23:06:52 +0000
2268@@ -0,0 +1,334 @@
2269+#!/usr/bin/python
2270+
2271+from __future__ import print_function
2272+from optparse import OptionParser
2273+import os
2274+import os.path
2275+import re
2276+import shutil
2277+import subprocess
2278+import sys
2279+import time
2280+import urllib
2281+import xml.dom.minidom
2282+import json
2283+import tempfile
2284+import select
2285+
2286+def CheckCall(args, cwd=None, quiet=False):
2287+ with open(os.devnull, "w") as devnull:
2288+ p = subprocess.Popen(args, cwd=cwd,
2289+ stdout = devnull if quiet == True else None,
2290+ stderr = devnull if quiet == True else None)
2291+ r = p.wait()
2292+ if r is not 0: raise subprocess.CalledProcessError(r, args)
2293+
2294+def CheckOutput(args, cwd=None):
2295+ p = subprocess.Popen(args, cwd=cwd, stdout=subprocess.PIPE)
2296+ r = p.wait()
2297+ if r is not 0: raise subprocess.CalledProcessError(r, args)
2298+ return p.stdout.read()
2299+
2300+def ensure_cache(repo, cache):
2301+ dest = os.path.join(cache, os.path.basename(repo))
2302+ if os.path.isdir(dest):
2303+
2304+ try:
2305+ CheckCall(['hg', 'summary'], cwd=dest, quiet=True)
2306+ print('Cache location %s exists, using it' % dest)
2307+ CheckCall(['hg', 'pull', repo], cwd=dest)
2308+ CheckCall(['hg', 'update'], cwd=dest)
2309+ return
2310+ except:
2311+ pass
2312+
2313+ if not os.path.isdir(cache):
2314+ os.makedirs(cache)
2315+
2316+ print('Creating cache location %s' % dest)
2317+ CheckCall(['hg', 'clone', repo, dest])
2318+
2319+def do_checkout(source, dest, rev=None):
2320+ dest = os.path.abspath(dest)
2321+ dest_parent = os.path.dirname(dest)
2322+ if dest_parent != '' and not os.path.isdir(dest_parent):
2323+ os.makedirs(dest_parent)
2324+
2325+ CheckCall(['hg', 'clone', source, dest])
2326+
2327+ args = ['hg', 'update']
2328+ if rev != None:
2329+ args.append('-r')
2330+ args.append(rev)
2331+ CheckCall(args, cwd=dest)
2332+
2333+def checkout_source(repo, cache, dest, rev=None):
2334+ print('*** Checking out source from %s%s ***' % (repo, ' using cache from %s' % cache if cache != None else ''))
2335+ local_source = None
2336+ if cache != None:
2337+ ensure_cache(repo, cache)
2338+ local_source = os.path.join(cache, os.path.basename(repo))
2339+ source = repo if local_source == None else local_source
2340+ do_checkout(source, dest, rev=rev)
2341+
2342+def get_setting(settings, name, default=None):
2343+ return settings[name] if name in settings else default
2344+
2345+class ScopedTmpdir:
2346+ def __enter__(self):
2347+ self._tmpdir = tempfile.mkdtemp()
2348+ return self._tmpdir
2349+
2350+ def __exit__(self, type, value, traceback):
2351+ shutil.rmtree(self._tmpdir)
2352+
2353+class ScopedWorkingDirectory:
2354+ def __init__(self, dir):
2355+ self._wd = os.path.abspath(dir)
2356+
2357+ def __enter__(self):
2358+ self._saved_wd = os.getcwd()
2359+ if not os.path.isdir(self._wd):
2360+ os.makedirs(self._wd)
2361+
2362+ os.chdir(self._wd)
2363+
2364+ def __exit__(self, type, value, traceback):
2365+ os.chdir(self._saved_wd)
2366+
2367+class ScopedRename:
2368+ def __init__(self, src, dest):
2369+ self._src = src
2370+ self._dest = dest
2371+
2372+ def __enter__(self):
2373+ os.rename(self._src, self._dest)
2374+
2375+ def __exit__(self, type, value, traceback):
2376+ os.rename(self._dest, self._src)
2377+
2378+class TarballCreator(OptionParser):
2379+ def __init__(self):
2380+ OptionParser.__init__(self, 'usage: %prog [options]')
2381+
2382+ self.add_option('-r', '--repo', dest='repo', help='The remote repository from which to pull the main source')
2383+ self.add_option('-c', '--cache', dest='cache', help='A local cache of the remote repositories')
2384+ self.add_option('-l', '--l10n-base-repo', dest='l10nbase', help='The base directory of the remote repositories to pull l10n data from')
2385+ self.add_option('-v', '--version', dest='version', help='Release version to base the checkout on')
2386+ self.add_option('--build', dest='build', help='Release build to base the checkout on (must be used with --version)')
2387+ self.add_option('-n', '--name', dest='name', help='The package name')
2388+ self.add_option('-b', '--basename', dest='basename', help='The package basename')
2389+ self.add_option('-a', '--application', dest='application', help='The application to build')
2390+
2391+ def run(self):
2392+ (options, args) = self.parse_args()
2393+
2394+ if options.repo == None:
2395+ self.error('Must specify a remote repository')
2396+
2397+ if options.name == None:
2398+ self.error('Must specify a package name')
2399+
2400+ if options.application == None:
2401+ self.error('Must specify an application')
2402+
2403+ if options.build != None and options.version == None:
2404+ self.error('--build must be used with --version')
2405+
2406+ if options.cache != None and not os.path.isabs(options.cache):
2407+ options.cache = os.path.join(os.getcwd(), options.cache)
2408+
2409+ settings = None
2410+ with open('debian/config/tarball.conf', 'r') as fd:
2411+ settings = json.load(fd)
2412+
2413+ repo = options.repo
2414+ cache = options.cache
2415+ version = options.version
2416+ build = options.build
2417+ application = options.application
2418+ l10nbase = options.l10nbase
2419+ name = options.name
2420+ basename = options.basename
2421+ if basename == None:
2422+ basename = name
2423+
2424+ main_rev = None
2425+ locale_revs = {}
2426+
2427+ if version != None:
2428+ if build == None:
2429+ build = 1
2430+ print('*** Determing revisions to use for checkouts ***')
2431+ main_info_url = ('https://ftp.mozilla.org/pub/%s/candidates/%s-candidates/build%s/linux-x86_64/en-US/%s-%s.txt'
2432+ % (basename, version, build, basename, version))
2433+ u = urllib.urlopen(main_info_url)
2434+ for line in u.readlines():
2435+ line = line.strip()
2436+ if not line.startswith(repo):
2437+ continue
2438+ r = re.match('%s/rev/(.*)' % repo, line)
2439+ if r == None:
2440+ print("Badly formatted file '%s'" % main_info_url, file=sys.stderr)
2441+ sys.exit(1)
2442+ main_rev = r.group(1)
2443+ print('Revision to be used for main checkout: %s' % main_rev)
2444+ break
2445+
2446+ if not main_rev:
2447+ print('Failed to determine revision for main checkout', file=sys.stderr)
2448+ sys.exit(1)
2449+
2450+ l10n_info_url = ('https://ftp.mozilla.org/pub/%s/candidates/%s-candidates/build%s/l10n_changesets.txt'
2451+ % (basename, version, build))
2452+ u = urllib.urlopen(l10n_info_url)
2453+ for line in u.readlines():
2454+ line = line.strip()
2455+ if line == '':
2456+ continue
2457+ l = line.split(' ')[0].strip()
2458+ r = line.split(' ')[1].strip()
2459+ print('Revision to be used for %s locale checkout: %s' % (l, r))
2460+ locale_revs[l] = r
2461+
2462+ with ScopedTmpdir() as tmpdir:
2463+ print('*** Using temporary directory %s ***' % tmpdir)
2464+ orig_cwd = os.getcwd()
2465+ with ScopedWorkingDirectory(os.path.join(tmpdir, name)):
2466+
2467+ checkout_source(repo, cache, '', rev=main_rev)
2468+
2469+ with open('SOURCE_CHANGESET', 'w') as fd:
2470+ rev = CheckOutput(['hg', 'parent', '--template={node}'])
2471+ fd.write(rev)
2472+
2473+ l10ndir = 'l10n'
2474+ if not os.path.isdir(l10ndir):
2475+ os.makedirs(l10ndir)
2476+
2477+ checkout_source('https://hg.mozilla.org/build/compare-locales', cache, os.path.join(l10ndir, 'compare-locales'), rev='RELEASE_AUTOMATION')
2478+
2479+ if l10nbase != None:
2480+ got_locales = set()
2481+ shipped_locales = os.path.join(application, 'locales/shipped-locales')
2482+ blacklist_file = get_setting(settings, 'l10n-blacklist')
2483+
2484+ with open(os.path.join(l10ndir, 'changesets'), 'w') as changesets:
2485+ with open(shipped_locales, 'r') as fd:
2486+ for line in fd:
2487+ locale = line.split(' ')[0].strip()
2488+ if locale.startswith('#') or locale in got_locales or locale == 'en-US':
2489+ continue
2490+
2491+ try:
2492+ rev = None
2493+ if main_rev != None:
2494+ if locale not in locale_revs:
2495+ print("Rev for locale '%s' is not present in l10n_changesets.txt" % locale)
2496+ sys.exit(1)
2497+ rev = locale_revs[locale]
2498+ checkout_source(os.path.join(l10nbase, locale), os.path.join(cache, 'l10n') if cache != None else None, 'l10n/' + locale, rev=rev)
2499+
2500+ for line in CheckOutput(['hg', 'tip'], cwd='l10n/' + locale).split('\n'):
2501+ if line.startswith('changeset:'):
2502+ changesets.write('%s %s\n' % (locale, line.split()[1].strip()))
2503+ break
2504+
2505+ got_locales.add(locale)
2506+
2507+ except Exception as e:
2508+ # checkout_locale will throw if the specified revision isn't found
2509+ # In this case, omit it from the tarball
2510+ print('Failed to checkout %s: %s' % (locale, e), file=sys.stderr)
2511+ localedir = os.path.join(l10ndir, locale)
2512+ if os.path.exists(localedir):
2513+ shutil.rmtree(localedir)
2514+
2515+ # When we also use translations from Launchpad, there will be a file
2516+ # containing the additional locales we want to ship (locales.extra??)
2517+ print('*** Checking that required locales are present ***')
2518+
2519+ blacklist = set()
2520+ if blacklist_file:
2521+ with open(os.path.join(orig_cwd, blacklist_file), 'r') as fd:
2522+ for line in fd:
2523+ locale = re.sub(r'([^#]*)#?.*', r'\1', line).strip()
2524+ if locale is '':
2525+ continue
2526+
2527+ blacklist.add(locale)
2528+
2529+ with open(shipped_locales, 'r') as fd:
2530+ for line in fd:
2531+ line = line.strip()
2532+ if line.startswith('#'):
2533+ continue
2534+
2535+ if line == 'en-US':
2536+ continue
2537+
2538+ locale = line.split(' ')[0].strip()
2539+ platforms = line.split(' ')[1:]
2540+
2541+ if locale in blacklist:
2542+ continue
2543+
2544+ if len(platforms) > 0:
2545+ for_linux = False
2546+ for platform in platforms:
2547+ if platform == 'linux':
2548+ for_linux = True
2549+ break
2550+ if not for_linux:
2551+ continue
2552+
2553+ if not locale in got_locales:
2554+ print("Locale %s is missing from the source tarball" % locale)
2555+ sys.exit(1)
2556+
2557+ with open(os.path.join(options.application, 'config/version.txt'), 'r') as vf:
2558+ upstream_version = re.sub(r'~$', '', re.sub(r'([0-9\.]*)(.*)', r'\1~\2', vf.read().strip()))
2559+
2560+ if version == None:
2561+ version = upstream_version
2562+ for line in CheckOutput(['hg', 'tip']).split('\n'):
2563+ if line.startswith('changeset:'):
2564+ rev = line.split()[1].split(':')[0].strip()
2565+ changeset = line.split()[1].split(':')[1].strip()
2566+ break
2567+
2568+ u = urllib.urlopen('%s/pushlog?changeset=%s' % (repo, changeset))
2569+ dom = xml.dom.minidom.parseString(u.read())
2570+ t = time.strptime(dom.getElementsByTagName('updated')[0].firstChild.nodeValue.strip(), '%Y-%m-%dT%H:%M:%SZ')
2571+ version += '~hg%s%s%sr%s' % ('%02d' % t.tm_year, '%02d' % t.tm_mon, '%02d' % t.tm_mday, rev)
2572+ u.close()
2573+ else:
2574+ version = re.sub(r'~$', '', re.sub(r'([0-9\.]*)(.*)', r'\1~\2', version))
2575+ version += '+build%s' % build
2576+ if not version.startswith(upstream_version):
2577+ print("Version '%s' does not match upstream version '%s'" % (version, upstream_version))
2578+ sys.exit(1)
2579+
2580+ print('*** Debian package version is %s' % version)
2581+ print('*** Packing tarball ***')
2582+ with ScopedWorkingDirectory('..'):
2583+ topsrcdir = '%s-%s' % (name, version)
2584+ with ScopedRename(name, topsrcdir):
2585+ args = ['tar', '-jc', '--exclude-vcs']
2586+ for exclude in settings['excludes']:
2587+ args.append('--no-wildcards-match-slash') if exclude['wms'] == False else args.append('--wildcards-match-slash')
2588+ args.append('--exclude')
2589+ args.append(os.path.join(topsrcdir , exclude['path']))
2590+ args.append('-f')
2591+ args.append(os.path.join(orig_cwd, '%s_%s.orig.tar.bz2' % (name, version)))
2592+ for include in settings['includes']:
2593+ args.append(os.path.join(topsrcdir, include))
2594+
2595+ CheckCall(args)
2596+
2597+def main():
2598+ creator = TarballCreator()
2599+ creator.run()
2600+
2601+if __name__ == '__main__':
2602+ main()
2603
2604=== added file 'debian/build/dump-langpack-control-entries.pl'
2605--- debian/build/dump-langpack-control-entries.pl 1970-01-01 00:00:00 +0000
2606+++ debian/build/dump-langpack-control-entries.pl 2022-12-07 23:06:52 +0000
2607@@ -0,0 +1,51 @@
2608+#!/usr/bin/perl
2609+
2610+use strict;
2611+use warnings;
2612+
2613+my $lp_avail_desc;
2614+my $lp_unavail_desc;
2615+
2616+my %all;
2617+my %shipped;
2618+
2619+{
2620+ my $file;
2621+ local $/=undef;
2622+ open($file, "debian/control.langpacks") or die "Couldn't find control.langpacks";
2623+ $lp_avail_desc = <$file>;
2624+
2625+ open($file, "debian/control.langpacks.unavail") or die "Couldn't find control.langpacks.unavail";
2626+ $lp_unavail_desc = <$file>;
2627+}
2628+
2629+open(my $all_file, "debian/config/locales.all") or die "Failed to open debian/config/locales.all";
2630+open(my $shipped_file, "debian/config/locales.shipped") or die "Failed to open debian/config/locales.shipped";
2631+while (<$all_file>) {
2632+ chomp($_);
2633+ /^([^:#]*):([^:]*)$/ && do {
2634+ my $pkgname = $1;
2635+ my $desc = $2;
2636+ if ($desc eq "") { die "Malformed locales.all"; }
2637+ $all{$pkgname} = $desc;
2638+ }
2639+}
2640+
2641+while (<$shipped_file>) {
2642+ chomp($_);
2643+ /^([^:#]*):([^:]*)$/ && do {
2644+ my $locale = $1;
2645+ my $pkgname = $2;
2646+ if ($pkgname eq "") { die "Malformed locales.shipped"; }
2647+ $shipped{$pkgname} = 1;
2648+ }
2649+}
2650+close($all_file);
2651+close($shipped_file);
2652+
2653+foreach my $pkg (sort(keys(%all))) {
2654+ my $entry = exists $shipped{$pkg} ? $lp_avail_desc : $lp_unavail_desc;
2655+ $entry =~ s/\@LANGCODE\@/$pkg/g;
2656+ $entry =~ s/\@LANG\@/$all{$pkg}/g;
2657+ print $entry;
2658+}
2659
2660=== added file 'debian/build/fix-mozinfo-appname.py'
2661--- debian/build/fix-mozinfo-appname.py 1970-01-01 00:00:00 +0000
2662+++ debian/build/fix-mozinfo-appname.py 2022-12-07 23:06:52 +0000
2663@@ -0,0 +1,42 @@
2664+#!/usr/bin/python
2665+
2666+import os
2667+import sys
2668+
2669+class JsonValue:
2670+ """
2671+ A class to serialize Python values into JSON-compatible representations.
2672+ """
2673+ def __init__(self, v):
2674+ if v is not None and not (isinstance(v,str) or isinstance(v,bool) or isinstance(v,int)):
2675+ raise Exception("Unhandled data type: %s" % type(v))
2676+ self.v = v
2677+ def __repr__(self):
2678+ if self.v is None:
2679+ return "null"
2680+ if isinstance(self.v,bool):
2681+ return str(self.v).lower()
2682+ return repr(self.v)
2683+
2684+def jsonify(d):
2685+ """
2686+ Return a JSON string of the dict |d|. Only handles a subset of Python
2687+ value types: bool, str, int, None.
2688+ """
2689+ jd = {}
2690+ for k, v in d.iteritems():
2691+ jd[k] = JsonValue(v)
2692+ return repr(jd)
2693+
2694+if __name__ == '__main__':
2695+ if len(sys.argv) != 3:
2696+ print >>sys.stderr, "Must specify a single file and appname"
2697+
2698+ with open(sys.argv[1], 'r') as f:
2699+ s = eval(f.read(),{'true':True,'false':False,'null':None})
2700+ s['appname'] = sys.argv[2]
2701+
2702+ with open(sys.argv[1] + '.tmp', 'w') as g:
2703+ g.write(jsonify(s))
2704+
2705+ os.rename(sys.argv[1] + '.tmp', sys.argv[1])
2706
2707=== added file 'debian/build/keepalive-wrapper.py'
2708--- debian/build/keepalive-wrapper.py 1970-01-01 00:00:00 +0000
2709+++ debian/build/keepalive-wrapper.py 2022-12-07 23:06:52 +0000
2710@@ -0,0 +1,91 @@
2711+#!/usr/bin/python
2712+
2713+import datetime
2714+import os
2715+import select
2716+import subprocess
2717+import sys
2718+import thread
2719+
2720+proc = None
2721+
2722+def run_child(args, fd):
2723+ global proc
2724+
2725+ f = os.fdopen(fd, 'w')
2726+ proc = subprocess.Popen(args)
2727+
2728+ # Tell main thread to continue
2729+ f.write('a')
2730+ f.flush()
2731+
2732+ f.write(str(proc.wait()))
2733+
2734+def main():
2735+ global proc
2736+
2737+ def usage():
2738+ sys.stderr.write('Usage: %s <max_minutes> <cmd> [<args> ..]\n' % sys.argv[0])
2739+ sys.exit(1)
2740+
2741+ if len(sys.argv) < 3:
2742+ usage()
2743+
2744+ try:
2745+ max_mins = int(sys.argv[1])
2746+ except:
2747+ usage()
2748+
2749+ max_days = max_mins / (24 * 60)
2750+ max_seconds = (max_mins % (max_days * 24 * 60) if max_days > 0 else max_mins) * 60
2751+
2752+ start = datetime.datetime.now()
2753+
2754+ (rfd, wfd) = os.pipe()
2755+ f = os.fdopen(rfd, 'r')
2756+ thread.start_new_thread(run_child, (sys.argv[2:], wfd))
2757+
2758+ # Make sure that we have a process before continuing
2759+ f.read(1)
2760+
2761+ target_timeout = 60
2762+
2763+ last_target_timeout = target_timeout
2764+ timeout = target_timeout
2765+ terminated = False
2766+ laststart = None
2767+
2768+ while True:
2769+ if target_timeout != last_target_timeout:
2770+ last_target_timeout = target_timeout
2771+ timeout = target_timeout
2772+ elif laststart is not None:
2773+ now = datetime.datetime.now()
2774+ timeout = timeout - (((now - laststart).total_seconds() - target_timeout) / 4)
2775+ laststart = datetime.datetime.now()
2776+
2777+ (r, w, x) = select.select([f], [], [], timeout)
2778+ if len(r) != 0:
2779+ sys.exit(int(f.read()))
2780+
2781+ duration = datetime.datetime.now() - start
2782+
2783+ if not terminated:
2784+ sys.stdout.write('*** KEEP ALIVE MARKER ***\n')
2785+ sys.stdout.write('Total duration: %s\n' % str(duration))
2786+ sys.stdout.flush()
2787+
2788+ if (duration.days >= max_days and duration.seconds >= max_seconds) or terminated:
2789+ if not terminated:
2790+ sys.stderr.write('Process max time exceeded, attempting to terminate\n')
2791+ sys.stderr.flush()
2792+ proc.terminate()
2793+ terminated = True
2794+ target_timeout = 15
2795+ else:
2796+ sys.stderr.write('Attempting to kill process\n')
2797+ sys.stderr.flush()
2798+ proc.kill()
2799+
2800+if __name__ == '__main__':
2801+ main()
2802
2803=== added file 'debian/build/refresh-supported-locales.pl'
2804--- debian/build/refresh-supported-locales.pl 1970-01-01 00:00:00 +0000
2805+++ debian/build/refresh-supported-locales.pl 2022-12-07 23:06:52 +0000
2806@@ -0,0 +1,156 @@
2807+#!/usr/bin/perl
2808+
2809+use strict;
2810+use warnings;
2811+
2812+my $moz_supported_file;
2813+my $lpom_dir;
2814+
2815+my %blacklist;
2816+my %locale2pkgname;
2817+my %languages;
2818+
2819+my %pkglist;
2820+
2821+my $file;
2822+
2823+while (@ARGV) {
2824+ my $arg = shift(@ARGV);
2825+ if ($arg eq '-s') {
2826+ $moz_supported_file = shift(@ARGV);
2827+ } elsif ($arg eq '-l') {
2828+ $lpom_dir = shift(@ARGV);
2829+ } else {
2830+ die "Unknown argument '$arg'";
2831+ }
2832+}
2833+
2834+(defined($moz_supported_file)) || die "Need to specify a supported language list";
2835+
2836+if (defined($lpom_dir)) {
2837+ my $lang_file = "$lpom_dir/maps/languages";
2838+ my $map_file = "$lpom_dir/maps/locale2pkgname";
2839+ my $variant_file = "$lpom_dir/maps/variants";
2840+
2841+ open($file, $lang_file) or die "Failed to open $lang_file";
2842+ while (<$file>) {
2843+ chomp($_);
2844+ my $langcode = my $lang = $_;
2845+ $langcode =~ s/([^:]*):*([^:]*)/$1/;
2846+ $lang =~ s/([^:]*):*([^:]*)/$2/;
2847+ if ($lang ne "") { $languages{$langcode} = $lang; }
2848+ }
2849+ close($file);
2850+
2851+ open($file, $map_file) or die "Failed to open $map_file";
2852+ while (<$file>) {
2853+ chomp($_);
2854+ my $langcode = my $pkgname = $_;
2855+ $langcode =~ s/([^:]*):*([^:]*)/$1/;
2856+ $pkgname =~ s/([^:]*):*([^:]*)/$2/;
2857+ if ($pkgname ne "") { $locale2pkgname{$langcode} = $pkgname; }
2858+ }
2859+ close($file);
2860+
2861+ open($file, $variant_file) or die "Failed to open $variant_file";
2862+ while (<$file>) {
2863+ chomp($_);
2864+ my $langcode = my $lang = $_;
2865+ $langcode =~ s/([^:]*):*([^:]*)/$1/;
2866+ $lang =~ s/([^:]*):*([^:]*)/$2/;
2867+ if ($lang ne "") { $languages{$langcode} = $lang; }
2868+ }
2869+ close($file);
2870+}
2871+
2872+if (-e "debian/config/locales.all") {
2873+ open($file, "debian/config/locales.all");
2874+ while (<$file>) {
2875+ $_ =~ s/#.*//; s/\s*$//;
2876+ /^$/ || do {
2877+ chomp($_);
2878+ my $pkgname = my $lang = $_;
2879+ $pkgname =~ s/([^:]*):*([^:]*)/$1/;
2880+ $lang =~ s/([^:]*):*([^:]*)/$2/;
2881+ $pkglist{$pkgname} = 1;
2882+ if ($lang ne "") { $languages{$pkgname} = $lang; }
2883+ }
2884+ }
2885+}
2886+
2887+if (-e "debian/config/locales.shipped") {
2888+ open($file, "debian/config/locales.shipped");
2889+ while (<$file>) {
2890+ $_ =~ s/#.*//; s/\s*$//;
2891+ /^$/ || do {
2892+ chomp($_);
2893+ my $langcode = my $pkgname = $_;
2894+ $langcode =~ s/([^:]*):*([^:]*)/$1/;
2895+ $pkgname =~ s/([^:]*):*([^:]*)/$2/;
2896+ if ($pkgname eq "") { die "Malformed locales.shipped file"; }
2897+ if (not exists $pkglist{$pkgname}) {
2898+ die "WTF? Language in locales.shipped is not present in locales.all. Did we produce broken output last time?";
2899+ }
2900+ $locale2pkgname{lc($langcode)} = $pkgname;
2901+ }
2902+ }
2903+ close($file);
2904+}
2905+
2906+if (-e "debian/config/locales.blacklist") {
2907+ open($file, "debian/config/locales.blacklist");
2908+ while (<$file>) {
2909+ $_ =~ s/#.*//; s/\s*$//;
2910+ /^$/ || do {
2911+ chomp($_);
2912+ $blacklist{$_} = 1;
2913+ }
2914+ }
2915+ close($file);
2916+}
2917+
2918+my $have_language = 0;
2919+
2920+open($file, $moz_supported_file) or die "Failed to open $moz_supported_file";
2921+open(my $outfile, ">debian/config/locales.shipped");
2922+while (<$file>) {
2923+ chomp($_);
2924+ my $langcode = my $platforms = $_;
2925+ $langcode =~ s/^([[:alnum:]\-]*)[[:space:]]*(.*)/$1/;
2926+ $platforms =~ s/^([[:alnum:]\-]*)[[:space:]]*(.*)/$2/;
2927+ next if (($langcode eq "en-US") ||
2928+ (($platforms ne "") && (rindex($platforms, "linux") eq -1)) ||
2929+ (exists $blacklist{$langcode}));
2930+ my $llangcode = lc($langcode);
2931+ my $pkgname = $llangcode;
2932+ if (exists $locale2pkgname{$llangcode}) { $pkgname = $locale2pkgname{$llangcode}; }
2933+ if (not exists $languages{$pkgname}) {
2934+ if ($pkgname eq $llangcode) { $pkgname =~ s/\-.*//; }
2935+ if (not exists $languages{$pkgname}) { die "No description for $pkgname"; }
2936+ }
2937+ if ($have_language eq 0) {
2938+ print $outfile "# List of shipped locales. This list is automatically generated. Do not edit by hand\n";
2939+ }
2940+ $have_language = 1;
2941+ print $outfile "$langcode:$pkgname\n";
2942+ $pkglist{$pkgname} = 1;
2943+}
2944+
2945+if ($have_language eq 0) {
2946+ print $outfile "# Placeholder file for the list of shipped languages. Do not delete";
2947+}
2948+close($file);
2949+close($outfile);
2950+
2951+open($outfile, ">debian/config/locales.all");
2952+my @completelist = keys(%pkglist);
2953+if (scalar(@completelist) gt 0) {
2954+ @completelist = sort(@completelist);
2955+ print $outfile "# List of all language packs, past and present. Please don't delete any entries from this file\n";
2956+ foreach my $lang (@completelist) {
2957+ if (not exists $languages{$lang}) { die "How on earth did we get here?"; }
2958+ my $desc = $languages{$lang};
2959+ print $outfile "$lang:$desc\n";
2960+ }
2961+} else { print $outfile "# Placeholder file for the list of all language packs. Do not delete"; }
2962+close($outfile);
2963
2964=== added file 'debian/build/rules.mk'
2965--- debian/build/rules.mk 1970-01-01 00:00:00 +0000
2966+++ debian/build/rules.mk 2022-12-07 23:06:52 +0000
2967@@ -0,0 +1,423 @@
2968+#!/usr/bin/make -f
2969+
2970+# We need this to execute before the debian/control target gets called
2971+# and before patches are unapplied
2972+clean::
2973+ifneq (1, $(MOZ_DISABLE_CLEAN_CHECKS))
2974+ cp debian/control debian/control.old
2975+ touch debian/control.in
2976+else
2977+ touch debian/control
2978+endif
2979+
2980+-include /usr/share/cdbs/1/rules/debhelper.mk
2981+-include /usr/share/cdbs/1/rules/patchsys-quilt.mk
2982+-include /usr/share/cdbs/1/class/makefile.mk
2983+
2984+MOZ_OBJDIR := $(DEB_BUILDDIR)/obj-$(DEB_HOST_GNU_TYPE)
2985+MOZ_DISTDIR := $(MOZ_OBJDIR)/dist
2986+
2987+ifeq (,$(MOZ_APP))
2988+$(error "Need to set MOZ_APP")
2989+endif
2990+ifeq (,$(MOZ_APP_NAME))
2991+$(error "Need to set MOZ_APP_NAME")
2992+endif
2993+ifeq (,$(MOZ_PKG_NAME))
2994+$(error "Need to set MOZ_PKG_NAME")
2995+endif
2996+ifeq (,$(MOZ_PKG_BASENAME))
2997+$(error "Need to set MOZ_PKG_BASENAME")
2998+endif
2999+ifeq (,$(MOZ_BRANDING_OPTION))
3000+$(error "Need to set MOZ_BRANDING_OPTION")
3001+endif
3002+ifeq (,$(MOZ_BRANDING_DIR))
3003+$(error "Need to set MOZ_BRANDING_DIR")
3004+endif
3005+
3006+DEB_MAKE_MAKEFILE := client.mk
3007+# Without this, CDBS passes CFLAGS and CXXFLAGS options to client.mk, which breaks the build
3008+DEB_MAKE_EXTRA_ARGS :=
3009+# These normally come from autotools.mk, which we no longer include (because we
3010+# don't want to run configure)
3011+DEB_MAKE_INSTALL_TARGET := install DESTDIR=$(CURDIR)/debian/tmp
3012+DEB_MAKE_CLEAN_TARGET := cleansrcdir
3013+# Don't save debug symbols in firefox-dbg (rely on pkg-create-dbgsym to create
3014+# ddeb packages for us). This is needed as long as there is a firefox-dbg
3015+# transitional package
3016+DEB_DH_STRIP_ARGS := --dbg-package=$(MOZ_PKG_NAME)-dbg
3017+# We don't want build-tree/mozilla/README to be shipped as a doc
3018+DEB_INSTALL_DOCS_ALL := $(NULL)
3019+# scour breaks the testsuite
3020+DEB_DH_SCOUR_ARGS := -N$(MOZ_PKG_NAME)-testsuite
3021+# Stop the buildd from timing out during long links
3022+MAKE := python $(CURDIR)/debian/build/keepalive-wrapper.py 1440 $(MAKE)
3023+
3024+MOZ_VERSION := $(shell cat $(DEB_SRCDIR)/$(MOZ_APP)/config/version.txt)
3025+MOZ_LIBDIR := usr/lib/$(MOZ_APP_NAME)
3026+MOZ_INCDIR := usr/include/$(MOZ_APP_NAME)
3027+MOZ_IDLDIR := usr/share/idl/$(MOZ_APP_NAME)
3028+MOZ_SDKDIR := usr/lib/$(MOZ_APP_NAME)-devel
3029+MOZ_ADDONDIR := usr/lib/$(MOZ_APP_NAME)-addons
3030+
3031+MOZ_APP_SUBDIR ?=
3032+
3033+# If we change MOZ_APP_NAME, we want to set the profile directory
3034+# to match
3035+ifneq (,$(MOZ_VENDOR))
3036+PROFILE_BASE = $(shell echo $(MOZ_VENDOR) | tr A-Z a-z)/
3037+endif
3038+ifneq ($(MOZ_APP_NAME),$(MOZ_DEFAULT_APP_NAME))
3039+MOZ_APP_PROFILE := .$(PROFILE_BASE)$(MOZ_APP_NAME)
3040+endif
3041+
3042+DEB_AUTO_UPDATE_DEBIAN_CONTROL = no
3043+
3044+VIRTENV_PATH := $(CURDIR)/$(MOZ_OBJDIR)/_virtualenv
3045+MOZ_PYTHON := $(VIRTENV_PATH)/bin/python
3046+DISTRIB := $(shell lsb_release -i -s)
3047+
3048+CFLAGS := -g
3049+CXXFLAGS := -g
3050+LDFLAGS := $(shell echo $$LDFLAGS | sed -e 's/-Wl,-Bsymbolic-functions//')
3051+
3052+ifneq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
3053+MOZ_WANT_UNIT_TESTS = 0
3054+endif
3055+
3056+include $(CURDIR)/debian/build/testsuite.mk
3057+
3058+# enable the crash reporter only on i386, amd64 and armel
3059+ifeq (,$(filter i386 amd64 armhf,$(DEB_HOST_ARCH)))
3060+MOZ_ENABLE_BREAKPAD = 0
3061+endif
3062+
3063+# powerpc sucks
3064+ifneq (,$(filter powerpc,$(DEB_HOST_ARCH)))
3065+MOZ_WANT_UNIT_TESTS = 0
3066+endif
3067+
3068+# Ensure the crash reporter gets disabled for derivatives
3069+ifneq (Ubuntu, $(DISTRIB))
3070+MOZ_ENABLE_BREAKPAD = 0
3071+endif
3072+
3073+MOZ_DISPLAY_NAME = $(shell cat $(DEB_SRCDIR)/$(MOZ_BRANDING_DIR)/locales/en-US/brand.properties \
3074+ | grep brandShortName | sed -e 's/brandShortName\=//')
3075+
3076+ifeq (,$(filter 4.7, $(shell $(CC) -dumpversion)))
3077+MOZ_BUILD_PGO = 0
3078+endif
3079+
3080+ifeq (,$(filter i386 amd64, $(DEB_HOST_ARCH)))
3081+MOZ_BUILD_PGO = 0
3082+endif
3083+
3084+export SHELL=/bin/bash
3085+export NO_PNG_PKG_MANGLE=1
3086+export LDFLAGS
3087+export DEB_BUILD_HARDENING=1
3088+ifeq (Ubuntu, $(DISTRIB))
3089+export MOZ_UA_VENDOR=Ubuntu
3090+endif
3091+
3092+ifeq (linux-gnu, $(DEB_HOST_GNU_SYSTEM))
3093+LANGPACK_DIR := linux-$(DEB_HOST_GNU_CPU)/xpi
3094+else
3095+LANGPACK_DIR := $(DEB_HOST_GNU_SYSTEM)-$(DEB_HOST_GNU_CPU)/xpi
3096+endif
3097+
3098+MOZ_PKG_SUPPORT_SUGGESTS ?=
3099+
3100+# Defines used for the Mozilla text preprocessor
3101+MOZ_DEFINES += -DMOZ_LIBDIR="$(MOZ_LIBDIR)" -DMOZ_APP_NAME="$(MOZ_APP_NAME)" \
3102+ -DMOZ_INCDIR="$(MOZ_INCDIR)" -DMOZ_IDLDIR="$(MOZ_IDLDIR)" -DMOZ_VERSION="$(MOZ_VERSION)" -DDEB_HOST_ARCH="$(DEB_HOST_ARCH)" \
3103+ -DMOZ_DISPLAY_NAME="$(MOZ_DISPLAY_NAME)" -DMOZ_PKG_NAME="$(MOZ_PKG_NAME)" \
3104+ -DMOZ_BRANDING_OPTION="$(MOZ_BRANDING_OPTION)" -DTOPSRCDIR="$(CURDIR)" -DDEB_HOST_GNU_TYPE="$(DEB_HOST_GNU_TYPE)" \
3105+ -DMOZ_ADDONDIR="$(MOZ_ADDONDIR)" -DMOZ_SDKDIR="$(MOZ_SDKDIR)" -DMOZ_DISTDIR="$(MOZ_DISTDIR)" -DMOZ_UPDATE_CHANNEL="$(CHANNEL)" \
3106+ -DMOZ_OBJDIR="$(MOZ_OBJDIR)" -DDEB_BUILDDIR="$(DEB_BUILDDIR)" -DMOZ_PYTHON="$(MOZ_PYTHON)" \
3107+ -DMOZ_DEFAULT_APP_NAME="$(MOZ_DEFAULT_APP_NAME)" -DDISTRIB_VERSION="$(DISTRIB_VERSION_MAJOR)$(DISTRIB_VERSION_MINOR)"
3108+
3109+ifneq (,$(MOZ_APP_PROFILE))
3110+MOZ_DEFINES += -DMOZ_APP_PROFILE="$(MOZ_APP_PROFILE)"
3111+endif
3112+ifeq (1, $(MOZ_ENABLE_BREAKPAD))
3113+MOZ_DEFINES += -DMOZ_ENABLE_BREAKPAD
3114+endif
3115+ifeq (1, $(MOZ_VALGRIND))
3116+MOZ_DEFINES += -DMOZ_VALGRIND
3117+endif
3118+ifeq (1,$(MOZ_NO_OPTIMIZE))
3119+MOZ_DEFINES += -DMOZ_NO_OPTIMIZE
3120+endif
3121+ifeq (1,$(MOZ_WANT_UNIT_TESTS))
3122+MOZ_DEFINES += -DMOZ_WANT_UNIT_TESTS
3123+endif
3124+ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
3125+MOZ_DEFINES += -DDEB_BUILD_GNU_TYPE="$(DEB_BUILD_GNU_TYPE)"
3126+endif
3127+ifeq (1,$(MOZ_BUILD_PGO))
3128+MOZ_DEFINES += -DMOZ_BUILD_PGO
3129+endif
3130+ifeq (1,$(MOZ_DEBUG))
3131+MOZ_DEFINES += -DMOZ_DEBUG
3132+endif
3133+ifeq (official, $(MOZ_BRANDING))
3134+MOZ_DEFINES += -DMOZ_OFFICIAL_BRANDING
3135+endif
3136+ifneq (,$(DEB_PARALLEL_JOBS))
3137+MOZ_DEFINES += -DDEB_PARALLEL_JOBS=$(DEB_PARALLEL_JOBS)
3138+endif
3139+
3140+MOZ_EXECUTABLES_$(MOZ_PKG_NAME) += $(MOZ_LIBDIR)/$(MOZ_PKG_BASENAME).sh \
3141+ $(NULL)
3142+
3143+pkgname_subst_files = \
3144+ debian/config/mozconfig \
3145+ $(MOZ_PKGNAME_SUBST_FILES) \
3146+ $(NULL)
3147+
3148+$(foreach pkg,$(DEB_ALL_PACKAGES), \
3149+ $(foreach e,install dirs links manpages postinst preinst postrm prerm lintian-overrides,\
3150+ $(if $(wildcard debian/$(subst $(MOZ_PKG_NAME),$(MOZ_PKG_BASENAME),$(pkg)).$(e).in),\
3151+ $(eval pkgname_subst_files += debian/$(pkg).$(e)))))
3152+
3153+appname_subst_files = \
3154+ debian/$(MOZ_APP_NAME).desktop \
3155+ $(MOZ_APPNAME_SUBST_FILES) \
3156+ $(NULL)
3157+
3158+pkgconfig_files = \
3159+ $(MOZ_PKGCONFIG_FILES) \
3160+ $(NULL)
3161+
3162+#debian/tests/control: debian/tests/control.in
3163+# sed -e 's/@MOZ_PKG_NAME@/$(MOZ_PKG_NAME)/g' < debian/tests/control.in > debian/tests/control
3164+
3165+debian/control:: debian/control.in debian/control.langpacks debian/control.langpacks.unavail debian/config/locales.shipped debian/config/locales.all
3166+ @echo ""
3167+ @echo "*****************************"
3168+ @echo "* Refreshing debian/control *"
3169+ @echo "*****************************"
3170+ @echo ""
3171+
3172+ cp debian/control.in debian/control.tmp
3173+ perl debian/build/dump-langpack-control-entries.pl >> debian/control.tmp
3174+ sed -e 's/@MOZ_PKG_NAME@/$(MOZ_PKG_NAME)/g' < debian/control.tmp > debian/control
3175+ rm -f debian/control.tmp
3176+
3177+ sed -i -e 's/@MOZ_LOCALE_PKGS@/$(foreach p,$(MOZ_LOCALE_PKGS),$(p) \(= $${binary:Version}\),)/' debian/control
3178+
3179+$(pkgname_subst_files): $(foreach file,$(pkgname_subst_files),$(subst $(MOZ_PKG_NAME),$(MOZ_PKG_BASENAME),$(file).in))
3180+ PYTHONDONTWRITEBYTECODE=1 python $(CURDIR)/debian/build/Preprocessor.py -Fsubstitution --marker="%%" $(MOZ_DEFINES) $(CURDIR)/$(subst $(MOZ_PKG_NAME),$(MOZ_PKG_BASENAME),$@.in) > $(CURDIR)/$@
3181+
3182+$(appname_subst_files): $(foreach file,$(appname_subst_files),$(subst $(MOZ_APP_NAME),$(MOZ_PKG_BASENAME),$(file).in))
3183+ PYTHONDONTWRITEBYTECODE=1 python $(CURDIR)/debian/build/Preprocessor.py -Fsubstitution --marker="%%" $(MOZ_DEFINES) $(CURDIR)/$(subst $(MOZ_APP_NAME),$(MOZ_PKG_BASENAME),$@.in) > $(CURDIR)/$@
3184+
3185+%.pc: WCHAR_CFLAGS = $(shell cat $(MOZ_OBJDIR)/config/autoconf.mk | grep WCHAR_CFLAGS | sed 's/^[^=]*=[[:space:]]*\(.*\)$$/\1/')
3186+%.pc: %.pc.in debian/stamp-makefile-build
3187+ PYTHONDONTWRITEBYTECODE=1 python $(CURDIR)/debian/build/Preprocessor.py -Fsubstitution --marker="%%" $(MOZ_DEFINES) -DWCHAR_CFLAGS="$(WCHAR_CFLAGS)" $(CURDIR)/$< > $(CURDIR)/$@
3188+
3189+make-buildsymbols: debian/stamp-makebuildsymbols
3190+debian/stamp-makebuildsymbols: debian/stamp-makefile-build
3191+ $(MAKE) -C $(MOZ_OBJDIR) buildsymbols MOZ_SYMBOLS_EXTRA_BUILDID=$(shell date -d "`dpkg-parsechangelog | grep Date: | sed -e 's/^Date: //'`" +%y%m%d%H%M%S)-$(DEB_HOST_GNU_CPU)
3192+ @touch $@
3193+
3194+make-testsuite: debian/stamp-maketestsuite
3195+debian/stamp-maketestsuite: debian/stamp-makefile-build
3196+ifneq ($(MOZ_APP_NAME),$(MOZ_DEFAULT_APP_NAME))
3197+ PYTHONDONTWRITEBYTECODE=1 python $(CURDIR)/debian/build/fix-mozinfo-appname.py $(MOZ_OBJDIR)/mozinfo.json $(MOZ_DEFAULT_APP_NAME)
3198+endif
3199+ $(MAKE) -C $(MOZ_OBJDIR) package-tests
3200+ifneq (,$(wildcard debian/testing/extra))
3201+ cp -r debian/testing/extra debian/testing/extra-stage
3202+ mkdir -p debian/testing/extra-stage/xpcshell/package-tests/data
3203+ cp debian/config/locales.shipped debian/testing/extra-stage/xpcshell/package-tests/data
3204+ cd debian/testing/extra-stage; \
3205+ zip -rq9D $(CURDIR)/debian/testing/extra.test.zip *
3206+endif
3207+ @touch $@
3208+
3209+install-testsuite: debian/stamp-installtestsuite
3210+debian/stamp-installtestsuite: debian/stamp-maketestsuite debian/stamp-makefile-install
3211+ install $(MOZ_DISTDIR)/bin/OCSPStaplingServer debian/tmp/$(MOZ_LIBDIR)
3212+ install $(MOZ_DISTDIR)/bin/xpcshell debian/tmp/$(MOZ_LIBDIR)
3213+ install $(MOZ_DISTDIR)/bin/components/httpd.js debian/tmp/$(MOZ_LIBDIR)/components
3214+ install $(MOZ_DISTDIR)/bin/components/httpd.manifest debian/tmp/$(MOZ_LIBDIR)/components
3215+ install $(MOZ_DISTDIR)/bin/components/test_necko.xpt debian/tmp/$(MOZ_LIBDIR)/components
3216+ install -d debian/tmp/$(MOZ_LIBDIR)/testing
3217+ install $(MOZ_DISTDIR)/$(MOZ_APP_NAME)-$(MOZ_VERSION).en-US.linux-*.tests.zip debian/tmp/$(MOZ_LIBDIR)/testing
3218+ @touch $@
3219+
3220+$(VIRTENV_PATH)/bin/compare-locales:
3221+ cd $(CURDIR)/l10n/compare-locales; $(MOZ_PYTHON) $(CURDIR)/l10n/compare-locales/setup.py install --old-and-unmanageable
3222+
3223+make-langpack-xpis: $(VIRTENV_PATH)/bin/compare-locales $(foreach locale,$(MOZ_LOCALES),debian/stamp-make-langpack-xpi-$(locale))
3224+debian/stamp-make-langpack-xpi-%:
3225+ @echo ""
3226+ @echo ""
3227+ @echo "* Building language pack xpi for $*"
3228+ @echo ""
3229+
3230+ rm -rf $(CURDIR)/debian/l10n-mergedirs/$*
3231+ mkdir -p $(CURDIR)/debian/l10n-mergedirs/$*
3232+
3233+ export PATH=$(VIRTENV_PATH)/bin/:$$PATH ; \
3234+ cd $(MOZ_OBJDIR)/$(MOZ_APP)/locales ; \
3235+ $(MAKE) merge-$* LOCALE_MERGEDIR=$(CURDIR)/debian/l10n-mergedirs/$* || exit 1 ; \
3236+ $(MAKE) langpack-$* LOCALE_MERGEDIR=$(CURDIR)/debian/l10n-mergedirs/$* || exit 1;
3237+ @touch $@
3238+
3239+#common-build-arch:: make-langpack-xpis $(pkgconfig_files) make-testsuite run-tests
3240+common-build-arch:: make-langpack-xpis $(pkgconfig_files)
3241+
3242+install/$(MOZ_PKG_NAME)::
3243+ @echo "Adding suggests / recommends on support packages"
3244+ echo "$(MOZ_PKG_SUPPORT_SUGGESTS)" | perl -0 -ne 's/[ \t\n]+/ /g; /\w/ and print "support:Suggests=$$_\n"' >> debian/$(MOZ_PKG_NAME).substvars
3245+ echo "$(MOZ_PKG_SUPPORT_RECOMMENDS)" | perl -0 -ne 's/[ \t\n]+/ /g; /\w/ and print "support:Recommends=$$_\n"' >> debian/$(MOZ_PKG_NAME).substvars
3246+
3247+ifneq ($(MOZ_PKG_NAME),$(MOZ_APP_NAME))
3248+install/%::
3249+ @echo "Adding conflicts / provides for renamed package"
3250+ echo "app:Conflicts=$(subst $(subst $(MOZ_APP_NAME),,$(MOZ_PKG_NAME)),,$*)" >> debian/$*.substvars
3251+ echo "app:Provides=$(subst $(subst $(MOZ_APP_NAME),,$(MOZ_PKG_NAME)),,$*)" >> debian/$*.substvars
3252+endif
3253+
3254+common-install-arch common-install-indep::
3255+ $(foreach dir,$(MOZ_LIBDIR) $(MOZ_INCDIR) $(MOZ_IDLDIR) $(MOZ_SDKDIR), \
3256+ if [ -d debian/tmp/$(dir)-$(MOZ_VERSION) ]; \
3257+ then \
3258+ mv debian/tmp/$(dir)-$(MOZ_VERSION) debian/tmp/$(dir); \
3259+ fi; )
3260+
3261+#common-install-arch:: install-testsuite
3262+
3263+common-binary-arch:: make-buildsymbols
3264+
3265+binary-install/$(MOZ_PKG_NAME)::
3266+ install -m 0644 $(CURDIR)/debian/apport/blacklist $(CURDIR)/debian/$(MOZ_PKG_NAME)/etc/apport/blacklist.d/$(MOZ_PKG_NAME)
3267+ install -m 0644 $(CURDIR)/debian/apport/native-origins $(CURDIR)/debian/$(MOZ_PKG_NAME)/etc/apport/native-origins.d/$(MOZ_PKG_NAME)
3268+
3269+$(patsubst %,binary-post-install/%,$(MOZ_LOCALE_PKGS)):: binary-post-install/%: install-langpack-xpis-%
3270+
3271+binary-post-install/$(MOZ_PKG_NAME)-dev::
3272+ rm -f debian/$(MOZ_PKG_NAME)-dev/$(MOZ_INCDIR)/nspr/md/_linux.cfg
3273+ dh_link -p$(MOZ_PKG_NAME)-dev $(MOZ_INCDIR)/nspr/prcpucfg.h $(MOZ_INCDIR)/nspr/md/_linux.cfg
3274+
3275+$(patsubst %,binary-post-install/%,$(DEB_ALL_PACKAGES)) :: binary-post-install/%:
3276+ find debian/$(cdbs_curpkg) -name .mkdir.done -delete
3277+
3278+define locales_for_langpack
3279+$(strip $(if $(filter $(MOZ_PKG_NAME),$(1)),\
3280+ en-US,\
3281+ $(shell grep $(subst $(MOZ_PKG_NAME)-locale-,,$(1))$$ debian/config/locales.shipped | sed -n 's/\([^\:]*\)\:\?.*/\1/ p')))
3282+endef
3283+
3284+install-langpack-xpis-%:
3285+ @echo ""
3286+ @echo "Installing language pack xpis for $*"
3287+ dh_installdirs -p$* $(MOZ_ADDONDIR)/extensions
3288+ $(foreach lang,$(call locales_for_langpack,$*), \
3289+ id=`PYTHONDONTWRITEBYTECODE=1 python $(CURDIR)/debian/build/xpi-id.py $(CURDIR)/$(MOZ_DISTDIR)/$(LANGPACK_DIR)/$(MOZ_APP_NAME)-$(MOZ_VERSION).$(lang).langpack.xpi 2>/dev/null`; \
3290+ install -m 0644 $(CURDIR)/$(MOZ_DISTDIR)/$(LANGPACK_DIR)/$(MOZ_APP_NAME)-$(MOZ_VERSION).$(lang).langpack.xpi \
3291+ $(CURDIR)/debian/$*/$(MOZ_ADDONDIR)/extensions/$$id.xpi;)
3292+
3293+$(patsubst %,binary-fixup/%,$(DEB_ALL_PACKAGES)) :: binary-fixup/%:
3294+ find debian/$(cdbs_curpkg) -type f -perm -5 \( -name '*.zip' -or -name '*.xml' -or -name '*.js' -or -name '*.manifest' -or -name '*.xpt' \) -print0 2>/dev/null | xargs -0r chmod 644
3295+ $(foreach f,$(call cdbs_expand_curvar,MOZ_EXECUTABLES),chmod a+x debian/$(cdbs_curpkg)/$(f);)
3296+
3297+binary-predeb/$(MOZ_PKG_NAME)::
3298+ $(foreach lib,libsoftokn3.so libfreebl3.so libnssdbm3.so, \
3299+ LD_LIBRARY_PATH=debian/$(MOZ_PKG_NAME)/$(MOZ_LIBDIR):$$LD_LIBRARY_PATH \
3300+ $(MOZ_DISTDIR)/bin/shlibsign -v -i debian/$(MOZ_PKG_NAME)/$(MOZ_LIBDIR)/$(lib);)
3301+
3302+mozconfig: debian/config/mozconfig
3303+ cp $< $@
3304+
3305+define cmp_auto_generated_file
3306+@if ! cmp -s $(1) $(1).old; then \
3307+ echo ""; \
3308+ diff -Nurp $(1).old $(1); \
3309+ echo ""; \
3310+ echo "****************************************************************************"; \
3311+ echo "* An automatically generated file is out of date and needs to be refreshed *"; \
3312+ echo "****************************************************************************"; \
3313+ echo ""; \
3314+ echo "$(1) is out of date. Please run \"debian/rules $(firstword $(2) $(1))\" in VCS"; \
3315+ echo ""; \
3316+ rm -f $(1).old; \
3317+ exit 1; \
3318+fi
3319+rm -f $(1).old
3320+endef
3321+
3322+pre-build::
3323+ cp debian/config/locales.shipped debian/config/locales.shipped.old
3324+pre-build:: debian/config/locales.shipped $(pkgname_subst_files) $(appname_subst_files) mozconfig
3325+ $(call cmp_auto_generated_file,debian/config/locales.shipped,refresh-supported-locales)
3326+
3327+EXTRACT_TARBALL = $(firstword $(shell TMPDIR=`mktemp -d`; tar -jxf $(1) -C $$TMPDIR > /dev/null 2>&1; echo $$TMPDIR/`ls $$TMPDIR/ | head -n1`))
3328+
3329+ifdef LANGPACK_O_MATIC
3330+refresh-supported-locales:: LPOM_OPT = -l $(LANGPACK_O_MATIC)
3331+endif
3332+refresh-supported-locales:: EXTRACTED := $(if $(wildcard $(MOZ_APP)/locales/shipped-locales),,$(call EXTRACT_TARBALL,$(TARBALL)))
3333+refresh-supported-locales:: SHIPPED_LOCALES = $(firstword $(wildcard $(CURDIR)/$(MOZ_APP)/locales/shipped-locales) $(wildcard $(EXTRACTED)/$(MOZ_APP)/locales/shipped-locales))
3334+refresh-supported-locales::
3335+ @echo ""
3336+ @echo "****************************************"
3337+ @echo "* Refreshing list of shipped languages *"
3338+ @echo "****************************************"
3339+ @echo ""
3340+
3341+ $(if $(SHIPPED_LOCALES),,$(error We aren't in the full source directory. Please use "TARBALL=<path_to_orig.tar.bzr>"))
3342+
3343+ perl debian/build/refresh-supported-locales.pl -s $(SHIPPED_LOCALES) $(LPOM_OPT)
3344+
3345+refresh-supported-locales:: debian/control
3346+ $(if $(EXTRACTED),rm -rf $(dir $(EXTRACTED)))
3347+
3348+define moz_monkey_patch_file
3349+$(if $(wildcard debian/stamp-monkey-patch-upstream-files),$(error Too late to use moz_monkey_patch_file), \
3350+ echo "$(1)" >> debian/monkey-patch-files; \
3351+ echo "$(2) $(1)" >> debian/monkey-patch-files.sh)
3352+endef
3353+
3354+get-orig-source: ARGS = -r $(MOZILLA_REPO) -l $(L10N_REPO) -n $(MOZ_PKG_NAME) -b $(MOZ_PKG_BASENAME) -a $(MOZ_APP)
3355+ifdef UPSTREAM_VERSION
3356+get-orig-source: ARGS += -v $(UPSTREAM_VERSION)
3357+endif
3358+ifdef UPSTREAM_BUILD
3359+get-orig-source: ARGS += --build $(UPSTREAM_BUILD)
3360+endif
3361+ifdef LOCAL_BRANCH
3362+get-orig-source: ARGS += -c $(LOCAL_BRANCH)
3363+endif
3364+get-orig-source:
3365+ PYTHONDONTWRITEBYTECODE=1 python $(CURDIR)/debian/build/create-tarball.py $(ARGS)
3366+
3367+echo-%:
3368+ @echo "$($*)"
3369+
3370+ifneq (1, $(MOZ_DISABLE_CLEAN_CHECKS))
3371+clean::
3372+# cp debian/tests/control debian/tests/control.old
3373+ cp debian/config/locales.shipped debian/config/locales.shipped.old
3374+#clean:: debian/tests/control refresh-supported-locales
3375+clean:: refresh-supported-locales
3376+ $(call cmp_auto_generated_file,debian/config/locales.shipped,refresh-supported-locales)
3377+ $(call cmp_auto_generated_file,debian/control)
3378+# $(call cmp_auto_generated_file,debian/tests/control)
3379+endif
3380+
3381+clean::
3382+ rm -f $(pkgname_subst_files) $(appname_subst_files)
3383+ rm -f debian/stamp-*
3384+ rm -rf debian/l10n-mergedirs
3385+ rm -rf $(MOZ_OBJDIR)
3386+ rm -f mozconfig
3387+ rm -f debian/testing/extra.test.zip
3388+ rm -rf debian/testing/extra-stage
3389+
3390+.PHONY: make-buildsymbols make-testsuite make-langpack-xpis refresh-supported-locales get-orig-source monkey-patch-upstream-files
3391
3392=== added file 'debian/build/testsuite.mk'
3393--- debian/build/testsuite.mk 1970-01-01 00:00:00 +0000
3394+++ debian/build/testsuite.mk 2022-12-07 23:06:52 +0000
3395@@ -0,0 +1,74 @@
3396+#!/usr/bin/make -f
3397+
3398+MOZ_TEST_LOCALE ?= en_US.UTF-8
3399+
3400+MOZ_TESTS ?= check xpcshell-tests-build
3401+#ifneq (,$(filter amd64 i386,$(DEB_HOST_ARCH)))
3402+#MOZ_TEST_FAILURES_FATAL ?= 1
3403+#endif
3404+
3405+MOZ_TEST_X_WRAPPER ?= xvfb-run -a -s "-screen 0 1024x768x24" dbus-launch --exit-with-session
3406+MOZ_TESTS_NEED_X ?= xpcshell-tests xpcshell-tests-build jstestbrowser reftest crashtest mochitest
3407+
3408+MOZ_TESTS_TZ_ENV ?= TZ=:/usr/share/zoneinfo/posix/US/Pacific
3409+MOZ_TESTS_NEED_TZ ?= check jstestbrowser
3410+
3411+MOZ_TESTS_NEED_LOCALE ?= xpcshell-tests jstestbrowser reftest
3412+
3413+TEST_LOCALES = $(CURDIR)/$(MOZ_OBJDIR)/_ubuntu_build_test_tmp/locales
3414+TEST_HOME = $(CURDIR)/$(MOZ_OBJDIR)/_ubuntu_build_test_tmp/home
3415+
3416+GET_WRAPPER = $(if $(filter $(1),$(MOZ_TESTS_NEED_X)),$(MOZ_TEST_X_WRAPPER))
3417+GET_TZ = $(if $(filter $(1),$(MOZ_TESTS_NEED_TZ)),$(MOZ_TESTS_TZ_ENV))
3418+
3419+DOIF_NEEDS_LOCALE = $(if $(filter $(1),$(MOZ_TESTS_NEED_LOCALE)),$(call $(2)))
3420+MAKE_LOCALE = $(TEST_LOCALES)/$(MOZ_TEST_LOCALE)
3421+GET_LOCALE_ENV = LOCPATH=$(TEST_LOCALES) LC_ALL=$(MOZ_TEST_LOCALE)
3422+
3423+ifneq (1,$(MOZ_TEST_FAILURES_FATAL))
3424+CMD_APPEND = || true
3425+endif
3426+
3427+ifneq (1,$(MOZ_WANT_UNIT_TESTS))
3428+MOZ_TESTS =
3429+endif
3430+
3431+$(TEST_LOCALES) $(TEST_HOME)::
3432+ mkdir -p $@
3433+
3434+$(TEST_LOCALES)/$(MOZ_TEST_LOCALE): $(TEST_LOCALES)
3435+ localedef -f $(shell echo $(notdir $@) | cut -d '.' -f 2) -i $(shell echo $(notdir $@) | cut -d '.' -f 1) $@
3436+
3437+run-tests: $(MOZ_TESTS)
3438+
3439+$(MOZ_TESTS):: %: debian/stamp-test-%
3440+
3441+$(patsubst %,debian/stamp-test-%,$(MOZ_TESTS)):: TZ=$(call GET_TZ,$*)
3442+$(patsubst %,debian/stamp-test-%,$(MOZ_TESTS)):: WRAPPER=$(call GET_WRAPPER,$*)
3443+$(patsubst %,debian/stamp-test-%,$(MOZ_TESTS)):: $(call DOIF_NEEDS_LOCALE,$*,MAKE_LOCALE)
3444+$(patsubst %,debian/stamp-test-%,$(MOZ_TESTS)):: LOCALE_ENV=$(call DOIF_NEEDS_LOCALE,$*,GET_LOCALE_ENV)
3445+$(patsubst %,debian/stamp-test-%,$(MOZ_TESTS)):: $(TEST_HOME)
3446+$(patsubst %,debian/stamp-test-%,$(MOZ_TESTS)):: TEST_CMD=HOME=$(TEST_HOME) $(LOCALE_ENV) $(TZ) $(WRAPPER) $(if $(findstring -build,$*),debian/rules run-$*,$(MAKE) -C $(CURDIR)/$(MOZ_OBJDIR) $*)
3447+$(patsubst %,debian/stamp-test-%,$(MOZ_TESTS)):: debian/stamp-test-%: debian/stamp-makefile-build
3448+ @echo "\nRunning $(TEST_CMD)\n"
3449+ $(TEST_CMD) $(CMD_APPEND)
3450+ touch $@
3451+
3452+$(CURDIR)/$(MOZ_OBJDIR)/$(MOZ_MOZDIR)/_tests/xpcshell/xpcshell-build.ini:
3453+ cp $(CURDIR)/debian/testing/xpcshell-build.ini $@
3454+
3455+run-xpcshell-tests-build: $(CURDIR)/$(MOZ_OBJDIR)/$(MOZ_MOZDIR)/_tests/xpcshell/xpcshell-build.ini
3456+ cd $(CURDIR)/$(MOZ_OBJDIR)/$(MOZ_MOZDIR); \
3457+ PYTHONDONTWRITEBYTECODE=1 $(MOZ_PYTHON) -u $(CURDIR)/$(MOZ_MOZDIR)/config/pythonpath.py \
3458+ -I./build \
3459+ -I$(CURDIR)/$(MOZ_MOZDIR)/build \
3460+ -I./_tests/mozbase/mozinfo \
3461+ $(CURDIR)/$(MOZ_MOZDIR)/testing/xpcshell/runxpcshelltests.py \
3462+ --manifest=$(CURDIR)/$(MOZ_OBJDIR)/$(MOZ_MOZDIR)/_tests/xpcshell/xpcshell-build.ini \
3463+ --build-info-json=./mozinfo.json \
3464+ --no-logfiles \
3465+ --tests-root-dir=$(CURDIR)/$(MOZ_OBJDIR)/$(MOZ_MOZDIR)/_tests/xpcshell \
3466+ --testing-modules-dir=$(CURDIR)/$(MOZ_OBJDIR)/$(MOZ_MOZDIR)/_tests/modules \
3467+ $(CURDIR)/$(MOZ_DISTDIR)/bin/xpcshell
3468+
3469+.PHONY: run-tests $(MOZ_TESTS) run-xpcshell-tests-build
3470
3471=== added file 'debian/build/xpi-id.py'
3472--- debian/build/xpi-id.py 1970-01-01 00:00:00 +0000
3473+++ debian/build/xpi-id.py 2022-12-07 23:06:52 +0000
3474@@ -0,0 +1,22 @@
3475+#!/usr/bin/python
3476+
3477+import sys
3478+import xml.dom.minidom
3479+import os
3480+import zipfile
3481+
3482+if __name__ == '__main__':
3483+ if not len(sys.argv) == 2:
3484+ print >> sys.stderr, "Must specify an xpi"
3485+ exit(1)
3486+
3487+ dom_doc = xml.dom.minidom.parseString(zipfile.ZipFile(sys.argv[1]).open('install.rdf').read().strip())
3488+
3489+ try:
3490+ attr = dom_doc.getElementsByTagName('RDF:Description')[0].attributes['em:id']
3491+ except IndexError:
3492+ attr = dom_doc.getElementsByTagName('Description')[0].attributes['em:id']
3493+
3494+ assert attr.value
3495+ print "%s" % attr.value
3496+ exit(0)
3497
3498=== modified file 'debian/changelog'
3499--- debian/changelog 2022-11-06 11:27:13 +0000
3500+++ debian/changelog 2022-12-07 23:06:52 +0000
3501@@ -1,3 +1,4 @@
3502+<<<<<<< TREE
3503 firefox (1:1snap1-0ubuntu3) lunar; urgency=medium
3504
3505 * Update the Vcs-Bzr URL for Ubuntu 23.04 (the Lunar Lobster)
3506@@ -7566,6 +7567,3725 @@
3507 + fix LP: #432876 - Icons missing in Firefox searchbox drop down list
3508 + fix LP: #486284 - maxlength on input box can be overriden by autocomplete
3509 + fix LP: #501393 - Integrate Firefox notifications with notify-osd bling
3510+=======
3511+firefox-trunk (51.0~a1~hg20160813r309228-0ubuntu1) UNRELEASED; urgency=medium
3512+
3513+ [Rico Tzschichholz]
3514+ * Add Kaqchikel language pack
3515+ - update debian/config/locales.all
3516+ - update debian/config/locales.shipped
3517+ - update debian/control
3518+ - update debian/config/searchplugins.conf
3519+ [Chad MILLER]
3520+ - Update GOOG API keys for Ubuntu distro.
3521+
3522+ -- Rico Tzschichholz <ricotz@ubuntu.com> Mon, 15 Aug 2016 21:45:51 +0200
3523+
3524+firefox-trunk (50.0~a1~hg20160801r307508-0ubuntu1) yakkety; urgency=medium
3525+
3526+ * Disable startup notification for now
3527+ - update debian/config/mozconfig.in
3528+ * Refresh patches:
3529+ - update debian/patches/allow-lockPref-everywhere.patch
3530+ - update debian/patches/support-coinstallable-trunk-build.patch
3531+
3532+ -- Chris Coulson <chris.coulson@canonical.com> Thu, 28 Jul 2016 21:44:38 +0100
3533+
3534+firefox-trunk (50.0~a1~hg20160627r302685-0ubuntu1) xenial; urgency=medium
3535+
3536+ * Add ICU data file to the install
3537+ * Refresh patches:
3538+ - update debian/patches/allow-lockPref-everywhere.patch
3539+ - update debian/patches/unity-menubar.patch
3540+ * Update debian/config/searchplugins.conf now that ja uses the en-US version
3541+ of the Google search plugin
3542+
3543+ -- Chris Coulson <chris.coulson@canonical.com> Tue, 10 May 2016 23:13:58 +0100
3544+
3545+firefox-trunk (48.0~a1~hg20160424r294498-0ubuntu1) xenial; urgency=medium
3546+
3547+ [ Chris Coulson <chris.coulson@canonical.com> ]
3548+ * Refresh patches
3549+ - update debian/patches/support-coinstallable-trunk-build.patch
3550+ - update debian/patches/unity-menubar.patch
3551+ * Remove obsolete configure options from debian/config/mozconfig.in
3552+ * Drop gstreamer build dependencies - gstreamer support was removed
3553+ before Christmas
3554+ * Drop everything related to the webapp runtime, which has been removed
3555+ - update debian/firefox.dirs.in
3556+ - update debian/firefox.install.in
3557+ - update debian/patches/series
3558+ - remove ebian/patches/webapprt-support-for-langpacks.patch
3559+ - update debian/rules
3560+ - remove debian/vendor-webapprt.js
3561+ * Update debian/build/create-tarball.py to create release tarballs correctly
3562+ after changes to the upstream release automation
3563+ * Add patch to revert an upstream search engine change
3564+
3565+ [ Will Cooke <will.cooke@canonical.com> ]
3566+ * Remove U1 from Ubuntu bookmarks patch (LP: #1322724)
3567+
3568+ -- Chris Coulson <chris.coulson@canonical.com> Tue, 15 Mar 2016 23:50:00 +0000
3569+
3570+firefox-trunk (47.0~a1~hg20160303r286575-0ubuntu1) xenial; urgency=medium
3571+
3572+ * Update the DuckDuckGo search plugin
3573+ * Refresh patches:
3574+ - update debian/patches/unity-menubar.patch
3575+ - update debian/patches/support-coinstallable-trunk-build.patch
3576+ - update debian/patches/allow-lockPref-everywhere.patch
3577+ * Add support for enabling Telemetry
3578+ - update debian/build/create-tarball.py
3579+ - update debian/config/branch.mk
3580+ - update debian/rules
3581+ * Drop libvpx-incomplete-array-paramters.patch - this bug was fixed in gcc
3582+ * Install the contents of browser/features
3583+ - update debian/firefox.install.in
3584+
3585+ -- Chris Coulson <chris.coulson@canonical.com> Wed, 27 Jan 2016 21:08:46 +0000
3586+
3587+firefox-trunk (46.0~a1~hg20160108r279112-0ubuntu1) wily; urgency=medium
3588+
3589+ * Refresh patches
3590+ - update debian/patches/webapprt-support-for-langpacks.patch
3591+ * Fix libvpx build with gcc 5.3
3592+ - add debian/patches/libvpx-incomplete-array-parameters.patch
3593+ - update debian/patches/series
3594+ * Stop using system hyphenation patterns for now - we only did this
3595+ previously to fit on a CD, and a review of the mappings is long overdue
3596+ - remove debian/patches/dont-include-hyphenation-patterns.patch
3597+ - update debian/patches/series
3598+ - update debian/firefox.links.in
3599+ - update debian/vendor-gre.js
3600+
3601+ -- Chris Coulson <chris.coulson@canonical.com> Tue, 05 Jan 2016 17:55:43 +0000
3602+
3603+firefox-trunk (45.0~a1~hg20151213r276278-0ubuntu1) wily; urgency=medium
3604+
3605+ * Refresh patches:
3606+ * update debian/patches/normalize-distribution-searchplugins.patch
3607+ * update debian/patches/unity-menubar.patch
3608+ * Drop debian/patches/cleanup-geo-specific-search-defaults.patch - this
3609+ shouldn't be needed now
3610+ * Amazon has been dropped from the Turkish language pack. Update
3611+ debian/config/searchplugins.conf accordingly
3612+ * Update debian/firefox.install.in now that the theme is not unpacked
3613+ * libmozgnome.so no longer exists - update debian/firefox.install.in
3614+
3615+ -- Chris Coulson <chris.coulson@canonical.com> Fri, 20 Nov 2015 13:11:51 +0000
3616+
3617+firefox-trunk (44.0~a1~hg20151029r270021-0ubuntu1) vivid; urgency=medium
3618+
3619+ * Refresh patches
3620+ - update debian/patches/unity-menubar.patch
3621+ - update debian/patches/support-coinstallable-trunk-builds.patch
3622+ * Ensure the autopkgtests don't run
3623+ - remove debian/tests/control
3624+ - update debian/build/rules.mk
3625+
3626+ -- Chris Coulson <chris.coulson@canonical.com> Wed, 14 Oct 2015 13:35:01 +0100
3627+
3628+firefox-trunk (43.0~a1~hg20150921r263466-0ubuntu1) vivid; urgency=medium
3629+
3630+ * Install the gtk2 directory
3631+ - update debian/firefox.install.in
3632+ * Refresh patches
3633+ - update debian/patches/ubuntu-ua-string-changes.patch
3634+ - update debian/patches/unity-menubar.patch
3635+ * Remove patches fixed upstream
3636+ - remove debian/patches/dont-hardcode-softfp-on-armhf.patch
3637+ - update debian/patches/series
3638+ * Drop backout-bmo1162569.patch and update how we install our distribution
3639+ searchplugins
3640+ - update debian/build/rules.mk
3641+ - add debian/config/searchplugins.conf
3642+ - add debian/install-distribution-searchplugins.py
3643+ - remove debian/patches/backout-bmo1162569.patch
3644+ - update debian/patches/series
3645+ - update debian/rules
3646+ - remove all manifest files from debian/searchplugins
3647+ * Disable geo-specific search defaults, and clean up profiles that have
3648+ been inadvertently switched to the wrong search default (LP: #1485741)
3649+ - add debian/patches/disable-geo-specific-search-defaults-for-us.patch
3650+ - add debian/patches/cleanup-geo-specific-search-defaults.patch
3651+ - update debian/patches/series
3652+
3653+ -- Chris Coulson <chris.coulson@canonical.com> Mon, 10 Aug 2015 21:45:17 +0100
3654+
3655+firefox-trunk (42.0~a1~hg20150809r257018-0ubuntu1) vivid; urgency=medium
3656+
3657+ * Refresh patches
3658+ - update debian/patches/dont-override-general-useragent-locale.patch
3659+ - update debian/patches/unity-menubar.patch
3660+ * Add build-depends on libgtk-3-dev
3661+ * Update unity-menubar.patch to work with GTK3
3662+ * Install compare-locales in to the virtualenv with --old-and-unmanageable -
3663+ the fix for bmo: #1188224 is incompatible with zipped eggs
3664+
3665+ -- Chris Coulson <chris.coulson@canonical.com> Tue, 14 Jul 2015 08:23:40 +0100
3666+
3667+firefox-trunk (41.0~a1~hg20150706r251448-0ubuntu1) vivid; urgency=medium
3668+
3669+ * Refresh patches
3670+ - update debian/patches/ubuntu-bookmarks.patch
3671+ - update debian/patches/dont-include-hyphenation-patterns.patch
3672+ - update debian/patches/normalize-distribution-searchplugins.patch
3673+ * Add backout-bmo1162569.patch to temporarily backout shipping search
3674+ engines in the omni.ja, until we've fixed the packaging and verified
3675+ our search engine overrides work
3676+
3677+ -- Chris Coulson <chris.coulson@canonical.com> Wed, 20 May 2015 17:20:18 +0100
3678+
3679+firefox-trunk (40.0~a1~hg20150429r241647-0ubuntu1) vivid; urgency=medium
3680+
3681+ * Refresh patches
3682+ - update debian/patches/unity-menubar.patch
3683+ - update debian/patches/dont-include-hyphenation-patterns.patch
3684+ - update debian/patches/allow-lockPref-everywhere.patch
3685+ * Bundle our checkout of compare-locales in a different location, given
3686+ that the Mozilla repo now contains a different version of it in the
3687+ location we used previously
3688+ - update debian/build/rules.mk
3689+ - update debian/config/tarball.conf
3690+
3691+ -- Chris Coulson <chris.coulson@canonical.com> Wed, 01 Apr 2015 22:15:49 +0100
3692+
3693+firefox-trunk (39.0~a1~hg20150321r234897-0ubuntu1) utopic; urgency=medium
3694+
3695+ * Refresh patches
3696+ - update debian/patches/unity-menubar.patc
3697+ - update debian/patches/ubuntu-ua-string-changes.patch
3698+ * Drop patches fixed upstream
3699+ - remove debian/patches/add-non-skia-fallback.patch
3700+ - update debian/patches/series
3701+
3702+ -- Chris Coulson <chris.coulson@canonical.com> Fri, 06 Mar 2015 15:14:53 +0000
3703+
3704+firefox-trunk (38.0~a1~hg20150219r229588-0ubuntu1) utopic; urgency=medium
3705+
3706+ * Refresh patches
3707+ - update debian/patches/ubuntu-bookmarks.patch
3708+ - update debian/patches/unity-menubar.patch
3709+ * Add Google OAuth ID so contact import for Hello works (LP: #1401402)
3710+ * Add patch from Bugzilla to implement non-Skia fallback for unaccelerated
3711+ rendering of 3D transforms to fix a build failure on platforms where Skia
3712+ is not supported
3713+ - add debian/patches/add-non-skia-fallback.patch
3714+ - update debian/patches/series
3715+
3716+ -- Chris Coulson <chris.coulson@canonical.com> Thu, 15 Jan 2015 14:06:47 +0000
3717+
3718+firefox-trunk (37.0~a1~hg20150109r222808-0ubuntu1) utopic; urgency=medium
3719+
3720+ * Refresh patches
3721+ - update debian/patches/unity-menubar.patch
3722+ * Add debian/patches/ubuntu-search-defaults.patch to set the default
3723+ search engines. This is a temporary patch (these defaults will eventually
3724+ go in to distribution.ini)
3725+ * Don't hardcode -mfloat-abi=softfp in libvpx
3726+ - add debian/patches/dont-hardcode-softfp-on-armhf.patch
3727+ - update debian/patches/series
3728+ * Drop debian/patches/no_neon_on_arm.patch. This shouldn't beneeded
3729+ anymore, because:
3730+ - since it was added, most code that uses NEON intrinsics and assembly
3731+ code using NEON instructions is disabled if the target is < armv7
3732+ - Code that uses NEON intrinsics, when compiled, is hidden behind a
3733+ runtime check (so doesn't run on systems that don't support those
3734+ instructions).
3735+ - Code in media/libvpx unconditionally compiles code that uses NEON
3736+ intrinsics anyway, even if the target is < armv7 (but the code is
3737+ compiled with -march=armv7-a and is hidden behind a runtime check for
3738+ NEON support)
3739+
3740+ -- Chris Coulson <chris.coulson@canonical.com> Mon, 08 Dec 2014 19:16:12 +0000
3741+
3742+firefox-trunk (36.0~a1~hg20141126r217518-0ubuntu1) utopic; urgency=medium
3743+
3744+ * Refresh patches
3745+ - update debian/patches/unity-menubar.patch
3746+ - update debian/patches/ubuntu-ua-string-changes.patch
3747+ - update debian/patches/dont-include-hyphenation-patterns.patch
3748+ * Disable all of the testsuite related patches and don't install anything
3749+ in to the testsuite package for now. The patches have all bit-rotted,
3750+ we're not running any tests and nobody is driving that anymore
3751+ * Drop fix-broken-langpack-install-manifests.patch - fixed upstream
3752+ * Don't do unified builds unconditionally on i386, as they don't crash
3753+ anymore
3754+ * Don't clone the nightly profile from the default profile at startup
3755+ - update debian/firefox.sh.in
3756+ * Don't use --with-app-basename to create the co-installable nightly build
3757+ as it's not useful anymore, and changing the application name to
3758+ "Firefox-Trunk" has always been problematic for code / addons that check
3759+ the appname. Continue to use --with-app-name as before (which just changes
3760+ the install name and the remoting name), and add a patch to introduce
3761+ --with-app-profile, which allows us to change the profile location
3762+ - update debian/build/rules.mk
3763+ - update debian/build/config.mk
3764+ - update debian/config/mozconfig.in
3765+ - update debian/rules
3766+ - add debian/patches/support-coinstallable-trunk-build.patch
3767+ - add debian/patches/set-prgname-to-remoting-name.patch
3768+ - update debian/patches/series
3769+ * Remove the upstream duckduckgo search plugin from the language packs -
3770+ we have our own already
3771+ * Fix the webapprt locale extension symlinks
3772+ * Install the gmp-clearkey directory
3773+
3774+ -- Chris Coulson <chris.coulson@canonical.com> Fri, 31 Oct 2014 23:40:45 +0000
3775+
3776+firefox-trunk (35.0~a1~hg20141004r208732-0ubuntu1) utopic; urgency=medium
3777+
3778+ [ Chris Coulson <chris.coulson@canonical.com> ]
3779+ * Refresh patches
3780+ - update debian/patches/fix-make-package-tests-without-webrtc.patch
3781+ - update d/p/test-integration/automation-output-junit-xml.patch
3782+
3783+ [ Jamie Strandboge <jamie@ubuntu.com> ]
3784+ * update apparmor profiles to include the openssl abstraction
3785+
3786+ -- Chris Coulson <chris.coulson@canonical.com> Fri, 19 Sep 2014 17:18:41 +0100
3787+
3788+firefox-trunk (34.0~a1~hg20140803r197418-0ubuntu1) trusty; urgency=medium
3789+
3790+ [ Chris Coulson <chris.coulson@canonical.com> ]
3791+ * Refresh patches
3792+ - update debian/patches/dont-override-general-useragent-locale.patch
3793+ - update debian/patches/unity-menubar.patch
3794+ - update debian/patches/allow-lockPref-everywhere.patch
3795+ - update d/p/test-integration/automation-output-junit-xml.patch
3796+ * Get rid of disable-failing-python-tests.patch for now, at least until we
3797+ are running unit tests again
3798+ * Add temporary workaround for bug 1348333 - build with
3799+ --enable-unified-compilation on gcc-4.8 x86 builds
3800+
3801+ [ Jamie Strandboge <jamie@ubuntu.com> ]
3802+ * update 12.04 and 13.10 AppArmor profiles for new accesses
3803+ * add 14.10 profile with more fine-grained DBus access
3804+
3805+ -- Chris Coulson <chris.coulson@canonical.com> Tue, 22 Jul 2014 11:24:36 +0100
3806+
3807+firefox-trunk (33.0~a1~hg20140718r194742-0ubuntu1) trusty; urgency=medium
3808+
3809+ * New upstream snapshot v33.0 A1 HG20140718R194742
3810+
3811+ * Refresh patches
3812+ - update debian/patches/unity-menubar.patch
3813+ - update d/p/test-integration/automation-output-junit-xml.patch
3814+
3815+ -- Chris Coulson <chris.coulson@canonical.com> Wed, 02 Jul 2014 00:09:14 +0100
3816+
3817+firefox-trunk (32.0~a1~hg20140609r187476-0ubuntu1) trusty; urgency=medium
3818+
3819+ * New upstream snapshot v32.0 A1 HG20140609R187476
3820+
3821+ [ Chris Coulson <chris.coulson@canonical.com> ]
3822+ * Refresh patches
3823+ - update debian/patches/unity-menubar.patch
3824+ - update d/p/test-integration/xpcshell-disable-addon-select-dialog-test-for-adt.patch
3825+ - update d/p/test-integration/automation-output-junit-xml.patch
3826+ * Add gstreamer0.10 packages as an alternative for the gstreamer1.0 packages
3827+ so that the dependencies are installable on 12.04 and 12.10
3828+ * Add patch to fix a build issue on architectures where WebRTC isn't enabled
3829+
3830+ [ Jamie Strandboge <jamie@canonical.com> ]
3831+ * debian/usr.bin.firefox.apparmor.*: allow read of /etc/xfce4/defaults.list
3832+ (LP: #1325048)
3833+
3834+ -- Chris Coulson <chris.coulson@canonical.com> Wed, 07 May 2014 22:26:44 +0100
3835+
3836+firefox-trunk (31.0~a1~hg20140428r180499-0ubuntu1) trusty; urgency=medium
3837+
3838+ * New upstream snapshot v31.0 A1 HG20140428R180499
3839+
3840+ * Refresh patches
3841+ - update d/p/test-integration/automation-output-junit-xml.patch
3842+ - update d/p/test-integration/xpcshell-disable-tests-which-need-appdir-write-access.patch
3843+ - update debian/patches/unity-menubar.patch
3844+ * Build with --enable-gstreamer=1.0 on 14.04 and later
3845+ * Don't depend on NBS font packages (LP: #1296663)
3846+ * Don't include python pyc files in the diff
3847+ - update debian/source/options
3848+
3849+ -- Chris Coulson <chris.coulson@canonical.com> Fri, 28 Mar 2014 08:25:56 +0000
3850+
3851+firefox-trunk (30.0~a1~hg20140314r173572-0ubuntu1) trusty; urgency=low
3852+
3853+ * New upstream snapshot v30.0 A1 HG20140314R173572
3854+
3855+ [ Chris Coulson <chris.coulson@canonical.com> ]
3856+ * Refresh patches
3857+ - update debian/patches/unity-menubar.patch
3858+ * Override upstream duckduckgo searchplugin for gd
3859+ * Make geolocation work
3860+ * Use --enable-system-libffi on arm64, as the bundled libffi doesn't
3861+ support this yet
3862+
3863+ [ Jamie Strandboge <jamie@canonical.com> ]
3864+ * usr.bin.firefox.apparmor*: updates for new firefox releases (LP: #1288260)
3865+ - allow read of /sys/devices/pci[0-9]*/**/uevent
3866+ - allow read of /etc/udev/udev.conf
3867+ - explicityly deny /run/udev/data/**, like we do with evince
3868+
3869+ [ Adam Conrad <adconrad@ubuntu.com> ]
3870+ * Build with --enable-release option to use "more conservative, release
3871+ engineering-oriented options" as recommended by upstream for distros:
3872+ - Fixes FTBFS on powerpc and may improve stability on other arches.
3873+
3874+ -- Jamie Strandboge <jamie@ubuntu.com> Wed, 05 Mar 2014 08:06:22 -0600
3875+
3876+firefox-trunk (29.0~a1~hg20140203r166570-0ubuntu1) saucy; urgency=low
3877+
3878+ * New upstream snapshot v29.0 A1 HG20140203R166570
3879+
3880+ * Refresh patches
3881+ - update debian/patches/unity-menubar.patch
3882+ - update debian/patches/no_neon_on_arm.patch
3883+ - update d/p/test-integration/automation-output-junit-xml.patch
3884+ * Add Aragonese to locale blacklist, as it's been added to the upstream
3885+ shipped-locales when the mercurial repo doesn't seem to exist
3886+ * Fix create-tarball.py so that the blacklist works correctly
3887+ * Add Xhosa language pack
3888+ - update debian/control
3889+ - update debian/locales.shipped
3890+ - update debian/locales.all
3891+ - add debian/searchplugins/xh/list.txt
3892+ * Disable Ganda and Northern Sotho languages
3893+
3894+ -- Chris Coulson <chris.coulson@canonical.com> Wed, 11 Dec 2013 15:54:41 +0000
3895+
3896+firefox-trunk (28.0~a1~hg20131208r159425-0ubuntu1) saucy; urgency=low
3897+
3898+ * New upstream snapshot v28.0 A1 HG20131208R159425
3899+
3900+ * Refresh patches
3901+ - update d/p/test-integration/mochitest-allow-test-manifest-for-browser-chrome.patch
3902+ - update d/p/test-integration/automation-output-junit-xml.patch
3903+ - update debian/patches/unity-menubar.patch
3904+ - update debian/patches/ubuntu-ua-string-changes.patch
3905+ * Add pulseaudio dependency
3906+ - update debian/control
3907+ * The Amazon search plugin has been removed from the Bosnian language pack
3908+ on nightly, so don't try to override it with our own
3909+ - add debian/searchplugins/bs/list.txt
3910+
3911+ -- Chris Coulson <chris.coulson@canonical.com> Tue, 12 Nov 2013 20:34:55 +0000
3912+
3913+firefox-trunk (27.0~a1~hg20131023r151789-0ubuntu1) saucy; urgency=low
3914+
3915+ * New upstream snapshot v27.0 A1 HG20131023R151789
3916+
3917+ [ Chris Coulson <chris.coulson@canonical.com> ]
3918+ * Drop the python-progressbar build-conflict, as "make check" doesn't run
3919+ the jit-tests now
3920+ * Refresh patches
3921+ - update debian/patches/allow-lockPref-everywhere.patch
3922+ - update debian/patches/ubuntu-ua-string-changes.patch
3923+ - update d/p/test-integration/automation-output-junit-xml.patch
3924+ - update d/p/test-integration/xpcshell-disable-tests-which-need-appdir-write-access.patch
3925+ - update debian/patches/unity-menubar.patch
3926+ * MOZILLA_OFFICIAL no longer controls whether the crashreporter is enabled,
3927+ so just build with --disable-crashreporter to turn it off
3928+ - update debian/apport/blacklist.in
3929+ - update debian/build/config.mk
3930+ - update debian/build/rules.mk
3931+
3932+ [ Jamie Strandboge <jamie@canonical.com> ]
3933+ * add debian/usr.bin.firefox.apparmor.13.10 for dbus policy
3934+ * debian/rules: conditionally use usr.bin.firefox.apparmor.13.10 on saucy
3935+ and higher, otherwise usr.bin.firefox.apparmor.12.04
3936+ * debian/usr.bin.firefox.apparmor.12.04: use ibus abstraction
3937+
3938+ -- Chris Coulson <chris.coulson@canonical.com> Tue, 17 Sep 2013 16:32:25 +0100
3939+
3940+firefox-trunk (26.0~a1~hg20130916r147315-0ubuntu1) saucy; urgency=low
3941+
3942+ * New upstream snapshot v26.0 A1 HG20130916R147315
3943+
3944+ * Refresh patches
3945+ - update d/p/test-integration/automation-output-junit-xml.patch
3946+ - update d/p/test-integration/mochitest-allow-test-manifest-for-browser-chrome.patch
3947+ - update d/p/test-fixes/xpcshell-exthandler-no-writes-to-appdir.patch
3948+ - update d/p/test-integration/xpcshell-disable-tests-which-need-appdir-write-access.patch
3949+ - update d/p/test-integration/xpcshell-dont-return-nonzero-on-test-failure.patch
3950+ - update d/p/test-integration/xpcshell-write-time-for-failed-test.patch
3951+ - update debian/patches/unity-menubar.patch
3952+ - update debian/patches/ubuntu-ua-string-changes.patch
3953+ - update debian/patches/no_neon_on_arm.patch
3954+ * Drop patches
3955+ - remove d/p/test-fixes/mochitest-browser-plugincrash-with-no-crashreporter.patch
3956+ - remove d/p/test-fixes/mochitest-dont-ship-browser-postupdate-test.patch
3957+ - remove d/p/test-fixes/mochitest-tests-jar-fix.patch
3958+ - update debian/patches/series
3959+ * Reenable unity-menubar.patch
3960+ * Enable the gstreamer backend
3961+ - update debian/control
3962+ - update debian/config/mozconfig
3963+ * Update for mochitest/runtests.py changes
3964+ - update debian/testing/testrunhelper.py
3965+ * Add libgl1-mesa-dri to firefox-testsuite depends so that gnome-session
3966+ starts correctly in saucy
3967+ * Fix LP: #1223502 - firefox-testsuite should depend on fonts-liberation
3968+ rather than ttf-liberation
3969+
3970+ -- Chris Coulson <chris.coulson@canonical.com> Mon, 12 Aug 2013 11:49:31 +0100
3971+
3972+firefox-trunk (25.0~a1~hg20130726r140000-0ubuntu1) saucy; urgency=low
3973+
3974+ * New upstream snapshot v25.0 A1 HG20130726R140000
3975+
3976+ * Refresh patches
3977+ - update d/p/test-fixes/xpcshell-docshell-no-writes-to-appdir.patch
3978+ - update d/p/test-fixes/mochitest-browser-plugincrash-with-no-crashreporter.patch
3979+ - update d/p/test-integration/xpcshell-write-time-for-failed-test.patch
3980+ - update debian/patches/ubuntu-ua-string-changes.patch
3981+ * Drop patches
3982+ - remove d/p/test-fixes/xpcshell-docshell-no-writes-to-appdir.patch
3983+ - remove d/p/test-fixes/xpcshell-contentprefs-no-writes-to-appdir.patch
3984+ - update debian/patches/series
3985+ * Refactor the test results post-process script a bit so that it can use
3986+ regular expressions in the configuration
3987+ - update debian/testing/filter_results
3988+ - update debian/testing/results-filter-manifest.json
3989+ - update debian/tests/post-process
3990+ * Run mochitest-plain in 5 chunks, similar to upstream. This should fix
3991+ some test failures we see that seem to be caused by some tests not
3992+ cleaning up properly (seems to fix LP: #1158781 and LP: #1194448)
3993+ - update debian/testing/run_mochitest.in
3994+ - update debian/tests/control
3995+ - move debian/tests/mochitest => debian/tests/mochitest-1
3996+ - add debian/tests/mochitest-2
3997+ - add debian/tests/mochitest-3
3998+ - add debian/tests/mochitest-4
3999+ - add debian/tests/mochitest-5
4000+ * Drop d/p/test-integration/test-sameoriginpolicy-debug.patch now that
4001+ we run mochitest-plain in chunks
4002+ * Add OCSPStaplingServer binary to testsuite
4003+ - update debian/firefox-testsuite.install.in
4004+ - update debian/build/rules.mk
4005+ * Don't let make check failures fail the build for now, as there are some
4006+ jit test failures
4007+ - update debian/build/testsuite.mk
4008+ * Try to stop the buildd's from terminating the build during long links
4009+ (use a hack based on the one for the Chromium package)
4010+ - add debian/build/keepalive-wrapper.py
4011+ - update debian/build/rules.mk
4012+ * Disable unity-menubar.patch
4013+
4014+ -- Chris Coulson <chris.coulson@canonical.com> Wed, 26 Jun 2013 11:40:24 +0100
4015+
4016+firefox-trunk (24.0~a1~hg20130622r136144-0ubuntu1) saucy; urgency=low
4017+
4018+ * New upstream snapshot v24.0 A1 HG20130622R136144
4019+
4020+ * Fix LP: #1180227 - Update the Apparmor profile to allow rw access to
4021+ ~/.cache/mozilla/firefox, and allow locking of sqlite db's there too
4022+ - update debian/usr.bin.firefox.apparmor.12.04
4023+ * Testpilot has been removed from Firefox
4024+ - update debian/firefox.install.in
4025+ * Make the debian/control autogeneration a bit cleaner
4026+ - update debian/build/config.mk
4027+ - update debian/build/dump-langpack-control-entries.pl
4028+ - update debian/build/rules.mk
4029+ - update debian/control.in
4030+ * Don't set stuff that is set by dpkg-buildpackage
4031+ - update debian/build/config.mk
4032+ - update debian/build/rules.mk
4033+ * Run the xpcshell binary from the actual install directory rather than
4034+ the temporary test directory, as some tests assume this now (eg, the
4035+ distribution/ directory is assumed to be in the same directory as
4036+ xpcshell). This means we also have to install httpd.js et al in to
4037+ the actual components/ directory, as the upstream test harness assumes
4038+ this too. This fixes test_ubuntu_searchplugins.js test failures since
4039+ the distribution/ directory was moved back up a level on disk
4040+ - update debian/build/rules.mk
4041+ - update debian/firefox-testsuite.install.in
4042+ - update debian/firefox.install.in
4043+ - update debian/testing/run_xpcshell_tests
4044+ - update debian/testing/testrunhelper.py
4045+ * Make sure bindings are always attached for menu popups, even if they
4046+ already have a wrapper when the menu opens
4047+ - update debian/patches/unity-menubar.patch
4048+ * Make sure bindings are attached for menu's too, so that menu.open
4049+ always works (finally fixes livemarks when running in Unity)
4050+ - update debian/patches/unity-menubar.patch
4051+ * Remove the executable bit from more file types
4052+ - update debian/build/rules.mk
4053+ * Make "make check" failures non-fatal on armhf. I don't think anybody
4054+ actually genuinely cares whether Firefox works there or not, so don't
4055+ let it block migration from proposed
4056+ - update debian/build/testsuite.mk
4057+ * Refresh patches
4058+ - update debian/patches/ubuntu-bookmarks.patch
4059+ - update debian/patches/unity-menubar.patch
4060+ - update d/p/test-fixes/mochitest-browser-plugincrash-with-no-crashreporter.patch
4061+ - update d/p/test-integration/mochitest-allow-test-manifest-for-chrome.patch
4062+ - update d/p/test-integration/automation-output-junit-xml.patch
4063+ * The upstream mochitest harness now supports a manifest file for all tests
4064+ except for browser-chrome, but we need a separate manifest for each now
4065+ - update d/p/test-integration/mochitest-allow-test-manifest-for-chrome.patch
4066+ - rename d/p/test-integration/mochitest-allow-test-manifest-for-chrome.patch =>
4067+ d/p/test-integration/mochitest-allow-test-manifest-for-browser-chrome.patch
4068+ - update debian/patches/series
4069+ - add debian/testing/extra/mochitest/mochitest-a11y.json
4070+ - add debian/testing/extra/mochitest/mochitest-browser-chrome.json
4071+ - update debian/testing/extra/mochitest/mochitest-chrome.json
4072+ - update debian/testing/run_mochitest.in
4073+ * Build with --disable-gstreamer for now, as this adds a hard dependency on
4074+ the *old* gstreamer stack. Reenable this once Firefox has been dropped
4075+ from the default install
4076+ * Support running unit tests from an unpacked testsuite tarball anywhere on the
4077+ filesystem
4078+ - update debian/testing/testrunhelper.py
4079+ * Get rid of d/p/test-integration/httpd_js-debug.patch, as this was only ever
4080+ meant to be temporary
4081+ * Include toolkit/components/mediasniffer/test/unit/data/ff-inst.exe in the
4082+ tarball, as it's required for a mimetype sniffing test that we run
4083+ - update debian/config/tarball.conf
4084+ * Temporary debug patch
4085+ - add d/p/test-integration/test-sameoriginpolicy-debug.patch
4086+ - update debian/patches/series
4087+ * Fix failing test_addEngine_callback.js search xpcshell test
4088+ - rename d/p/test-fixes/xpcshell-search-fix-json-cache-test.patch =>
4089+ d/p/test-fixes/xpcshell-search-fix-tests-when-plugins-are-not-in-appdir.patch
4090+ - update d/p/test-fixes/xpcshell-search-fix-tests-when-plugins-are-not-in-appdir.patch
4091+ - update debian/patches/series
4092+ * Fix broken Bulgarian language pack
4093+ - add debian/patches/fix-broken-langpack-install-manifests.patch
4094+ - update debian/patches/series
4095+
4096+ -- Chris Coulson <chris.coulson@canonical.com> Wed, 15 May 2013 12:22:10 +0100
4097+
4098+firefox-trunk (23.0~a1~hg20130512r131644-0ubuntu1) saucy; urgency=low
4099+
4100+ * New upstream snapshot v23.0 A1 HG20130512R131644
4101+
4102+ * Manually stage the testsuite in debian/tmp and dh_install it in to the
4103+ package from there rather than from objdir/dist, as dh_install is called
4104+ after we have created the breakpad symbols, which modifies the files
4105+ in objdir/dist and causes dh_strip to fail later on
4106+ - update debian/build/mozbuild.mk
4107+ - update debian/firefox-testsuite.install.in
4108+ * Build conflict on python-progressbar, as having this installed causes the
4109+ jit test harness to fail
4110+ - update debian/control.in
4111+ * Disable unsupported W3C webgl tests
4112+ - update debian/testing/extra/mochitest/mochitest.json
4113+ * Fix test_langpack_chrome.js for Hindi, Mongolian, Swedish and Tamil
4114+ - update debian/testing/extra/xpcshell/package-tests/test_langpack_chrome.js
4115+ * Fix failure to populate Replaces on 12.10 and later (LP: #1165408)
4116+ - update debian/rules
4117+ * Refresh paths for a11y tests after landing of bmo: #854868
4118+ - update debian/testing/extra/mochitest/mochitest-chrome.json
4119+ * Disable some unsupported tests that test search healthreporting, as these
4120+ don't work on Ubuntu where the searchplugins are not in the application
4121+ directory
4122+ - update debian/testing/extra/mochitest/mochitest-chrome.json
4123+ * Make firefox-globalmenu a real transitional package
4124+ - update debian/control.in
4125+ - update debian/build/mozbuild.mk
4126+ * Just test the selected locale on all channels in test_langpack_chrome.js,
4127+ rather than testing we get a correctly translated string. This is just
4128+ way too fragile
4129+ - update debian/testing/extra/xpcshell/package-tests/test_langpack_chrome.js
4130+ - update d/p/test-integration/automation-output-junit-xml.patch
4131+ - update debian/patches/unity-menubar.patch
4132+ - update debian/patches/dont-override-general-useragent-locale.patch
4133+ - update debian/patches/no_neon_on_arm.patch
4134+ * Drop crashtest-no-network-access.patch as the test seems to have been
4135+ removed from the tree
4136+ * Wait for DECODE_COMPLETE rather than LOAD_COMPLETE when loading favicons
4137+ - update debian/patches/unity-menubar.patch
4138+ * Fix various memory issues with the menubar implementation
4139+ - update debian/patches/unity-menubar.patch
4140+ * Always build the crash reporter and Breakpad symbols on supported
4141+ architectures, even if it is disabled at run time. Will hopefully avoid
4142+ surprises by the time we reach beta (where the crash reporter is enabled)
4143+ - update debian/rules
4144+ - update debian/build/mozvars.mk
4145+ - update debian/build/mozbuild.mk
4146+ * Rename mozbuild.mk => rules.mk and mozvars.mk => config.mk
4147+ * Shut up lintian
4148+ - update debian/copyright
4149+ * Make the transitional globalmenu package priority extra, section oldlibs
4150+ - update debian/control.in
4151+ * Make the testsuite priority extra, section misc
4152+ - update debian/control.in
4153+ * The testsuite shouldn't depend on essential package libc-bin
4154+ - update debian/control.in
4155+ * Override symlink-is-self-recursive warning in the testsuite, as this is
4156+ intentional
4157+ - add debian/firefox-testsuite.lintian-overrides.in
4158+ * Remove the executable bit from the testsuite zip file
4159+ - update debian/build/rules.mk
4160+ * Remove the executable bit from searchplugins
4161+ - update debian/build/rules.mk
4162+ * Silence an embedded-library warning and some image-file-in-usr-lib warnings
4163+ - update debian/firefox.lintian-overrides.in
4164+ * Drop firefox-gnome-support. It was only depending on libraries that are
4165+ already guaranteed to exist when firefox is installed (mostly, glib).
4166+ Firefox has no need to depend on libnotify for the time being either, but
4167+ if it does again, that dependency should just be on the main package
4168+ - update debian/control.in
4169+ - update debian/build/rules.mk
4170+ - remove debian/firefox-gnome-support.install.in
4171+ * Only blacklist Firefox in Apport on official builds
4172+ - update debian/apport/blacklist.in
4173+ - update debian/build/rules.mk
4174+ * Merge in latest desktop file translations
4175+ - update debian/firefox.desktop.in
4176+ * Refresh patches
4177+ - update d/p/test-overrides/disable-failing-python-tests.patch
4178+ - update debian/patches/unity-menubar.patch
4179+ * Disable intl.locale.matchOS in test_bug848297.js
4180+ - add d/p/test-fixes/xpcshell-chrome-fix-test_bug848297-with-locale-matchOS.patch
4181+ - update debian/patches/series
4182+ * Write xpcshell test duration to the JUnit results when the test fails
4183+ - add d/p/test-integration/xpcshell-write-time-for-failed-test.patch
4184+ - update debian/patches/series
4185+ * Update test-fixes/mochitest-browser-plugincrash-with-no-crashreporter.patch
4186+ to just not include the test on !MOZ_CRASHREPORTER builds
4187+ * Temporarily turn on debug in httpd.js
4188+ - add d/p/test-integration/httpd_js-debug.patch
4189+ - update debian/patches/series
4190+ * Fix build-time xpcshell tests after landing of bmo: 597064, by
4191+ using the python virtualenv provided by the upstream build system
4192+ - update debian/build/testsuite.mk
4193+ - update debian/build/rules.mk
4194+ * browser/distribution has moved back up a level
4195+ - update debian/build/rules.mk
4196+ - update debian/firefox-locale.preinst.in
4197+ - update debian/firefox.dirs.in
4198+ - update debian/firefox.install.in
4199+ - update debian/firefox.links.in
4200+ - update debian/firefox.postinst.in
4201+ - update debian/firefox.preinst.in
4202+
4203+ -- Chris Coulson <chris.coulson@canonical.com> Wed, 03 Apr 2013 17:19:15 +0100
4204+
4205+firefox-trunk (22.0~a1~hg20130329r126606-0ubuntu1-0ubuntu1) raring; urgency=low
4206+
4207+ * New upstream snaphot v22.0 A1 HG20130329R126606
4208+
4209+ [ Chris Coulson <chris.coulson@canonical.com> ]
4210+ * Make sure that the 'appname' field of our mozinfo.json is set to
4211+ 'firefox' and not 'firefox-trunk' on nightlies, as it breaks browser
4212+ xpcshell tests
4213+ - update debian/build/mozbuild.mk
4214+ - add debian/build/fix-mozinfo-appname.py
4215+ * Fix a space versus tab issue in debian/build/mozbuild.mk
4216+ * Run make-buildsymbols after make install
4217+ - update debian/build/mozbuild.mk
4218+ * Refresh patches
4219+ - update d/p/test-integration/xpcshell-output-valid-junit-xml.patch
4220+ - update d/p/test-integration/mochitest-output-junit-xml.patch
4221+ - update d/p/test-overrides/reftest-disable-failing-tests.patch
4222+ - update debian/patches/ubuntu-ua-string-changes.patch
4223+ - update debian/patches/no_neon_on_arm.patch
4224+ - update d/p/test-overrides/xpcshell-disable-failing-tests.patch
4225+ - update d/p/test-overrides/disable-failing-python-tests.patch
4226+ * Remove obsolete patches
4227+ - remove debian/patches/fix-makefile-substitution-bug.patch
4228+ * Temporarily disable tests in python/mozbuild/mozpack/tests, as they
4229+ fail
4230+ - add d/p/test-overrides/disable-failing-python-tests.patch
4231+ - update debian/patches/series.in
4232+ * Unbreak test_ubuntu_searchplugins.js after the install layout changes
4233+ - update debian/testing/xpcshell-package-tests/xpcshell.ini
4234+ * Unbreak test_locale_matchOS.js after the install layout changes
4235+ - update debian/testing/xpcshell-package-tests/test_locale_matchOS_real.js
4236+ * Unbreak test_langpack_load.js after the install layout changes
4237+ - update debian/testing/xpcshell-package-tests/test_langpack_load.js
4238+ * Unbreak test_langpack_chrome.js after the install layout changes
4239+ - update debian/testing/xpcshell-package-tests/test_langpack_chrome.js
4240+ * Disable telemetry xpcshell tests. Telemetry is not enabled on Ubuntu builds
4241+ and the test_TelemetryPing.js fails anyway because the HG revision is
4242+ not embedded in the ping
4243+ - update d/p/test-integration/xpcshell-disable-failing-tests.patch
4244+ * Move the plugins/ symlink underneath browser/ so that these load again
4245+ - update debian/firefox.links.in
4246+ - update debian/firefox.postinst.in
4247+ - update debian/firefox-testsuite.links.in
4248+ * Skip browser_pluginCrashCommentAndURL.js on builds with crash reporting
4249+ disabled
4250+ - add d/p/test-fixes/mochitest-browser-plugincrash-with-no-crashreporter.patch
4251+ - update debian/patches/series.in
4252+ * Disable browser_google.js as this fails with our searchplugins, and we
4253+ have our own tests
4254+ - update debian/testing/mochitest-chrome.json
4255+ * Create the test results directory
4256+ - update debian/tests/crashtest
4257+ - update debian/tests/jstestbrowser
4258+ - update debian/tests/mochitest
4259+ - update debian/tests/reftest
4260+ - update debian/tests/xpcshell-package-tests
4261+ - update debian/tests/xpcshell-tests
4262+ * Don't mark textarea-resize-background.html as failing
4263+ - update d/p/test-overrides/reftest-disable-failing-tests.patch
4264+ * Tidy up search xpcshell test fixes
4265+ - drop d/p/test-fixes/xpcshell-search-fix-const-redeclaration.patch
4266+ - update d/p/test-fixes/xpcshell-search-fix-browser-dirprovider.patch
4267+ - update debian/patches/series.in
4268+ * Fix test_ubuntu_useragent.js to work on channels other than Nightly
4269+ - update debian/testing/xpcshell-package-tests/test_ubuntu_useragent.js
4270+ * In test_ubuntu_useragent.js, check for the hardcoded buildid on official
4271+ branded builds, and set up the appinfo with the actual build ID
4272+ - update debian/testing/xpcshell-package-tests/head_package_tests.js
4273+ - update debian/testing/xpcshell-package-tests/test_ubuntu_useragent.js
4274+ * In test_langpack_chrome.js, only test the actual translation of
4275+ general.useragent.locale on non-nightly builds, as the nightly translations
4276+ aren't as complete. On nightly builds, just check that the correct locale
4277+ is selected for the global package
4278+ - update debian/testing/xpcshell-package-tests/test_langpack_chrome.js
4279+ * Move duplicated code in to one place
4280+ - update debian/testing/xpcshell-package-tests/head_package_tests.js
4281+ - update debian/testing/xpcshell-package-tests/test_langpack_chrome.js
4282+ - update debian/testing/xpcshell-package-tests/test_langpack_load.js
4283+ - update debian/testing/xpcshell-package-tests/test_locale_matchOS_real.js
4284+ - update debian/testing/xpcshell-package-tests/test_searchplugins_valid_real.js
4285+ - update debian/testing/xpcshell-package-tests/test_ubuntu_searchplugins_real.js
4286+ - update debian/testing/xpcshell-package-tests/test_ubuntu_useragent.js
4287+ * Split mochitests in to separate autopkgtest test scripts so that we can
4288+ propagate error codes from test harness failure without affecting other
4289+ mochitest stages
4290+ - update debian/tests/control
4291+ - update debian/tests/mochitest
4292+ - add debian/tests/mochitest-browser
4293+ - add debian/tests/mochitest-chrome
4294+ - add debian/tests/mochitest-a11y
4295+ - add debian/tests/mochitest-ipcplugins
4296+ * Don't access the network from 395609.xul to see if it fixes a hang
4297+ - add d/p/test-fixes/crashtest-no-network-access.patch
4298+ - update debian/patches/series.in
4299+ * Make the testsuite depend on ttf-liberation to fix a mochitest
4300+ failure in browser_fontinspector.js
4301+ - update debian/control.in
4302+ * Disable test_notifications_popup.html for now until we have time to
4303+ investigate why it hangs
4304+ - update debian/testing/mochitest.json
4305+ * Run tests that need a display in an actual session with
4306+ gnome-settings-daemon running (plus a WM):
4307+ - update debian/testing/testrunhelper.py
4308+ - update debian/firefox-testsuite.install.in
4309+ - add debian/testing/run-test.desktop
4310+ - update debian/testing/run_mochitest.in
4311+ - update debian/testing/run_reftest.in
4312+ - update debian/testing/run_xpcshell_tests.in
4313+ - update debian/control.in
4314+ - update debian/tests/mochitest
4315+ - update debian/tests/mochitest-browser
4316+ - update debian/tests/mochitest-chrome
4317+ - update debian/tests/mochitest-a11y
4318+ - update debian/tests/mochitest-ipcplugins
4319+ - update debian/tests/crashtest
4320+ - update debian/tests/jstestbrowser
4321+ - update debian/tests/reftest
4322+ - update debian/tests/xpcshell-package-tests
4323+ - update debian/tests/xpcshell-tests
4324+ - update d/p/test-overrides/reftest-disable-failing-tests.patch
4325+ * Make the testsuite depend on ubuntu-settings and light-themes
4326+ - update debian/control.in
4327+ * Drop the JUnit XML changes from the mochitest and reftest addons
4328+ and add this support to automation.py instead. This avoids duplication,
4329+ means we only need 1 patch and makes it possible to add all types of log
4330+ messages to the results (eg, screenshots of hung tests)
4331+ - remove d/p/test-integration/reftest-output-junit-xml.patch
4332+ - remove d/p/test-integration/mochitest-output-junit-xml.patch
4333+ - add d/p/test-integration/automation-output-junit-xml.patch
4334+ - update debian/patches/series.in
4335+ * Don't mark layout/reftests/mathml/mfenced-10.html as random, as it
4336+ appears to actually pass
4337+ - update d/p/test-overrides/reftest-disable-failing-tests.patch
4338+ * Skip dom/plugins/test/test_{crashing,hanging}.html for now,
4339+ as they don't seem to generate a minidump as expected
4340+ - update debian/testing/mochitest.json
4341+ * Don't install the testsuite unpacked on the filesystem in the
4342+ traditional manner, but just install the packed zip and have the
4343+ test scripts bootstrap a temporary environment with the expanded
4344+ testsuite. The advantage of this is that we don't need to carry
4345+ patches for tests that modify the test directory. What we are
4346+ interested in testing are the components that the user normally runs,
4347+ and the testsuite doesn't form part of this - so it doesn't matter
4348+ where it's installed and runs from
4349+ - update debian/build/mozbuild.mk
4350+ - remove debian/firefox-testsuite.dirs.in
4351+ - update debian/firefox-testsuite.install.in
4352+ - update debian/firefox-testsuite.links.in
4353+ - update debian/patches/series.in
4354+ - remove d/p/test-fixes/xpcshell-ctypes-no-writes-to-appdir.patch
4355+ - remove d/p/test-fixes/xpcshell-libpref-no-writes-to-testdir.patch
4356+ - remove d/p/test-fixes/xpcshell-xpcom-no-writes-to-testdir-or-appdir.patch
4357+ - update debian/rules
4358+ - rename debian/testing/mochitest-chrome.json =>
4359+ debian/testing/extra/mochitest/mochitest-chrome.json
4360+ - rename debian/testing/mochitest.json =>
4361+ debian/testing/extra/mochitest/mochitest.json
4362+ - rename debian/testing/xpcshell-package-tests/* =>
4363+ debian/testing/extra/xpcshell/package-tests/*
4364+ - remove debian/testing/run-tests.desktop
4365+ - update debian/testing/run_mochitest.in
4366+ - update debian/testing/run_reftest.in
4367+ - rename debian/testing/run_xpcshell_tests.in =>
4368+ debian/testing/run_xpcshell_tests
4369+ - update debian/testing/run_xpcshell_tests
4370+ - update debian/testing/testrunhelper.py
4371+ - update debian/tests/crashtest
4372+ - update debian/tests/jstestbrowser
4373+ - update debian/tests/mochitest
4374+ - update debian/tests/mochitest-a11y
4375+ - update debian/tests/mochitest-browser
4376+ - update debian/tests/mochitest-chrome
4377+ - update debian/tests/mochitest-ipcplugins
4378+ - update debian/tests/reftest
4379+ - update debian/tests/xpcshell-package-tests
4380+ - update debian/tests/xpcshell-tests
4381+ * Bump the Xvfb screen size up to 1280x1024. This might fix some mochitests,
4382+ such as test_arrowpanel.xul
4383+ - update debian/testing/testrunhelper.py
4384+ * Be more forceful about ending the test session
4385+ - update debian/testing/testrunhelper.py
4386+ * Don't write the terminal bell character to JUnit results
4387+ - add d/p/test-fixes/xpcshell-xunit-output-no-bell.patch
4388+ * Fix test_json_cache.js test failure, caused by us not installing
4389+ search plugins in the application directory
4390+ - add d/p/test-fixes/xpcshell-search-fix-json-cache-test.patch
4391+ - remove d/p/test-fixes/xpcshell-search-fix-browser-dirprovider.patch,
4392+ as this isn't really needed and just complicates things
4393+ - update debian/patches/series.in
4394+ * Get rid of the autogenerated debian/patches/series, as we don't use
4395+ it now
4396+ - rename debian/patches/series.in => debian/patches/series
4397+ - update debian/build/mozbuild.mk
4398+ - update debian/source/options
4399+ * Fix LP: #1158931 by making the testsuite depend on hunspell-en-us
4400+ - update debian/control.in
4401+ * Drop unneeded test-integration/mochitest-optional-websock-log.patch
4402+ * Stop patching upstream manifests to mark tests as failing, as this is
4403+ too much of a maintenance burden. Instead, post-process the test
4404+ results using our own manifest
4405+ - update debian/patches/series
4406+ - remove d/p/test-overrides/reftest-disable-failing-tests.patch
4407+ - remove d/p/test-overrides/xpcshell-disable-failing-tests.patch
4408+ - update debian/rules
4409+ - update debian/testing/extra/mochitest/mochitest-chrome.json
4410+ - update debian/testing/extra/mochitest/mochitest.json
4411+ - add debian/testing/filter_results
4412+ - update debian/tests/control.in
4413+ - add debian/tests/post-process
4414+ - add debian/testing/results-filter-manifest.json
4415+ - update debian/firefox-testsuite.install.in
4416+ * Don't return non-zero exit status from xpcshell test failures, as this
4417+ turns the build red in Jenkins
4418+ - add d/p/test-integration/xpcshell-dont-return-nonzero-on-test-failure.patch
4419+ - update debian/patches/series.in
4420+
4421+ [ Jean-Baptiste Lallement <jean-baptiste@ubuntu.com> ]
4422+ * Allow the autopkgtest harness to specify a location for test results
4423+ - update debian/tests/crashtest
4424+ - update debian/tests/jstestbrowser
4425+ - update debian/tests/mochitest
4426+ - update debian/tests/reftest
4427+ - update debian/tests/xpcshell-package-tests
4428+ - update debian/tests/xpcshell-tests
4429+ - update debian/build/mozbuild.mk
4430+
4431+ [ Drey ]
4432+ * Use a local favicon in the DuckDuckGo searchplugin (LP: #1120991)
4433+ - update debian/searchplugins/en-US/duckduckgo.xml
4434+
4435+ -- Chris Coulson <chris.coulson@canonical.com> Thu, 14 Mar 2013 12:37:57 +0000
4436+
4437+firefox-trunk (21.0~a1~hg20130218r122221-0ubuntu1) raring; urgency=low
4438+
4439+ * New upstream snapshot v21.0 A1 HG 20130218R122221
4440+
4441+ * Drop support for building on older than precise
4442+ - update debian/apport/source_firefox.py.in
4443+ - update debian/build/mozbuild.mk
4444+ - update debian/config/mozconfig.in
4445+ - update debian/control.in
4446+ - update debian/firefox-globalmenu.dirs.in
4447+ - remove debian/firefox-restart-required.update-notifier.in
4448+ - update debian/firefox.desktop.in
4449+ - update debian/firefox.install.in
4450+ - update debian/firefox.links.in
4451+ - update debian/firefox.postinst.in
4452+ - update debian/firefox.postrm.in
4453+ - update debian/firefox.preinst.in
4454+ - update debian/firefox.prerm.in
4455+ - remove debian/patches/add-syspref-dir.patch
4456+ - update debian/patches/series.in
4457+ - remove debian/patches/use-new-yasm-in-lucid.patch
4458+ - remove debian/patches/mozilla-kde.patch
4459+ - remove debian/patches/firefox-kde.patch
4460+ - update debian/rules
4461+ - remove debian/usr.bin.firefox.apparmor.10.04
4462+ - remove debian/usr.bin.firefox.apparmor.10.10
4463+ - remove debian/usr.bin.firefox.apparmor.11.04
4464+ - remove debian/usr.bin.firefox.apparmor.9.10
4465+ * Drop the perl script for preprocessing the quilt series file
4466+ - remove debian/build/enable-dist-patches.pl
4467+ - update debian/build/mozbuild.mk
4468+ * Refresh patches
4469+ - update d/p/test-overrides/xpcshell-disable-geolocation-provider-test.patch
4470+ - update debian/patches/mochitest-allow-test-manifest-for-chrome.patch
4471+ - update debian/patches/xpcshell-allow-omit-tests-on-real-install.patch
4472+ - update d/p/test-overrides/reftest-disable-failing-tests.patch
4473+ - update debian/patches/dont-include-hyphenation-patterns.patch
4474+ - update d/p/test-fixes/xpcshell-search-fix-browser-dirprovider.patch
4475+ * Make sure that SHELL is set in the build environment
4476+ - update debian/build/mozbuild.mk
4477+ * Don't set the MOZCONFIG environment variable, but just copy our config
4478+ in to the root of the source tree
4479+ - update debian/build/mozconfig.mk
4480+ * Drop libthai suggest - this hasn't been needed for a long time
4481+ - update debian/control
4482+ * Replace latex-xft-fonts suggest with ttf-lyx (yes, I know this is a
4483+ transitional package since 12.10, but it avoids suggesting a different
4484+ package for each release)
4485+ - update debian/control
4486+ * Use virtualenv for compare-locales
4487+ - update debian/build/create-tarball.py
4488+ - update debian/build/mozbuild.mk
4489+ * Refactor create-tarball.py
4490+ * Beef up test_ubuntu_searchplugins.js a bit
4491+ * Add a helper for running tests async
4492+ - update debian/testing/xpcshell-package-tests/head_package_tests.js
4493+ - update debian/testing/xpcshell-package-tests/test_locale_matchOS.js
4494+ - update debian/testing/xpcshell-package-tests/test_searchplugins_valid.js
4495+ - update debian/testing/xpcshell-package-tests/test_ubuntu_searchplugins.js
4496+ * Add a test to make sure all of the language packs are loadable by the
4497+ addon manager
4498+ - add debian/testing/xpcshell-package-tests/test_langpack_load.js
4499+ - update debian/testing/xpcshell-package-tests/xpcshell.ini
4500+ * Add a test to make sure language pack chrome is registered correctly
4501+ - add debian/testing/xpcshell-package-tests/test_langpack_chrome.js
4502+ - update debian/testing/xpcshell-package-tests/xpcshell.ini
4503+ * Refactor test_locale_matchOS.js to use real language packs
4504+ - update d/t/xpcshell-package-tests/test_locale_matchOS.js
4505+ - update d/t/xpcshell-package-tests/test_locale_matchOS_real.js
4506+ - remove d/t/xpcshell-package-tests/data/locale-matchOS-test-addon.xpi
4507+ - update debian/source/include-binaries
4508+ - update debian/tests/control
4509+ * Don't try to override the Amazon searchplugin for Kashubian or Mongolian,
4510+ as it doesn't exist there
4511+ - add debian/searchplugins/csb/list.txt
4512+ - add debian/searchplugins/mn/list.txt
4513+ - update d/t/xpcshell-package-tests/test_ubuntu_searchplugins_real.js
4514+ * Drop revert-restartless-language-packs.patch now that bmo: #818468 has
4515+ landed
4516+ * Don't run dh_scour on the testsuite package, as this screws up a lot
4517+ of reftests and crashtests
4518+ - update debian/build/mozbuild.mk
4519+ * Disable additional failing reftests
4520+ - update d/p/test-overrides/reftest-disable-failing-tests.patch
4521+ * Disable some additional failing mochitests
4522+ - update debian/testing/mochitest.json
4523+ - update debian/testing/mochitest-chrome.json
4524+ * Disable failing test_handlerService.js xpcshell test for now
4525+ - add d/p/test-overrides/xpcshell-disable-failing-handlerService-test.patch
4526+ - update debian/patches/series.in
4527+ * Install Arabic, Korean, Japanese and Chinese fonts for the autopkg tests
4528+ - update debian/tests/control
4529+ * Testpilot only enabled on beta now
4530+ - update debian/firefox.install.in
4531+ * Move some test integration patches in to a new directory
4532+ - debian/patches/mochitest-allow-test-manifest-for-chrome.patch =>
4533+ d/p/test-integration/mochitest-allow-test-manifest-for-chrome.patch
4534+ - debian/patches/mochitest-optional-websock-log.patch =>
4535+ d/p/test-integration/mochitest-optional-websock-log.patch
4536+ - debian/patches/xpcshell-allow-omit-tests-on-real-install.patch =>
4537+ d/p/test-integration/xpcshell-allow-omit-tests-on-real-install.patch
4538+ - d/p/test-overrides/xpcshell-disable-addon-select-dialog-test.patch =>
4539+ d/p/test-integration/xpcshell-disable-addon-select-dialog-test-for-adt.patch
4540+ - d/p/test-overrides/xpcshell-disable-browserglue-distribution-test.patch =>
4541+ d/p/test-integration/xpcshell-disable-browserglue-distribution-test-for-adt.patch
4542+ - d/p/test-overrides/xpcshell-disable-extension-upgrade-test.patch =>
4543+ d/p/test-integration/xpcshell-disable-extension-upgrade-test-for-adt.patch
4544+ - update debian/patches/series.in
4545+ * Disable some extra failing xpcshell tests
4546+ - rename d/p/test-overrides/xpcshell-disable-failing-handlerService-test.patch =>
4547+ d/p/test-overrides/xpcshell-disable-failing-tests.patch
4548+ - update d/p/test-overrides/xpcshell-disable-failing-tests.patch
4549+ - remove d/p/test-overrides/xpcshell-disable-geolocation-provider-test.patch
4550+ (merged in to single patch)
4551+ - update debian/patches/series.in
4552+ * Drop test fixes merged upstream:
4553+ - remove d/p/test-fixes/xpcshell-shell-disable-gconf-tests-when-using-gsettings.patch
4554+ - remove d/p/test-fixes/mochitest-shell-disable-gconf-tests-when-using-gsettings.patch
4555+ - update debian/patches/series.in
4556+ * Tidy up mochitest-allow-test-manifest-for-chrome.patch
4557+ * Drop the ability to automatically skip xpcshell tests on an installed system that
4558+ require write access to the application directory, preferring to just disable
4559+ them instead. In reality, we weren't ever going to use this feature
4560+ - remove d/p/test-integration/xpcshell-allow-omit-tests-on-real-install.patch
4561+ - rename d/p/test-integration/xpcshell-disable-browserglue-distribution-test-for-adt.patch =>
4562+ d/p/test-integration/xpcshell-disable-tests-which-need-appdir-write-access.patch
4563+ - update d/p/test-integration/xpcshell-disable-tests-which-need-appdir-write-access.patch
4564+ - remove d/p/xpcshell-disable-extension-upgrade-test-for-adt.patch (merged
4565+ in to the last patch)
4566+ * Add JUnit output support for reftests
4567+ - add d/p/test-integration/reftest-output-junit-xml.patch
4568+ - update debian/patches/series.in
4569+ - update debian/testing/run_reftest.in
4570+ * Allow xpcshell tests to be run with JUnit outputting, and include a fix
4571+ to make sure that the output matches the schema
4572+ - update debian/testing/run_xpcshell_tests.in
4573+ - add d/p/test-integration/xpcshell-output-valid-junit-xml.patch
4574+ - update debian/patches/series.in
4575+ * Add JUnit output support for mochitests
4576+ - add d/p/test-integration/mochitest-output-junit-xml.patch
4577+ - update debian/patches/series.in
4578+ - update debian/testing/run_mochitest.in
4579+ * Drop debian/patches/python-virtualenv-multiarch-fix.patch - fixed upstream
4580+ * Turn on JUnit XML output for all tests
4581+ - update debian/build/mozbuild.mk
4582+ - update debian/tests/crashtest
4583+ - update debian/tests/jstestbrowser
4584+ - update debian/tests/mochitest
4585+ - update debian/tests/reftest
4586+ - update debian/tests/xpcshell-package-tests
4587+ - update debian/tests/xpcshell-tests
4588+ * Update for install layout changes
4589+ - update debian/firefox-locale.preinst.in
4590+ - update debian/firefox.dirs.in
4591+ - update debian/firefox.install.in
4592+ - update debian/firefox.links.in
4593+ - update debian/firefox.postinst.in
4594+ - update debian/firefox.preinst.in
4595+ - update debian/patches/dont-include-hyphenation-patterns.patch
4596+ - update debian/rules
4597+ - update debian/build/mozbuild.mk
4598+ * Drop the menubar addon
4599+ - remove debian/globalmenu
4600+ - update debian/build/mozbuild.mk
4601+ - update debian/config/mozconfig.in
4602+ - update debian/control.in
4603+ - remove debian/firefox-globalmenu.dirs.in
4604+ - remove debian/firefox-globalmenu.links.in
4605+ - remove debian/patches/unity-globalmenu-build-support.patch
4606+ - update debian/patches/series.in
4607+ * Add native support for the Unity menubar (no addon)
4608+ - add debian/patches/unity-menubar.patch
4609+ - update debian/patches/series.in
4610+ * Fix test_browserGlue_distribution.js test after application components
4611+ moved to browser/
4612+ - update debian/testing/xpcshell-build.ini
4613+
4614+ -- Chris Coulson <chris.coulson@canonical.com> Tue, 08 Jan 2013 00:43:23 +0000
4615+
4616+firefox-trunk (20.0~a1~hg20130107r117821-0ubuntu1) raring; urgency=low
4617+
4618+ * New upstream snapshot v20.0 A1 HG20130107R117821
4619+
4620+ * Update globalmenu-extension to r3.7
4621+ - update for imagelib changes in Firefox 20
4622+ - implement the mutation observer in JS, as it's no longer possible
4623+ to do it all in native code
4624+ * Refresh patches
4625+ - update debian/patches/mozilla-kde.patch
4626+ * firefox-gnome-support needs explicit dependency on libnotify
4627+ - update debian/control{,.in}
4628+ * Add support for autopkgtest, package the xpcshell, reftest and
4629+ mochitest testsuites and migrate the xpcshell-tests, reftest, crashtest,
4630+ jstestbrowser and mochitest targets to this. Note that tests that can't
4631+ be ran as an autopkgtest (eg, if they require write permissions to the
4632+ application directory) will still be ran at build time
4633+ - add firefox-testsuite package in debian/control.in
4634+ - update debian/control
4635+ - add debian/firefox-testsuite.install.in
4636+ - add debian/firefox-testsuite.links.in
4637+ - update debian/build/mozbuild.mk
4638+ - update debian/rules
4639+ - drop xpcshell-tests, reftest, crashtest, jstestbrowser and mochitest
4640+ targets from debian/build/testsuite.mk, add xpcshell-tests-build
4641+ and the ability to run xpcshell-tests with our own reduced manifest
4642+ - add debian/tests/control
4643+ - add debian/tests/crashtest
4644+ - add debian/tests/jstestbrowser
4645+ - add debian/tests/mochitest
4646+ - add debian/tests/reftest
4647+ - add debian/tests/xpcshell-tests
4648+ - add debian/testing/run_mochitest.in
4649+ - add debian/testing/run_xpcshell_tests.in
4650+ - add debian/testing/run_reftest.in
4651+ - add debian/testing/testrunhelper.py
4652+ - update debian/config/mozconfig.in to always build with --enable-tests
4653+ - add debian/testing/xpcshell-build.ini
4654+ * Ensure that the directory provider returns all searchplugin paths during
4655+ the search service xpcshell tests
4656+ - add d/p/test-fixes/xpcshell-search-fix-browser-dirprovider.patch
4657+ - update debian/patches/series.in
4658+ * Fix various tests that assume that either the application directory or
4659+ test directory can be written to
4660+ - add d/p/test-fixes/xpcshell-docshell-no-writes-to-appdir.patch
4661+ - add d/p/test-fixes/xpcshell-contentprefs-no-writes-to-appdir.patch
4662+ - add d/p/test-fixes/xpcshell-exthandler-no-writes-to-appdir.patch
4663+ - add d/p/test-fixes/xpcshell-ctypes-no-writes-to-appdir.patch
4664+ - add d/p/test-fixes/xpcshell-xpcom-no-writes-to-testdir-or-appdir.patch
4665+ - add d/p/test-fixes/xpcshell-libpref-no-writes-to-testdir.patch
4666+ - update debian/patches/series.in
4667+ * Export NO_PNG_PKG_MANGLE as optipng breaks tests that are dependent
4668+ on image format / size
4669+ - update debian/build/mozbuild.mk
4670+ * Add support for skipping xpcshell tests that require write access to the
4671+ application directory, when running the tests on a real install (but
4672+ allow them to run if running tests from the build tree)
4673+ - add debian/patches/xpcshell-allow-omit-tests-on-real-install.patch
4674+ - update debian/patches/series.in
4675+ * Don't test that the addon selection dialog appears in test_bug596343.js,
4676+ as we disable this
4677+ - add d/p/test-overrides/xpcshell-disable-addon-select-dialog-test.patch
4678+ - update debian/patches/series
4679+ * Don't write a log file to the script directory from mochitest
4680+ - add debian/patches/mochitest-optional-websock-log.patch
4681+ - update debian/patches/series.in
4682+ * Fix a failure in test_nodb_pluschanges.js due to const redeclaration
4683+ - add d/p/test-fixes/xpcshell-search-fix-const-redeclaration.patch
4684+ - update debian/patches/series.in
4685+ * Don't run the GConf-specific test_421977.js on systems where GSettings
4686+ is available, as it will fail
4687+ - add d/p/t-f/xpcshell-shell-disable-gconf-tests-when-using-gsettings.patch
4688+ - update debian/patches/series.in
4689+ * Disable failing test_geolocation_provider.js xpcshell test
4690+ - add d/p/test-overrides/xpcshell-disable-geolocation-provider-test.patch
4691+ - update debian/patches/series.in
4692+ * Disable test_upgrade.js and test_upgrade_strictcompat.js xpcshell tests
4693+ for now as they require write access to the application directory
4694+ - add d/p/test-overrides/xpcshell-disable-extension-upgrade-test.patch
4695+ - update debian/patches/series.in
4696+ * Disable test_browserGlue_distribution.js for now as it requires write
4697+ access to the application directory
4698+ - add d/p/test-overrides/xpcshell-disable-browserglue-distribution-test.patch
4699+ - update debian/patches/series.in
4700+ * Reset the "browser" and "embed-app" content prefs after running content
4701+ mochitests, so that the subsequent DOM browser-element tests don't
4702+ fail
4703+ - add d/p/test-fixes/mochitest-content-reset-permissions-when-done.patch
4704+ - update debian/patches/series.in
4705+ * Disable various failing mochitests:
4706+ - add debian/testing/mochitest.json
4707+ - add debian/testing/mochitest-chrome.json
4708+ - update debian/firefox-testsuite.install.in
4709+ * Fix issue where some tests were being added to the mochitest tests.jar
4710+ using their absolute path in the build tree
4711+ - add debian/patches/test-fixes/mochitest-tests-jar-fix.patch
4712+ - update debian/patches/series.in
4713+ * Don't run the GConf specific browser_420786.js mochitest on systems where
4714+ GSettings is available, as it will fail
4715+ - add d/p/t-f/mochitest-shell-disable-gconf-tests-when-using-gsettings.patch
4716+ - update debian/patches/series.in
4717+ * Don't ship the browser_bug538331.js mochitest as this isn't relevant
4718+ when not using the Mozilla AUS
4719+ - add d/p/test-fixes/mochitest-dont-ship-browser-postupdate-test.patch
4720+ - update debian/patches/series.in
4721+ * Make "--test-manifest" work when running chrome, browser-chrome and a11y
4722+ mochitests so that we can maintain a distro manifest for these
4723+ - add debian/patches/mochitest-allow-test-manifest-for-chrome.patch
4724+ - update debian/patches/series.in
4725+ * Disable failing reftests
4726+ - add d/p/test-overrides/reftest-disable-failing-tests.patch
4727+ - update debian/patches/series.in
4728+ * Fix broken search suggestions since the switch to https
4729+ * Add vendor xpcshell tests to verify that the search service loads
4730+ the expected number of search plugins from each language pack
4731+ - update debian/build/mozbuild.mk
4732+ - add debian/firefox-testsuite.dirs.in
4733+ - update debian/firefox-testsuite.install.in
4734+ - update debian/rules
4735+ - add debian/testing/xpcshell-package-tests/head_package_tests.js
4736+ - add debian/testing/xpcshell-package-tests/test_searchplugins_valid.js
4737+ - add debian/testing/xpcshell-package-tests/test_searchplugins_valid_real.js
4738+ - add debian/testing/xpcshell-package-tests/xpcshell.ini
4739+ - update debian/tests/control
4740+ - add debian/tests/xpcshell-package-tests
4741+ * Drop the hacky perl scripts that were being used to make sure the language
4742+ packs ship the correct plugins. Add a xpcshell test instead
4743+ - update debian/build/mozbuild.mk
4744+ - update debian/rules
4745+ - remove debian/build/refresh-search-modifications.pl
4746+ - remove debian/build/verify-search-overrides.pl
4747+ - remove debian/config/search-mods.list
4748+ - update debian/control.in
4749+ - remove debian/searchplugins/compute-overrides.json
4750+ - add debian/testing/xpcshell-package-tests/test_ubuntu_searchplugins.js
4751+ - add debian/testing/xpcshell-package-tests/test_ubuntu_searchplugins_real.js
4752+ - update debian/testing/xpcshell-package-tests/xpcshell.ini
4753+ * Fix a test failure with the Italian Amazon search plugin
4754+ - update debian/searchplugins/it/amazon-it.xml
4755+ * We set intl.locale.matchOS to ensure that Firefox uses the environment
4756+ locale. Add a test to make sure this works as expected
4757+ - add debian/testing/xpcshell-package-tests/test_locale_matchOS.js
4758+ - add debian/testing/xpcshell-package-tests/test_locale_matchOS_real.js
4759+ - add debian/testing/xpcshell-package-tests/data/locale-matchOS-test-addon.xpi
4760+ - update debian/testing/xpcshell-package-tests/head_package_tests.js
4761+ - update debian/testing/xpcshell-package-tests/test_searchplugins_valid.js
4762+ - update debian/testing/xpcshell-package-tests/test_ubuntu_searchplugins.js
4763+ - update debian/testing/xpcshell-package-tests/xpcshell.ini
4764+ - update debian/tests/control
4765+ - update debian/tests/crashtest
4766+ - update debian/tests/jstestbrowser
4767+ - update debian/tests/mochitest
4768+ - update debian/tests/reftest
4769+ - update debian/tests/xpcshell-package-tests
4770+ - update debian/tests/xpcshell-tests
4771+ - add debian/source/include-binaries
4772+ * We modify the user agent, so test that it is correct
4773+ - add debian/testing/xpcshell-package-tests/test_ubuntu_useragent.js
4774+ - update debian/testing/xpcshell-package-tests/xpcshell.ini
4775+ * Make python-virtualenv compatible with the Python multiarch changes
4776+ - add debian/patches/python-virtualenv-multiarch-fix.patch
4777+ - update debian/patches/series.in
4778+ * LP: #974146 - Add a "Open a New Private Window" action to the desktop file
4779+ - update debian/firefox.desktop.in
4780+ * Fix LP: #1094376 - Language pack isn't used. Revert bmo: #677092 (make
4781+ language packs restartless) for now, as system-wide bootstrapped addons
4782+ with chrome are pretty broken
4783+ - add debian/patches/revert-restartless-language-packs.patch
4784+ - update debian/patches/series.in
4785+
4786+ -- Chris Coulson <chris.coulson@canonical.com> Mon, 07 Jan 2013 18:47:34 +0000
4787+
4788+firefox-trunk (19.0~a1~hg20121118r113642-0ubuntu1) quantal; urgency=low
4789+
4790+ * New upstream snapshot v19.0 A1 20121118R113642
4791+
4792+ * Update globalmenu-extension to 3.7 prerelease r504
4793+ - Fix crash in uGlobalMenu::InitializePopup
4794+ - Update for imagelib changes in Firefox 19
4795+ - Update for nsCAutoString removal in Firefox 19
4796+ - Don't #include mozilla/dom/Element.h anywhere, as that now pulls
4797+ in a lot of internal headers since Firefox 19
4798+ - Fix issue with stale entries being left in the Recently Closed
4799+ Tabs / Windows menus
4800+ - Make logging work correctly on debug builds
4801+ - Handle submenu's being reopened without getting a close event
4802+ in between. We don't seem to get a close event when a menuitem
4803+ is activated
4804+ * Fix LP: #1064423 - "Submitting your report..." shows missing-icon icon.
4805+ Install the throbber icon in the package
4806+ - update debian/firefox.install.in
4807+ * Refresh patches
4808+ - update debian/patches/mozilla-kde.patch
4809+ - update debian/patches/allow-lockPref-everywhere.patch
4810+ * Drop unneeded patch
4811+ - remove debian/patches/no-internal-api-in-external-headers.patch
4812+ - update debian/patches/series.in
4813+ * Build with --disable-webrtc on all architectures except for i386 and amd64
4814+ - update debian/config/mozconfig.in
4815+ * Switch to encrypted search for Google
4816+ - update debian/searchplugins/en-GB/google.xml
4817+ - update debian/searchplugins/en-US/google.xml
4818+ - update debian/searchplugins/en-ZA/google.xml
4819+ - update debian/searchplugins/ja/google-jp.xml
4820+ - update debian/searchplugins/ku/google-ku.xml
4821+
4822+ -- Chris Coulson <chris.coulson@canonical.com> Tue, 09 Oct 2012 15:28:46 +0100
4823+
4824+firefox-trunk (18.0~a1~hg20121008r109581-0ubuntu1) quantal; urgency=low
4825+
4826+ * New upstream snapshot v18.0 A1 HG20121008R109581
4827+
4828+ * Update globalmenu-extension to 3.5.5 prerelease r468
4829+ - Fix LP: #1051152 - Firefox 16 beta crash in nsIContent::SetAttr with
4830+ greasemonkey installed
4831+ - Improve handling of radio items, and work correctly for radio items
4832+ without a name
4833+ - Refactoring to help avoid a class of reentrancy type crashes which
4834+ have been exposed by updates of third-party addons recently
4835+ - Fix crash in uGlobalMenuDocListener::HandleMutations
4836+ * Enable profiling on nightly builds
4837+ - update debian/config/mozconfig.in
4838+ * Refresh patches
4839+ - update debian/patches/mozilla-kde.patch
4840+ - update debian/patches/firefox-kde.patch
4841+ - update debian/patches/use-new-yasm-in-lucid.patch
4842+ * Turn on Network Manager integration
4843+ - update debian/vendor-gre.js
4844+ * Don't include nsString.h in nsRegion.h, which is included by nsIWidget.h,
4845+ used by our menubar addon. Use nsStringGlue.h instead
4846+ - add debian/patches/no-internal-api-in-external-headers.patch
4847+ - update debian/patches/series.in
4848+ * Update favicon for Google searchplugin
4849+ - update debian/searchplugins/en-GB/google.xml
4850+ - update debian/searchplugins/en-US/google.xml
4851+ - update debian/searchplugins/en-ZA/google.xml
4852+ - update debian/searchplugins/ja/google-jp.xml
4853+ - update debian/searchplugins/ku/google-ku.xml
4854+
4855+ -- Chris Coulson <chris.coulson@canonical.com> Tue, 28 Aug 2012 11:39:02 +0100
4856+
4857+firefox-trunk (17.0~a1~hg20120826r103484-0ubuntu1) quantal; urgency=low
4858+
4859+ * New upstream snapshot v17.0 A1 HG20120826R103484
4860+
4861+ * Update globalmenu-extension to 3.5 prerelease r440
4862+ + Fixes for LP: #1025011 - HUD search crashes Firefox when Firebug
4863+ is installed
4864+ - Provide our own binding for menupopup nodes which derives from the
4865+ default binding and makes the "state" property work as if there
4866+ were a frame
4867+ - Make all menu nodes reference counted, and hold a strong ref when
4868+ dispatching events, in case the event results in the removal of menu
4869+ nodes
4870+ + Drop the edit UI workarounds
4871+ + Fixes for LP: #1035305 - Crash when switching apps back to Firefox
4872+ with Firebug installed
4873+ - Keep the menu we export in sync with the document tree all of the
4874+ time, rather than only when the menus are on screen. The HUD likes to
4875+ open submenus without opening any of its ancestors, which can result in
4876+ us handling events on menu nodes that are no longer in a document
4877+ if an ancestor responds to a bubbled-up event by removing its
4878+ children
4879+ - Ensure we always null check the result of nsIDocument::GetCurrentDoc
4880+ + When tearing down a menu, make sure that we empty out our DbusmenuMenuitem
4881+ in case the parent reuses that item for another menu. Fixes a memory leak
4882+ and an issue where Firebug menu items are duplicated indefinitely each
4883+ time a menu is opened
4884+ * Switch back from lzma to bz2 for the tarball, as compression speed
4885+ is abysmal on my laptop
4886+ - update debian/build/create-tarball.py
4887+ - update debian/build/mozbuild.mk
4888+ * Fix quoting issues when parsing preferences
4889+ - update debian/apport/source_firefox.py.in
4890+ * Refresh patches
4891+ - update debian/patches/mozilla-kde.patch
4892+ - update debian/patches/firefox-kde.patch
4893+ - update debian/patches/ubuntu-ua-string-changes.patch
4894+ - update debian/patches/add-syspref-dir.patch
4895+ - update debian/patches/unity-globalmenu-build-support.patch
4896+ * Don't ship empty ".mkdir.done" files in our packages. This should probably
4897+ be fixed in the upstream build system, but we'll do a temporary band-aid
4898+ fix in the packaging for now just so we can get some builds
4899+ - update debian/build/mozbuild.mk
4900+
4901+ -- Chris Coulson <chris.coulson@canonical.com> Thu, 19 Jul 2012 02:18:51 +0100
4902+
4903+firefox-trunk (16.0~a1~hg20120715r99319-0ubuntu1) quantal; urgency=low
4904+
4905+ * New upstream snapshot v16.0 A1 HG20120715R99319
4906+
4907+ [ Chris Coulson <chris.coulson@canonical.com> ]
4908+ * Update globalmenu-extension to 3.3
4909+ - Fix LP: #1010580 - No choice of folder when adding a bookmark from
4910+ the bookmark menu
4911+ - Fix LP: #775080 - Thunderbird with Firetray/MinimizeToTray -
4912+ Global menu disappears
4913+ - Fix LP: #813775 - Hitting an assertion in dbusmenu
4914+ - Fix LP: #861565 - No buttons in the "Show All Bookmarks" dialog
4915+ - Fix LP: #1016081 - Menubar is not hidden when using the Firefox
4916+ button outside of Unity
4917+ - Fix LP: #775305 - An empty menu appears when FFChrome is installed
4918+ - Fix LP: #1017247 - Menubar appears in the window as well as the
4919+ Unity panel. Manually register our UA stylesheet rather than relying
4920+ on this happening via chrome registration, to work around a bug
4921+ in various bootstrapped third party addons (eg, pentadactyl),
4922+ which initialize and use the stylesheet service before extension
4923+ chrome is registered for non-restartless addons such as ours
4924+ - Add a small delay when opening the menu with the keyboard, so that
4925+ the additional items are added before the menu appears. Fixes an
4926+ issue where keyboard focus isn't on the first item when opening the
4927+ history menu with the keyboard
4928+ - Fix a crash in uGlobalMenu::RecycleList::~RecycleList()
4929+ * Merge get-orig-source.mk in to mozbuild.mk
4930+ - update debian/build/mozbuild.mk
4931+ - remove debian/build/get-orig-source.mk
4932+ * Drop options for things which don't change from build scripts
4933+ - update debian/build/dump-langpack-control-entries.pl
4934+ - update debian/build/enable-dist-patches.pl
4935+ - update debian/build/mozbuild.mk
4936+ - update debian/build/refresh-supported-locales.pl
4937+ * Handle comments in locales.blacklist
4938+ - update debian/build/refresh-supported-locales.pl
4939+ - update debian/config/locales.blacklist
4940+ * Install the webapprt bits
4941+ - update debian/firefox.install.in
4942+ * Fork the upstream text preprocessor and add support for additional
4943+ comparison operators, which means we no longer have to add new
4944+ defines for every distro version specific change we add
4945+ - add debian/build/Expression.py
4946+ - add debian/build/Preprocessor.py
4947+ - update debian/apport/source_firefox.py.in
4948+ - update debian/build/mozbuild.mk
4949+ - update debian/config/mozconfig.in
4950+ - update debian/firefox-dev.install.in
4951+ - update debian/firefox-locale.preinst.in
4952+ - update debian/firefox.desktop.in
4953+ - update debian/firefox.dirs.in
4954+ - update debian/firefox.install.in
4955+ - update debian/firefox.links.in
4956+ - update debian/firefox.postinst.in
4957+ - update debian/firefox.postrm.in
4958+ - update debian/firefox.preinst.in
4959+ - update debian/firefox.prerm.in
4960+ - update debian/rules
4961+ * Refresh patches after merging of nsILocalFile in to nsIFile
4962+ - update debian/patches/plugin-for-mimetype.patch
4963+ - update debian/patches/firefox-kde.patch
4964+ - update debian/patches/mozilla-kde.patch
4965+ * Drop StartupWMClass from the desktop file, as it isn't actually
4966+ required by gnome shell or unity
4967+ - update debian/firefox.desktop.in
4968+ * Build depend on libxml-simple-perl and libjson-perl, as they are
4969+ needed for verifying the search plugin overrides
4970+ - update debian/control{,.in}
4971+ * Ensure that overrides are applied for en-US searchplugins
4972+ - update debian/build/mozbuild.mk
4973+ * Don't support PGO builds on armhf. The builders are incapable of
4974+ building it
4975+ - update debian/build/mozbuild.mk
4976+ * Sort preferences alphabetically in the apport data
4977+ - update debian/apport/source_firefox.py.in
4978+ * Treat preferences set by ubufox as default prefs so that they
4979+ don't show up in apport data, unless the preference files have
4980+ been modified
4981+ - update debian/apport/source_firefox.py.in
4982+ * Make the apport hook manage random pref files dropped in to
4983+ the Firefox install folder, and bundle preferences
4984+ - update debian/apport/source_firefox.py.in
4985+ * Refresh patches
4986+ - update debian/patches/ubuntu-ua-string-changes.patch
4987+ - update debian/patches/mozilla-kde.patch
4988+ - update debian/patches/dont-override-general-useragent-locale.patch
4989+ - update debian/patches/firefox-kde.patch
4990+ - update debian/patches/add-syspref-dir.patch
4991+ * Kill the SDK in quantal - nothing in the archive depends on it
4992+ (note, we still provide the NPAPI SDK though)
4993+ - update debian/firefox-dev.install.in
4994+ - update debian/firefox-dev.links.in
4995+ * Fix ordering issues when loading preferences in the apport hook
4996+ - update debian/apport/source_firefox.py.in
4997+ * Fix LP: #1013186 - install our vendor preferences as application
4998+ defaults rather than GRE defaults, so that they are loaded after
4999+ the upstream defaults again. The upstream defaults were also moved
5000+ as part of the webapp runtime work (which has it's own application
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: