Merge lp:~cmiller/firefox/googapi into lp:firefox
- googapi
- Merge into firefox.lunar
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 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Mozilla Team | Pending | ||
Review via email: mp+434281@code.launchpad.net |
Commit message
Description of the change
Welll
Oh well
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~
hg20160801r3075 08-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~
hg20160602r3000 71-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
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 |