Import Debian changes 102.0+build2-ok1

firefox (102.0+build2-ok1) yangtze; urgency=medium

  * Build for openKylin.
This commit is contained in:
openKylinBot 2022-04-25 22:03:04 +08:00 committed by Lu zhiping
parent f045b3d5ed
commit bb8dbabd7d
376 changed files with 1591000 additions and 0 deletions

567
debian/MPL-1.1 vendored Normal file
View File

@ -0,0 +1,567 @@
MOZILLA PUBLIC LICENSE
Version 1.1
---------------
1. Definitions.
1.0.1. "Commercial Use" means distribution or otherwise making the
Covered Code available to a third party.
1.1. "Contributor" means each entity that creates or contributes to
the creation of Modifications.
1.2. "Contributor Version" means the combination of the Original
Code, prior Modifications used by a Contributor, and the Modifications
made by that particular Contributor.
1.3. "Covered Code" means the Original Code or Modifications or the
combination of the Original Code and Modifications, in each case
including portions thereof.
1.4. "Electronic Distribution Mechanism" means a mechanism generally
accepted in the software development community for the electronic
transfer of data.
1.5. "Executable" means Covered Code in any form other than Source
Code.
1.6. "Initial Developer" means the individual or entity identified
as the Initial Developer in the Source Code notice required by Exhibit
A.
1.7. "Larger Work" means a work which combines Covered Code or
portions thereof with code not governed by the terms of this License.
1.8. "License" means this document.
1.8.1. "Licensable" means having the right to grant, to the maximum
extent possible, whether at the time of the initial grant or
subsequently acquired, any and all of the rights conveyed herein.
1.9. "Modifications" means any addition to or deletion from the
substance or structure of either the Original Code or any previous
Modifications. When Covered Code is released as a series of files, a
Modification is:
A. Any addition to or deletion from the contents of a file
containing Original Code or previous Modifications.
B. Any new file that contains any part of the Original Code or
previous Modifications.
1.10. "Original Code" means Source Code of computer software code
which is described in the Source Code notice required by Exhibit A as
Original Code, and which, at the time of its release under this
License is not already Covered Code governed by this License.
1.10.1. "Patent Claims" means any patent claim(s), now owned or
hereafter acquired, including without limitation, method, process,
and apparatus claims, in any patent Licensable by grantor.
1.11. "Source Code" means the preferred form of the Covered Code for
making modifications to it, including all modules it contains, plus
any associated interface definition files, scripts used to control
compilation and installation of an Executable, or source code
differential comparisons against either the Original Code or another
well known, available Covered Code of the Contributor's choice. The
Source Code can be in a compressed or archival form, provided the
appropriate decompression or de-archiving software is widely available
for no charge.
1.12. "You" (or "Your") means an individual or a legal entity
exercising rights under, and complying with all of the terms of, this
License or a future version of this License issued under Section 6.1.
For legal entities, "You" includes any entity which controls, is
controlled by, or is under common control with You. For purposes of
this definition, "control" means (a) the power, direct or indirect,
to cause the direction or management of such entity, whether by
contract or otherwise, or (b) ownership of more than fifty percent
(50%) of the outstanding shares or beneficial ownership of such
entity.
2. Source Code License.
2.1. The Initial Developer Grant.
The Initial Developer hereby grants You a world-wide, royalty-free,
non-exclusive license, subject to third party intellectual property
claims:
(a) under intellectual property rights (other than patent or
trademark) Licensable by Initial Developer to use, reproduce,
modify, display, perform, sublicense and distribute the Original
Code (or portions thereof) with or without Modifications, and/or
as part of a Larger Work; and
(b) under Patents Claims infringed by the making, using or
selling of Original Code, to make, have made, use, practice,
sell, and offer for sale, and/or otherwise dispose of the
Original Code (or portions thereof).
(c) the licenses granted in this Section 2.1(a) and (b) are
effective on the date Initial Developer first distributes
Original Code under the terms of this License.
(d) Notwithstanding Section 2.1(b) above, no patent license is
granted: 1) for code that You delete from the Original Code; 2)
separate from the Original Code; or 3) for infringements caused
by: i) the modification of the Original Code or ii) the
combination of the Original Code with other software or devices.
2.2. Contributor Grant.
Subject to third party intellectual property claims, each Contributor
hereby grants You a world-wide, royalty-free, non-exclusive license
(a) under intellectual property rights (other than patent or
trademark) Licensable by Contributor, to use, reproduce, modify,
display, perform, sublicense and distribute the Modifications
created by such Contributor (or portions thereof) either on an
unmodified basis, with other Modifications, as Covered Code
and/or as part of a Larger Work; and
(b) under Patent Claims infringed by the making, using, or
selling of Modifications made by that Contributor either alone
and/or in combination with its Contributor Version (or portions
of such combination), to make, use, sell, offer for sale, have
made, and/or otherwise dispose of: 1) Modifications made by that
Contributor (or portions thereof); and 2) the combination of
Modifications made by that Contributor with its Contributor
Version (or portions of such combination).
(c) the licenses granted in Sections 2.2(a) and 2.2(b) are
effective on the date Contributor first makes Commercial Use of
the Covered Code.
(d) Notwithstanding Section 2.2(b) above, no patent license is
granted: 1) for any code that Contributor has deleted from the
Contributor Version; 2) separate from the Contributor Version;
3) for infringements caused by: i) third party modifications of
Contributor Version or ii) the combination of Modifications made
by that Contributor with other software (except as part of the
Contributor Version) or other devices; or 4) under Patent Claims
infringed by Covered Code in the absence of Modifications made by
that Contributor.
3. Distribution Obligations.
3.1. Application of License.
The Modifications which You create or to which You contribute are
governed by the terms of this License, including without limitation
Section 2.2. The Source Code version of Covered Code may be
distributed only under the terms of this License or a future version
of this License released under Section 6.1, and You must include a
copy of this License with every copy of the Source Code You
distribute. You may not offer or impose any terms on any Source Code
version that alters or restricts the applicable version of this
License or the recipients' rights hereunder. However, You may include
an additional document offering the additional rights described in
Section 3.5.
3.2. Availability of Source Code.
Any Modification which You create or to which You contribute must be
made available in Source Code form under the terms of this License
either on the same media as an Executable version or via an accepted
Electronic Distribution Mechanism to anyone to whom you made an
Executable version available; and if made available via Electronic
Distribution Mechanism, must remain available for at least twelve (12)
months after the date it initially became available, or at least six
(6) months after a subsequent version of that particular Modification
has been made available to such recipients. You are responsible for
ensuring that the Source Code version remains available even if the
Electronic Distribution Mechanism is maintained by a third party.
3.3. Description of Modifications.
You must cause all Covered Code to which You contribute to contain a
file documenting the changes You made to create that Covered Code and
the date of any change. You must include a prominent statement that
the Modification is derived, directly or indirectly, from Original
Code provided by the Initial Developer and including the name of the
Initial Developer in (a) the Source Code, and (b) in any notice in an
Executable version or related documentation in which You describe the
origin or ownership of the Covered Code.
3.4. Intellectual Property Matters
(a) Third Party Claims.
If Contributor has knowledge that a license under a third party's
intellectual property rights is required to exercise the rights
granted by such Contributor under Sections 2.1 or 2.2,
Contributor must include a text file with the Source Code
distribution titled "LEGAL" which describes the claim and the
party making the claim in sufficient detail that a recipient will
know whom to contact. If Contributor obtains such knowledge after
the Modification is made available as described in Section 3.2,
Contributor shall promptly modify the LEGAL file in all copies
Contributor makes available thereafter and shall take other steps
(such as notifying appropriate mailing lists or newsgroups)
reasonably calculated to inform those who received the Covered
Code that new knowledge has been obtained.
(b) Contributor APIs.
If Contributor's Modifications include an application programming
interface and Contributor has knowledge of patent licenses which
are reasonably necessary to implement that API, Contributor must
also include this information in the LEGAL file.
(c) Representations.
Contributor represents that, except as disclosed pursuant to
Section 3.4(a) above, Contributor believes that Contributor's
Modifications are Contributor's original creation(s) and/or
Contributor has sufficient rights to grant the rights conveyed by
this License.
3.5. Required Notices.
You must duplicate the notice in Exhibit A in each file of the Source
Code. If it is not possible to put such notice in a particular Source
Code file due to its structure, then You must include such notice in a
location (such as a relevant directory) where a user would be likely
to look for such a notice. If You created one or more Modification(s)
You may add your name as a Contributor to the notice described in
Exhibit A. You must also duplicate this License in any documentation
for the Source Code where You describe recipients' rights or ownership
rights relating to Covered Code. You may choose to offer, and to
charge a fee for, warranty, support, indemnity or liability
obligations to one or more recipients of Covered Code. However, You
may do so only on Your own behalf, and not on behalf of the Initial
Developer or any Contributor. You must make it absolutely clear than
any such warranty, support, indemnity or liability obligation is
offered by You alone, and You hereby agree to indemnify the Initial
Developer and every Contributor for any liability incurred by the
Initial Developer or such Contributor as a result of warranty,
support, indemnity or liability terms You offer.
3.6. Distribution of Executable Versions.
You may distribute Covered Code in Executable form only if the
requirements of Section 3.1-3.5 have been met for that Covered Code,
and if You include a notice stating that the Source Code version of
the Covered Code is available under the terms of this License,
including a description of how and where You have fulfilled the
obligations of Section 3.2. The notice must be conspicuously included
in any notice in an Executable version, related documentation or
collateral in which You describe recipients' rights relating to the
Covered Code. You may distribute the Executable version of Covered
Code or ownership rights under a license of Your choice, which may
contain terms different from this License, provided that You are in
compliance with the terms of this License and that the license for the
Executable version does not attempt to limit or alter the recipient's
rights in the Source Code version from the rights set forth in this
License. If You distribute the Executable version under a different
license You must make it absolutely clear that any terms which differ
from this License are offered by You alone, not by the Initial
Developer or any Contributor. You hereby agree to indemnify the
Initial Developer and every Contributor for any liability incurred by
the Initial Developer or such Contributor as a result of any such
terms You offer.
3.7. Larger Works.
You may create a Larger Work by combining Covered Code with other code
not governed by the terms of this License and distribute the Larger
Work as a single product. In such a case, You must make sure the
requirements of this License are fulfilled for the Covered Code.
4. Inability to Comply Due to Statute or Regulation.
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Code due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description
must be included in the LEGAL file described in Section 3.4 and must
be included with all distributions of the Source Code. Except to the
extent prohibited by statute or regulation, such description must be
sufficiently detailed for a recipient of ordinary skill to be able to
understand it.
5. Application of this License.
This License applies to code to which the Initial Developer has
attached the notice in Exhibit A and to related Covered Code.
6. Versions of the License.
6.1. New Versions.
Netscape Communications Corporation ("Netscape") may publish revised
and/or new versions of the License from time to time. Each version
will be given a distinguishing version number.
6.2. Effect of New Versions.
Once Covered Code has been published under a particular version of the
License, You may always continue to use it under the terms of that
version. You may also choose to use such Covered Code under the terms
of any subsequent version of the License published by Netscape. No one
other than Netscape has the right to modify the terms applicable to
Covered Code created under this License.
6.3. Derivative Works.
If You create or use a modified version of this License (which you may
only do in order to apply it to code which is not already Covered Code
governed by this License), You must (a) rename Your license so that
the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
"MPL", "NPL" or any confusingly similar phrase do not appear in your
license (except to note that your license differs from this License)
and (b) otherwise make it clear that Your version of the license
contains terms which differ from the Mozilla Public License and
Netscape Public License. (Filling in the name of the Initial
Developer, Original Code or Contributor in the notice described in
Exhibit A shall not of themselves be deemed to be modifications of
this License.)
7. DISCLAIMER OF WARRANTY.
COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
8. TERMINATION.
8.1. This License and the rights granted hereunder will terminate
automatically if You fail to comply with terms herein and fail to cure
such breach within 30 days of becoming aware of the breach. All
sublicenses to the Covered Code which are properly granted shall
survive any termination of this License. Provisions which, by their
nature, must remain in effect beyond the termination of this License
shall survive.
8.2. If You initiate litigation by asserting a patent infringement
claim (excluding declatory judgment actions) against Initial Developer
or a Contributor (the Initial Developer or Contributor against whom
You file such action is referred to as "Participant") alleging that:
(a) such Participant's Contributor Version directly or indirectly
infringes any patent, then any and all rights granted by such
Participant to You under Sections 2.1 and/or 2.2 of this License
shall, upon 60 days notice from Participant terminate prospectively,
unless if within 60 days after receipt of notice You either: (i)
agree in writing to pay Participant a mutually agreeable reasonable
royalty for Your past and future use of Modifications made by such
Participant, or (ii) withdraw Your litigation claim with respect to
the Contributor Version against such Participant. If within 60 days
of notice, a reasonable royalty and payment arrangement are not
mutually agreed upon in writing by the parties or the litigation claim
is not withdrawn, the rights granted by Participant to You under
Sections 2.1 and/or 2.2 automatically terminate at the expiration of
the 60 day notice period specified above.
(b) any software, hardware, or device, other than such Participant's
Contributor Version, directly or indirectly infringes any patent, then
any rights granted to You by such Participant under Sections 2.1(b)
and 2.2(b) are revoked effective as of the date You first made, used,
sold, distributed, or had made, Modifications made by that
Participant.
8.3. If You assert a patent infringement claim against Participant
alleging that such Participant's Contributor Version directly or
indirectly infringes any patent where such claim is resolved (such as
by license or settlement) prior to the initiation of patent
infringement litigation, then the reasonable value of the licenses
granted by such Participant under Sections 2.1 or 2.2 shall be taken
into account in determining the amount or value of any payment or
license.
8.4. In the event of termination under Sections 8.1 or 8.2 above,
all end user license agreements (excluding distributors and resellers)
which have been validly granted by You or any distributor hereunder
prior to termination shall survive termination.
9. LIMITATION OF LIABILITY.
UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
10. U.S. GOVERNMENT END USERS.
The Covered Code is a "commercial item," as that term is defined in
48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
software" and "commercial computer software documentation," as such
terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
all U.S. Government End Users acquire Covered Code with only those
rights set forth herein.
11. MISCELLANEOUS.
This License represents the complete agreement concerning subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. This License shall be governed by
California law provisions (except to the extent applicable law, if
any, provides otherwise), excluding its conflict-of-law provisions.
With respect to disputes in which at least one party is a citizen of,
or an entity chartered or registered to do business in the United
States of America, any litigation relating to this License shall be
subject to the jurisdiction of the Federal Courts of the Northern
District of California, with venue lying in Santa Clara County,
California, with the losing party responsible for costs, including
without limitation, court costs and reasonable attorneys' fees and
expenses. The application of the United Nations Convention on
Contracts for the International Sale of Goods is expressly excluded.
Any law or regulation which provides that the language of a contract
shall be construed against the drafter shall not apply to this
License.
12. RESPONSIBILITY FOR CLAIMS.
As between Initial Developer and the Contributors, each party is
responsible for claims and damages arising, directly or indirectly,
out of its utilization of rights under this License and You agree to
work with Initial Developer and Contributors to distribute such
responsibility on an equitable basis. Nothing herein is intended or
shall be deemed to constitute any admission of liability.
13. MULTIPLE-LICENSED CODE.
Initial Developer may designate portions of the Covered Code as
"Multiple-Licensed". "Multiple-Licensed" means that the Initial
Developer permits you to utilize portions of the Covered Code under
Your choice of the NPL or the alternative licenses, if any, specified
by the Initial Developer in the file described in Exhibit A.
EXHIBIT A -Mozilla Public License.
``The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is ______________________________________.
The Initial Developer of the Original Code is ________________________.
Portions created by ______________________ are Copyright (C) ______
_______________________. All Rights Reserved.
Contributor(s): ______________________________________.
Alternatively, the contents of this file may be used under the terms
of the _____ license (the "[___] License"), in which case the
provisions of [______] License are applicable instead of those
above. If you wish to allow use of your version of this file only
under the terms of the [____] License and not to allow others to use
your version of this file under the MPL, indicate your decision by
deleting the provisions above and replace them with the notice and
other provisions required by the [___] License. If you do not delete
the provisions above, a recipient may use your version of this file
under either the MPL or the [___] License."
[NOTE: The text of this Exhibit A may differ slightly from the text of
the notices in the Source Code files of the Original Code. You should
use the text of this Exhibit A rather than the text found in the
Original Code Source Code for Your Modifications.]
----------------------------------------------------------------------
AMENDMENTS
The Netscape Public License Version 1.1 ("NPL") consists of the
Mozilla Public License Version 1.1 with the following Amendments,
including Exhibit A-Netscape Public License. Files identified with
"Exhibit A-Netscape Public License" are governed by the Netscape
Public License Version 1.1.
Additional Terms applicable to the Netscape Public License.
I. Effect.
These additional terms described in this Netscape Public
License -- Amendments shall apply to the Mozilla Communicator
client code and to all Covered Code under this License.
II. "Netscape's Branded Code" means Covered Code that Netscape
distributes and/or permits others to distribute under one or more
trademark(s) which are controlled by Netscape but which are not
licensed for use under this License.
III. Netscape and logo.
This License does not grant any rights to use the trademarks
"Netscape", the "Netscape N and horizon" logo or the "Netscape
lighthouse" logo, "Netcenter", "Gecko", "Java" or "JavaScript",
"Smart Browsing" even if such marks are included in the Original
Code or Modifications.
IV. Inability to Comply Due to Contractual Obligation.
Prior to licensing the Original Code under this License, Netscape
has licensed third party code for use in Netscape's Branded Code.
To the extent that Netscape is limited contractually from making
such third party code available under this License, Netscape may
choose to reintegrate such code into Covered Code without being
required to distribute such code in Source Code form, even if
such code would otherwise be considered "Modifications" under
this License.
V. Use of Modifications and Covered Code by Initial Developer.
V.1. In General.
The obligations of Section 3 apply to Netscape, except to
the extent specified in this Amendment, Section V.2 and V.3.
V.2. Other Products.
Netscape may include Covered Code in products other than the
Netscape's Branded Code which are released by Netscape
during the two (2) years following the release date of the
Original Code, without such additional products becoming
subject to the terms of this License, and may license such
additional products on different terms from those contained
in this License.
V.3. Alternative Licensing.
Netscape may license the Source Code of Netscape's Branded
Code, including Modifications incorporated therein, without
such Netscape Branded Code becoming subject to the terms of
this License, and may license such Netscape Branded Code on
different terms from those contained in this License.
VI. Litigation.
Notwithstanding the limitations of Section 11 above, the
provisions regarding litigation in Section 11(a), (b) and (c) of
the License shall apply to all disputes relating to this License.
EXHIBIT A-Netscape Public License.
"The contents of this file are subject to the Netscape Public
License Version 1.1 (the "License"); you may not use this file
except in compliance with the License. You may obtain a copy of
the License at http://www.mozilla.org/NPL/
Software distributed under the License is distributed on an "AS
IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
implied. See the License for the specific language governing
rights and limitations under the License.
The Original Code is Mozilla Communicator client code, released
March 31, 1998.
The Initial Developer of the Original Code is Netscape
Communications Corporation. Portions created by Netscape are
Copyright (C) 1998-1999 Netscape Communications Corporation. All
Rights Reserved.
Contributor(s): ______________________________________.
Alternatively, the contents of this file may be used under the
terms of the _____ license (the "[___] License"), in which case
the provisions of [______] License are applicable instead of
those above. If you wish to allow use of your version of this
file only under the terms of the [____] License and not to allow
others to use your version of this file under the NPL, indicate
your decision by deleting the provisions above and replace them
with the notice and other provisions required by the [___]
License. If you do not delete the provisions above, a recipient
may use your version of this file under either the NPL or the
[___] License."

373
debian/MPL-2.0 vendored Normal file
View File

@ -0,0 +1,373 @@
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
Exhibit A - Source Code Form License Notice
-------------------------------------------
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.

15
debian/README.Debian.in vendored Normal file
View File

@ -0,0 +1,15 @@
Apparmor Profile
----------------
If your system uses AppArmor, please note that the shipped profile is disabled
by default. The profile can be enabled by performing:
$ sudo aa-enforce /etc/apparmor.d/usr.bin.@MOZ_PKG_NAME@
The profile can be disabled by performing:
$ sudo apparmor_parser -R /etc/apparmor.d/usr.bin.@MOZ_PKG_NAME@
$ sudo ln -s /etc/apparmor.d/usr.bin.@MOZ_PKG_NAME@ /etc/apparmor.d/disable/usr.bin.@MOZ_PKG_NAME@
This profile should work without modification for most plugins available in
Ubuntu, but may require adjusting for your environment. Please see
https://wiki.ubuntu.com/DebuggingApparmor before filing a bug against this
software.

5
debian/README.source vendored Normal file
View File

@ -0,0 +1,5 @@
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
2) To create the fully patched source, just run "debian/rules apply-patches" in the source directory
3) To remove any changes applied to the packaging, run "fakeroot debian/rules clean". This will remove all patches and delete auto-generated files

4
debian/apport/blacklist.in vendored Normal file
View File

@ -0,0 +1,4 @@
%%ifdef MOZ_ENABLE_BREAKPAD
/@MOZ_LIBDIR@/@MOZ_APP_NAME@
/@MOZ_LIBDIR@/plugin-container
%%endif

3
debian/apport/native-origins.in vendored Normal file
View File

@ -0,0 +1,3 @@
LP-PPA-ubuntu-mozilla-daily
LP-PPA-ubuntu-mozilla-daily-firefox-aurora
LP-PPA-mozillateam-firefox-next

1483
debian/apport/source_firefox.py.in vendored Normal file

File diff suppressed because it is too large Load Diff

188
debian/build/Expression.py vendored Normal file
View File

@ -0,0 +1,188 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
"""
Parses and evaluates simple statements for Preprocessor:
Expression currently supports the following grammar, whitespace is ignored:
expression :
unary ( ( '==' | '!=' ) unary ) ? ;
unary :
'!'? value ;
value :
[0-9]+ # integer
| \w+ # string identifier or value;
"""
import re
class Expression:
def __init__(self, expression_string):
"""
Create a new expression with this string.
The expression will already be parsed into an Abstract Syntax Tree.
"""
self.content = expression_string
self.offset = 0
self.__ignore_whitespace()
self.e = self.__get_equality()
if self.content:
raise Expression.ParseError(self)
def __get_equality(self):
"""
Production: unary ( ( '==' | '!=' ) unary ) ?
"""
if not len(self.content):
return None
rv = Expression.__AST("equality")
# unary
rv.append(self.__get_unary())
self.__ignore_whitespace()
if not re.match('([=!]=|[<>]=?|=[<>])', self.content):
# no equality needed, short cut to our prime unary
return rv[0]
# append operator
op_length = 1 if re.match('[<>][^=]', self.content) else 2
rv.append(Expression.__ASTLeaf('op', self.content[:op_length]))
self.__strip(op_length)
self.__ignore_whitespace()
rv.append(self.__get_unary())
self.__ignore_whitespace()
return rv
def __get_unary(self):
"""
Production: '!'? value
"""
# eat whitespace right away, too
not_ws = re.match('!\s*', self.content)
if not not_ws:
return self.__get_value()
rv = Expression.__AST('not')
self.__strip(not_ws.end())
rv.append(self.__get_value())
self.__ignore_whitespace()
return rv
def __get_value(self):
"""
Production: ( [0-9]+ | \w+)
Note that the order is important, and the expression is kind-of
ambiguous as \w includes 0-9. One could make it unambiguous by
removing 0-9 from the first char of a string literal.
"""
rv = None
word_len = re.match('[\-\+]?[0-9]*', self.content).end()
if word_len:
value = int(self.content[:word_len])
rv = Expression.__ASTLeaf('int', value)
else:
word_len = re.match('\w*', self.content).end()
if word_len:
rv = Expression.__ASTLeaf('string', self.content[:word_len])
else:
raise Expression.ParseError(self)
self.__strip(word_len)
self.__ignore_whitespace()
return rv
def __ignore_whitespace(self):
ws_len = re.match('\s*', self.content).end()
self.__strip(ws_len)
return
def __strip(self, length):
"""
Remove a given amount of chars from the input and update
the offset.
"""
self.content = self.content[length:]
self.offset += length
def evaluate(self, context):
"""
Evaluate the expression with the given context
"""
# Helper function to evaluate __get_equality results
def eval_equality(tok):
left = opmap[tok[0].type](tok[0])
right = opmap[tok[2].type](tok[2])
rv = left == right
if tok[1].value == '==':
return left == right
elif tok[1].value == '!=':
return not left == right
elif tok[1].value == '<':
return left < right
elif tok[1].value == '>':
return left > right
elif tok[1].value == '<=' or tok[1].value == '=<':
return left <= right
elif tok[1].value == '>=' or tok[1].value == '=>':
return left >= right
raise RuntimeError('Invalid operator "%s"' % tok[1].value)
# Mapping from token types to evaluator functions
# Apart from (non-)equality, all these can be simple lambda forms.
opmap = {
'equality': eval_equality,
'not': lambda tok: not opmap[tok[0].type](tok[0]),
'string': lambda tok: context[tok.value],
'int': lambda tok: tok.value}
return opmap[self.e.type](self.e);
class __AST(list):
"""
Internal class implementing Abstract Syntax Tree nodes
"""
def __init__(self, type):
self.type = type
super(self.__class__, self).__init__(self)
class __ASTLeaf:
"""
Internal class implementing Abstract Syntax Tree leafs
"""
def __init__(self, type, value):
self.value = value
self.type = type
def __str__(self):
return self.value.__str__()
def __repr__(self):
return self.value.__repr__()
class ParseError(Exception):
"""
Error raised when parsing fails.
It has two members, offset and content, which give the offset of the
error and the offending content.
"""
def __init__(self, expression):
self.offset = expression.offset
self.content = expression.content[:3]
def __str__(self):
return 'Unexpected content at offset %i, "%s"'%(self.offset, self.content)
class Context(dict):
"""
This class holds variable values by subclassing dict, and while it
truthfully reports True and False on
name in context
it returns the variable name itself on
context["name"]
to reflect the ambiguity between string literals and preprocessor
variables.
"""
def __getitem__(self, key):
if key in self:
return super(self.__class__, self).__getitem__(key)
return key

455
debian/build/Preprocessor.py vendored Normal file
View File

@ -0,0 +1,455 @@
#!/usr/bin/python3
"""
This is a very primitive line based preprocessor, for times when using
a C preprocessor isn't an option.
"""
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
import sys
import os
import os.path
import re
from optparse import OptionParser
from functools import reduce
# hack around win32 mangling our line endings
# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65443
if sys.platform == "win32":
import msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
os.linesep = '\n'
import Expression
__all__ = ['Preprocessor', 'preprocess']
class Preprocessor:
"""
Class for preprocessing text files.
"""
class Error(RuntimeError):
def __init__(self, cpp, MSG, context):
self.file = cpp.context['FILE']
self.line = cpp.context['LINE']
self.key = MSG
RuntimeError.__init__(self, (self.file, self.line, self.key, context))
def __init__(self):
self.context = Expression.Context()
for k,v in {'FILE': '',
'LINE': 0,
'DIRECTORY': os.path.abspath('.')}.items():
self.context[k] = v
self.disableLevel = 0
# ifStates can be
# 0: hadTrue
# 1: wantsTrue
# 2: #else found
self.ifStates = []
self.checkLineNumbers = False
self.writtenLines = 0
self.filters = []
self.cmds = {}
for cmd, level in {'define': 0,
'undef': 0,
'if': sys.maxsize,
'ifdef': sys.maxsize,
'ifndef': sys.maxsize,
'else': 1,
'elif': 1,
'elifdef': 1,
'elifndef': 1,
'endif': sys.maxsize,
'expand': 0,
'literal': 0,
'filter': 0,
'unfilter': 0,
'include': 0,
'includesubst': 0,
'error': 0}.items():
self.cmds[cmd] = (level, getattr(self, 'do_' + cmd))
self.out = sys.stdout
self.setMarker('#')
self.LE = '\n'
self.varsubst = re.compile('@(?P<VAR>\w+)@', re.U)
def setLineEndings(self, aLE):
"""
Set the line endings to be used for output.
"""
self.LE = {'cr': '\x0D', 'lf': '\x0A', 'crlf': '\x0D\x0A'}[aLE]
def setMarker(self, aMarker):
"""
Set the marker to be used for processing directives.
Used for handling CSS files, with pp.setMarker('%'), for example.
"""
self.marker = aMarker
self.instruction = re.compile('%s(?P<cmd>[a-z]+)(?:\s(?P<args>.*))?$'%aMarker, re.U)
self.comment = re.compile(aMarker, re.U)
def clone(self):
"""
Create a clone of the current processor, including line ending
settings, marker, variable definitions, output stream.
"""
rv = Preprocessor()
rv.context.update(self.context)
rv.setMarker(self.marker)
rv.LE = self.LE
rv.out = self.out
return rv
def applyFilters(self, aLine):
for f in self.filters:
aLine = f[1](aLine)
return aLine
def write(self, aLine):
"""
Internal method for handling output.
"""
if self.checkLineNumbers:
self.writtenLines += 1
ln = self.context['LINE']
if self.writtenLines != ln:
self.out.write('//@line %(line)d "%(file)s"%(le)s'%{'line': ln,
'file': self.context['FILE'],
'le': self.LE})
self.writtenLines = ln
aLine = self.applyFilters(aLine)
# ensure our line ending. Only need to handle \n, as we're reading
# with universal line ending support, at least for files.
aLine = re.sub('\n', self.LE, aLine)
self.out.write(aLine)
def handleCommandLine(self, args, defaultToStdin = False):
"""
Parse a commandline into this parser.
Uses OptionParser internally, no args mean sys.argv[1:].
"""
p = self.getCommandLineParser()
(options, args) = p.parse_args(args=args)
includes = options.I
if defaultToStdin and len(args) == 0:
args = [sys.stdin]
includes.extend(args)
for f in includes:
self.do_include(f, False)
pass
def getCommandLineParser(self, unescapeDefines = False):
escapedValue = re.compile('".*"$')
numberValue = re.compile('[\-\+]?\d+$')
def handleE(option, opt, value, parser):
for k,v in os.environ.items():
self.context[k] = v
def handleD(option, opt, value, parser):
vals = value.split('=', 1)
if len(vals) == 1:
vals.append(1)
elif unescapeDefines and escapedValue.match(vals[1]):
# strip escaped string values
vals[1] = vals[1][1:-1]
elif numberValue.match(vals[1]):
vals[1] = int(vals[1])
self.context[vals[0]] = vals[1]
def handleU(option, opt, value, parser):
del self.context[value]
def handleF(option, opt, value, parser):
self.do_filter(value)
def handleLE(option, opt, value, parser):
self.setLineEndings(value)
def handleMarker(option, opt, value, parser):
self.setMarker(value)
p = OptionParser()
p.add_option('-I', action='append', type="string", default = [],
metavar="FILENAME", help='Include file')
p.add_option('-E', action='callback', callback=handleE,
help='Import the environment into the defined variables')
p.add_option('-D', action='callback', callback=handleD, type="string",
metavar="VAR[=VAL]", help='Define a variable')
p.add_option('-U', action='callback', callback=handleU, type="string",
metavar="VAR", help='Undefine a variable')
p.add_option('-F', action='callback', callback=handleF, type="string",
metavar="FILTER", help='Enable the specified filter')
p.add_option('--line-endings', action='callback', callback=handleLE,
type="string", metavar="[cr|lr|crlf]",
help='Use the specified line endings [Default: OS dependent]')
p.add_option('--marker', action='callback', callback=handleMarker,
type="string",
help='Use the specified marker instead of #')
return p
def handleLine(self, aLine):
"""
Handle a single line of input (internal).
"""
m = self.instruction.match(aLine)
if m:
args = None
cmd = m.group('cmd')
try:
args = m.group('args')
except IndexError:
pass
if cmd not in self.cmds:
raise Preprocessor.Error(self, 'INVALID_CMD', aLine)
level, cmd = self.cmds[cmd]
if (level >= self.disableLevel):
cmd(args)
elif self.disableLevel == 0 and not self.comment.match(aLine):
self.write(aLine)
pass
# Instruction handlers
# These are named do_'instruction name' and take one argument
# Variables
def do_define(self, args):
m = re.match('(?P<name>\w+)(?:\s(?P<value>.*))?', args, re.U)
if not m:
raise Preprocessor.Error(self, 'SYNTAX_DEF', args)
val = 1
if m.group('value'):
val = self.applyFilters(m.group('value'))
try:
val = int(val)
except:
pass
self.context[m.group('name')] = val
def do_undef(self, args):
m = re.match('(?P<name>\w+)$', args, re.U)
if not m:
raise Preprocessor.Error(self, 'SYNTAX_DEF', args)
if args in self.context:
del self.context[args]
# Logic
def ensure_not_else(self):
if len(self.ifStates) == 0 or self.ifStates[-1] == 2:
sys.stderr.write('WARNING: bad nesting of #else\n')
def do_if(self, args, replace=False):
if self.disableLevel and not replace:
self.disableLevel += 1
return
val = None
try:
e = Expression.Expression(args)
val = e.evaluate(self.context)
except Exception:
# XXX do real error reporting
raise Preprocessor.Error(self, 'SYNTAX_ERR', args)
if type(val) == str:
# we're looking for a number value, strings are false
val = False
if not val:
self.disableLevel = 1
if replace:
if val:
self.disableLevel = 0
self.ifStates[-1] = self.disableLevel
else:
self.ifStates.append(self.disableLevel)
pass
def do_ifdef(self, args, replace=False):
if self.disableLevel and not replace:
self.disableLevel += 1
return
if re.match('\W', args, re.U):
raise Preprocessor.Error(self, 'INVALID_VAR', args)
if args not in self.context:
self.disableLevel = 1
if replace:
if args in self.context:
self.disableLevel = 0
self.ifStates[-1] = self.disableLevel
else:
self.ifStates.append(self.disableLevel)
pass
def do_ifndef(self, args, replace=False):
if self.disableLevel and not replace:
self.disableLevel += 1
return
if re.match('\W', args, re.U):
raise Preprocessor.Error(self, 'INVALID_VAR', args)
if args in self.context:
self.disableLevel = 1
if replace:
if args not in self.context:
self.disableLevel = 0
self.ifStates[-1] = self.disableLevel
else:
self.ifStates.append(self.disableLevel)
pass
def do_else(self, args, ifState = 2):
self.ensure_not_else()
hadTrue = self.ifStates[-1] == 0
self.ifStates[-1] = ifState # in-else
if hadTrue:
self.disableLevel = 1
return
self.disableLevel = 0
def do_elif(self, args):
if self.disableLevel == 1:
if self.ifStates[-1] == 1:
self.do_if(args, replace=True)
else:
self.do_else(None, self.ifStates[-1])
def do_elifdef(self, args):
if self.disableLevel == 1:
if self.ifStates[-1] == 1:
self.do_ifdef(args, replace=True)
else:
self.do_else(None, self.ifStates[-1])
def do_elifndef(self, args):
if self.disableLevel == 1:
if self.ifStates[-1] == 1:
self.do_ifndef(args, replace=True)
else:
self.do_else(None, self.ifStates[-1])
def do_endif(self, args):
if self.disableLevel > 0:
self.disableLevel -= 1
if self.disableLevel == 0:
self.ifStates.pop()
# output processing
def do_expand(self, args):
lst = re.split('__(\w+)__', args, re.U)
do_replace = False
def vsubst(v):
if v in self.context:
return str(self.context[v])
return ''
for i in range(1, len(lst), 2):
lst[i] = vsubst(lst[i])
lst.append('\n') # add back the newline
self.write(reduce(lambda x, y: x+y, lst, ''))
def do_literal(self, args):
self.write(args + self.LE)
def do_filter(self, args):
filters = [f for f in args.split(' ') if hasattr(self, 'filter_' + f)]
if len(filters) == 0:
return
current = dict(self.filters)
for f in filters:
current[f] = getattr(self, 'filter_' + f)
filterNames = list(current.keys())
filterNames.sort()
self.filters = [(fn, current[fn]) for fn in filterNames]
return
def do_unfilter(self, args):
filters = args.split(' ')
current = dict(self.filters)
for f in filters:
if f in current:
del current[f]
filterNames = list(current.keys())
filterNames.sort()
self.filters = [(fn, current[fn]) for fn in filterNames]
return
# Filters
#
# emptyLines
# Strips blank lines from the output.
def filter_emptyLines(self, aLine):
if aLine == '\n':
return ''
return aLine
# slashslash
# Strips everything after //
def filter_slashslash(self, aLine):
[aLine, rest] = aLine.split('//', 1)
if rest:
aLine += '\n'
return aLine
# spaces
# Collapses sequences of spaces into a single space
def filter_spaces(self, aLine):
return re.sub(' +', ' ', aLine).strip(' ')
# substition
# helper to be used by both substition and attemptSubstitution
def filter_substitution(self, aLine, fatal=True):
def repl(matchobj):
varname = matchobj.group('VAR')
if varname in self.context:
return str(self.context[varname])
if fatal:
raise Preprocessor.Error(self, 'UNDEFINED_VAR', varname)
return ''
return self.varsubst.sub(repl, aLine)
def filter_attemptSubstitution(self, aLine):
return self.filter_substitution(aLine, fatal=False)
# File ops
def do_include(self, args, filters=True):
"""
Preprocess a given file.
args can either be a file name, or a file-like object.
Files should be opened, and will be closed after processing.
"""
isName = type(args) == str
oldWrittenLines = self.writtenLines
oldCheckLineNumbers = self.checkLineNumbers
self.checkLineNumbers = False
if isName:
try:
args = str(args)
if filters:
args = self.applyFilters(args)
if not os.path.isabs(args):
args = os.path.join(self.context['DIRECTORY'], args)
args = open(args, 'rU')
except Preprocessor.Error:
raise
except:
raise Preprocessor.Error(self, 'FILE_NOT_FOUND', str(args))
self.checkLineNumbers = bool(re.search('\.(js|java)(?:\.in)?$', args.name))
oldFile = self.context['FILE']
oldLine = self.context['LINE']
oldDir = self.context['DIRECTORY']
if args.isatty():
# we're stdin, use '-' and '' for file and dir
self.context['FILE'] = '-'
self.context['DIRECTORY'] = ''
else:
abspath = os.path.abspath(args.name)
self.context['FILE'] = abspath
self.context['DIRECTORY'] = os.path.dirname(abspath)
self.context['LINE'] = 0
self.writtenLines = 0
for l in args:
self.context['LINE'] += 1
self.handleLine(l)
args.close()
self.context['FILE'] = oldFile
self.checkLineNumbers = oldCheckLineNumbers
self.writtenLines = oldWrittenLines
self.context['LINE'] = oldLine
self.context['DIRECTORY'] = oldDir
def do_includesubst(self, args):
args = self.filter_substitution(args)
self.do_include(args)
def do_error(self, args):
raise Preprocessor.Error(self, 'Error: ', str(args))
def main():
pp = Preprocessor()
pp.handleCommandLine(None, True)
return
def preprocess(includes=[sys.stdin], defines={},
output = sys.stdout,
line_endings='\n', marker='#'):
pp = Preprocessor()
pp.context.update(defines)
pp.setLineEndings(line_endings)
pp.setMarker(marker)
pp.out = output
for f in includes:
pp.do_include(f, False)
if __name__ == "__main__":
main()

56
debian/build/config.mk vendored Normal file
View File

@ -0,0 +1,56 @@
#!/usr/bin/make -f
DISTRIB_VERSION_MAJOR := $(shell lsb_release -s -r | cut -d '.' -f 1)
DISTRIB_VERSION_MINOR := $(shell lsb_release -s -r | cut -d '.' -f 2)
DISTRIB_CODENAME := $(shell lsb_release -s -c)
include $(CURDIR)/debian/config/branch.mk
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/cdbs/1/rules/buildvars.mk
# Various build defaults
# 1 = Build crashreporter (if supported)
MOZ_ENABLE_BREAKPAD ?= 0
# 1 = Build without jemalloc suitable for valgrind debugging
MOZ_VALGRIND ?= 0
# 1 = Profile guided build
MOZ_BUILD_PGO ?= 0
# 1 = Turn on debugging bits and disable optimizations
MOZ_DEBUG ?= 0
# 1 = Disable optimizations
MOZ_NO_OPTIMIZE ?= 0
# The package name
MOZ_PKG_NAME := $(shell dpkg-parsechangelog | sed -n 's/^Source: *\(.*\)$$/\1/ p')
# The binary name to use (derived from the package name by default)
MOZ_APP_NAME ?= $(MOZ_PKG_NAME)
# Define other variables used throughout the build
MOZ_DEFAULT_APP_NAME ?= $(MOZ_PKG_BASENAME)
MOZ_FORCE_UNOFFICIAL_BRANDING = 0
ifeq (1,$(MOZ_VALGRIND))
MOZ_FORCE_UNOFFICIAL_BRANDING = 1
endif
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
MOZ_BUILD_PGO = 0
MOZ_NO_OPTIMIZE = 1
MOZ_FORCE_UNOFFICIAL_BRANDING = 1
endif
ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
MOZ_NO_OPTIMIZE = 1
MOZ_DEBUG = 1
MOZ_FORCE_UNOFFICIAL_BRANDING = 1
endif
ifneq ($(MOZ_APP_NAME),$(MOZ_DEFAULT_APP_NAME))
# If we change MOZ_APP_NAME, don't use official branding
MOZ_FORCE_UNOFFICIAL_BRANDING = 1
endif
MOZ_LOCALE_PKGS = $(strip $(shell dh_listpackages | grep $(MOZ_PKG_NAME)-locale-))
MOZ_LOCALES := $(shell sed -n 's/\#.*//;/^$$/d;s/\([^\:]*\)\:\?.*/\1/ p' < $(CURDIR)/debian/config/locales.shipped)

370
debian/build/create-tarball.py vendored Normal file
View File

@ -0,0 +1,370 @@
#!/usr/bin/python3
from datetime import datetime
from optparse import OptionParser
import os
import os.path
import re
import shutil
import subprocess
import sys
import time
import urllib.request
import xml.dom.minidom
import json
import tempfile
import select
def CheckCall(args, cwd=None, quiet=False, env=None):
with open(os.devnull, "w") as devnull:
p = subprocess.Popen(args, cwd=cwd, env=env,
stdout = devnull if quiet == True else None,
stderr = devnull if quiet == True else None)
r = p.wait()
if r != 0: raise subprocess.CalledProcessError(r, args)
def CheckOutput(args, cwd=None):
p = subprocess.Popen(args, cwd=cwd, stdout=subprocess.PIPE, universal_newlines=True)
r = p.wait()
if r != 0: raise subprocess.CalledProcessError(r, args)
return p.stdout.read()
def check_external_dependencies():
for tool in ['hg', 'cargo', 'tar']:
try:
CheckCall([tool, '--version'], quiet=True)
except OSError:
print('Error: missing external tool: %s' % tool)
sys.exit(1)
def ensure_cache(repo, cache):
dest = os.path.join(cache, os.path.basename(repo))
if os.path.isdir(dest):
try:
CheckCall(['hg', 'summary'], cwd=dest, quiet=True)
print('Cache location %s exists, using it' % dest)
CheckCall(['hg', 'pull', repo], cwd=dest)
CheckCall(['hg', 'update'], cwd=dest)
return
except:
pass
if not os.path.isdir(cache):
os.makedirs(cache)
print('Creating cache location %s' % dest)
CheckCall(['hg', 'clone', repo, dest])
def do_checkout(source, dest, rev=None):
dest = os.path.abspath(dest)
dest_parent = os.path.dirname(dest)
if dest_parent != '' and not os.path.isdir(dest_parent):
os.makedirs(dest_parent)
CheckCall(['hg', 'clone', source, dest])
args = ['hg', 'update']
if rev != None:
args.append('-r')
args.append(rev)
CheckCall(args, cwd=dest)
def checkout_source(repo, cache, dest, rev=None):
print('*** Checking out source from %s%s ***' % (repo, ' using cache from %s' % cache if cache != None else ''))
local_source = None
if cache != None:
ensure_cache(repo, cache)
local_source = os.path.join(cache, os.path.basename(repo))
source = repo if local_source == None else local_source
do_checkout(source, dest, rev=rev)
def get_setting(settings, name, default=None):
return settings[name] if name in settings else default
class ScopedTmpdir:
def __enter__(self):
self._tmpdir = tempfile.mkdtemp()
return self._tmpdir
def __exit__(self, type, value, traceback):
shutil.rmtree(self._tmpdir)
class ScopedWorkingDirectory:
def __init__(self, dir):
self._wd = os.path.abspath(dir)
def __enter__(self):
self._saved_wd = os.getcwd()
if not os.path.isdir(self._wd):
os.makedirs(self._wd)
os.chdir(self._wd)
def __exit__(self, type, value, traceback):
os.chdir(self._saved_wd)
class ScopedRename:
def __init__(self, src, dest):
self._src = src
self._dest = dest
def __enter__(self):
os.rename(self._src, self._dest)
def __exit__(self, type, value, traceback):
os.rename(self._dest, self._src)
class TarballCreator(OptionParser):
def __init__(self):
OptionParser.__init__(self, 'usage: %prog [options]')
self.add_option('-r', '--repo', dest='repo', help='The remote repository from which to pull the main source')
self.add_option('-c', '--cache', dest='cache', help='A local cache of the remote repositories')
self.add_option('-l', '--l10n-base-repo', dest='l10nbase', help='The base directory of the remote repositories to pull l10n data from')
self.add_option('-v', '--version', dest='version', help='Release version to base the checkout on')
self.add_option('--build', dest='build', help='Release build to base the checkout on (must be used with --version)')
self.add_option('-n', '--name', dest='name', help='The package name')
self.add_option('-b', '--basename', dest='basename', help='The package basename')
self.add_option('-a', '--application', dest='application', help='The application to build')
def vendor_cbindgen(self, dest):
# cbindgen is not available in Debian/Ubuntu yet (https://bugs.debian.org/908312)
print('*** Vendoring cbindgen and its dependencies ***')
with ScopedTmpdir() as tmpdir:
with ScopedWorkingDirectory(tmpdir):
CheckCall(['cargo', 'new', 'vendored-cbindgen', '--vcs', 'none'])
with ScopedWorkingDirectory('vendored-cbindgen'):
with open('Cargo.toml', 'a+') as fd:
fd.write('cbindgen = "=0.24.3"')
CheckCall(['cargo', 'vendor'])
with ScopedWorkingDirectory('vendor/cbindgen'):
os.makedirs('.cargo')
with open('.cargo/config', 'w') as fd:
fd.write(CheckOutput(['cargo', 'vendor']))
with open('Cargo.toml', 'a+') as fd:
fd.write('\n[workspace]')
shutil.copytree('vendored-cbindgen/vendor/cbindgen', dest)
def vendor_dump_syms(self, dest):
# dump_syms is not available in Debian/Ubuntu yet
print('*** Vendoring dump_syms and its dependencies ***')
with ScopedTmpdir() as tmpdir:
with ScopedWorkingDirectory(tmpdir):
CheckCall(['cargo', 'new', 'vendored-dump_syms', '--vcs', 'none'])
with ScopedWorkingDirectory('vendored-dump_syms'):
with open('Cargo.toml', 'a+') as fd:
fd.write('dump_syms = { git = "https://github.com/mozilla/dump_syms.git", rev = "c558ad1824b247e147dcc45ec105588883e379fb" }')
CheckCall(['cargo', 'vendor'])
with ScopedWorkingDirectory('vendor/dump_syms'):
os.makedirs('.cargo')
with open('.cargo/config', 'w') as fd:
fd.write(CheckOutput(['cargo', 'vendor']))
with open('Cargo.toml', 'a+') as fd:
fd.write('\n[workspace]')
shutil.copytree('vendored-dump_syms/vendor/dump_syms', dest)
def run(self):
(options, args) = self.parse_args()
if options.repo == None:
self.error('Must specify a remote repository')
if options.name == None:
self.error('Must specify a package name')
if options.application == None:
self.error('Must specify an application')
if options.build != None and options.version == None:
self.error('--build must be used with --version')
if options.cache != None and not os.path.isabs(options.cache):
options.cache = os.path.join(os.getcwd(), options.cache)
settings = None
with open('debian/config/tarball.conf', 'r') as fd:
settings = json.load(fd)
repo = options.repo
cache = options.cache
version = options.version
build = options.build
application = options.application
l10nbase = options.l10nbase
name = options.name
basename = options.basename
if basename == None:
basename = name
main_rev = None
buildid = None
if version != None:
if build == None:
build = 1
print('*** Determing revisions to use for checkouts ***')
main_info_url = ('https://ftp.mozilla.org/pub/%s/candidates/%s-candidates/build%s/linux-x86_64/en-US/%s-%s.json'
% (basename, version, build, basename, version))
u = urllib.request.urlopen(main_info_url)
build_refs = json.load(u)
main_rev = build_refs["moz_source_stamp"]
if main_rev == None:
print('Failed to determine revision for main checkout', file=sys.stderr)
sys.exit(1)
print('Revision to be used for main checkout: %s' % main_rev)
buildid = build_refs["buildid"]
if buildid == None:
print('Invalid build ID', file=sys.stderr)
sys.exit(1)
else:
buildid = datetime.now().strftime('%Y%m%d%H%M%S')
print('Build ID: %s' % buildid)
with ScopedTmpdir() as tmpdir:
print('*** Using temporary directory %s ***' % tmpdir)
orig_cwd = os.getcwd()
with ScopedWorkingDirectory(os.path.join(tmpdir, name)):
checkout_source(repo, cache, '', rev=main_rev)
with open('SOURCE_CHANGESET', 'w') as fd:
rev = CheckOutput(['hg', 'parent', '--template={node}'])
fd.write(rev)
self.vendor_cbindgen(os.path.join(os.getcwd(), 'third_party/cbindgen'))
self.vendor_dump_syms(os.path.join(os.getcwd(), 'third_party/dump_syms'))
l10ndir = 'l10n'
if not os.path.isdir(l10ndir):
os.makedirs(l10ndir)
if l10nbase != None:
got_locales = set()
shipped_locales = os.path.join(application, 'locales/shipped-locales')
blacklist_file = get_setting(settings, 'l10n-blacklist')
with open(os.path.join(os.path.abspath(''), 'browser/locales/l10n-changesets.json'), 'r') as fd:
locale_revs = json.load(fd)
with open(shipped_locales, 'r') as fd:
for line in fd:
locale = line.split(' ')[0].strip()
if locale.startswith('#') or locale in got_locales or locale == 'en-US':
continue
try:
rev = None
if main_rev != None:
rev = locale_revs[locale]["revision"]
if rev == None:
print("Rev for locale '%s' is not present in l10n-changesets.json" % locale)
sys.exit(1)
checkout_source(os.path.join(l10nbase, locale), os.path.join(cache, 'l10n') if cache != None else None, 'l10n/' + locale, rev=rev)
for line in CheckOutput(['hg', 'tip'], cwd='l10n/' + locale).split('\n'):
if line.startswith('changeset:'):
break
got_locales.add(locale)
except Exception as e:
# checkout_locale will throw if the specified revision isn't found
# In this case, omit it from the tarball
print('Failed to checkout %s: %s' % (locale, e), file=sys.stderr)
localedir = os.path.join(l10ndir, locale)
if os.path.exists(localedir):
shutil.rmtree(localedir)
# When we also use translations from Launchpad, there will be a file
# containing the additional locales we want to ship (locales.extra??)
print('*** Checking that required locales are present ***')
blacklist = set()
if blacklist_file:
with open(os.path.join(orig_cwd, blacklist_file), 'r') as fd:
for line in fd:
locale = re.sub(r'([^#]*)#?.*', r'\1', line).strip()
if locale == '':
continue
blacklist.add(locale)
with open(shipped_locales, 'r') as fd:
for line in fd:
line = line.strip()
if line.startswith('#'):
continue
if line == 'en-US':
continue
locale = line.split(' ')[0].strip()
platforms = line.split(' ')[1:]
if locale in blacklist:
continue
if len(platforms) > 0:
for_linux = False
for platform in platforms:
if platform == 'linux':
for_linux = True
break
if not for_linux:
continue
if not locale in got_locales:
print("Locale %s is missing from the source tarball" % locale)
sys.exit(1)
with open(os.path.join(application, 'config/version.txt'), 'r') as vf:
upstream_version = re.sub(r'~$', '', re.sub(r'([0-9\.]*)(.*)', r'\1~\2', vf.read().strip(), 1))
if version == None:
version = upstream_version
for line in CheckOutput(['hg', 'tip']).split('\n'):
if line.startswith('changeset:'):
rev = line.split()[1].split(':')[0].strip()
changeset = line.split()[1].split(':')[1].strip()
break
u = urllib.request.urlopen('%s/pushlog?changeset=%s' % (repo, changeset))
dom = xml.dom.minidom.parseString(u.read())
t = time.strptime(dom.getElementsByTagName('updated')[0].firstChild.nodeValue.strip(), '%Y-%m-%dT%H:%M:%SZ')
version += '~hg%s%s%sr%s' % ('%02d' % t.tm_year, '%02d' % t.tm_mon, '%02d' % t.tm_mday, rev)
u.close()
else:
version = re.sub(r'~$', '', re.sub(r'([0-9\.]*)(.*)', r'\1~\2', version, 1))
version += '+build%s' % build
if not version.startswith(upstream_version):
print("Version '%s' does not match upstream version '%s'" % (version, upstream_version))
sys.exit(1)
with open('BUILDID', 'w') as fd:
fd.write(buildid)
print('*** Debian package version is %s' % version)
print('*** Packing tarball ***')
with ScopedWorkingDirectory('..'):
topsrcdir = '%s-%s' % (name, version)
with ScopedRename(name, topsrcdir):
env = {'XZ_OPT': '--threads=0'}
args = ['tar', '-Jc', '--exclude=.hg', '--exclude=.hgignore', '--exclude=.hgtags', '--exclude=.svn']
for exclude in settings['excludes']:
args.append('--no-wildcards-match-slash') if exclude['wms'] == False else args.append('--wildcards-match-slash')
args.append('--exclude')
args.append(os.path.join(topsrcdir , exclude['path']))
args.append('-f')
args.append(os.path.join(orig_cwd, '%s_%s.orig.tar.xz' % (name, version)))
for include in settings['includes']:
args.append(os.path.join(topsrcdir, include))
CheckCall(args, env=env)
def main():
check_external_dependencies()
creator = TarballCreator()
creator.run()
if __name__ == '__main__':
main()

View File

@ -0,0 +1,51 @@
#!/usr/bin/perl
use strict;
use warnings;
my $lp_avail_desc;
my $lp_unavail_desc;
my %all;
my %shipped;
{
my $file;
local $/=undef;
open($file, "debian/control.langpacks") or die "Couldn't find control.langpacks";
$lp_avail_desc = <$file>;
open($file, "debian/control.langpacks.unavail") or die "Couldn't find control.langpacks.unavail";
$lp_unavail_desc = <$file>;
}
open(my $all_file, "debian/config/locales.all") or die "Failed to open debian/config/locales.all";
open(my $shipped_file, "debian/config/locales.shipped") or die "Failed to open debian/config/locales.shipped";
while (<$all_file>) {
chomp($_);
/^([^:#]*):([^:]*)$/ && do {
my $pkgname = $1;
my $desc = $2;
if ($desc eq "") { die "Malformed locales.all"; }
$all{$pkgname} = $desc;
}
}
while (<$shipped_file>) {
chomp($_);
/^([^:#]*):([^:]*)$/ && do {
my $locale = $1;
my $pkgname = $2;
if ($pkgname eq "") { die "Malformed locales.shipped"; }
$shipped{$pkgname} = 1;
}
}
close($all_file);
close($shipped_file);
foreach my $pkg (sort(keys(%all))) {
my $entry = exists $shipped{$pkg} ? $lp_avail_desc : $lp_unavail_desc;
$entry =~ s/\@LANGCODE\@/$pkg/g;
$entry =~ s/\@LANG\@/$all{$pkg}/g;
print $entry;
}

42
debian/build/fix-mozinfo-appname.py vendored Normal file
View File

@ -0,0 +1,42 @@
#!/usr/bin/python3
import os
import sys
class JsonValue:
"""
A class to serialize Python values into JSON-compatible representations.
"""
def __init__(self, v):
if v is not None and not (isinstance(v,str) or isinstance(v,bool) or isinstance(v,int)):
raise Exception("Unhandled data type: %s" % type(v))
self.v = v
def __repr__(self):
if self.v is None:
return "null"
if isinstance(self.v,bool):
return str(self.v).lower()
return repr(self.v)
def jsonify(d):
"""
Return a JSON string of the dict |d|. Only handles a subset of Python
value types: bool, str, int, None.
"""
jd = {}
for k, v in d.items():
jd[k] = JsonValue(v)
return repr(jd)
if __name__ == '__main__':
if len(sys.argv) != 3:
print("Must specify a single file and appname", file=sys.stderr)
with open(sys.argv[1], 'r') as f:
s = eval(f.read(),{'true':True,'false':False,'null':None})
s['appname'] = sys.argv[2]
with open(sys.argv[1] + '.tmp', 'w') as g:
g.write(jsonify(s))
os.rename(sys.argv[1] + '.tmp', sys.argv[1])

91
debian/build/keepalive-wrapper.py vendored Normal file
View File

@ -0,0 +1,91 @@
#!/usr/bin/python3
import datetime
import os
import select
import subprocess
import sys
import _thread
proc = None
def run_child(args, fd):
global proc
f = os.fdopen(fd, 'w')
proc = subprocess.Popen(args)
# Tell main thread to continue
f.write('a')
f.flush()
f.write(str(proc.wait()))
def main():
global proc
def usage():
sys.stderr.write('Usage: %s <max_minutes> <cmd> [<args> ..]\n' % sys.argv[0])
sys.exit(1)
if len(sys.argv) < 3:
usage()
try:
max_mins = int(sys.argv[1])
except:
usage()
max_days = max_mins / (24 * 60)
max_seconds = (max_mins % (max_days * 24 * 60) if max_days > 0 else max_mins) * 60
start = datetime.datetime.now()
(rfd, wfd) = os.pipe()
f = os.fdopen(rfd, 'r')
_thread.start_new_thread(run_child, (sys.argv[2:], wfd))
# Make sure that we have a process before continuing
f.read(1)
target_timeout = 60
last_target_timeout = target_timeout
timeout = target_timeout
terminated = False
laststart = None
while True:
if target_timeout != last_target_timeout:
last_target_timeout = target_timeout
timeout = target_timeout
elif laststart is not None:
now = datetime.datetime.now()
timeout = timeout - (((now - laststart).total_seconds() - target_timeout) / 4)
laststart = datetime.datetime.now()
(r, w, x) = select.select([f], [], [], timeout)
if len(r) != 0:
sys.exit(int(f.read()))
duration = datetime.datetime.now() - start
if not terminated:
sys.stdout.write('*** KEEP ALIVE MARKER ***\n')
sys.stdout.write('Total duration: %s\n' % str(duration))
sys.stdout.flush()
if (duration.days >= max_days and duration.seconds >= max_seconds) or terminated:
if not terminated:
sys.stderr.write('Process max time exceeded, attempting to terminate\n')
sys.stderr.flush()
proc.terminate()
terminated = True
target_timeout = 15
else:
sys.stderr.write('Attempting to kill process\n')
sys.stderr.flush()
proc.kill()
if __name__ == '__main__':
main()

View File

@ -0,0 +1,156 @@
#!/usr/bin/perl
use strict;
use warnings;
my $moz_supported_file;
my $lpom_dir;
my %blacklist;
my %locale2pkgname;
my %languages;
my %pkglist;
my $file;
while (@ARGV) {
my $arg = shift(@ARGV);
if ($arg eq '-s') {
$moz_supported_file = shift(@ARGV);
} elsif ($arg eq '-l') {
$lpom_dir = shift(@ARGV);
} else {
die "Unknown argument '$arg'";
}
}
(defined($moz_supported_file)) || die "Need to specify a supported language list";
if (defined($lpom_dir)) {
my $lang_file = "$lpom_dir/maps/languages";
my $map_file = "$lpom_dir/maps/locale2pkgname";
my $variant_file = "$lpom_dir/maps/variants";
open($file, $lang_file) or die "Failed to open $lang_file";
while (<$file>) {
chomp($_);
my $langcode = my $lang = $_;
$langcode =~ s/([^:]*):*([^:]*)/$1/;
$lang =~ s/([^:]*):*([^:]*)/$2/;
if ($lang ne "") { $languages{$langcode} = $lang; }
}
close($file);
open($file, $map_file) or die "Failed to open $map_file";
while (<$file>) {
chomp($_);
my $langcode = my $pkgname = $_;
$langcode =~ s/([^:]*):*([^:]*)/$1/;
$pkgname =~ s/([^:]*):*([^:]*)/$2/;
if ($pkgname ne "") { $locale2pkgname{$langcode} = $pkgname; }
}
close($file);
open($file, $variant_file) or die "Failed to open $variant_file";
while (<$file>) {
chomp($_);
my $langcode = my $lang = $_;
$langcode =~ s/([^:]*):*([^:]*)/$1/;
$lang =~ s/([^:]*):*([^:]*)/$2/;
if ($lang ne "") { $languages{$langcode} = $lang; }
}
close($file);
}
if (-e "debian/config/locales.all") {
open($file, "debian/config/locales.all");
while (<$file>) {
$_ =~ s/#.*//; s/\s*$//;
/^$/ || do {
chomp($_);
my $pkgname = my $lang = $_;
$pkgname =~ s/([^:]*):*([^:]*)/$1/;
$lang =~ s/([^:]*):*([^:]*)/$2/;
$pkglist{$pkgname} = 1;
if ($lang ne "") { $languages{$pkgname} = $lang; }
}
}
}
if (-e "debian/config/locales.shipped") {
open($file, "debian/config/locales.shipped");
while (<$file>) {
$_ =~ s/#.*//; s/\s*$//;
/^$/ || do {
chomp($_);
my $langcode = my $pkgname = $_;
$langcode =~ s/([^:]*):*([^:]*)/$1/;
$pkgname =~ s/([^:]*):*([^:]*)/$2/;
if ($pkgname eq "") { die "Malformed locales.shipped file"; }
if (not exists $pkglist{$pkgname}) {
die "WTF? Language in locales.shipped is not present in locales.all. Did we produce broken output last time?";
}
$locale2pkgname{lc($langcode)} = $pkgname;
}
}
close($file);
}
if (-e "debian/config/locales.blacklist") {
open($file, "debian/config/locales.blacklist");
while (<$file>) {
$_ =~ s/#.*//; s/\s*$//;
/^$/ || do {
chomp($_);
$blacklist{$_} = 1;
}
}
close($file);
}
my $have_language = 0;
open($file, $moz_supported_file) or die "Failed to open $moz_supported_file";
open(my $outfile, ">debian/config/locales.shipped");
while (<$file>) {
chomp($_);
my $langcode = my $platforms = $_;
$langcode =~ s/^([[:alnum:]\-]*)[[:space:]]*(.*)/$1/;
$platforms =~ s/^([[:alnum:]\-]*)[[:space:]]*(.*)/$2/;
next if (($langcode eq "en-US") ||
(($platforms ne "") && (rindex($platforms, "linux") eq -1)) ||
(exists $blacklist{$langcode}));
my $llangcode = lc($langcode);
my $pkgname = $llangcode;
if (exists $locale2pkgname{$llangcode}) { $pkgname = $locale2pkgname{$llangcode}; }
if (not exists $languages{$pkgname}) {
if ($pkgname eq $llangcode) { $pkgname =~ s/\-.*//; }
if (not exists $languages{$pkgname}) { die "No description for $pkgname"; }
}
if ($have_language eq 0) {
print $outfile "# List of shipped locales. This list is automatically generated. Do not edit by hand\n";
}
$have_language = 1;
print $outfile "$langcode:$pkgname\n";
$pkglist{$pkgname} = 1;
}
if ($have_language eq 0) {
print $outfile "# Placeholder file for the list of shipped languages. Do not delete";
}
close($file);
close($outfile);
open($outfile, ">debian/config/locales.all");
my @completelist = keys(%pkglist);
if (scalar(@completelist) gt 0) {
@completelist = sort(@completelist);
print $outfile "# List of all language packs, past and present. Please don't delete any entries from this file\n";
foreach my $lang (@completelist) {
if (not exists $languages{$lang}) { die "How on earth did we get here?"; }
my $desc = $languages{$lang};
print $outfile "$lang:$desc\n";
}
} else { print $outfile "# Placeholder file for the list of all language packs. Do not delete"; }
close($outfile);

426
debian/build/rules.mk vendored Normal file
View File

@ -0,0 +1,426 @@
#!/usr/bin/make -f
# We need this to execute before the debian/control target gets called
# and before patches are unapplied
clean::
ifneq (1, $(MOZ_DISABLE_CLEAN_CHECKS))
cp debian/control debian/control.old
touch debian/control.in
else
touch debian/control
endif
-include /usr/share/cdbs/1/rules/debhelper.mk
-include /usr/share/cdbs/1/rules/patchsys-quilt.mk
-include /usr/share/cdbs/1/class/makefile.mk
MOZ_OBJDIR := $(DEB_BUILDDIR)/obj-$(DEB_HOST_GNU_TYPE)
MOZ_DISTDIR := $(MOZ_OBJDIR)/dist
MOZ_BUILDID := $(shell cat $(DEB_SRCDIR)/BUILDID)
$(info Build ID: $(MOZ_BUILDID))
ifeq (,$(MOZ_APP))
$(error "Need to set MOZ_APP")
endif
ifeq (,$(MOZ_APP_NAME))
$(error "Need to set MOZ_APP_NAME")
endif
ifeq (,$(MOZ_PKG_NAME))
$(error "Need to set MOZ_PKG_NAME")
endif
ifeq (,$(MOZ_PKG_BASENAME))
$(error "Need to set MOZ_PKG_BASENAME")
endif
ifeq (,$(MOZ_BRANDING_OPTION))
$(error "Need to set MOZ_BRANDING_OPTION")
endif
ifeq (,$(MOZ_BRANDING_DIR))
$(error "Need to set MOZ_BRANDING_DIR")
endif
DEB_BUILD_DIR := $(MOZ_OBJDIR)
# Without this, CDBS passes CFLAGS and CXXFLAGS options to client.mk, which breaks the build
DEB_MAKE_EXTRA_ARGS :=
# These normally come from autotools.mk, which we no longer include (because we
# don't want to run configure)
DEB_MAKE_INSTALL_TARGET :=
# Prevent some files from being cleaned to avoid build failures
DEB_CLEAN_EXCLUDE := Cargo.toml.orig
# Don't save debug symbols in firefox-dbg (rely on pkg-create-dbgsym to create
# ddeb packages for us). This is needed as long as there is a firefox-dbg
# transitional package
DEB_DH_STRIP_ARGS := --dbg-package=$(MOZ_PKG_NAME)-dbg
# We don't want build-tree/mozilla/README to be shipped as a doc
DEB_INSTALL_DOCS_ALL := $(NULL)
# Stop the buildd from timing out during long links
MAKE := python3 $(CURDIR)/debian/build/keepalive-wrapper.py 1440 $(MAKE)
MOZ_VERSION := $(shell cat $(DEB_SRCDIR)/$(MOZ_APP)/config/version.txt)
MOZ_LIBDIR := usr/lib/$(MOZ_APP_NAME)
MOZ_INCDIR := usr/include/$(MOZ_APP_NAME)
MOZ_IDLDIR := usr/share/idl/$(MOZ_APP_NAME)
MOZ_SDKDIR := usr/lib/$(MOZ_APP_NAME)-devel
MOZ_ADDONDIR := usr/lib/$(MOZ_APP_NAME)-addons
MOZ_APP_SUBDIR ?=
# If we change MOZ_APP_NAME, we want to set the profile directory
# to match
ifneq (,$(MOZ_VENDOR))
PROFILE_BASE = $(shell echo $(MOZ_VENDOR) | tr A-Z a-z)/
endif
ifneq ($(MOZ_APP_NAME),$(MOZ_DEFAULT_APP_NAME))
MOZ_APP_PROFILE := $(PROFILE_BASE)$(MOZ_APP_NAME)
endif
DEB_AUTO_UPDATE_DEBIAN_CONTROL = no
VIRTENV_PATH := $(CURDIR)/$(MOZ_OBJDIR)/_virtualenv
MOZ_PYTHON := $(VIRTENV_PATH)/bin/python3
DISTRIB := $(shell lsb_release -i -s)
CFLAGS := $(shell echo $(CFLAGS) | sed -e 's/\-g//' | sed -e 's/\-O[s0123]//')
CXXFLAGS := $(shell echo $(CFLAGS) | sed -e 's/\-g//' | sed -e 's/\-O[s0123]//')
LDFLAGS := $(shell echo $(LDFLAGS) | sed -e 's/-Wl,-Bsymbolic-functions//')
# enable the crash reporter only on i386 and amd64
ifeq (,$(filter i386 amd64,$(DEB_HOST_ARCH)))
MOZ_ENABLE_BREAKPAD = 0
endif
# Ensure the crash reporter gets disabled for derivatives
ifneq (Ubuntu, $(DISTRIB))
MOZ_ENABLE_BREAKPAD = 0
endif
MOZ_DISPLAY_NAME = $(shell cat $(DEB_SRCDIR)/$(MOZ_BRANDING_DIR)/locales/en-US/brand.properties \
| grep brandShortName | sed -e 's/brandShortName\=//')
ifeq (,$(filter 4.7, $(shell $(CC) -dumpversion)))
MOZ_BUILD_PGO = 0
endif
ifeq (,$(filter i386 amd64, $(DEB_HOST_ARCH)))
MOZ_BUILD_PGO = 0
endif
LLVM_VERSIONS = 13 12 11 10
DEB_LLVM_VERSION = $(firstword $(foreach llvm_version, $(LLVM_VERSIONS), \
$(if $(shell which clang-$(llvm_version)), $(llvm_version))))
export HOME=/tmp
export SHELL=/bin/bash
export NO_PNG_PKG_MANGLE=1
export MACH_USE_SYSTEM_PYTHON=1
export MOZBUILD_STATE_PATH=/tmp/.mozbuild
ifeq (linux-gnu, $(DEB_HOST_GNU_SYSTEM))
LANGPACK_DIR := linux-$(DEB_HOST_GNU_CPU)/xpi
else
LANGPACK_DIR := $(DEB_HOST_GNU_SYSTEM)-$(DEB_HOST_GNU_CPU)/xpi
endif
MOZ_PKG_SUPPORT_SUGGESTS ?=
# Defines used for the Mozilla text preprocessor
MOZ_DEFINES += -DMOZ_LIBDIR="$(MOZ_LIBDIR)" -DMOZ_APP_NAME="$(MOZ_APP_NAME)" -DMOZ_BUILDID="$(MOZ_BUILDID)" \
-DMOZ_INCDIR="$(MOZ_INCDIR)" -DMOZ_IDLDIR="$(MOZ_IDLDIR)" -DMOZ_VERSION="$(MOZ_VERSION)" -DDEB_HOST_ARCH="$(DEB_HOST_ARCH)" \
-DMOZ_DISPLAY_NAME="$(MOZ_DISPLAY_NAME)" -DMOZ_PKG_NAME="$(MOZ_PKG_NAME)" -DDISTRIB="$(DISTRIB)" \
-DMOZ_BRANDING_OPTION="$(MOZ_BRANDING_OPTION)" -DTOPSRCDIR="$(CURDIR)" -DDEB_HOST_GNU_TYPE="$(DEB_HOST_GNU_TYPE)" \
-DMOZ_ADDONDIR="$(MOZ_ADDONDIR)" -DMOZ_SDKDIR="$(MOZ_SDKDIR)" -DMOZ_DISTDIR="$(MOZ_DISTDIR)" -DMOZ_UPDATE_CHANNEL="$(CHANNEL)" \
-DMOZ_OBJDIR="$(MOZ_OBJDIR)" -DDEB_BUILDDIR="$(DEB_BUILDDIR)" -DMOZ_PYTHON="$(MOZ_PYTHON)" -DDEB_BUILD_ARCH_BITS=$(DEB_BUILD_ARCH_BITS) \
-DMOZ_DEFAULT_APP_NAME="$(MOZ_DEFAULT_APP_NAME)" -DDISTRIB_VERSION="$(DISTRIB_VERSION_MAJOR)$(DISTRIB_VERSION_MINOR)" \
-DDEB_LLVM_VERSION="$(DEB_LLVM_VERSION)"
ifneq (,$(MOZ_APP_PROFILE))
MOZ_DEFINES += -DMOZ_APP_PROFILE="$(MOZ_APP_PROFILE)"
endif
ifeq (1, $(MOZ_ENABLE_BREAKPAD))
MOZ_DEFINES += -DMOZ_ENABLE_BREAKPAD
endif
ifeq (1, $(MOZ_VALGRIND))
MOZ_DEFINES += -DMOZ_VALGRIND
endif
ifeq (1,$(MOZ_NO_OPTIMIZE))
MOZ_DEFINES += -DMOZ_NO_OPTIMIZE
endif
ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
MOZ_DEFINES += -DDEB_BUILD_GNU_TYPE="$(DEB_BUILD_GNU_TYPE)"
endif
ifeq (1,$(MOZ_BUILD_PGO))
MOZ_DEFINES += -DMOZ_BUILD_PGO
endif
ifeq (1,$(MOZ_DEBUG))
MOZ_DEFINES += -DMOZ_DEBUG
endif
ifeq (official, $(MOZ_BRANDING))
MOZ_DEFINES += -DMOZ_OFFICIAL_BRANDING
endif
ifneq (,$(DEB_PARALLEL_JOBS))
MOZ_DEFINES += -DDEB_PARALLEL_JOBS=$(DEB_PARALLEL_JOBS)
endif
MOZ_EXECUTABLES_$(MOZ_PKG_NAME) += $(MOZ_LIBDIR)/$(MOZ_PKG_BASENAME).sh \
$(NULL)
pkgname_subst_files = \
debian/config/mozconfig \
$(MOZ_PKGNAME_SUBST_FILES) \
$(NULL)
$(foreach pkg,$(DEB_ALL_PACKAGES), \
$(foreach e,install dirs links manpages postinst preinst postrm prerm lintian-overrides,\
$(if $(wildcard debian/$(subst $(MOZ_PKG_NAME),$(MOZ_PKG_BASENAME),$(pkg)).$(e).in),\
$(eval pkgname_subst_files += debian/$(pkg).$(e)))))
appname_subst_files = \
debian/$(MOZ_APP_NAME).desktop \
$(MOZ_APPNAME_SUBST_FILES) \
$(NULL)
debian/control:: debian/control.in debian/control.langpacks debian/control.langpacks.unavail debian/config/locales.shipped debian/config/locales.all
@echo ""
@echo "*****************************"
@echo "* Refreshing debian/control *"
@echo "*****************************"
@echo ""
cp debian/control.in debian/control.tmp
perl debian/build/dump-langpack-control-entries.pl >> debian/control.tmp
sed -e 's/@MOZ_PKG_NAME@/$(MOZ_PKG_NAME)/g' < debian/control.tmp > debian/control
rm -f debian/control.tmp
sed -i -e 's/@MOZ_LOCALE_PKGS@/$(foreach p,$(MOZ_LOCALE_PKGS),$(p) \(= $${binary:Version}\),)/' debian/control
$(pkgname_subst_files): $(foreach file,$(pkgname_subst_files),$(subst $(MOZ_PKG_NAME),$(MOZ_PKG_BASENAME),$(file).in))
PYTHONDONTWRITEBYTECODE=1 python3 $(CURDIR)/debian/build/Preprocessor.py -Fsubstitution --marker="%%" $(MOZ_DEFINES) $(CURDIR)/$(subst $(MOZ_PKG_NAME),$(MOZ_PKG_BASENAME),$@.in) > $(CURDIR)/$@
$(appname_subst_files): $(foreach file,$(appname_subst_files),$(subst $(MOZ_APP_NAME),$(MOZ_PKG_BASENAME),$(file).in))
PYTHONDONTWRITEBYTECODE=1 python3 $(CURDIR)/debian/build/Preprocessor.py -Fsubstitution --marker="%%" $(MOZ_DEFINES) $(CURDIR)/$(subst $(MOZ_APP_NAME),$(MOZ_PKG_BASENAME),$@.in) > $(CURDIR)/$@
%.pc: WCHAR_CFLAGS = $(shell cat $(MOZ_OBJDIR)/config/autoconf.mk | grep WCHAR_CFLAGS | sed 's/^[^=]*=[[:space:]]*\(.*\)$$/\1/')
%.pc: %.pc.in debian/stamp-makefile-build
PYTHONDONTWRITEBYTECODE=1 python3 $(CURDIR)/debian/build/Preprocessor.py -Fsubstitution --marker="%%" $(MOZ_DEFINES) -DWCHAR_CFLAGS="$(WCHAR_CFLAGS)" $(CURDIR)/$< > $(CURDIR)/$@
make-buildsymbols: debian/stamp-makebuildsymbols
debian/stamp-makebuildsymbols: debian/stamp-makefile-build
$(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)
@touch $@
install-geckodriver: debian/stamp-installgeckodriver
debian/stamp-installgeckodriver: debian/stamp-makefile-install
install -D $(MOZ_DISTDIR)/bin/geckodriver $(CURDIR)/debian/$(MOZ_PKG_NAME)-geckodriver/usr/bin/geckodriver
@touch $@
make-langpack-xpis: $(foreach locale,$(MOZ_LOCALES),debian/stamp-make-langpack-xpi-$(locale))
debian/stamp-make-langpack-xpi-%:
@echo ""
@echo ""
@echo "* Building language pack xpi for $*"
@echo ""
export PATH=$(VIRTENV_PATH)/bin/:$$PATH ; \
export REAL_LOCALE_MERGEDIR=$(CURDIR)/debian/l10n-mergedirs/$* ; \
cd $(MOZ_OBJDIR)/$(MOZ_APP)/locales ; \
$(MAKE) langpack-$* BASE_MERGE=$(CURDIR)/debian/l10n-mergedirs REAL_LOCALE_MERGEDIR=$(CURDIR)/debian/l10n-mergedirs/$* || exit 1;
@touch $@
common-configure-arch common-configure-indep:: common-configure-impl
common-configure-impl:: debian/stamp-mach-configure
debian/stamp-mach-configure: cbindgen/bin/cbindgen dump_syms/bin/dump_syms
$(CURDIR)/mach configure && $(CURDIR)/mach build-backend
touch $@
clean::
rm -f debian/stamp-mach-configure
cbindgen/bin/cbindgen: third_party/cbindgen/Cargo.toml
export CC=clang-$(DEB_LLVM_VERSION); \
export CXX=clang++-$(DEB_LLVM_VERSION); \
cd $(CURDIR)/third_party/cbindgen; \
cargo build --release; \
export CARGO_HOME=$(CURDIR)/third_party/cbindgen/.cargo; \
cargo install --path . --bin cbindgen --root ../../cbindgen
clean::
rm -rf $(CURDIR)/cbindgen
rm -rf $(CURDIR)/third_party/cbindgen/target
dump_syms/bin/dump_syms: third_party/dump_syms/Cargo.toml
export CC=clang-$(DEB_LLVM_VERSION); \
export CXX=clang++-$(DEB_LLVM_VERSION); \
cd $(CURDIR)/third_party/dump_syms; \
cargo build --release; \
export CARGO_HOME=$(CURDIR)/third_party/dump_syms/.cargo; \
cargo install --path . --bin dump_syms --root ../../dump_syms
clean::
rm -rf $(CURDIR)/dump_syms
rm -rf $(CURDIR)/third_party/dump_syms/target
install/$(MOZ_PKG_NAME)::
@echo "Adding suggests / recommends on support packages"
echo "$(MOZ_PKG_SUPPORT_SUGGESTS)" | perl -0 -ne 's/[ \t\n]+/ /g; /\w/ and print "support:Suggests=$$_\n"' >> debian/$(MOZ_PKG_NAME).substvars
echo "$(MOZ_PKG_SUPPORT_RECOMMENDS)" | perl -0 -ne 's/[ \t\n]+/ /g; /\w/ and print "support:Recommends=$$_\n"' >> debian/$(MOZ_PKG_NAME).substvars
ifneq ($(MOZ_PKG_NAME),$(MOZ_APP_NAME))
install/%::
@echo "Adding conflicts / provides for renamed package"
echo "app:Conflicts=$(subst $(subst $(MOZ_APP_NAME),,$(MOZ_PKG_NAME)),,$*)" >> debian/$*.substvars
echo "app:Provides=$(subst $(subst $(MOZ_APP_NAME),,$(MOZ_PKG_NAME)),,$*)" >> debian/$*.substvars
endif
common-install-arch common-install-indep:: common-install-impl
common-install-impl:: debian/stamp-mach-install make-langpack-xpis
debian/stamp-mach-install:
DESTDIR=$(CURDIR)/debian/tmp $(CURDIR)/mach install
$(foreach dir,$(MOZ_LIBDIR) $(MOZ_INCDIR) $(MOZ_IDLDIR) $(MOZ_SDKDIR), \
if [ -d debian/tmp/$(dir)-$(MOZ_VERSION) ]; \
then \
mv debian/tmp/$(dir)-$(MOZ_VERSION) debian/tmp/$(dir); \
fi; )
touch $@
clean::
rm -f debian/stamp-mach-install
common-install-arch:: install-geckodriver
common-binary-arch:: make-buildsymbols
binary-install/$(MOZ_PKG_NAME)::
install -m 0644 $(CURDIR)/debian/apport/blacklist $(CURDIR)/debian/$(MOZ_PKG_NAME)/etc/apport/blacklist.d/$(MOZ_PKG_NAME)
install -m 0644 $(CURDIR)/debian/apport/native-origins $(CURDIR)/debian/$(MOZ_PKG_NAME)/etc/apport/native-origins.d/$(MOZ_PKG_NAME)
# Copy hicolor icons (LP: #1639863)
$(foreach size,16 22 24 32 48 64 128 256, \
install -m 0644 -D $(CURDIR)/browser/branding/official/default$(size).png \
$(CURDIR)/debian/$(MOZ_PKG_NAME)/usr/share/icons/hicolor/$(size)x$(size)/apps/$(MOZ_PKG_NAME).png;)
# Monochrome/symbolic icon for gnome-shell
install -m 0644 $(CURDIR)/debian/symbolic.svg $(CURDIR)/debian/$(MOZ_PKG_NAME)/usr/share/icons/hicolor/symbolic/apps/$(MOZ_PKG_NAME)-symbolic.svg
$(patsubst %,binary-post-install/%,$(MOZ_LOCALE_PKGS)):: binary-post-install/%: install-langpack-xpis-%
binary-post-install/$(MOZ_PKG_NAME)-dev::
rm -f debian/$(MOZ_PKG_NAME)-dev/$(MOZ_INCDIR)/nspr/md/_linux.cfg
dh_link -p$(MOZ_PKG_NAME)-dev $(MOZ_INCDIR)/nspr/prcpucfg.h $(MOZ_INCDIR)/nspr/md/_linux.cfg
$(patsubst %,binary-post-install/%,$(DEB_ALL_PACKAGES)) :: binary-post-install/%:
find debian/$(cdbs_curpkg) -name .mkdir.done -delete
define locales_for_langpack
$(strip $(if $(filter $(MOZ_PKG_NAME),$(1)),\
en-US,\
$(shell grep $(subst $(MOZ_PKG_NAME)-locale-,,$(1))$$ debian/config/locales.shipped | sed -n 's/\([^\:]*\)\:\?.*/\1/ p')))
endef
install-langpack-xpis-%:
@echo ""
@echo "Installing language pack xpis for $*"
dh_installdirs -p$* $(MOZ_ADDONDIR)/extensions
$(foreach lang,$(call locales_for_langpack,$*), \
id=`PYTHONDONTWRITEBYTECODE=1 python3 $(CURDIR)/debian/build/xpi-id.py $(CURDIR)/$(MOZ_DISTDIR)/$(LANGPACK_DIR)/$(MOZ_APP_NAME)-$(MOZ_VERSION).$(lang).langpack.xpi 2>/dev/null`; \
install -m 0644 $(CURDIR)/$(MOZ_DISTDIR)/$(LANGPACK_DIR)/$(MOZ_APP_NAME)-$(MOZ_VERSION).$(lang).langpack.xpi \
$(CURDIR)/debian/$*/$(MOZ_ADDONDIR)/extensions/$$id.xpi;)
$(patsubst %,binary-fixup/%,$(DEB_ALL_PACKAGES)) :: binary-fixup/%:
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
$(foreach f,$(call cdbs_expand_curvar,MOZ_EXECUTABLES),chmod a+x debian/$(cdbs_curpkg)/$(f);)
binary-predeb/$(MOZ_PKG_NAME)::
$(foreach lib,libfreeblpriv3.so libnssdbm3.so libsoftokn3.so, \
LD_LIBRARY_PATH=debian/$(MOZ_PKG_NAME)/$(MOZ_LIBDIR):$$LD_LIBRARY_PATH \
$(MOZ_DISTDIR)/bin/shlibsign -v -i debian/$(MOZ_PKG_NAME)/$(MOZ_LIBDIR)/$(lib);)
mozconfig: debian/config/mozconfig
cp $< $@
define cmp_auto_generated_file
@if ! cmp -s $(1) $(1).old; then \
echo ""; \
diff -Nurp $(1).old $(1); \
echo ""; \
echo "****************************************************************************"; \
echo "* An automatically generated file is out of date and needs to be refreshed *"; \
echo "****************************************************************************"; \
echo ""; \
echo "$(1) is out of date. Please run \"debian/rules $(firstword $(2) $(1))\" in VCS"; \
echo ""; \
rm -f $(1).old; \
exit 1; \
fi
rm -f $(1).old
endef
pre-build::
cp debian/config/locales.shipped debian/config/locales.shipped.old
pre-build:: debian/config/locales.shipped $(pkgname_subst_files) $(appname_subst_files) mozconfig
$(call cmp_auto_generated_file,debian/config/locales.shipped,refresh-supported-locales)
# Conditionally patch the top-level Cargo.toml file to reduce the LTO to "thin"
# on armhf to work around OOM failures on Launchpad builders. This is only one
# half of the workaround, see also debian/patches/armhf-rustc-thin-lto.patch.
ifneq (,$(filter arm64 armhf, $(DEB_HOST_ARCH)))
pre-build:: Cargo.toml.bak
Cargo.toml.bak: Cargo.toml
cp $< $@
sed -i 's/\[profile.release\]/\[profile.release\]\nlto = "thin"/' $<
clean::
if [ -f Cargo.toml.bak ]; then mv Cargo.toml.bak Cargo.toml; fi
endif
EXTRACT_TARBALL = $(firstword $(shell TMPDIR=`mktemp -d`; tar -jxf $(1) -C $$TMPDIR > /dev/null 2>&1; echo $$TMPDIR/`ls $$TMPDIR/ | head -n1`))
ifdef LANGPACK_O_MATIC
refresh-supported-locales:: LPOM_OPT = -l $(LANGPACK_O_MATIC)
endif
refresh-supported-locales:: EXTRACTED := $(if $(wildcard $(MOZ_APP)/locales/shipped-locales),,$(call EXTRACT_TARBALL,$(TARBALL)))
refresh-supported-locales:: SHIPPED_LOCALES = $(firstword $(wildcard $(CURDIR)/$(MOZ_APP)/locales/shipped-locales) $(wildcard $(EXTRACTED)/$(MOZ_APP)/locales/shipped-locales))
refresh-supported-locales::
@echo ""
@echo "****************************************"
@echo "* Refreshing list of shipped languages *"
@echo "****************************************"
@echo ""
$(if $(SHIPPED_LOCALES),,$(error We aren't in the full source directory. Please use "TARBALL=<path_to_orig.tar.bzr>"))
perl debian/build/refresh-supported-locales.pl -s $(SHIPPED_LOCALES) $(LPOM_OPT)
refresh-supported-locales:: debian/control
$(if $(EXTRACTED),rm -rf $(dir $(EXTRACTED)))
define moz_monkey_patch_file
$(if $(wildcard debian/stamp-monkey-patch-upstream-files),$(error Too late to use moz_monkey_patch_file), \
echo "$(1)" >> debian/monkey-patch-files; \
echo "$(2) $(1)" >> debian/monkey-patch-files.sh)
endef
get-orig-source: ARGS = -r $(MOZILLA_REPO) -l $(L10N_REPO) -n $(MOZ_PKG_NAME) -b $(MOZ_PKG_BASENAME) -a $(MOZ_APP)
ifdef UPSTREAM_VERSION
get-orig-source: ARGS += -v $(UPSTREAM_VERSION)
endif
ifdef UPSTREAM_BUILD
get-orig-source: ARGS += --build $(UPSTREAM_BUILD)
endif
ifdef LOCAL_BRANCH
get-orig-source: ARGS += -c $(LOCAL_BRANCH)
endif
get-orig-source:
PYTHONDONTWRITEBYTECODE=1 python3 $(CURDIR)/debian/build/create-tarball.py $(ARGS)
echo-%:
@echo "$($*)"
ifneq (1, $(MOZ_DISABLE_CLEAN_CHECKS))
clean::
cp debian/config/locales.shipped debian/config/locales.shipped.old
clean:: refresh-supported-locales
$(call cmp_auto_generated_file,debian/config/locales.shipped,refresh-supported-locales)
$(call cmp_auto_generated_file,debian/control)
endif
clean::
rm -f $(pkgname_subst_files) $(appname_subst_files)
rm -f debian/stamp-*
rm -rf debian/l10n-mergedirs
rm -rf $(MOZ_OBJDIR)
rm -f mozconfig
.PHONY: make-buildsymbols make-langpack-xpis refresh-supported-locales get-orig-source monkey-patch-upstream-files

18
debian/build/xpi-id.py vendored Normal file
View File

@ -0,0 +1,18 @@
#!/usr/bin/python3
import sys
import json
import os
import zipfile
if __name__ == '__main__':
if not len(sys.argv) == 2:
print("Must specify an xpi", file=sys.stderr)
exit(1)
json_doc = json.loads(zipfile.ZipFile(sys.argv[1]).open('manifest.json').read().decode('utf-8').strip())
gecko_id = json_doc["applications"]["gecko"]["id"]
assert gecko_id
print("%s" % gecko_id)
exit(0)

5
debian/changelog vendored Normal file
View File

@ -0,0 +1,5 @@
firefox (102.0+build2-ok1) yangtze; urgency=medium
* Build for openKylin.
-- openKylinBot <openKylinBot@openkylin.com> Mon, 25 Apr 2022 22:03:04 +0800

1
debian/compat vendored Normal file
View File

@ -0,0 +1 @@
9

7
debian/config/branch.mk vendored Normal file
View File

@ -0,0 +1,7 @@
CHANNEL = release
MOZ_ENABLE_BREAKPAD = 1
MOZ_OFFICIAL_BUILD = 1
MOZ_ENABLE_TELEMETRY = 1
MOZILLA_REPO = https://hg.mozilla.org/releases/mozilla-release
L10N_REPO = https://hg.mozilla.org/l10n-central

94
debian/config/locales.all vendored Normal file
View File

@ -0,0 +1,94 @@
# List of all language packs, past and present. Please don't delete any entries from this file
af:Afrikaans
an:Aragonese
ar:Arabic
as:Assamese
ast:Asturian
az:Azerbaijani
be:Belarusian
bg:Bulgarian
bn:Bengali
br:Breton
bs:Bosnian
ca:Catalan; Valencian
cak:Kaqchikel
cs:Czech
csb:Kashubian
cy:Welsh
da:Danish
de:German
el:Greek
en:English
eo:Esperanto
es:Spanish; Castilian
et:Estonian
eu:Basque
fa:Persian
fi:Finnish
fr:French
fy:Western Frisian
ga:Irish
gd:Gaelic; Scottish Gaelic
gl:Galician
gn:Guarani
gu:Gujarati
he:Hebrew
hi:Hindi
hr:Croatian
hsb:Sorbian, Upper
hu:Hungarian
hy:Armenian
ia:Interlingua
id:Indonesian
is:Icelandic
it:Italian
ja:Japanese
ka:Georgian
kab:Kabyle
kk:Kazakh
km:Central Khmer
kn:Kannada
ko:Korean
ku:Kurdish
lg:Ganda
lt:Lithuanian
lv:Latvian
mai:Maithili
mk:Macedonian
ml:Malayalam
mn:Mongolian
mr:Marathi
ms:Malay
my:Myanmar
nb:Bokmål, Norwegian; Norwegian Bokmål
ne:Nepali
nl:Dutch; Flemish
nn:Norwegian Nynorsk; Nynorsk, Norwegian
nso:Sotho, Northern
oc:Occitan (post 1500)
or:Oriya
pa:Panjabi; Punjabi
pl:Polish
pt:Portuguese
ro:Romanian
ru:Russian
si:Sinhala; Sinhalese
sk:Slovak
sl:Slovenian
sq:Albanian
sr:Serbian
sv:Swedish
sw:Swahili
szl:Silesian
ta:Tamil
te:Telugu
th:Thai
tr:Turkish
uk:Ukrainian
ur:Urdu
uz:Uzbek
vi:Vietnamese
xh:Xhosa
zh-hans:Simplified Chinese
zh-hant:Traditional Chinese
zu:Zulu

11
debian/config/locales.blacklist vendored Normal file
View File

@ -0,0 +1,11 @@
ach # Not supported on Ubuntu
ak # Not supported on Ubuntu
dsb # Not supported on Ubuntu
lij # Not supported on Ubuntu
ff # Not supported on Ubuntu
rm # Not supported on Ubuntu
sco # Not supported on Ubuntu
son # Not supported on Ubuntu
ta-LK # Not supported on Ubuntu (but we keep ta)
tl # Not supported on Ubuntu
trs # Not supported on Ubuntu

90
debian/config/locales.shipped vendored Normal file
View File

@ -0,0 +1,90 @@
# List of shipped locales. This list is automatically generated. Do not edit by hand
af:af
an:an
ar:ar
ast:ast
az:az
be:be
bg:bg
bn:bn
br:br
bs:bs
ca:ca
ca-valencia:ca
cak:cak
cs:cs
cy:cy
da:da
de:de
el:el
en-CA:en
en-GB:en
eo:eo
es-AR:es
es-CL:es
es-ES:es
es-MX:es
et:et
eu:eu
fa:fa
fi:fi
fr:fr
fy-NL:fy
ga-IE:ga
gd:gd
gl:gl
gn:gn
gu-IN:gu
he:he
hi-IN:hi
hr:hr
hsb:hsb
hu:hu
hy-AM:hy
ia:ia
id:id
is:is
it:it
ja:ja
ja-JP-mac:ja
ka:ka
kab:kab
kk:kk
km:km
kn:kn
ko:ko
lt:lt
lv:lv
mk:mk
mr:mr
ms:ms
my:my
nb-NO:nb
ne-NP:ne
nl:nl
nn-NO:nn
oc:oc
pa-IN:pa
pl:pl
pt-BR:pt
pt-PT:pt
ro:ro
ru:ru
si:si
sk:sk
sl:sl
sq:sq
sr:sr
sv-SE:sv
szl:szl
ta:ta
te:te
th:th
tr:tr
uk:uk
ur:ur
uz:uz
vi:vi
xh:xh
zh-CN:zh-hans
zh-TW:zh-hant

106
debian/config/mozconfig.in vendored Normal file
View File

@ -0,0 +1,106 @@
%%ifdef DEB_BUILD_GNU_TYPE
ac_add_options --build=@DEB_BUILD_GNU_TYPE@
%%endif
ac_add_options --host=@DEB_HOST_GNU_TYPE@
ac_add_options --prefix=/usr
ac_add_options --with-l10n-base=@TOPSRCDIR@/@DEB_BUILDDIR@/l10n
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/@MOZ_OBJDIR@
ac_add_options --enable-release
ac_add_options --disable-install-strip
ac_add_options --disable-updater
ac_add_options --enable-application=browser
ac_add_options --with-distribution-id=com.ubuntu
%%if DEB_BUILD_ARCH_BITS == 32
ac_add_options --enable-debug-symbols=-g1
%%else
ac_add_options --enable-debug-symbols
%%endif
%%ifdef MOZ_NO_OPTIMIZE
ac_add_options --disable-optimize
%%else
%%ifndef MOZ_VALGRIND
ac_add_options --enable-optimize
%%else
ac_add_options --enable-optimize="-g -O -freorder-blocks"
%%endif
%%endif
%%ifdef MOZ_VALGRIND
ac_add_options --disable-jemalloc
ac_add_options --enable-valgrind
%%endif
%%ifdef DEB_PARALLEL_JOBS
mk_add_options MOZ_MAKE_FLAGS=-j@DEB_PARALLEL_JOBS@
%%endif
ac_add_options --enable-tests
%%ifdef MOZ_ENABLE_BREAKPAD
ac_add_options --enable-crashreporter
%%else
ac_add_options --disable-crashreporter
%%endif
ac_add_options @MOZ_BRANDING_OPTION@
%%ifdef MOZ_BUILD_PGO
mk_add_options MOZ_PGO=1
mk_add_options PROFILE_GEN_SCRIPT='xvfb-run -a @MOZ_PYTHON@ @TOPSRCDIR@/@MOZ_OBJDIR@/_profile/pgo/profileserver.py 10'
%%endif
ac_add_options --enable-update-channel=@MOZ_UPDATE_CHANNEL@
%%ifdef MOZ_DEBUG
ac_add_options --enable-debug
%%else
ac_add_options --disable-debug
%%endif
%%if DEB_HOST_ARCH != arm64
%%if DEB_HOST_ARCH != ppc64el
%%if DEB_HOST_ARCH != s390x
ac_add_options --disable-elf-hack
%%endif
%%endif
%%endif
%%if DEB_HOST_ARCH != amd64
%%if DEB_HOST_ARCH != i386
%%if DEB_HOST_ARCH != armhf
%%if DEB_HOST_ARCH != arm64
# See https://bugzilla.mozilla.org/show_bug.cgi?id=1430094
ac_add_options --disable-webrtc
ac_add_options --disable-av1
%%endif
%%endif
%%endif
%%endif
%%if MOZ_APP_NAME != MOZ_DEFAULT_APP_NAME
ac_add_options --with-app-name=@MOZ_APP_NAME@
%%endif
%%ifdef MOZ_APP_PROFILE
ac_add_options --with-app-profile=@MOZ_APP_PROFILE@
%%endif
%%if DISTRIB == Ubuntu
ac_add_options --with-ua-vendor=Ubuntu
%%endif
ac_add_options --without-wasm-sandboxed-libraries
%%if MOZ_UPDATE_CHANNEL == nightly
ac_add_options --enable-profiling
%%endif
mk_add_options "export MOZ_BUILD_DATE=@MOZ_BUILDID@"
ac_add_options CC=clang-@DEB_LLVM_VERSION@
ac_add_options CXX=clang++-@DEB_LLVM_VERSION@
ac_add_options CBINDGEN=@TOPSRCDIR@/@DEB_BUILDDIR@/cbindgen/bin/cbindgen
ac_add_options DUMP_SYMS=@TOPSRCDIR@/@DEB_BUILDDIR@/dump_syms/bin/dump_syms
ac_add_options NODEJS=/usr/lib/nodejs-mozilla/bin/node
%%if DEB_HOST_ARCH != i386
%%if DEB_HOST_ARCH != armhf
ac_add_options --enable-rust-simd
%%endif
%%endif
ac_add_options --with-unsigned-addon-scopes=app
# Re-enable addon sideloading to allow langpacks installed system-wide (LP: #1866059)
ac_add_options --allow-addon-sideload
# Set up Google API keys, see http://www.chromium.org/developers/how-tos/api-keys .
# Note: these are for Ubuntu use ONLY. For your own distribution,
# please get your own set of keys.
# Included with permission from Paweł Hajdan.
# Feel free to contact Chris Coulson (chris.coulson@canonical.com) for more info.
# Since firefox 66.0, the single API key was split into two (potentially)
# separate keys, one for the Google Location Services, and one for the
# Safe Browsing API. See https://bugzilla.mozilla.org/show_bug.cgi?id=1531176
# for details. It is fine to use the same key file for both.
ac_add_options --with-google-location-service-api-keyfile=@TOPSRCDIR@/debian/ga
ac_add_options --with-google-safebrowsing-api-keyfile=@TOPSRCDIR@/debian/ga

34
debian/config/tarball.conf vendored Normal file
View File

@ -0,0 +1,34 @@
{
"l10n-blacklist": "debian/config/locales.blacklist",
"includes": [
""
],
"excludes": [
{ "path": "build/*.exe", "wms": true },
{ "path": "config.log", "wms": false },
{ "path": "*.sfx", "wms": true },
{ "path": "*.dll", "wms": true },
{ "path": "*.so.zip", "wms": true },
{ "path": "*libwinapi_*.a", "wms": true },
{ "path": "layout/doc/object_diagram_template.sda", "wms": false },
{ "path": "layout/doc/SpaceMgr_BlockReflSt_OD.sda", "wms": false },
{ "path": "l10n/*/calendar", "wms": false },
{ "path": "l10n/*/editor", "wms": false },
{ "path": "l10n/*/extensions", "wms": false },
{ "path": "l10n/*/mail", "wms": false },
{ "path": "l10n/*/mobile", "wms": false },
{ "path": "l10n/*/other-licenses/branding/sunbird", "wms": false },
{ "path": "l10n/*/suite", "wms": false },
{ "path": "other-licenses/*.exe", "wms": true },
{ "path": "security/nss/cmd/samples", "wms": false },
{ "path": "security/nss/tests/fips/cavs_samples", "wms": false },
{ "path": "toolkit/crashreporter/*.exe", "wms": true },
{ "path": "toolkit/mozapps/*.exe", "wms": true },
{ "path": "xpcom/tests/unit/data/SmallApp.app/Contents/MacOS/SmallApp", "wms": false },
{ "path": "third_party/cbindgen/vendor/winapi-*/lib", "wms": false },
{ "path": "third_party/cbindgen/vendor/winapi/src/*/*.rs", "wms": false },
{ "path": "third_party/dump_syms/vendor/winapi-*/lib", "wms": false },
{ "path": "third_party/dump_syms/vendor/winapi/src/*/*.rs", "wms": false },
{ "path": "third_party/python/pipenv/pipenv/*/_vendor/distlib/*.exe", "wms": true }
]
}

1075
debian/control vendored Normal file

File diff suppressed because it is too large Load Diff

134
debian/control.in vendored Normal file
View File

@ -0,0 +1,134 @@
# vim:noexpandtab:
Source: @MOZ_PKG_NAME@
Section: web
Priority: optional
Maintainer: Ubuntu Mozilla Team <ubuntu-mozillateam@lists.ubuntu.com>
Vcs-Bzr: https://code.launchpad.net/~mozillateam/firefox/firefox.focal
Build-Depends: cdbs,
locales,
debhelper (>= 9),
autotools-dev,
autoconf2.13,
zip,
libx11-dev,
libx11-xcb-dev,
libxt-dev,
libxext-dev,
libgtk-3-dev (>= 3.14),
libglib2.0-dev (>= 2.42),
libpango1.0-dev (>= 1.14.0),
libfontconfig1-dev,
libfreetype6-dev (>= 2.0.1),
icu-devtools [s390x],
libstartup-notification0-dev,
libasound2-dev,
libcurl4-openssl-dev,
libssl-dev,
libdbus-glib-1-dev (>= 0.60),
lsb-release,
libiw-dev,
mesa-common-dev,
libnotify-dev (>= 0.4),
libxrender-dev,
libpulse-dev,
nasm (>= 2.14.02),
yasm (>= 1.1),
unzip,
dbus-x11,
xvfb,
python3 (>= 3.6),
libffi-dev (>= 3.0.9) [powerpc ppc64el s390x],
clang-13 | clang-12 | clang-11 | clang-10,
libclang-13-dev | libclang-12-dev | libclang-11-dev | libclang-10-dev,
llvm-13-dev | llvm-12-dev | llvm-11-dev | llvm-10-dev,
cargo (>= 0.60),
rustc (>= 1.59.0),
nodejs-mozilla (>= 10.21)
Standards-Version: 3.9.1
Package: @MOZ_PKG_NAME@
Architecture: any
Depends: lsb-release,
${misc:Depends},
${shlibs:Depends}
Recommends: xul-ext-ubufox,
${support:Recommends},
libcanberra0,
libdbusmenu-glib4,
libdbusmenu-gtk3-4
Provides: www-browser,
iceweasel,
gnome-www-browser,
${app:Provides}
Suggests: fonts-lyx,
${support:Suggests}
Breaks: ${transitional:Breaks}
Replaces: ${transitional:Replaces}
Conflicts: ${app:Conflicts},
${transitional:Conflicts}
XB-Xul-AppId: {ec8030f7-c20a-464f-9b0e-13a3a9e97384}
Description: Safe and easy web browser from Mozilla
Firefox delivers safe, easy web browsing. A familiar user interface,
enhanced security features including protection from online identity theft,
and integrated search let you get the most out of the web.
Package: @MOZ_PKG_NAME@-dbg
Architecture: any
Section: debug
Priority: extra
Depends: ${shlibs:Depends},
${misc:Depends},
@MOZ_PKG_NAME@ (= ${binary:Version})
Provides: ${app:Provides}
Conflicts: ${app:Conflicts},
Description: Safe and easy web browser from Mozilla - debug symbols
Firefox delivers safe, easy web browsing. A familiar user interface,
enhanced security features including protection from online identity theft,
and integrated search let you get the most out of the web.
.
This package contains the debugging symbols for the Firefox web
browser
Package: @MOZ_PKG_NAME@-dev
Architecture: any
Section: oldlibs
Priority: extra
Depends: ${misc:Depends}
Description: Safe and easy web browser from Mozilla - development files
This is a transitional package to ensure that upgrades work correctly.
It can be safely removed
Package: @MOZ_PKG_NAME@-mozsymbols
Architecture: amd64 i386
Section: debug
Priority: extra
Depends: ${shlibs:Depends},
${misc:Depends},
Provides: ${app:Provides}
Conflicts: ${app:Conflicts}
Description: Safe and easy web browser from Mozilla - Breakpad symbols
Firefox delivers safe, easy web browsing. A familiar user interface,
enhanced security features including protection from online identity theft,
and integrated search let you get the most out of the web.
.
This package contains the Firefox symbols in a format expected by Mozilla's
Breakpad. Eventually this package should go away and the symbol upload be
implemented in soyuz (or other builders that build this package)
Package: @MOZ_PKG_NAME@-geckodriver
Architecture: any
Depends: ${shlibs:Depends},
${misc:Depends},
@MOZ_PKG_NAME@ (= ${binary:Version})
Description: Safe and easy web browser from Mozilla - geckodriver
Firefox delivers safe, easy web browsing. A familiar user interface,
enhanced security features including protection from online identity theft,
and integrated search let you get the most out of the web.
.
This package contains geckodriver, a proxy for using W3C WebDriver-compatible
clients (such as selenium) to interact with Gecko-based browsers. See
https://firefox-source-docs.mozilla.org/testing/geckodriver/ for details.
# Transitional packages below here
# Language packs below here

10
debian/control.langpacks vendored Normal file
View File

@ -0,0 +1,10 @@
Package: @MOZ_PKG_NAME@-locale-@LANGCODE@
Architecture: any
Depends: ${misc:Depends}
Replaces: language-pack-@LANGCODE@-base
Conflicts: ${app:Conflicts}
Provides: ${app:Provides}
Description: @LANG@ language pack for Firefox
This package contains @LANG@ translations and search plugins
for Firefox

11
debian/control.langpacks.unavail vendored Normal file
View File

@ -0,0 +1,11 @@
Package: @MOZ_PKG_NAME@-locale-@LANGCODE@
Architecture: any
Depends: ${misc:Depends}
Conflicts: ${app:Conflicts}
Provides: ${app:Provides}
Description: Transitional package for unavailable language
This language is unavailable for the current version of Firefox
.
This is an empty transitional package to ensure a clean upgrade
process. You can safely remove this package after installation.

1976
debian/copyright vendored Normal file

File diff suppressed because it is too large Load Diff

10
debian/distribution.ini vendored Normal file
View File

@ -0,0 +1,10 @@
[Global]
id=canonical
version=1.0
about=Mozilla Firefox for Ubuntu
[Preferences]
app.distributor="canonical"
app.distributor.channel="ubuntu"
app.partner.ubuntu="ubuntu"
mozilla.partner.id="ubuntu"

2
debian/docs vendored Normal file
View File

@ -0,0 +1,2 @@
debian/MPL-1.1
debian/MPL-2.0

3
debian/firefox-mozsymbols.install.in vendored Normal file
View File

@ -0,0 +1,3 @@
%%ifdef MOZ_ENABLE_BREAKPAD
@MOZ_DISTDIR@/*symbols.zip @MOZ_LIBDIR@
%%endif

71
debian/firefox.1.in vendored Normal file
View File

@ -0,0 +1,71 @@
.TH FIREFOX 1 2011-02-09 @MOZ_APP_NAME@
.SH NAME
@MOZ_APP_NAME@ \- a free and open source web browser from Mozilla
.SH SYNOPSIS
.B @MOZ_APP_NAME@
[\fIOPTIONS\fR] [\fIurl\fR]
.SH DESCRIPTION
See http://support.mozilla.com/ for help using the browser.
This manpage only describes how to run it.
.SH OPTIONS
.TP
\fB\-h, \-\-help\fR
Prints the command line options.
.TP
\fB\-g, \-\-debug\fR
Starts \fB@MOZ_APP_NAME@\fR in a debugger.
.TP
\fB\-d, \-\-debugger\fR
Specify the debugger in which to start \fB@MOZ_APP_NAME@\fR. The default is gdb. Used in conjunction with \fB-g\fR.
.TP
\fB\-a, \-\-debugger\-args\fR
Specify arguments to pass to the debugger. Used in conjunction with \fB-g\fR.
.TP
\fB\-no\-remote\fR
Don't connect to any other running instances of \fB@MOZ_APP_NAME@\fR. Use this if you want to run \fB@MOZ_APP_NAME@\fR
in an entirely new process. By default, \fB@MOZ_APP_NAME@\fR will delegate a command to an already running instance.
.TP
\fB\-ProfileManager\fR
Start the profilemanager. Use this to choose the profile you would like to run \fB@MOZ_APP_NAME@\fR with. You
will need to also use \fB\-no\-remote\fR if there is already a running \fB@MOZ_APP_NAME@\fR instance.
.TP
\fB\-P\fR \fIprofile\fR
Start \fB@MOZ_APP_NAME@\fR with the profile named \fIprofile\fR. Will start the profile manager if a valid profile
name is not specified. You will need to also use \fB\-no\-remote\fR if there is already a running \fB@MOZ_APP_NAME@\fR instance.
.TP
\fB\-safe\-mode\fR
Start \fB@MOZ_APP_NAME@\fR in safe-mode. This disables all third-party extensions, and may be necessary if
you are having problems with an extension you installed.
.TP
\fB\-new\-tab\fR \fIurl\fR
Open \fIurl\fR in a new tab.
.TP
\fB\-new\-window\fR \fIurl\fR
Open \fIurl\fR in a new window.
.TP
\fB\-v, \-version\fR
Print the current version of \fB@MOZ_APP_NAME@\fR.
.TP
\fB\-UILocale\fR \fIlocale\fR
Start \fB@MOZ_APP_NAME@\fR with the specified locale \fIlocale\fR. Use this to override your environment
.TP
\fB\-preferences\fR
Open the preferences dialog.
.TP
\fB\-private\fR
Start \fB@MOZ_APP_NAME@\fR in private browsing mode
.TP
\fB\-private\-toggle\fR
Toggle private browsing mode
.TP
\fB\-setDefaultBrowser\fR
Set \fB@MOZ_APP_NAME@\fR as the default web browser
.TP
\fB\-search\fR \fIterm\fR
Search for \fIterm\fR with your default search engine
.TP
\fB\-jsconsole\fR
Open the Error console. If \fB@MOZ_APP_NAME@\fR is not already running, this will open a new browser window too

263
debian/firefox.desktop.in vendored Normal file
View File

@ -0,0 +1,263 @@
[Desktop Entry]
Version=1.0
%%ifdef MOZ_OFFICIAL_BRANDING
Name=Firefox Web Browser
Name[ar]=متصفح الويب فَيَرفُكْس
Name[ast]=Restolador web Firefox
Name[bn]=ফায়ারফক্স ওয়েব ব্রাউজার
Name[ca]=Navegador web Firefox
Name[cs]=Firefox Webový prohlížeč
Name[da]=Firefox - internetbrowser
Name[el]=Περιηγητής Firefox
Name[es]=Navegador web Firefox
Name[et]=Firefoxi veebibrauser
Name[fa]=مرورگر اینترنتی Firefox
Name[fi]=Firefox-selain
Name[fr]=Navigateur Web Firefox
Name[gl]=Navegador web Firefox
Name[he]=דפדפן האינטרנט Firefox
Name[hr]=Firefox web preglednik
Name[hu]=Firefox webböngésző
Name[it]=Firefox Browser Web
Name[ja]=Firefox ウェブ・ブラウザ
Name[ko]=Firefox 웹 브라우저
Name[ku]=Geroka torê Firefox
Name[lt]=Firefox interneto naršyklė
Name[nb]=Firefox Nettleser
Name[nl]=Firefox webbrowser
Name[nn]=Firefox Nettlesar
Name[no]=Firefox Nettleser
Name[pl]=Przeglądarka WWW Firefox
Name[pt]=Firefox Navegador Web
Name[pt_BR]=Navegador Web Firefox
Name[ro]=Firefox Navigator Internet
Name[ru]=Веб-браузер Firefox
Name[sk]=Firefox - internetový prehliadač
Name[sl]=Firefox spletni brskalnik
Name[sv]=Firefox webbläsare
Name[tr]=Firefox Web Tarayıcısı
Name[ug]=Firefox توركۆرگۈ
Name[uk]=Веб-браузер Firefox
Name[vi]=Trình duyệt web Firefox
Name[zh_CN]=Firefox 网络浏览器
Name[zh_TW]=Firefox 網路瀏覽器
%%else
Name=@MOZ_DISPLAY_NAME@ Web Browser
Name[ast]=Restolador web @MOZ_DISPLAY_NAME@
Name[ca]=Navegador web @MOZ_DISPLAY_NAME@
Name[cs]=@MOZ_DISPLAY_NAME@ Webový prohlížeč
Name[da]=@MOZ_DISPLAY_NAME@ - internetbrowser
Name[el]=Περιηγητής @MOZ_DISPLAY_NAME@
Name[es]=Navegador web @MOZ_DISPLAY_NAME@
Name[et]=@MOZ_DISPLAY_NAME@i veebibrauser
Name[fa]=مرورگر اینترنتی @MOZ_DISPLAY_NAME@
Name[fi]=@MOZ_DISPLAY_NAME@-selain
Name[fr]=Navigateur Web @MOZ_DISPLAY_NAME@
Name[gl]=Navegador web @MOZ_DISPLAY_NAME@
Name[he]=דפדפן האינטרנט @MOZ_DISPLAY_NAME@
Name[hr]=@MOZ_DISPLAY_NAME@ web preglednik
Name[hu]=@MOZ_DISPLAY_NAME@ webböngésző
Name[it]=@MOZ_DISPLAY_NAME@ Browser Web
Name[ja]=@MOZ_DISPLAY_NAME@ ウェブ・ブラウザ
Name[ko]=@MOZ_DISPLAY_NAME@ 웹 브라우저
Name[ku]=Geroka torê @MOZ_DISPLAY_NAME@
Name[lt]=@MOZ_DISPLAY_NAME@ interneto naršyklė
Name[nb]=@MOZ_DISPLAY_NAME@ Nettleser
Name[nl]=@MOZ_DISPLAY_NAME@ webbrowser
Name[nn]=@MOZ_DISPLAY_NAME@ Nettlesar
Name[no]=@MOZ_DISPLAY_NAME@ Nettleser
Name[pl]=Przeglądarka WWW @MOZ_DISPLAY_NAME@
Name[pt]=@MOZ_DISPLAY_NAME@ Navegador Web
Name[pt_BR]=Navegador Web @MOZ_DISPLAY_NAME@
Name[ro]=@MOZ_DISPLAY_NAME@ Navigator Internet
Name[ru]=Веб-браузер @MOZ_DISPLAY_NAME@
Name[sk]=@MOZ_DISPLAY_NAME@ - internetový prehliadač
Name[sl]=@MOZ_DISPLAY_NAME@ spletni brskalnik
Name[sv]=@MOZ_DISPLAY_NAME@ webbläsare
Name[tr]=@MOZ_DISPLAY_NAME@ Web Tarayıcısı
Name[ug]=@MOZ_DISPLAY_NAME@ توركۆرگۈ
Name[uk]=Веб-браузер @MOZ_DISPLAY_NAME@
Name[vi]=Trình duyệt web @MOZ_DISPLAY_NAME@
Name[zh_CN]=@MOZ_DISPLAY_NAME@ 网络浏览器
Name[zh_TW]=@MOZ_DISPLAY_NAME@ 網路瀏覽器
%%endif
Comment=Browse the World Wide Web
Comment[ar]=تصفح الشبكة العنكبوتية العالمية
Comment[ast]=Restola pela Rede
Comment[bn]=ইন্টারনেট ব্রাউজ করুন
Comment[ca]=Navegueu per la web
Comment[cs]=Prohlížení stránek World Wide Webu
Comment[da]=Surf på internettet
Comment[de]=Im Internet surfen
Comment[el]=Μπορείτε να περιηγηθείτε στο διαδίκτυο (Web)
Comment[es]=Navegue por la web
Comment[et]=Lehitse veebi
Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید
Comment[fi]=Selaa Internetin WWW-sivuja
Comment[fr]=Naviguer sur le Web
Comment[gl]=Navegar pola rede
Comment[he]=גלישה ברחבי האינטרנט
Comment[hr]=Pretražite web
Comment[hu]=A világháló böngészése
Comment[it]=Esplora il web
Comment[ja]=ウェブを閲覧します
Comment[ko]=웹을 돌아 다닙니다
Comment[ku]=Li torê bigere
Comment[lt]=Naršykite internete
Comment[nb]=Surf på nettet
Comment[nl]=Verken het internet
Comment[nn]=Surf på nettet
Comment[no]=Surf på nettet
Comment[pl]=Przeglądanie stron WWW
Comment[pt]=Navegue na Internet
Comment[pt_BR]=Navegue na Internet
Comment[ro]=Navigați pe Internet
Comment[ru]=Доступ в Интернет
Comment[sk]=Prehliadanie internetu
Comment[sl]=Brskajte po spletu
Comment[sv]=Surfa på webben
Comment[tr]=İnternet'te Gezinin
Comment[ug]=دۇنيادىكى توربەتلەرنى كۆرگىلى بولىدۇ
Comment[uk]=Перегляд сторінок Інтернету
Comment[vi]=Để duyệt các trang web
Comment[zh_CN]=浏览互联网
Comment[zh_TW]=瀏覽網際網路
GenericName=Web Browser
GenericName[ar]=متصفح ويب
GenericName[ast]=Restolador Web
GenericName[bn]=ওয়েব ব্রাউজার
GenericName[ca]=Navegador web
GenericName[cs]=Webový prohlížeč
GenericName[da]=Webbrowser
GenericName[el]=Περιηγητής διαδικτύου
GenericName[es]=Navegador web
GenericName[et]=Veebibrauser
GenericName[fa]=مرورگر اینترنتی
GenericName[fi]=WWW-selain
GenericName[fr]=Navigateur Web
GenericName[gl]=Navegador Web
GenericName[he]=דפדפן אינטרנט
GenericName[hr]=Web preglednik
GenericName[hu]=Webböngésző
GenericName[it]=Browser web
GenericName[ja]=ウェブ・ブラウザ
GenericName[ko]=웹 브라우저
GenericName[ku]=Geroka torê
GenericName[lt]=Interneto naršyklė
GenericName[nb]=Nettleser
GenericName[nl]=Webbrowser
GenericName[nn]=Nettlesar
GenericName[no]=Nettleser
GenericName[pl]=Przeglądarka WWW
GenericName[pt]=Navegador Web
GenericName[pt_BR]=Navegador Web
GenericName[ro]=Navigator Internet
GenericName[ru]=Веб-браузер
GenericName[sk]=Internetový prehliadač
GenericName[sl]=Spletni brskalnik
GenericName[sv]=Webbläsare
GenericName[tr]=Web Tarayıcı
GenericName[ug]=توركۆرگۈ
GenericName[uk]=Веб-браузер
GenericName[vi]=Trình duyệt Web
GenericName[zh_CN]=网络浏览器
GenericName[zh_TW]=網路瀏覽器
Keywords=Internet;WWW;Browser;Web;Explorer
Keywords[ar]=انترنت;إنترنت;متصفح;ويب;وب
Keywords[ast]=Internet;WWW;Restolador;Web;Esplorador
Keywords[ca]=Internet;WWW;Navegador;Web;Explorador;Explorer
Keywords[cs]=Internet;WWW;Prohlížeč;Web;Explorer
Keywords[da]=Internet;Internettet;WWW;Browser;Browse;Web;Surf;Nettet
Keywords[de]=Internet;WWW;Browser;Web;Explorer;Webseite;Site;surfen;online;browsen
Keywords[el]=Internet;WWW;Browser;Web;Explorer;Διαδίκτυο;Περιηγητής;Firefox;Φιρεφοχ;Ιντερνετ
Keywords[es]=Explorador;Internet;WWW
Keywords[fi]=Internet;WWW;Browser;Web;Explorer;selain;Internet-selain;internetselain;verkkoselain;netti;surffaa
Keywords[fr]=Internet;WWW;Browser;Web;Explorer;Fureteur;Surfer;Navigateur
Keywords[he]=דפדפן;אינטרנט;רשת;אתרים;אתר;פיירפוקס;מוזילה;
Keywords[hr]=Internet;WWW;preglednik;Web
Keywords[hu]=Internet;WWW;Böngésző;Web;Háló;Net;Explorer
Keywords[it]=Internet;WWW;Browser;Web;Navigatore
Keywords[is]=Internet;WWW;Vafri;Vefur;Netvafri;Flakk
Keywords[ja]=Internet;WWW;Web;インターネット;ブラウザ;ウェブ;エクスプローラ
Keywords[nb]=Internett;WWW;Nettleser;Explorer;Web;Browser;Nettside
Keywords[nl]=Internet;WWW;Browser;Web;Explorer;Verkenner;Website;Surfen;Online
Keywords[pt]=Internet;WWW;Browser;Web;Explorador;Navegador
Keywords[pt_BR]=Internet;WWW;Browser;Web;Explorador;Navegador
Keywords[ru]=Internet;WWW;Browser;Web;Explorer;интернет;браузер;веб;файрфокс;огнелис
Keywords[sk]=Internet;WWW;Prehliadač;Web;Explorer
Keywords[sl]=Internet;WWW;Browser;Web;Explorer;Brskalnik;Splet
Keywords[tr]=İnternet;WWW;Tarayıcı;Web;Gezgin;Web sitesi;Site;sörf;çevrimiçi;tara
Keywords[uk]=Internet;WWW;Browser;Web;Explorer;Інтернет;мережа;переглядач;оглядач;браузер;веб;файрфокс;вогнелис;перегляд
Keywords[vi]=Internet;WWW;Browser;Web;Explorer;Trình duyệt;Trang web
Keywords[zh_CN]=Internet;WWW;Browser;Web;Explorer;网页;浏览;上网;火狐;Firefox;ff;互联网;网站;
Keywords[zh_TW]=Internet;WWW;Browser;Web;Explorer;網際網路;網路;瀏覽器;上網;網頁;火狐
Exec=@MOZ_APP_NAME@ %u
Terminal=false
X-MultipleArgs=false
Type=Application
Icon=@MOZ_APP_NAME@
Categories=GNOME;GTK;Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;x-scheme-handler/chrome;video/webm;application/x-xpinstall;
StartupNotify=true
Actions=new-window;new-private-window;
[Desktop Action new-window]
Name=Open a New Window
Name[ar]=افتح نافذة جديدة
Name[ast]=Abrir una ventana nueva
Name[bn]=Abrir una ventana nueva
Name[ca]=Obre una finestra nova
Name[cs]=Otevřít nové okno
Name[da]=Åbn et nyt vindue
Name[de]=Ein neues Fenster öffnen
Name[el]=Νέο παράθυρο
Name[es]=Abrir una ventana nueva
Name[fi]=Avaa uusi ikkuna
Name[fr]=Ouvrir une nouvelle fenêtre
Name[gl]=Abrir unha nova xanela
Name[he]=פתיחת חלון חדש
Name[hr]=Otvori novi prozor
Name[hu]=Új ablak nyitása
Name[it]=Apri una nuova finestra
Name[ja]=新しいウィンドウを開く
Name[ko]=새 창 열기
Name[ku]=Paceyeke nû veke
Name[lt]=Atverti naują langą
Name[nb]=Åpne et nytt vindu
Name[nl]=Nieuw venster openen
Name[pt]=Abrir nova janela
Name[pt_BR]=Abrir nova janela
Name[ro]=Deschide o fereastră nouă
Name[ru]=Новое окно
Name[sk]=Otvoriť nové okno
Name[sl]=Odpri novo okno
Name[sv]=Öppna ett nytt fönster
Name[tr]=Yeni pencere aç
Name[ug]=يېڭى كۆزنەك ئېچىش
Name[uk]=Відкрити нове вікно
Name[vi]=Mở cửa sổ mới
Name[zh_CN]=新建窗口
Name[zh_TW]=開啟新視窗
Exec=@MOZ_APP_NAME@ -new-window
[Desktop Action new-private-window]
Name=Open a New Private Window
Name[ar]=افتح نافذة جديدة للتصفح الخاص
Name[ca]=Obre una finestra nova en mode d'incògnit
Name[cs]=Otevřít nové anonymní okno
Name[de]=Ein neues privates Fenster öffnen
Name[el]=Νέο ιδιωτικό παράθυρο
Name[es]=Abrir una ventana privada nueva
Name[fi]=Avaa uusi yksityinen ikkuna
Name[fr]=Ouvrir une nouvelle fenêtre de navigation privée
Name[he]=פתיחת חלון גלישה פרטית חדש
Name[hu]=Új privát ablak nyitása
Name[it]=Apri una nuova finestra anonima
Name[nb]=Åpne et nytt privat vindu
Name[ru]=Новое приватное окно
Name[sl]=Odpri novo okno zasebnega brskanja
Name[sv]=Öppna ett nytt privat fönster
Name[tr]=Yeni gizli pencere aç
Name[uk]=Відкрити нове вікно у потайливому режимі
Name[zh_TW]=開啟新隱私瀏覽視窗
Exec=@MOZ_APP_NAME@ -private-window

12
debian/firefox.dirs.in vendored Normal file
View File

@ -0,0 +1,12 @@
@MOZ_ADDONDIR@/distribution/extensions
@MOZ_ADDONDIR@/extensions
@MOZ_ADDONDIR@/plugins
etc/apparmor.d/disable
etc/apport/native-origins.d
etc/apport/blacklist.d
usr/share/icons/hicolor/16x16/apps
usr/share/icons/hicolor/32x32/apps
usr/share/icons/hicolor/48x48/apps
usr/share/icons/hicolor/64x64/apps
usr/share/icons/hicolor/128x128/apps
usr/share/icons/hicolor/symbolic/apps

38
debian/firefox.install.in vendored Normal file
View File

@ -0,0 +1,38 @@
# Everything under browser/ except for extensions/ (installed in to
# MOZ_ADDONDIR)
@MOZ_LIBDIR@/browser/chrome
@MOZ_LIBDIR@/browser/features
@MOZ_LIBDIR@/browser/omni.ja
# GRE files (except for dictionaries/, which we symlink elsewhere)
@MOZ_LIBDIR@/defaults
@MOZ_LIBDIR@/fonts
@MOZ_LIBDIR@/gmp-clearkey
@MOZ_LIBDIR@/omni.ja
@MOZ_LIBDIR@/*.so
@MOZ_LIBDIR@/*.ini
@MOZ_LIBDIR@/dependentlibs.list
%%ifdef MOZ_ENABLE_BREAKPAD
@MOZ_LIBDIR@/Throbber-small.gif
%%endif
# Binaries
@MOZ_LIBDIR@/@MOZ_APP_NAME@
@MOZ_LIBDIR@/plugin-container
%%ifdef MOZ_ENABLE_BREAKPAD
@MOZ_LIBDIR@/crashreporter
@MOZ_LIBDIR@/minidump-analyzer
%%endif
debian/distribution.ini @MOZ_LIBDIR@/distribution
debian/@MOZ_APP_NAME@.desktop usr/share/applications
debian/apport/source_@MOZ_PKG_NAME@.py usr/share/apport/package-hooks/
debian/firefox.sh @MOZ_LIBDIR@
# Prefs
debian/vendor-gre.js @MOZ_LIBDIR@/defaults/pref
debian/vendor-firefox.js @MOZ_LIBDIR@/browser/defaults/preferences
debian/syspref.js etc/@MOZ_PKG_NAME@
debian/usr.bin.@MOZ_PKG_NAME@ etc/apparmor.d

7
debian/firefox.links.in vendored Normal file
View File

@ -0,0 +1,7 @@
# Symlinks for legacy folders
@MOZ_ADDONDIR@/extensions @MOZ_LIBDIR@/browser/extensions
@MOZ_ADDONDIR@/plugins @MOZ_LIBDIR@/browser/plugins
@MOZ_ADDONDIR@/distribution/extensions @MOZ_LIBDIR@/distribution/extensions
@MOZ_LIBDIR@/firefox.sh usr/bin/@MOZ_APP_NAME@
etc/@MOZ_PKG_NAME@/syspref.js @MOZ_LIBDIR@/browser/defaults/preferences/syspref.js

3
debian/firefox.lintian-overrides.in vendored Normal file
View File

@ -0,0 +1,3 @@
@MOZ_PKG_NAME@ binary: embedded-library @MOZ_LIBDIR@/libxul.so: libjpeg
@MOZ_PKG_NAME@ binary: embedded-library @MOZ_LIBDIR@/libmozsqlite3.so: sqlite
@MOZ_PKG_NAME@ binary: image-file-in-usr-lib

1
debian/firefox.manpages.in vendored Normal file
View File

@ -0,0 +1 @@
debian/@MOZ_APP_NAME@.1

121
debian/firefox.postinst.in vendored Normal file
View File

@ -0,0 +1,121 @@
#!/bin/sh
set -e
UPDATENOTIFIERDIR=/var/lib/update-notifier/user.d
MOZ_LIBDIR=/@MOZ_LIBDIR@
MOZ_APP_NAME=@MOZ_APP_NAME@
MOZ_PKG_NAME=@MOZ_PKG_NAME@
MOZ_ADDONDIR=/@MOZ_ADDONDIR@
# Move a conffile without triggering a dpkg question
finish_mv_conffile() {
local OLDCONFFILE="$1"
local NEWCONFFILE="$2"
rm -f $OLDCONFFILE.dpkg-remove
[ -e "$OLDCONFFILE" ] || return 0
echo "Preserving user changes to $NEWCONFFILE (renamed from $OLDCONFFILE)..."
mv -f "$NEWCONFFILE" "$NEWCONFFILE.dpkg-new"
mv -f "$OLDCONFFILE" "$NEWCONFFILE"
}
finish_rm_conffile() {
local CONFFILE="$1"
if [ -e "$CONFFILE.dpkg-backup" ]; then
mv -f "$CONFFILE.dpkg-backup" "$CONFFILE.dpkg-bak"
fi
if [ -e "$CONFFILE.dpkg-remove" ]; then
echo "Removing obsolete conffile $CONFFILE ..."
rm -f "$CONFFILE.dpkg-remove"
fi
}
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-remove" ] ; then
update-alternatives --install /usr/bin/gnome-www-browser \
gnome-www-browser /usr/bin/$MOZ_APP_NAME 40
update-alternatives --install /usr/bin/x-www-browser \
x-www-browser /usr/bin/$MOZ_APP_NAME 40
fi
if [ "$1" = "configure" ] ; then
#
# AppArmor
#
APP_PROFILE="/etc/apparmor.d/usr.bin.$MOZ_PKG_NAME"
if [ -f "$APP_PROFILE" ]; then
if [ -e /etc/lsb-release ] ; then
ubuntu_version=`grep ^DISTRIB_RELEASE /etc/lsb-release | cut -d= -f2 | cut -d '.' -f-2 | tr -d '.'`
else
ubuntu_version=`lsb_release -rs | cut -d '.' -f-2 | tr -d '.'`
fi
# Setup the extra include files for Ubuntu 10.10 and higher
# Add the local/ include
LOCAL_APP_PROFILE="/etc/apparmor.d/local/usr.bin.$MOZ_PKG_NAME"
test -e "$LOCAL_APP_PROFILE" || {
tmp=`mktemp`
cat <<EOM > "$tmp"
# Site-specific additions and overrides for usr.bin.firefox.
# For more details, please see /etc/apparmor.d/local/README.
EOM
mkdir `dirname $LOCAL_APP_PROFILE` 2>/dev/null || true
mv -f "$tmp" "$LOCAL_APP_PROFILE"
chmod 644 "$LOCAL_APP_PROFILE"
}
# Add the addons include
ADDONS_APP_PROFILE="/etc/apparmor.d/abstractions/ubuntu-browsers.d/$MOZ_PKG_NAME"
test -e "$ADDONS_APP_PROFILE" || {
tmp=`mktemp`
cat <<EOM > "$tmp"
# This file is updated by 'aa-update-browser' and may be overwritten on
# upgrades.
#
# For site-specific adjustments, please see /etc/apparmor.d/local/<binary>
#include <abstractions/ubuntu-browsers.d/plugins-common>
#include <abstractions/ubuntu-browsers.d/mailto>
#include <abstractions/ubuntu-browsers.d/multimedia>
#include <abstractions/ubuntu-browsers.d/productivity>
#include <abstractions/ubuntu-browsers.d/java>
#include <abstractions/ubuntu-browsers.d/kde>
#include <abstractions/ubuntu-browsers.d/text-editors>
#include <abstractions/ubuntu-browsers.d/ubuntu-integration>
#include <abstractions/ubuntu-browsers.d/user-files>
EOM
mkdir -p `dirname $ADDONS_APP_PROFILE` 2>/dev/null || true
mv -f "$tmp" "$ADDONS_APP_PROFILE"
chmod 644 "$ADDONS_APP_PROFILE"
}
# Reload AppArmor profile
DISABLE_APP_PROFILE="/etc/apparmor.d/disable/usr.bin.$MOZ_PKG_NAME"
if [ ! -f "$DISABLE_APP_PROFILE" ] && aa-status --enabled 2>/dev/null; then
apparmor_parser -r -T -W "$APP_PROFILE" || true
fi
fi
#
# End AppArmor
#
finish_rm_conffile "/etc/${MOZ_PKG_NAME}/profile/bookmarks.html"
finish_rm_conffile "/etc/${MOZ_PKG_NAME}/profile/localstore.rdf"
finish_rm_conffile "/etc/${MOZ_PKG_NAME}/profile/mimeTypes.rdf"
finish_rm_conffile "/etc/${MOZ_PKG_NAME}/profile/prefs.js"
finish_rm_conffile "/etc/${MOZ_PKG_NAME}/profile/chrome/userChrome-example.css"
finish_rm_conffile "/etc/${MOZ_PKG_NAME}/profile/chrome/userContent-example.css"
finish_mv_conffile "/etc/${MOZ_PKG_NAME}/pref/firefox.js" "/etc/${MOZ_PKG_NAME}/syspref.js"
fi
echo "Please restart all running instances of $MOZ_APP_NAME, or you will experience problems."
if [ -d /var/run ] ; then
touch /var/run/$MOZ_APP_NAME-restart-required
fi
#DEBHELPER#

62
debian/firefox.postrm.in vendored Normal file
View File

@ -0,0 +1,62 @@
#!/bin/sh
set -e
MOZ_PKG_NAME=@MOZ_PKG_NAME@
abort_mv_conffile() {
local CONFFILE="$1"
if [ -e "$CONFFILE.dpkg-remove" ]; then
echo "Reinstalling $CONFFILE that was moved away"
mv "$CONFFILE.dpkg-remove" "$CONFFILE"
fi
}
abort_rm_conffile() {
local CONFFILE="$1"
if [ -e "$CONFFILE.dpkg-remove" ]; then
echo "Reinstalling $CONFFILE that was moved away"
mv "$CONFFILE.dpkg-remove" "$CONFFILE"
fi
if [ -e "$CONFFILE.dpkg-backup" ]; then
echo "Reinstalling $CONFFILE that was backupped"
mv "$CONFFILE.dpkg-backup" "$CONFFILE"
fi
}
purge_conffile() {
local CONFFILE="$1"
rm -f "$CONFFILE.dpkg-bak" "$CONFFILE.dpkg-remove" "$CONFFILE.dpkg-backup" || true
}
if [ "$1" = "purge" ]; then
APP_PROFILE="usr.bin.@MOZ_PKG_NAME@"
rm -f /etc/apparmor.d/force-complain/$APP_PROFILE || true
rm -f /etc/apparmor.d/disable/$APP_PROFILE || true
rm -f /etc/apparmor.d/local/$APP_PROFILE || true
rm -f "/etc/apparmor.d/abstractions/ubuntu-browsers.d/@MOZ_PKG_NAME@" || true
rmdir /etc/apparmor.d/local 2>/dev/null || true
purge_conffile "/etc/${MOZ_PKG_NAME}/profile/bookmarks.html"
purge_conffile "/etc/${MOZ_PKG_NAME}/profile/localstore.rdf"
purge_conffile "/etc/${MOZ_PKG_NAME}/profile/mimeTypes.rdf"
purge_conffile "/etc/${MOZ_PKG_NAME}/profile/prefs.js"
purge_conffile "/etc/${MOZ_PKG_NAME}/profile/chrome/userChrome-example.css"
purge_conffile "/etc/${MOZ_PKG_NAME}/profile/chrome/userContent-example.css"
fi
if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ] ; then
abort_rm_conffile "/etc/${MOZ_PKG_NAME}/profile/bookmarks.html"
abort_rm_conffile "/etc/${MOZ_PKG_NAME}/profile/localstore.rdf"
abort_rm_conffile "/etc/${MOZ_PKG_NAME}/profile/mimeTypes.rdf"
abort_rm_conffile "/etc/${MOZ_PKG_NAME}/profile/prefs.js"
abort_rm_conffile "/etc/${MOZ_PKG_NAME}/profile/chrome/userChrome-example.css"
abort_rm_conffile "/etc/${MOZ_PKG_NAME}/profile/chrome/userContent-example.css"
abort_mv_conffile "/etc/${MOZ_PKG_NAME}/pref/firefox.js"
fi
#DEBHELPER#

97
debian/firefox.preinst.in vendored Normal file
View File

@ -0,0 +1,97 @@
#!/bin/sh
set -e
APP_DIR="/etc/apparmor.d"
APP_PROFILE="usr.bin.@MOZ_PKG_NAME@"
APP_CONFFILE="$APP_DIR/$APP_PROFILE"
APP_DISABLE="$APP_DIR/disable/$APP_PROFILE"
MOZ_PKG_NAME=@MOZ_PKG_NAME@
MOZ_ADDONDIR=/@MOZ_ADDONDIR@
MOZ_LIBDIR=/@MOZ_LIBDIR@
# Prepare to move a conffile without triggering a dpkg question
prepare_mv_conffile() {
local PKGNAME="$1"
local CONFFILE="$2"
[ -e "$CONFFILE" ] || return 0
local md5sum="$(md5sum $CONFFILE | sed -e 's/ .*//')"
local old_md5sum="$(dpkg-query -W -f='${Conffiles}' $PKGNAME | \
sed -n -e "\' $CONFFILE ' { s/ obsolete$//; s/.* //; p }")"
#'
if [ "$md5sum" = "$old_md5sum" ]; then
mv -f "$CONFFILE" "$CONFFILE.dpkg-remove"
fi
}
prepare_rm_conffile() {
local PACKAGE="$1"
local CONFFILE="$2"
[ -e "$CONFFILE" ] || return 0
local md5sum="$(md5sum $CONFFILE | sed -e 's/ .*//')"
local old_md5sum="$(dpkg-query -W -f='${Conffiles}' $PACKAGE | \
sed -n -e "\' $CONFFILE ' { s/ obsolete$//; s/.* //; p }")"
if [ "$md5sum" != "$old_md5sum" ]; then
echo "Obsolete conffile $CONFFILE has been modified by you."
echo "Saving as $CONFFILE.dpkg-bak ..."
mv -f "$CONFFILE" "$CONFFILE.dpkg-backup"
else
echo "Moving obsolete conffile $CONFFILE out of the way..."
mv -f "$CONFFILE" "$CONFFILE.dpkg-remove"
fi
}
disable_profile() {
# Create a symlink to the yet-to-be-unpacked profile
if [ ! -e "$APP_CONFFILE" ]; then
mkdir -p `dirname $APP_DISABLE` 2>/dev/null || true
ln -sf $APP_CONFFILE $APP_DISABLE
fi
}
if [ "$1" = "install" ] || [ "$1" = "upgrade" ] ; then
# Unconditionally disable AppArmor profile for Ubuntu 9.04 and under, since
# it requires abstractions found only in 9.10 and higher.
major=`lsb_release -r | awk '{print $2}' | cut -d '.' -f 1`
version=`lsb_release -r | awk '{print $2}'`
if [ "$major" -lt 10 ] && [ "$version" != "9.10" ]; then
disable_profile
else
if [ "$1" = "install" ]; then
# Disable AppArmor profile on install, unless the last profile they
# modified is enabled.
base=`echo $APP_PROFILE | cut -d '-' -f 1`
last_modified=`ls -rt $APP_DIR/$base* 2>/dev/null | grep -v '\.dpkg' | tail -n1`
if [ -s "$last_modified" ]; then
if [ -e "$APP_DIR/disable/`basename $last_modified`" ]; then
disable_profile
fi
else
# Fresh install and no other firefox profiles exist, so disable.
disable_profile
fi
elif [ "$1" = "upgrade" ]; then
# Disable AppArmor on upgrade from earlier than when we first shipped
# the profile if the user does not already have a profile defined.
if dpkg --compare-versions "$2" lt "3.7~a1~hg20091203" ; then
disable_profile
fi
fi
fi
prepare_rm_conffile "${MOZ_PKG_NAME}" "/etc/${MOZ_PKG_NAME}/profile/bookmarks.html"
prepare_rm_conffile "${MOZ_PKG_NAME}" "/etc/${MOZ_PKG_NAME}/profile/localstore.rdf"
prepare_rm_conffile "${MOZ_PKG_NAME}" "/etc/${MOZ_PKG_NAME}/profile/mimeTypes.rdf"
prepare_rm_conffile "${MOZ_PKG_NAME}" "/etc/${MOZ_PKG_NAME}/profile/prefs.js"
prepare_rm_conffile "${MOZ_PKG_NAME}" "/etc/${MOZ_PKG_NAME}/profile/chrome/userChrome-example.css"
prepare_rm_conffile "${MOZ_PKG_NAME}" "/etc/${MOZ_PKG_NAME}/profile/chrome/userContent-example.css"
prepare_mv_conffile "${MOZ_PKG_NAME}" "/etc/${MOZ_PKG_NAME}/pref/firefox.js"
fi
#DEBHELPER#

12
debian/firefox.prerm.in vendored Normal file
View File

@ -0,0 +1,12 @@
#!/bin/sh
set -e
MOZ_APP_NAME=@MOZ_APP_NAME@
if [ "$1" = "remove" ] ; then
update-alternatives --remove gnome-www-browser /usr/bin/$MOZ_APP_NAME
update-alternatives --remove x-www-browser /usr/bin/$MOZ_APP_NAME
fi
#DEBHELPER#

117
debian/firefox.sh.in vendored Normal file
View File

@ -0,0 +1,117 @@
#!/bin/sh
set -e
# Firefox launcher containing a Profile migration helper for
# temporary profiles used during alpha and beta phases.
# Authors:
# Alexander Sack <asac@jwsdot.com>
# Fabien Tassin <fta@sofaraway.org>
# Steve Langasek <steve.langasek@canonical.com>
# Chris Coulson <chris.coulson@canonical.com>
# License: GPLv2 or later
MOZ_LIBDIR=/@MOZ_LIBDIR@
MOZ_APP_LAUNCHER=`which $0`
MOZ_APP_NAME=@MOZ_APP_NAME@
export MOZ_APP_LAUNCHER
while [ ! -x $MOZ_LIBDIR/$MOZ_APP_NAME ] ; do
if [ -L "$MOZ_APP_LAUNCHER" ] ; then
MOZ_APP_LAUNCHER=`readlink -f $MOZ_APP_LAUNCHER`
MOZ_LIBDIR=`dirname $MOZ_APP_LAUNCHER`
else
echo "Can't find $MOZ_LIBDIR/$MOZ_APP_NAME"
exit 1
fi
done
usage () {
$MOZ_LIBDIR/$MOZ_APP_NAME -h | sed -e 's,/.*/,,'
echo
echo " -g or --debug Start within debugger"
echo " -d or --debugger Specify debugger to start with (eg, gdb or valgrind)"
echo " -a or --debugger-args Specify arguments for debugger"
}
moz_debug=0
moz_debugger_args=""
moz_debugger="gdb"
while [ $# -gt 0 ]; do
case "$1" in
-h | --help )
usage
exit 0
;;
-g | --debug )
moz_debug=1
shift
;;
-d | --debugger)
moz_debugger=$2;
if [ "${moz_debugger}" != "" ]; then
shift 2
else
echo "-d requires an argument"
exit 1
fi
;;
-a | --debugger-args )
moz_debugger_args=$2;
if [ "${moz_debugger_args}" != "" ] ; then
shift 2
else
echo "-a requires an argument"
exit 1
fi
;;
-- ) # Stop option processing
shift
break
;;
* )
break
;;
esac
done
if [ $moz_debug -eq 1 ] ; then
case $moz_debugger in
memcheck)
debugger="valgrind"
;;
*)
debugger=$moz_debugger
;;
esac
debugger=`which $debugger`
if [ ! -x $debugger ] ; then
echo "Invalid debugger"
exit 1
fi
case `basename $moz_debugger` in
gdb)
exec $debugger $moz_debugger_args --args $MOZ_LIBDIR/$MOZ_APP_NAME "$@"
;;
memcheck)
%%ifdef MOZ_VALGRIND
export G_SLICE=always-malloc
export G_DEBUG=gc-friendly
exec $debugger -v --tool=memcheck --leak-check=full --smc-check=all-non-file $moz_debugger_args $MOZ_LIBDIR/$MOZ_APP_NAME "$@"
%%else
echo "$MOZ_APP_NAME has not been compiled with valgrind support"
exit 1
%%endif
;;
*)
exec $debugger $moz_debugger_args $MOZ_LIBDIR/$MOZ_APP_NAME "$@"
;;
esac
else
exec $MOZ_LIBDIR/$MOZ_APP_NAME "$@"
fi

1
debian/ga vendored Normal file
View File

@ -0,0 +1 @@
AIzaSyAeBuGRUrxHr4_eHhrCwdkl0G-O4qR5UXs

View File

@ -0,0 +1,30 @@
Description: do not build various components with LLVM's integrated assembler,
which on armhf is built without NEON support
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1561819
--- a/media/libjpeg/moz.build
+++ b/media/libjpeg/moz.build
@@ -192,6 +192,10 @@ if CONFIG['CPU_ARCH'] == 'x86_64':
ASFLAGS += ['-I%s/media/libjpeg/simd/nasm/' % TOPSRCDIR]
ASFLAGS += ['-I%s/media/libjpeg/simd/x86_64/' % TOPSRCDIR]
+# The integrated assembler fails to build simd/arm/jsimd_neon.S because it doesn't have NEON
+if CONFIG['CC_TYPE'] == 'clang' and CONFIG['CPU_ARCH'] == 'arm':
+ ASFLAGS += ['-fno-integrated-as']
+
# We allow warnings for third-party code that can be updated from upstream.
AllowCompilerWarnings()
--- a/gfx/ycbcr/moz.build
+++ b/gfx/ycbcr/moz.build
@@ -60,6 +60,9 @@ if CONFIG['CPU_ARCH'] == 'arm' and CONFI
SOURCES += [
'yuv_convert_arm.cpp',
]
+ # The integrated assembler fails to build yuv_convert_arm.cpp because it doesn't have NEON
+ if CONFIG['CC_TYPE'] == 'clang':
+ CXXFLAGS += ['-fno-integrated-as']
LOCAL_INCLUDES += ['/media/libyuv/libyuv/include']

View File

@ -0,0 +1,39 @@
Description: Do not build qcms with NEON on armhf
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
--- a/gfx/qcms/src/lib.rs
+++ b/gfx/qcms/src/lib.rs
@@ -47,7 +47,7 @@ pub mod matrix;
pub use transform::Transform;
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
mod transform_avx;
-#[cfg(all(any(target_arch = "aarch64", target_arch = "arm"), feature = "neon"))]
+#[cfg(all(any(target_arch = "aarch64"), feature = "neon"))]
mod transform_neon;
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
mod transform_sse2;
--- a/gfx/qcms/src/transform.rs
+++ b/gfx/qcms/src/transform.rs
@@ -21,7 +21,7 @@
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#![allow(clippy::missing_safety_doc)]
-#[cfg(all(any(target_arch = "arm", target_arch = "aarch64"), feature = "neon"))]
+#[cfg(all(any(target_arch = "aarch64"), feature = "neon"))]
use crate::transform_neon::{
qcms_transform_data_bgra_out_lut_neon, qcms_transform_data_rgb_out_lut_neon,
qcms_transform_data_rgba_out_lut_neon,
@@ -1234,12 +1234,10 @@
}
}
- #[cfg(all(target_arch = "arm", feature = "neon"))]
- let neon_supported = is_arm_feature_detected!("neon");
#[cfg(all(target_arch = "aarch64", feature = "neon"))]
let neon_supported = is_aarch64_feature_detected!("neon");
- #[cfg(all(any(target_arch = "arm", target_arch = "aarch64"), feature = "neon"))]
+ #[cfg(all(any(target_arch = "aarch64"), feature = "neon"))]
if neon_supported {
if in_type == RGB8 {
transform.transform_fn = Some(qcms_transform_data_rgb_out_lut_neon)

View File

@ -0,0 +1,24 @@
Description: starting with firefox 66, armhf builds on Launchpad frequently
fail with "/usr/bin/ld: final link failed: memory exhausted" when linking
libxul.so. This is an attempt to reduce the memory used by ld.
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
--- a/build/moz.configure/toolchain.configure
+++ b/build/moz.configure/toolchain.configure
@@ -1627,12 +1627,15 @@
target_multiarch_dir,
android_platform,
c_compiler,
+ host,
)
@imports("os")
def linker_ldflags(
- linker, target, sysroot, multiarch_dir, android_platform, c_compiler
+ linker, target, sysroot, multiarch_dir, android_platform, c_compiler, host
):
flags = list((linker and linker.LINKER_FLAG) or [])
+ if host.cpu == "arm":
+ flags.append("-Wl,--no-keep-memory")
# rpath-link is irrelevant to wasm, see for more info https://github.com/emscripten-core/emscripten/issues/11076.
if sysroot.path and multiarch_dir and target.os != "WASI":
for d in ("lib", "usr/lib"):

View File

@ -0,0 +1,22 @@
Description: Do not enable LTO for rustc when building on arm64 and armhf,
to work around OOM failures on Launchpad builders. Note that this alone is not
sufficient, because by default cargo will also enable full LTO when building
with a release profile, so the top-level Cargo.toml file needs to be
conditionally patched (this is done in debian/build/rules.mk).
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
Forwarded: not-needed
--- a/config/makefiles/rust.mk
+++ b/config/makefiles/rust.mk
@@ -70,8 +70,10 @@ ifndef MOZ_DEBUG_RUST
# Never enable when coverage is enabled to work around https://github.com/rust-lang/rust/issues/90045.
ifndef MOZ_CODE_COVERAGE
ifeq (,$(findstring gkrust_gtest,$(RUST_LIBRARY_FILE)))
+ifeq (,$(filter aarch64 arm,$(CPU_ARCH)))
cargo_rustc_flags += -Clto
endif
+endif
# We need -Cembed-bitcode=yes for all crates when using -Clto.
RUSTFLAGS += -Cembed-bitcode=yes
endif

View File

@ -0,0 +1,17 @@
Description: Remove an extra constant definition that is now being generated by newer versions of cbindgen (0.24),
and causing build failures because it is defined in several places.
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1773259
Forwarded: not-needed
--- a/gfx/webrender_bindings/webrender_ffi.h
+++ b/gfx/webrender_bindings/webrender_ffi.h
@@ -73,8 +73,6 @@ struct WrPipelineInfo;
struct WrPipelineIdAndEpoch;
using WrPipelineIdEpochs = nsTArray<WrPipelineIdAndEpoch>;
-const uint64_t ROOT_CLIP_CHAIN = ~0;
-
} // namespace wr
} // namespace mozilla

View File

@ -0,0 +1,15 @@
Description: disable vmx support when building libpixman, because it uses a builtin (vec_xl) that isn't available in clang < 11
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
--- a/gfx/cairo/libpixman/src/moz.build
+++ b/gfx/cairo/libpixman/src/moz.build
@@ -94,9 +94,6 @@ if CONFIG['INTEL_ARCHITECTURE']:
use_mmx = True
if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
use_mmx = True
-elif CONFIG['CPU_ARCH'] in ('ppc', 'ppc64'):
- if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
- use_vmx = True
# Apple's arm assembler doesn't support the same syntax as
# the standard GNU assembler, so use the C fallback paths for now.
# This may be fixable if clang's ARM/iOS assembler improves into a

View File

@ -0,0 +1,19 @@
Description: do not build SWGL with -ffast-math on ppc64el with clang <= 10 (bionic and focal), because the compiler hangs forever
Bug-Ubuntu: https://launchpad.net/bugs/1930315
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
--- a/gfx/wr/swgl/build.rs
+++ b/gfx/wr/swgl/build.rs
@@ -193,9 +193,12 @@
} else if tool.is_like_clang() {
// gcc only supports -mrecip=none on some targets so to keep
// things simple we don't use -ffast-math with gcc at all
+ let target = std::env::var("TARGET").unwrap();
+ if !target.starts_with("powerpc64") {
build.flag("-ffast-math")
.flag("-mrecip=none")
.flag("-fno-finite-math-only");
+ }
}
}

View File

@ -0,0 +1,15 @@
Description: work around a build failure with clang on ppc64el
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
Bug: https://bugzilla.mozilla.org/1555531
--- a/security/nss/lib/freebl/mpi/mpcpucache.c
+++ b/security/nss/lib/freebl/mpi/mpcpucache.c
@@ -704,7 +704,7 @@ s_mpi_getProcessorLineSize()
#define MPI_GET_PROCESSOR_LINE_SIZE_DEFINED 1
#endif
-#if defined(__ppc64__)
+#if 0
/*
* Sigh, The PPC has some really nice features to help us determine cache
* size, since it had lots of direct control functions to do so. The POWER

View File

@ -0,0 +1,21 @@
Description: reduce the rust debuginfo level
because compiling with debuginfo=2 causes the OOM killer to interrupt the build
on launchpad builders. Initially this was only on 32 bit architectures, but
with firefox 63 it started happening frequently on arm64 and ppc64el too,
with newer versions it started happening very frequently on s390x too, and with
firefox 84 (built with rustc 1.47) it started happening on amd64 too.
This patch would initially decrease debug_info for selected architectures, but
with recent versions of rustc pretty much all supported architectures are
affected, so it is now unconditional.
--- a/build/moz.configure/rust.configure
+++ b/build/moz.configure/rust.configure
@@ -2167,7 +2167,7 @@ def rust_compile_flags(opt_level, debug_
debug_assertions = False
if debug_symbols:
- debug_info = "2"
+ debug_info = "1"
opts = []

View File

@ -0,0 +1,14 @@
diff -r 51c02060803e third_party/rust/libloading-0.5.2/.cargo-checksum.json
--- a/third_party/rust/libloading-0.5.2/.cargo-checksum.json
+++ b/third_party/rust/libloading-0.5.2/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{"Cargo.toml":"9110a58fe827a68e5df22f8d38e4beab38c259724942e868c5ae3debc2f0ebae","LICENSE":"b29f8b01452350c20dd1af16ef83b598fea3053578ccc1c7a0ef40e57be2620f","README.mkd":"b4cd83f110d01dc5aa8fcaf3da34bdbe1478efdba767d73abc14d4d87e4775fa","appveyor.yml":"8382c7f1769f6cf78029a221058c4d73f35a48308b5dfc38d875facabec1c139","build.rs":"d8f7fce1b459d117cd48d85ba3643124bd09657a0df9e0e90a1fd997decff741","src/changelog.rs":"e8a769578ebe2db81055b131ce12fa14c9ad0f21a79035748f244e5b347b2ada","src/lib.rs":"0cc0f6b42c98c14183dea2bc9deaf5aa574fabbe61081fe3339d74430f25fc12","src/os/mod.rs":"51d733e5522dacd6069642ad66aa6d7acf6c82950c934eb040e8dfd112e6d610","src/os/unix/global_static.c":"b1096dedf7d4aed5c28b658fc917f6603339ffd92390c84e25cb543bdc9460ac","src/os/unix/mod.rs":"9a84c15d0b9e5125a6ca086854a0e18884cb6c04cea54f47f1a44243e69335c2","src/os/windows/mod.rs":"c0ee0068a0564d64b7f3d3053d799492693c34571a935fc893a41a62a86fccdd","src/test_helpers.rs":"3a55052e8cd5231e97d9282b43398c2f144c57ced2d2df64bde7f482f5c778e7","src/util.rs":"5d1d3fcf7e5e9dc67df0dbf91332c5e3f5875e90c8f80ada5cfad0bc3c402d7e","tests/functions.rs":"4633f3673db6a5b3623ea8927b13314c25502c9fbb63bb17a5a35650ea489012","tests/markers.rs":"8e9c1b883404d9190e4f23ed39b3d6cbbccb3a07883f733b04aed4357b9c6aca","tests/nagisa32.dll":"5c69b2bd9c8a6ad04165c221075fc9fade1dd66ca697399ace528a5a62328e36","tests/nagisa64.dll":"e20b95e3036f3289421abd100760874d4f455afd33c3b5b64fec56b191f7d477","tests/windows.rs":"7711dfe19062d91356cd127546542b1b6e13aeef76ad3098f32c8a6ae319b66a"},"package":"f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753"}
\ No newline at end of file
+{"files":{"Cargo.toml":"9110a58fe827a68e5df22f8d38e4beab38c259724942e868c5ae3debc2f0ebae","LICENSE":"b29f8b01452350c20dd1af16ef83b598fea3053578ccc1c7a0ef40e57be2620f","README.mkd":"b4cd83f110d01dc5aa8fcaf3da34bdbe1478efdba767d73abc14d4d87e4775fa","appveyor.yml":"8382c7f1769f6cf78029a221058c4d73f35a48308b5dfc38d875facabec1c139","build.rs":"d8f7fce1b459d117cd48d85ba3643124bd09657a0df9e0e90a1fd997decff741","src/changelog.rs":"e8a769578ebe2db81055b131ce12fa14c9ad0f21a79035748f244e5b347b2ada","src/lib.rs":"0cc0f6b42c98c14183dea2bc9deaf5aa574fabbe61081fe3339d74430f25fc12","src/os/mod.rs":"51d733e5522dacd6069642ad66aa6d7acf6c82950c934eb040e8dfd112e6d610","src/os/unix/global_static.c":"b1096dedf7d4aed5c28b658fc917f6603339ffd92390c84e25cb543bdc9460ac","src/os/unix/mod.rs":"9a84c15d0b9e5125a6ca086854a0e18884cb6c04cea54f47f1a44243e69335c2","src/os/windows/mod.rs":"c0ee0068a0564d64b7f3d3053d799492693c34571a935fc893a41a62a86fccdd","src/test_helpers.rs":"3a55052e8cd5231e97d9282b43398c2f144c57ced2d2df64bde7f482f5c778e7","src/util.rs":"5d1d3fcf7e5e9dc67df0dbf91332c5e3f5875e90c8f80ada5cfad0bc3c402d7e","tests/functions.rs":"4633f3673db6a5b3623ea8927b13314c25502c9fbb63bb17a5a35650ea489012","tests/markers.rs":"8e9c1b883404d9190e4f23ed39b3d6cbbccb3a07883f733b04aed4357b9c6aca","tests/windows.rs":"7711dfe19062d91356cd127546542b1b6e13aeef76ad3098f32c8a6ae319b66a"},"package":"f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753"}
diff -r 51c02060803e third_party/rust/libloading/.cargo-checksum.json
--- a/third_party/rust/libloading/.cargo-checksum.json
+++ b/third_party/rust/libloading/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{"Cargo.toml":"e46195f62deca2f1fa63c19e754fb9eca0e0469d624e2ff5ac33f9d2bb0c67bf","LICENSE":"b29f8b01452350c20dd1af16ef83b598fea3053578ccc1c7a0ef40e57be2620f","README.mkd":"973a5fa332a8f33abc73ffc0ed509f81c66dbd681d8f50969cac32cdfe16ecb2","src/changelog.rs":"2c7cf7025d8f44a7c145852a0497934ae40d317cdd03de6284e36cd0d4774003","src/error.rs":"156c53e299e8f1cd4694b277a5d92772a8a9e7ec4004bae067367f4c2502de8b","src/lib.rs":"2eebab93230a59cd87c7884e95c91b3a8736c0a76814dd040864b8c25f0d5f9e","src/os/mod.rs":"6c59ef8c1120953ae6b6c32f27766c643ca90d85075c49c3545d2fe1ed82cedd","src/os/unix/consts.rs":"8d0422d6063c617e1a91425da4233f8d83de3667a011cb9e50b10736b9158c50","src/os/unix/mod.rs":"b4bdccdbd0a2f75593cf5355f54b1494a917c58fcb2e76528b8deedf481d65f2","src/os/windows/mod.rs":"c51ca318114dd4ec2e515b3e0539c11c5f1b86ad7fdbe7bc889dd929eee23b30","src/safe.rs":"b0dc1cb5c8e0216e365063b5e84218b2377bb7a62714fca9a6215a22a7bc58b8","src/test_helpers.rs":"201403e143e5b3204864124cd38067cf8813d5273dc1a9099288a9dc4bdd15b6","src/util.rs":"0b6dcfb9eafff2d87966460ef6b1b99980f888813037e787ed92deee602f8c2b","tests/constants.rs":"4778c062605ed22238c1bed16de4c076d0857282f090f36e6d985dafb7b4544d","tests/functions.rs":"57c5b15b679ccee3c0bd8e677dbecb14d1019dd82dc9207aa20b931d915ce39d","tests/library_filename.rs":"b1481f0bb374687c5f24e25113426d2a95f08a45fb8bc41a41e8702bd5a7b4bf","tests/markers.rs":"0ebc8f807b92e39452d35732988012cdca7ce96231c57eaac9c3f4217225ad39","tests/nagisa32.dll":"5c69b2bd9c8a6ad04165c221075fc9fade1dd66ca697399ace528a5a62328e36","tests/nagisa64.dll":"e20b95e3036f3289421abd100760874d4f455afd33c3b5b64fec56b191f7d477","tests/windows.rs":"35584a46658b305cd539712d3ba3c21fe7a130fd693aa1389e4886a67625d532"},"package":"efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd"}
\ No newline at end of file
+{"files":{"Cargo.toml":"e46195f62deca2f1fa63c19e754fb9eca0e0469d624e2ff5ac33f9d2bb0c67bf","LICENSE":"b29f8b01452350c20dd1af16ef83b598fea3053578ccc1c7a0ef40e57be2620f","README.mkd":"973a5fa332a8f33abc73ffc0ed509f81c66dbd681d8f50969cac32cdfe16ecb2","src/changelog.rs":"2c7cf7025d8f44a7c145852a0497934ae40d317cdd03de6284e36cd0d4774003","src/error.rs":"156c53e299e8f1cd4694b277a5d92772a8a9e7ec4004bae067367f4c2502de8b","src/lib.rs":"2eebab93230a59cd87c7884e95c91b3a8736c0a76814dd040864b8c25f0d5f9e","src/os/mod.rs":"6c59ef8c1120953ae6b6c32f27766c643ca90d85075c49c3545d2fe1ed82cedd","src/os/unix/consts.rs":"8d0422d6063c617e1a91425da4233f8d83de3667a011cb9e50b10736b9158c50","src/os/unix/mod.rs":"b4bdccdbd0a2f75593cf5355f54b1494a917c58fcb2e76528b8deedf481d65f2","src/os/windows/mod.rs":"c51ca318114dd4ec2e515b3e0539c11c5f1b86ad7fdbe7bc889dd929eee23b30","src/safe.rs":"b0dc1cb5c8e0216e365063b5e84218b2377bb7a62714fca9a6215a22a7bc58b8","src/test_helpers.rs":"201403e143e5b3204864124cd38067cf8813d5273dc1a9099288a9dc4bdd15b6","src/util.rs":"0b6dcfb9eafff2d87966460ef6b1b99980f888813037e787ed92deee602f8c2b","tests/constants.rs":"4778c062605ed22238c1bed16de4c076d0857282f090f36e6d985dafb7b4544d","tests/functions.rs":"57c5b15b679ccee3c0bd8e677dbecb14d1019dd82dc9207aa20b931d915ce39d","tests/library_filename.rs":"b1481f0bb374687c5f24e25113426d2a95f08a45fb8bc41a41e8702bd5a7b4bf","tests/markers.rs":"0ebc8f807b92e39452d35732988012cdca7ce96231c57eaac9c3f4217225ad39","tests/windows.rs":"35584a46658b305cd539712d3ba3c21fe7a130fd693aa1389e4886a67625d532"},"package":"efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd"}

15
debian/patches/s390x-ycbcr.patch vendored Normal file
View File

@ -0,0 +1,15 @@
diff -r 8efc3144ff2b gfx/ycbcr/chromium_types.h
--- a/gfx/ycbcr/chromium_types.h Wed Apr 18 06:22:54 2018 -0700
+++ b/gfx/ycbcr/chromium_types.h Wed Apr 18 20:00:32 2018 +0200
@@ -43,6 +43,11 @@
#define ARCH_CPU_AARCH64_FAMILY 1
#define ARCH_CPU_AARCH64 1
#define ARCH_CPU_64_BITS 1
+#elif defined(__s390x__)
+#define ARCH_CPU_S390_FAMILY 1
+#define ARCH_CPU_S390X 1
+#define ARCH_CPU_64_BITS 1
+#define ARCH_CPU_BIG_ENDIAN 1
#else
#warning Please add support for your architecture in chromium_types.h
#endif

33
debian/patches/series vendored Normal file
View File

@ -0,0 +1,33 @@
ubuntu-bookmarks.patch
ubuntu-ua-string-changes.patch
support-coinstallable-trunk-build.patch
use-system-icupkg.patch
rust-drop-dll-checksums.patch
webrtc-fix-compiler-flags-for-armhf.patch
s390x-ycbcr.patch
reduce-rust-debuginfo.patch
armhf-reduce-linker-memory-use.patch
armhf-rustc-thin-lto.patch
ppc64el-workaround-bug-1555531.patch
armhf-clang-no-integrated-as-for-neon.patch
armhf-do-not-build-qcms-with-neon.patch
libpixman-disable-vmx.patch
ppc64el-clang10-no-fast-math.patch
fix-ftbfs-newer-cbindgen.patch
# https://bugzilla.mozilla.org/show_bug.cgi?id=1773223
webrtc-armhf/D149203.diff
webrtc-armhf/D149204.diff
webrtc-armhf/D149205.diff
webrtc-armhf/D149206.diff
webrtc-armhf/D149207.diff
webrtc-armhf/D149208.diff
webrtc-armhf/D149209.diff
webrtc-armhf/D149210.diff
webrtc-armhf/D149471.diff
webrtc-armhf/D149474.diff
#webrtc-armhf/D149814.diff
# https://bugzilla.mozilla.org/show_bug.cgi?id=1738845
webrtc-armhf/D149850.diff
webrtc-armhf/D134738.diff

View File

@ -0,0 +1,34 @@
Description: Introduce --with-app-profile to change the profile location, so
that we can have nightly builds that are fully coinstallable with release
builds
Author: Chris Coulson <chris.coulson@canonical.com>
Forwarded: no
--- a/old-configure.in
+++ b/old-configure.in
@@ -2195,6 +2195,15 @@
MOZ_UA_VENDOR="$WITH_UA_VENDOR"
fi
+MOZ_ARG_WITH_STRING(app-profile,
+[--with-app-profile=APPPROFILE sets MOZ_APP_PROFILE to APPPROFILE],
+WITH_APP_PROFILE=$withval,
+)
+
+if test -n "$WITH_APP_PROFILE" ; then
+ MOZ_APP_PROFILE="$WITH_APP_PROFILE"
+fi
+
AC_SUBST(MOZ_OFFICIAL_BRANDING)
if test -n "$MOZ_OFFICIAL_BRANDING"; then
if test -z "$MOZ_OFFICIAL_BRANDING_DIRECTORY"; then
--- a/build/moz.configure/old.configure
+++ b/build/moz.configure/old.configure
@@ -240,6 +240,7 @@
"--includedir",
"--libdir",
"--prefix",
+ "--with-app-profile",
"--with-branding",
"--with-distribution-id",
"--with-macbundlename-prefix",

31
debian/patches/ubuntu-bookmarks.patch vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,109 @@
Description: Add "Ubuntu" to the platform part of the UA string
Author: Chris Coulson <chris.coulson@canonical.com>
Forwarded: not-needed
Index: b/netwerk/protocol/http/nsHttpHandler.cpp
===================================================================
--- a/netwerk/protocol/http/nsHttpHandler.cpp
+++ b/netwerk/protocol/http/nsHttpHandler.cpp
@@ -520,6 +523,9 @@
LOG(("> misc = %s\n", mMisc.get()));
LOG(("> product = %s\n", mProduct.get()));
LOG(("> product-sub = %s\n", mProductSub.get()));
+#ifdef MOZ_UA_VENDOR
+ LOG(("> vendor = %s\n", mVendor.get()));
+#endif
LOG(("> app-name = %s\n", mAppName.get()));
LOG(("> app-version = %s\n", mAppVersion.get()));
LOG(("> compat-firefox = %s\n", mCompatFirefox.get()));
@@ -877,7 +883,11 @@
mOscpu.Length() + mMisc.Length() + mProduct.Length() +
mProductSub.Length() + mAppName.Length() +
mAppVersion.Length() + mCompatFirefox.Length() +
- mCompatDevice.Length() + mDeviceModelId.Length() + 13);
+ mCompatDevice.Length() + mDeviceModelId.Length() +
+#ifdef MOZ_UA_VENDOR
+ mVendor.Length() +
+#endif
+ 15);
// Application portion
mUserAgent.Assign(mLegacyAppName);
@@ -893,6 +903,10 @@
mUserAgent.AppendLiteral("; ");
}
#endif
+#ifdef MOZ_UA_VENDOR
+ mUserAgent += mVendor;
+ mUserAgent.AppendLiteral("; ");
+#endif
if (!mCompatDevice.IsEmpty()) {
mUserAgent += mCompatDevice;
mUserAgent.AppendLiteral("; ");
Index: b/netwerk/protocol/http/nsHttpHandler.h
===================================================================
--- a/netwerk/protocol/http/nsHttpHandler.h
+++ b/netwerk/protocol/http/nsHttpHandler.h
@@ -514,6 +514,9 @@
// useragent components
nsCString mLegacyAppName{"Mozilla"};
nsCString mLegacyAppVersion{"5.0"};
+#ifdef MOZ_UA_VENDOR
+ nsCString mVendor{MOZ_UA_VENDOR};
+#endif
nsCString mPlatform;
nsCString mOscpu;
nsCString mMisc;
Index: b/old-configure.in
===================================================================
--- a/old-configure.in
+++ b/old-configure.in
@@ -1969,6 +1969,16 @@
AC_MSG_RESULT([no])
fi
+# Allow someone to add a vendor component to the default user agent string
+MOZ_ARG_WITH_STRING(ua-vendor,
+[--with-ua-vendor=VENDOR sets MOZ_UA_VENDOR to VENDOR],
+WITH_UA_VENDOR=$withval,
+)
+
+if test -n "$WITH_UA_VENDOR" ; then
+ MOZ_UA_VENDOR="$WITH_UA_VENDOR"
+fi
+
AC_SUBST(MOZ_OFFICIAL_BRANDING)
if test -n "$MOZ_OFFICIAL_BRANDING"; then
if test -z "$MOZ_OFFICIAL_BRANDING_DIRECTORY"; then
@@ -4050,6 +4060,7 @@
AC_SUBST(MOZ_APP_DISPLAYNAME)
AC_SUBST(MOZ_APP_VENDOR)
+AC_SUBST(MOZ_UA_VENDOR)
AC_SUBST(MOZ_APP_PROFILE)
AC_SUBST(MOZ_APP_ID)
AC_SUBST(MAR_CHANNEL_ID)
Index: b/build/moz.configure/old.configure
===================================================================
--- a/build/moz.configure/old.configure
+++ b/build/moz.configure/old.configure
@@ -262,6 +262,7 @@
"--with-branding",
"--with-distribution-id",
"--with-macbundlename-prefix",
+ "--with-ua-vendor",
"--x-includes",
"--x-libraries",
)
Index: b/netwerk/protocol/http/moz.build
===================================================================
--- a/netwerk/protocol/http/moz.build
+++ b/netwerk/protocol/http/moz.build
@@ -154,4 +154,7 @@
elif CONFIG["HOST_MAJOR_VERSION"] >= "15":
DEFINES["HAS_CONNECTX"] = True
+if CONFIG["MOZ_UA_VENDOR"]:
+ DEFINES["MOZ_UA_VENDOR"] = "\"%s\"" % CONFIG["MOZ_UA_VENDOR"]
+
include("/tools/fuzzing/libfuzzer-config.mozbuild")

13
debian/patches/use-system-icupkg.patch vendored Normal file
View File

@ -0,0 +1,13 @@
diff -r 08cd64cdbc3b config/external/icu/data/convert_icudata.py
--- a/config/external/icu/data/convert_icudata.py Fri Jul 17 11:18:09 2020 +0000
+++ b/config/external/icu/data/convert_icudata.py Sat Jul 18 14:40:33 2020 +0200
@@ -11,7 +11,7 @@
subprocess.run(
[
- os.path.join(buildconfig.topobjdir, "dist", "host", "bin", "icupkg"),
+ "icupkg",
"-tb",
data_file,
output.name,
]

27899
debian/patches/webrtc-armhf/D134738.diff vendored Normal file

File diff suppressed because it is too large Load Diff

119
debian/patches/webrtc-armhf/D149203.diff vendored Normal file
View File

@ -0,0 +1,119 @@
diff --git a/dom/media/webrtc/third_party_build/gn-configs/README.md b/dom/media/webrtc/third_party_build/gn-configs/README.md
--- a/dom/media/webrtc/third_party_build/gn-configs/README.md
+++ b/dom/media/webrtc/third_party_build/gn-configs/README.md
@@ -22,24 +22,11 @@
- select "Debugging Tools for Windows" and then click Change.
The aarch64 Rust target will need to be installed via:
`rustup target add aarch64-pc-windows-msvc`
-3. See information in `third_party/libwebrtc/README.mozilla` for the proper
- revision of libwebrtc
-
- libwebrtc updated from commit https://github.com/mozilla/libwebrtc/archive/149d693483e9055f574d9d65b01fe75a186b654b.tar.gz on 2020-11-30T15:48:48.472088.
- third_party updated from commit https://chromium.googlesource.com/chromium/src/third_party/+archive/5dc5a4a45df9592baa8e8c5f896006d9193d8e45.tar.gz on 2020-11-30T17:00:15.612630.
-
- In our current case, the revision is `149d693483e9055f574d9d65b01fe75a186b654b`
- which corresponds to:
-
- mozilla-modifications-rel86
-
- This commit was made on `Thu Nov 19 14:14:00 2020`.
-
-4. Download a version of the `gn` executable that corresponds to
+3. Download a version of the `gn` executable that corresponds to
`Thu Nov 19 14:14:00 2020`. In our case, that is version `1889 (8fe02009)`.
- [Win](https://chrome-infra-packages.appspot.com/p/gn/gn/windows-amd64/+/e_UmTHedzuu4zJ2gdpW8jrFFNnzIhThljx3jn3RMlVsC)
- [Linux](https://chrome-infra-packages.appspot.com/p/gn/gn/linux-amd64/+/bvBFKgehaepiKy_YhFnbiOpF38CK26N2OyE1R1jXof0C)
- [macOS](https://chrome-infra-packages.appspot.com/p/gn/gn/mac-amd64/+/nXvMRpyJhLhisAcnRmU5s9UZqovzMAhKAvWjax-swioC)
@@ -63,33 +50,20 @@
On OpenBSD, a slightly newer version of `gn` is needed in order to build:
(cd gn && git checkout 31f2bba8)
-5. Clone `depot_tools` from [depot_tools](https://chromium.googlesource.com/chromium/tools/depot_tools.git)
-
- git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
- export DEPOT_TOOLS=`pwd`/depot_tools
-
- Now, we need to checkout a revision of `depot_tools` that corresponds to the
- date of our libwebrtc branch. The closest `depot_tools` commit to
- `Thu Nov 19 14:14:00 2020` is `e7d1862b155ac3ccbef72c4d70629b5c88ffcb32`.
- There is additional information on how to more automatically determine this
- [here](https://chromium.googlesource.com/chromium/src/+/master/docs/building_old_revisions.md).
-
- (cd depot_tools ; git checkout e7d1862b155ac3ccbef72c4d70629b5c88ffcb32 )
-
-6. It is time to generate the build files. The script should be run from the
+4. It is time to generate the build files. The script should be run from the
top directory of our firefox tree.
bash ./dom/media/webrtc/third_party_build/gn-configs/generate-gn-build-files.sh
Debugging the generate script itself may prove useful, and one can do this by
setting the DEBUG_GEN environment variable to a non-empty value. This will
print everything that the script executes.
-7. Checkin all the generated/modified files and try your build!
+5. Checkin all the generated/modified files and try your build!
# Adding new configurations to the build
- Each new platform/architecture will require 2 new mozconfig files, one for the
debug build and one for the non-debug build. The filenames follow the same
diff --git a/dom/media/webrtc/third_party_build/gn-configs/generate-gn-build-files.sh b/dom/media/webrtc/third_party_build/gn-configs/generate-gn-build-files.sh
--- a/dom/media/webrtc/third_party_build/gn-configs/generate-gn-build-files.sh
+++ b/dom/media/webrtc/third_party_build/gn-configs/generate-gn-build-files.sh
@@ -18,21 +18,10 @@
else
echo "Path $GN is not found, see README.md"
exit
fi
-if [ "x$DEPOT_TOOLS" = "x" ]; then
- echo "DEPOT_TOOLS is not defined, see README.md"
- exit
-fi
-
-if [ -d $DEPOT_TOOLS ]; then
- echo "DEPOT_TOOLS is $DEPOT_TOOLS"
-else
- echo "Path $DEPOT_TOOLS is not found, see README.md"
-fi
-
# After this point:
# * eE: All commands should succede.
# * u: All variables should be defined before use.
# * o pipefail: All stages of all pipes should succede.
set -eEuo pipefail
@@ -67,11 +56,10 @@
# For now, only macOS, Windows, and Linux (including Android builds) are supported here.
if [ "x$SYS_NAME" = "xDarwin" ]; then
CONFIGS="x64_False_arm64_mac x64_True_arm64_mac x64_False_x64_mac x64_True_x64_mac"
IS_DARWIN=1
elif [ "x$SYS_NAME" = "xMINGW32_NT-6.2" ]; then
- export DEPOT_TOOLS_WIN_TOOLCHAIN=0
unset ANSICON
CONFIGS="x64_True_arm64_win x64_False_arm64_win"
CONFIGS="$CONFIGS x64_True_x64_win x64_False_x64_win"
CONFIGS="$CONFIGS x64_True_x86_win x64_False_x86_win"
IS_WIN=1
@@ -94,15 +82,10 @@
CONFIGS="$CONFIGS x64_False_x86_android x64_True_x86_android"
CONFIGS="$CONFIGS x64_False_arm64_android x64_True_arm64_android"
IS_LINUX=1
fi
-# The path to DEPOT_TOOLS should be on our path, and make sure that it doesn't
-# auto-update.
-export PATH=$DEPOT_TOOLS:$PATH
-export DEPOT_TOOLS_UPDATE=0
-
CONFIG_DIR=dom/media/webrtc/third_party_build/gn-configs
echo "CONFIG_DIR is $CONFIG_DIR"
# Each mozconfig is for a particular "platform" and defines debug/non-debug and a
# MOZ_OBJDIR based on the name of the mozconfig to make it easier to know where to

View File

@ -0,0 +1,92 @@
diff --git a/taskcluster/ci/toolchain/gn.yml b/taskcluster/ci/toolchain/gn.yml
--- a/taskcluster/ci/toolchain/gn.yml
+++ b/taskcluster/ci/toolchain/gn.yml
@@ -2,15 +2,15 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
---
job-defaults:
description: "gn toolchain build"
+ attributes:
+ local-toolchain: true
worker-type: b-linux
worker:
max-run-time: 1800
- run-on-projects:
- - trunk
run:
resources:
- 'taskcluster/scripts/misc/build-gn-common.sh'
toolchain-artifact: public/build/gn.tar.zst
fetches:
@@ -26,10 +26,11 @@
macosx64-gn:
treeherder:
symbol: TM(gn)
run:
script: build-gn-macosx.sh
+ toolchain-alias: macosx64-aarch64-gn
fetches:
toolchain:
- linux64-cctools-port
- linux64-clang-toolchain
- macosx64-sdk-11.0
diff --git a/taskcluster/scripts/misc/build-gn-common.sh b/taskcluster/scripts/misc/build-gn-common.sh
--- a/taskcluster/scripts/misc/build-gn-common.sh
+++ b/taskcluster/scripts/misc/build-gn-common.sh
@@ -30,7 +30,7 @@
if test "$MAC_CROSS" = "" -a "$(uname)" = "Linux"; then
strip out/gn
fi
cp out/gn $STAGE
-tar -c $STAGE | python3 $GECKO_PATH/taskcluster/scripts/misc/zstdpy > gn.tar.$COMPRESS_EXT
-cp gn.tar.$COMPRESS_EXT $UPLOAD_DIR
+tar -c $STAGE | python3 $GECKO_PATH/taskcluster/scripts/misc/zstdpy > gn.tar.zst
+cp gn.tar.zst $UPLOAD_DIR
diff --git a/taskcluster/scripts/misc/build-gn-linux.sh b/taskcluster/scripts/misc/build-gn-linux.sh
--- a/taskcluster/scripts/misc/build-gn-linux.sh
+++ b/taskcluster/scripts/misc/build-gn-linux.sh
@@ -2,11 +2,10 @@
set -e -v
# This script is for building GN on Linux.
WORKSPACE=$HOME/workspace
-COMPRESS_EXT=zst
export CC=gcc
export CXX=g++
export LDFLAGS=-lrt
# Gn build scripts use #!/usr/bin/env python, which will be python 2.6 on
diff --git a/taskcluster/scripts/misc/build-gn-macosx.sh b/taskcluster/scripts/misc/build-gn-macosx.sh
--- a/taskcluster/scripts/misc/build-gn-macosx.sh
+++ b/taskcluster/scripts/misc/build-gn-macosx.sh
@@ -2,11 +2,10 @@
set -e -v
# This script is for building GN.
WORKSPACE=$HOME/workspace
-COMPRESS_EXT=zst
CROSS_CCTOOLS_PATH=$MOZ_FETCHES_DIR/cctools
CROSS_SYSROOT=$MOZ_FETCHES_DIR/MacOSX11.0.sdk
export MACOSX_DEPLOYMENT_TARGET=10.12
diff --git a/taskcluster/scripts/misc/build-gn-win64.sh b/taskcluster/scripts/misc/build-gn-win64.sh
--- a/taskcluster/scripts/misc/build-gn-win64.sh
+++ b/taskcluster/scripts/misc/build-gn-win64.sh
@@ -2,11 +2,10 @@
set -e -v -x
# This script is for building GN on Windows.
UPLOAD_DIR=$PWD/public/build
-COMPRESS_EXT=bz2
cd $GECKO_PATH
export PATH="$(cd $MOZ_FETCHES_DIR && pwd)/ninja/bin:$PATH"
export PATH="$(cd $MOZ_FETCHES_DIR && pwd)/mingw64/bin:$PATH"

1433
debian/patches/webrtc-armhf/D149205.diff vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,34 @@
diff --git a/python/mozbuild/mozbuild/gn_processor.py b/python/mozbuild/mozbuild/gn_processor.py
--- a/python/mozbuild/mozbuild/gn_processor.py
+++ b/python/mozbuild/mozbuild/gn_processor.py
@@ -15,11 +15,11 @@
from mozbuild.backend.base import BuildBackend
import mozpack.path as mozpath
from mozbuild.frontend.sandbox import alphabetical_sorted
from mozbuild.frontend.data import GnProjectData
-from mozbuild.util import expand_variables, mkdir
+from mozbuild.util import mkdir
license_header = """# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
@@ -323,16 +323,10 @@
".mm": "CMMFLAGS",
}
variables = (suffix_map[e] for e in extensions if e in suffix_map)
for var in variables:
for f in flags:
- # We may be getting make variable references out of the
- # gn data, and we don't want those in emitted data, so
- # substitute them with their actual value.
- f = expand_variables(f, config.substs).split()
- if not f:
- continue
# the result may be a string or a list.
if isinstance(f, six.string_types):
context_attrs.setdefault(var, []).append(f)
else:
context_attrs.setdefault(var, []).extend(f)

View File

@ -0,0 +1,17 @@
diff --git a/python/mozbuild/mozbuild/gn_processor.py b/python/mozbuild/mozbuild/gn_processor.py
--- a/python/mozbuild/mozbuild/gn_processor.py
+++ b/python/mozbuild/mozbuild/gn_processor.py
@@ -621,11 +621,11 @@
for k in sorted(input_variables.keys())
if k != "use_x11" or input_variables["target_os"] != "openbsd"
]
)
out_dir = mozpath.join(output, "gn-output")
- gen_args = [config.substs["GN"], "gen", out_dir, gn_args, "--ide=json"]
+ gen_args = [gn_binary, "gen", out_dir, gn_args, "--ide=json"]
print('Running "%s"' % " ".join(gen_args), file=sys.stderr)
subprocess.check_call(gen_args, cwd=srcdir, stderr=subprocess.STDOUT)
gn_config_file = mozpath.join(out_dir, "project.json")

156
debian/patches/webrtc-armhf/D149208.diff vendored Normal file
View File

@ -0,0 +1,156 @@
diff --git a/python/mozbuild/mozbuild/gn_processor.py b/python/mozbuild/mozbuild/gn_processor.py
--- a/python/mozbuild/mozbuild/gn_processor.py
+++ b/python/mozbuild/mozbuild/gn_processor.py
@@ -150,11 +150,11 @@
if dep not in all_deps:
queue.append(dep)
return all_deps
-def filter_gn_config(gn_result, config, sandbox_vars, input_vars, gn_target):
+def filter_gn_config(gn_result, sandbox_vars, input_vars, gn_target):
# Translates the raw output of gn into just what we'll need to generate a
# mozbuild configuration.
gn_out = {"targets": {}, "sandbox_vars": sandbox_vars, "gn_gen_args": input_vars}
cpus = {
@@ -203,22 +203,22 @@
return gn_out
def process_gn_config(
- gn_config, srcdir, config, output, non_unified_sources, sandbox_vars, mozilla_flags
+ gn_config, topsrcdir, srcdir, non_unified_sources, sandbox_vars, mozilla_flags
):
# Translates a json gn config into attributes that can be used to write out
# moz.build files for this configuration.
# Much of this code is based on similar functionality in `gyp_reader.py`.
mozbuild_attrs = {"mozbuild_args": gn_config.get("mozbuild_args", None), "dirs": {}}
targets = gn_config["targets"]
- project_relsrcdir = mozpath.relpath(srcdir, config.topsrcdir)
+ project_relsrcdir = mozpath.relpath(srcdir, topsrcdir)
non_unified_sources = set([mozpath.normpath(s) for s in non_unified_sources])
def target_info(fullname):
path, name = target_fullname.split(":")
@@ -291,11 +291,11 @@
# the project indicated by "//".
if include.startswith("//"):
include = include[2:]
# moz.build expects all LOCAL_INCLUDES to exist, so ensure they do.
if include.startswith("/"):
- resolved = mozpath.abspath(mozpath.join(config.topsrcdir, include[1:]))
+ resolved = mozpath.abspath(mozpath.join(topsrcdir, include[1:]))
else:
resolved = mozpath.abspath(mozpath.join(srcdir, include))
if not os.path.exists(resolved):
# GN files may refer to include dirs that are outside of the
# tree or we simply didn't vendor. Print a warning in this case.
@@ -437,13 +437,12 @@
return common_attrs
def write_mozbuild(
- config,
+ topsrcdir,
srcdir,
- output,
non_unified_sources,
gn_config_files,
mozilla_flags,
write_mozbuild_variables,
):
@@ -453,13 +452,12 @@
for path in sorted(gn_config_files):
with open(path, "r") as fh:
gn_config = json.load(fh)
mozbuild_attrs = process_gn_config(
gn_config,
+ topsrcdir,
srcdir,
- config,
- output,
non_unified_sources,
gn_config["sandbox_vars"],
mozilla_flags,
)
all_mozbuild_results.append(mozbuild_attrs)
@@ -472,11 +470,11 @@
dirs = config_attrs["dirs"]
for d, build_data in dirs.items():
configs_by_dir[d].append((mozbuild_args, build_data))
for relsrcdir, configs in sorted(configs_by_dir.items()):
- target_srcdir = mozpath.join(config.topsrcdir, relsrcdir)
+ target_srcdir = mozpath.join(topsrcdir, relsrcdir)
mkdir(target_srcdir)
target_mozbuild = mozpath.join(target_srcdir, "moz.build")
with open(target_mozbuild, "w") as fh:
mb = MozbuildWriter(fh)
@@ -570,14 +568,12 @@
if cond:
mb.terminate_condition()
def generate_gn_config(
- config,
srcdir,
output,
- non_unified_sources,
gn_binary,
input_variables,
sandbox_variables,
gn_target,
):
@@ -630,11 +626,11 @@
gn_config_file = mozpath.join(out_dir, "project.json")
with open(gn_config_file, "r") as fh:
gn_out = json.load(fh)
gn_out = filter_gn_config(
- gn_out, config, sandbox_variables, input_variables, gn_target
+ gn_out, sandbox_variables, input_variables, gn_target
)
os.remove(gn_config_file)
gn_out_file = mozpath.join(out_dir, gn_arg_string + ".json")
@@ -678,14 +674,12 @@
vars["use_x11"] = True
vars_set.append(vars)
for vars in vars_set:
generate_gn_config(
- obj.config,
mozpath.join(obj.srcdir, obj.target_dir),
mozpath.join(obj.objdir, obj.target_dir),
- obj.non_unified_sources,
gn_binary,
vars,
obj.gn_sandbox_variables,
obj.gn_target,
)
@@ -712,13 +706,12 @@
print(
"Writing moz.build files based on the following gn configs: %s"
% gn_config_files
)
write_mozbuild(
- obj.config,
+ obj.config.topsrcdir,
mozpath.join(obj.srcdir, obj.target_dir),
- mozpath.join(obj.objdir, obj.target_dir),
obj.non_unified_sources,
gn_config_files,
obj.mozilla_flags,
obj.write_mozbuild_variables,
)

View File

@ -0,0 +1,85 @@
diff --git a/dom/media/webrtc/third_party_build/gn-configs/fixup_json.py b/dom/media/webrtc/third_party_build/gn-configs/fixup_json.py
--- a/dom/media/webrtc/third_party_build/gn-configs/fixup_json.py
+++ b/dom/media/webrtc/third_party_build/gn-configs/fixup_json.py
@@ -19,16 +19,10 @@
sys.exit(1)
f = open(filein, "r")
file = f.read()
- # Remove references to CR_XCODE_VERSION and the output directory of the gn process.
- # This change does not cause a change in the generated moz.build files.
- file = re.sub(r' *"CR_XCODE_VERSION=([0-9.]+)",\n', r"", file)
- file = re.sub(r' *"CR_SYSROOT_HASH=[0-9a-f]+",\n', r"", file)
- file = re.sub(r',\n *"(.\:)?/.*/third_party/libwebrtc/gn-output/gen/"', r"", file)
-
# In practice, almost all of the entries in the cflags section have no affect
# on the moz.build output files when running ./mach build-backend -b GnMozbuildWriter
# There are few exceptions which do: -msse2, -mavx2, -mfma, -fobjc-arc
# However, since we're really concerned about removing differences between development
# machines, we only need remove the reference to osx sdk. Removing it doesn't change
diff --git a/python/mozbuild/mozbuild/gn_processor.py b/python/mozbuild/mozbuild/gn_processor.py
--- a/python/mozbuild/mozbuild/gn_processor.py
+++ b/python/mozbuild/mozbuild/gn_processor.py
@@ -4,10 +4,11 @@
from __future__ import absolute_import, print_function, unicode_literals
from collections import defaultdict, deque
from copy import deepcopy
+from pathlib import Path
import glob
import json
import os
import six
import subprocess
@@ -150,11 +151,12 @@
if dep not in all_deps:
queue.append(dep)
return all_deps
-def filter_gn_config(gn_result, sandbox_vars, input_vars, gn_target):
+def filter_gn_config(path, gn_result, sandbox_vars, input_vars, gn_target):
+ gen_path = (Path(path) / "gen").resolve()
# Translates the raw output of gn into just what we'll need to generate a
# mozbuild configuration.
gn_out = {"targets": {}, "sandbox_vars": sandbox_vars, "gn_gen_args": input_vars}
cpus = {
@@ -197,11 +199,20 @@
"cflags",
"deps",
"libs",
):
spec[spec_attr] = raw_spec.get(spec_attr, [])
- gn_out["targets"][target_fullname] = spec
+ if spec_attr == "defines":
+ spec[spec_attr] = [
+ d
+ for d in spec[spec_attr]
+ if "CR_XCODE_VERSION" not in d and "CR_SYSROOT_HASH" not in d
+ ]
+ if spec_attr == "include_dirs":
+ spec[spec_attr] = [d for d in spec[spec_attr] if gen_path != Path(d)]
+
+ gn_out["targets"][target_fullname] = spec
return gn_out
def process_gn_config(
@@ -626,11 +637,11 @@
gn_config_file = mozpath.join(out_dir, "project.json")
with open(gn_config_file, "r") as fh:
gn_out = json.load(fh)
gn_out = filter_gn_config(
- gn_out, sandbox_variables, input_variables, gn_target
+ out_dir, gn_out, sandbox_variables, input_variables, gn_target
)
os.remove(gn_config_file)
gn_out_file = mozpath.join(out_dir, gn_arg_string + ".json")

1484297
debian/patches/webrtc-armhf/D149210.diff vendored Normal file

File diff suppressed because it is too large Load Diff

10701
debian/patches/webrtc-armhf/D149471.diff vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,19 @@
diff --git a/python/mozbuild/mozbuild/gn_processor.py b/python/mozbuild/mozbuild/gn_processor.py
--- a/python/mozbuild/mozbuild/gn_processor.py
+++ b/python/mozbuild/mozbuild/gn_processor.py
@@ -176,12 +176,12 @@
"MOZ_DEBUG": "1" if input_vars.get("is_debug") else None,
"OS_TARGET": oses[input_vars["target_os"]],
"HOST_CPU_ARCH": cpus.get(input_vars["host_cpu"], input_vars["host_cpu"]),
"CPU_ARCH": cpus.get(input_vars["target_cpu"], input_vars["target_cpu"]),
}
- if input_vars["target_os"] in ("linux", "android", "openbsd"):
- mozbuild_args["MOZ_X11"] = "1" if input_vars.get("use_x11") else None
+ if "use_x11" in input_vars:
+ mozbuild_args["MOZ_X11"] = "1" if input_vars["use_x11"] else None
gn_out["mozbuild_args"] = mozbuild_args
all_deps = find_deps(gn_result["targets"], gn_target)
for target_fullname in all_deps:

479
debian/patches/webrtc-armhf/D149814.diff vendored Normal file
View File

@ -0,0 +1,479 @@
diff --git a/python/mozbuild/mozbuild/test/backend/data/gn-processor/gn-configs/x64_False_x64_linux.json b/python/mozbuild/mozbuild/test/backend/data/gn-processor/gn-configs/x64_False_x64_linux.json
deleted file mode 100644
--- a/python/mozbuild/mozbuild/test/backend/data/gn-processor/gn-configs/x64_False_x64_linux.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "mozbuild_args": {
- "HOST_CPU_ARCH": "x86_64",
- "OS_TARGET": "Linux",
- "CPU_ARCH": "x86_64",
- "MOZ_DEBUG": false
- },
- "targets": {
- "//webrtc:webrtc": {
- "deps": [
- "//webrtc/base:base"
- ],
- "sources": [
- "//webrtc/build/no_op_function.cc",
- "//webrtc/call.h",
- "//webrtc/config.h"
- ],
- "cflags": [
- "-fno-strict-aliasing",
- "-fstack-protector"
- ],
- "defines": [
- "USE_NSS_CERTS=1",
- "USE_X11=1",
- "CHROMIUM_BUILD",
- "NDEBUG",
- "NVALGRIND",
- "LINUX_NDEBUG"
- ],
- "type": "static_library",
- "include_dirs": [
- "//webrtc/modules/include/"
- ]
- }
- },
- "sandbox_vars": {
- "FINAL_LIBRARY": "webrtc",
- "COMPILE_FLAGS": {
- "WARNINGS_AS_ERRORS": []
- }
- },
- "gn_gen_args": {
- "host_cpu": "x64",
- "target_os": "linux",
- "target_cpu": "x64"
- }
-}
diff --git a/python/mozbuild/mozbuild/test/backend/data/gn-processor/gn-configs/x64_False_x64_mac.json b/python/mozbuild/mozbuild/test/backend/data/gn-processor/gn-configs/x64_False_x64_mac.json
deleted file mode 100644
--- a/python/mozbuild/mozbuild/test/backend/data/gn-processor/gn-configs/x64_False_x64_mac.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "mozbuild_args": {
- "HOST_CPU_ARCH": "x86_64",
- "CPU_ARCH": "x86_64",
- "OS_TARGET": "Darwin",
- "MOZ_DEBUG": false
- },
- "targets": {
- "//webrtc:webrtc": {
- "deps": [
- "//webrtc/base:base",
- "//webrtc/base:mac_base"
- ],
- "sources": [
- "//webrtc/build/no_op_function.cc",
- "//webrtc/call.h",
- "//webrtc/config.h"
- ],
- "cflags": [
- "-fno-strict-aliasing",
- "-fstack-protector"
- ],
- "defines": [
- "USE_NSS_CERTS=1",
- "USE_X11=1",
- "CHROMIUM_BUILD",
- "NVALGRIND",
- "WEBRTC_MAC",
- "NDEBUG"
- ],
- "type": "static_library",
- "include_dirs": [
- "//webrtc/modules/include/"
- ]
- },
- "//webrtc/base:mac_base": {
- "sources": [
- "//webrtc/build/function.cc"
- ],
- "cflags": [],
- "libs": [],
- "defines": [],
- "type": "static_library",
- "include_dirs": [],
- "deps": []
- }
- },
- "sandbox_vars": {
- "FINAL_LIBRARY": "webrtc",
- "COMPILE_FLAGS": {
- "WARNINGS_AS_ERRORS": []
- }
- },
- "gn_gen_args": {
- "host_cpu": "x64",
- "target_os": "mac",
- "target_cpu": "x64"
- }
-}
diff --git a/python/mozbuild/mozbuild/test/backend/data/gn-processor/gn-configs/x64_True_x64_linux.json b/python/mozbuild/mozbuild/test/backend/data/gn-processor/gn-configs/x64_True_x64_linux.json
deleted file mode 100644
--- a/python/mozbuild/mozbuild/test/backend/data/gn-processor/gn-configs/x64_True_x64_linux.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "mozbuild_args": {
- "HOST_CPU_ARCH": "x86_64",
- "OS_TARGET": "Linux",
- "CPU_ARCH": "x86_64",
- "MOZ_DEBUG": "1"
- },
- "targets": {
- "//webrtc:webrtc": {
- "deps": [
- "//webrtc/base:base"
- ],
- "sources": [
- "//webrtc/build/no_op_function.cc",
- "//webrtc/call.h",
- "//webrtc/config.h"
- ],
- "cflags": [
- "-fno-strict-aliasing",
- "-fstack-protector"
- ],
- "defines": [
- "USE_NSS_CERTS=1",
- "USE_X11=1",
- "CHROMIUM_BUILD",
- "MOZ_LINUX_AND_DEBUG"
- ],
- "type": "static_library",
- "include_dirs": [
- "//webrtc/modules/include/"
- ]
- }
- },
- "sandbox_vars": {
- "FINAL_LIBRARY": "webrtc",
- "COMPILE_FLAGS": {
- "WARNINGS_AS_ERRORS": []
- }
- },
- "gn_gen_args": {
- "is_debug": true,
- "host_cpu": "x64",
- "target_os": "linux",
- "target_cpu": "x64"
- }
-}
diff --git a/python/mozbuild/mozbuild/test/backend/data/gn-processor/ipc/chromium/src/header.h b/python/mozbuild/mozbuild/test/backend/data/gn-processor/ipc/chromium/src/header.h
deleted file mode 100644
diff --git a/python/mozbuild/mozbuild/test/backend/data/gn-processor/ipc/glue/header.h b/python/mozbuild/mozbuild/test/backend/data/gn-processor/ipc/glue/header.h
deleted file mode 100644
diff --git a/python/mozbuild/mozbuild/test/backend/data/gn-processor/moz.build b/python/mozbuild/mozbuild/test/backend/data/gn-processor/moz.build
deleted file mode 100644
--- a/python/mozbuild/mozbuild/test/backend/data/gn-processor/moz.build
+++ /dev/null
@@ -1,51 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-
-@template
-def SharedLibrary(name):
- FORCE_SHARED_LIB = True
- LIBRARY_NAME = name
-
-
-@template
-def Library(name):
- LIBRARY_NAME = name
-
-
-@template
-def AllowCompilerWarnings():
- COMPILE_FLAGS["WARNINGS_AS_ERRORS"] = []
-
-
-gn_vars = {}
-if CONFIG["MOZ_DEBUG"]:
- gn_vars["is_debug"] = True
-else:
- gn_vars["is_debug"] = False
-
-os = CONFIG["OS_TARGET"]
-flavors = {
- "Linux": "linux",
- "Darwin": "mac" if CONFIG["MOZ_WIDGET_TOOLKIT"] == "cocoa" else "ios",
-}
-gn_vars["target_os"] = flavors.get(os)
-
-arches = {
- "x86_64": "x64",
-}
-
-gn_vars["host_cpu"] = arches.get(CONFIG["HOST_CPU_ARCH"], CONFIG["HOST_CPU_ARCH"])
-gn_vars["target_cpu"] = arches.get(CONFIG["CPU_ARCH"], CONFIG["CPU_ARCH"])
-
-
-GN_DIRS += ["trunk"]
-
-GN_DIRS["trunk"].variables = gn_vars
-GN_DIRS["trunk"].mozilla_flags = ["-fstack-protector"]
-GN_DIRS["trunk"].non_unified_sources += ["trunk/webrtc/build/function.cc"]
-
-Library("webrtc")
diff --git a/python/mozbuild/mozbuild/test/backend/data/gn-processor/tools/profiler/public/header.h b/python/mozbuild/mozbuild/test/backend/data/gn-processor/tools/profiler/public/header.h
deleted file mode 100644
diff --git a/python/mozbuild/mozbuild/test/backend/data/gn-processor/trunk/moz.build b/python/mozbuild/mozbuild/test/backend/data/gn-processor/trunk/moz.build
deleted file mode 100644
diff --git a/python/mozbuild/mozbuild/test/backend/data/gn-processor/trunk/webrtc/build/function.cc b/python/mozbuild/mozbuild/test/backend/data/gn-processor/trunk/webrtc/build/function.cc
deleted file mode 100644
diff --git a/python/mozbuild/mozbuild/test/backend/data/gn-processor/trunk/webrtc/build/no_op_function.cc b/python/mozbuild/mozbuild/test/backend/data/gn-processor/trunk/webrtc/build/no_op_function.cc
deleted file mode 100644
diff --git a/python/mozbuild/mozbuild/test/backend/data/gn-processor/trunk/webrtc/modules/include/header.h b/python/mozbuild/mozbuild/test/backend/data/gn-processor/trunk/webrtc/modules/include/header.h
deleted file mode 100644
diff --git a/python/mozbuild/mozbuild/test/backend/test_gn_processor.py b/python/mozbuild/mozbuild/test/backend/test_gn_processor.py
deleted file mode 100644
--- a/python/mozbuild/mozbuild/test/backend/test_gn_processor.py
+++ /dev/null
@@ -1,221 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-from __future__ import absolute_import, print_function, unicode_literals
-
-import os
-import shutil
-import tempfile
-import unittest
-
-from copy import deepcopy
-
-from mozunit import main
-
-from mozbuild.test.backend.common import BackendTester
-
-import mozpack.path as mozpath
-
-from mozbuild.gn_processor import GnMozbuildWriterBackend, find_common_attrs
-
-from mozbuild.frontend.data import ComputedFlags, StaticLibrary, Sources, UnifiedSources
-
-
-class TestGnMozbuildWriter(BackendTester):
- def setUp(self):
- self._backup_dir = tempfile.mkdtemp(prefix="mozbuild")
- self._gn_dir = os.path.join(
- os.path.dirname(__file__), "data", "gn-processor", "trunk"
- )
- shutil.copytree(
- os.path.join(self._gn_dir), os.path.join(self._backup_dir, "trunk")
- )
- super(TestGnMozbuildWriter, self).setUp()
-
- def tearDown(self):
- shutil.rmtree(self._gn_dir)
- shutil.copytree(os.path.join(self._backup_dir, "trunk"), self._gn_dir)
- shutil.rmtree(self._backup_dir)
- super(TestGnMozbuildWriter, self).tearDown()
-
- def test_gn_processor(self):
- # Generate our moz.build files.
- env = self._get_environment("gn-processor")
- self._consume("gn-processor", GnMozbuildWriterBackend, env=env)
-
- # Read the resulting tree.
- _, objs = self._emit("gn-processor", env=env)
-
- # The config for this srcdir sets OS_TARGET = Darwin, for which our gn config
- # generates two trivial libraries that link in to the main webrtc library,
- # one source file, one unified source file, and one directory with some
- # local defines and includes set. The following asserts this is what we see when
- # we read the generated moz.build files.
- objs = list(objs)
- expected_srcdirs = set(
- [
- mozpath.join(env.topsrcdir, p)
- for p in [
- "trunk",
- "trunk/webrtc/webrtc_gn",
- "trunk/webrtc/base/mac_base_gn",
- ]
- ]
- + [env.topsrcdir]
- )
- actual_srcdirs = set([o.srcdir for o in objs])
- self.assertEqual(expected_srcdirs, actual_srcdirs)
-
- libs = {o.lib_name: o for o in objs if isinstance(o, StaticLibrary)}
- expected_libs = set(["libwebrtc.a", "libwebrtc_gn.a", "libmac_base_gn.a"])
- self.assertEqual(expected_libs, set(libs.keys()))
- # All libs are linked into 'libwebrtc.a'.
- self.assertEqual(
- set(libs["libwebrtc.a"].linked_libraries),
- set(libs.values()) - set([libs["libwebrtc.a"]]),
- )
-
- [sources] = [o for o in objs if isinstance(o, Sources)]
- [unified_sources] = [o for o in objs if isinstance(o, UnifiedSources)]
- self.assertEqual(
- sources.files,
- [
- mozpath.join(
- sources.topsrcdir, "trunk", "webrtc", "build", "function.cc"
- )
- ],
- )
- self.assertEqual(
- unified_sources.files,
- [
- mozpath.join(
- unified_sources.topsrcdir,
- "trunk",
- "webrtc",
- "build",
- "no_op_function.cc",
- )
- ],
- )
-
- [flags_obj] = [
- o
- for o in objs
- if isinstance(o, ComputedFlags)
- if "DEFINES" in o.flags and o.flags["DEFINES"]
- ]
- self.assertEqual(
- flags_obj.srcdir,
- mozpath.join(flags_obj.topsrcdir, "trunk", "webrtc", "webrtc_gn"),
- )
- expected_defines = set(
- [
- "-DUSE_NSS_CERTS=1",
- "-DCHROMIUM_BUILD",
- "-DUSE_X11=1",
- "-DNDEBUG",
- "-DNVALGRIND",
- "-DWEBRTC_MAC",
- ]
- )
- self.assertEqual(set(flags_obj.flags["DEFINES"]), expected_defines)
-
- expected_includes = set(
- [
- "-I" + mozpath.join(flags_obj.topobjdir, "ipc", "ipdl", "_ipdlheaders"),
- "-I" + mozpath.join(flags_obj.topsrcdir, "ipc", "chromium", "src"),
- "-I"
- + mozpath.join(
- flags_obj.topsrcdir, "trunk", "webrtc", "modules", "include"
- ),
- "-I" + mozpath.join(flags_obj.topsrcdir, "tools", "profiler", "public"),
- ]
- )
- self.assertEqual(set(flags_obj.flags["LOCAL_INCLUDES"]), expected_includes)
- self.assertEqual(flags_obj.flags["MOZBUILD_CXXFLAGS"], ["-fstack-protector"])
-
-
-class TestGnMozbuildFactoring(unittest.TestCase):
-
- test_attrs = {
- "LOCAL_INCLUDES": ["!/ipc/ipdl/_ipdlheaders", "/ipc/chromium/src"],
- "DEFINES": {"UNICODE": True, "DEBUG": True},
- "LIBRARY_NAME": "Foo",
- }
-
- def test_single_attr_set(self):
- # If we only have one set of attributes they're all considered common.
- single_attrs = deepcopy(self.test_attrs)
- common_attrs = find_common_attrs([single_attrs])
- self.assertFalse(any(v for v in single_attrs.values()))
- self.assertEqual(self.test_attrs, common_attrs)
-
- def test_list_factor(self):
- list_attrs = deepcopy(self.test_attrs)
- input_attrs = deepcopy(self.test_attrs)
- list_attrs["LOCAL_INCLUDES"] += ["/local/include"]
- list_attrs["LOCAL_INCLDUES"] = list(reversed(list_attrs["LOCAL_INCLUDES"]))
- common_attrs = find_common_attrs([input_attrs, list_attrs])
- self.assertEqual(list_attrs["LOCAL_INCLUDES"], ["/local/include"])
- self.assertEqual(self.test_attrs, common_attrs)
- self.assertFalse(any(v for v in input_attrs.values()))
-
- def test_value_factor(self):
- input_attrs = deepcopy(self.test_attrs)
- value_attrs = deepcopy(self.test_attrs)
- value_attrs["LOCAL_INCLUDES"] = ["/local/include"]
- value_attrs["DEFINES"]["DEBUG"] = False
- value_attrs["DEFINES"]["UNICODE"] = False
- common_attrs = find_common_attrs([value_attrs, input_attrs])
- self.assertEqual(common_attrs["LIBRARY_NAME"], "Foo")
- self.assertNotIn("LIBRARY_NAME", value_attrs)
- self.assertNotIn("LIBRARY_NAME", input_attrs)
- del common_attrs["LIBRARY_NAME"]
- self.assertFalse(any(v for v in common_attrs.values()))
- self.assertEqual(
- input_attrs["LOCAL_INCLUDES"], self.test_attrs["LOCAL_INCLUDES"]
- )
- self.assertEqual(input_attrs["DEFINES"], self.test_attrs["DEFINES"])
- self.assertEqual(value_attrs["LOCAL_INCLUDES"], ["/local/include"])
- self.assertEqual(value_attrs["DEFINES"], {"DEBUG": False, "UNICODE": False})
-
- def test_dictionary_factor(self):
- input_attrs = deepcopy(self.test_attrs)
- dict_subset_attrs = deepcopy(self.test_attrs)
- overlapping_dict_attrs = deepcopy(self.test_attrs)
-
- del dict_subset_attrs["DEFINES"]["DEBUG"]
- overlapping_dict_attrs["DEFINES"]["MOZ_DEBUG"] = True
-
- common_attrs = find_common_attrs(
- [input_attrs, dict_subset_attrs, overlapping_dict_attrs]
- )
- for attr in ("LIBRARY_NAME", "LOCAL_INCLUDES"):
- self.assertEqual(common_attrs[attr], self.test_attrs[attr])
- self.assertFalse(input_attrs.get(attr))
- self.assertFalse(dict_subset_attrs.get(attr))
- self.assertFalse(overlapping_dict_attrs.get(attr))
- self.assertEqual(common_attrs["DEFINES"], {"UNICODE": True})
- self.assertEqual(dict_subset_attrs["DEFINES"], {})
- self.assertEqual(
- overlapping_dict_attrs["DEFINES"], {"DEBUG": True, "MOZ_DEBUG": True}
- )
-
- def test_common_attrs(self):
- input_attrs = deepcopy(self.test_attrs)
- dict_subset_attrs = deepcopy(self.test_attrs)
-
- del dict_subset_attrs["DEFINES"]
- common_attrs = find_common_attrs([input_attrs, dict_subset_attrs])
- self.assertNotIn("DEFINES", common_attrs)
- expected_common = deepcopy(self.test_attrs)
- del expected_common["DEFINES"]
- self.assertEqual(expected_common, common_attrs)
- for attr_set in (input_attrs, dict_subset_attrs):
- self.assertNotIn("LIBRARY_NAME", attr_set)
- self.assertEqual(attr_set["LOCAL_INCLUDES"], [])
-
-
-if __name__ == "__main__":
- main()
diff --git a/python/mozbuild/mozbuild/test/python.ini b/python/mozbuild/mozbuild/test/python.ini
--- a/python/mozbuild/mozbuild/test/python.ini
+++ b/python/mozbuild/mozbuild/test/python.ini
@@ -9,11 +9,10 @@
[backend/test_fastermake.py]
[backend/test_recursivemake.py]
[backend/test_build.py]
[backend/test_database.py]
[backend/test_configenvironment.py]
-[backend/test_gn_processor.py]
[backend/test_partialconfigenvironment.py]
[backend/test_test_manifest.py]
[backend/test_visualstudio.py]
[code_analysis/test_mach_commands.py]
[codecoverage/test_lcov_rewrite.py]

View File

@ -0,0 +1,40 @@
diff --git a/python/mozbuild/mozbuild/gn_processor.py b/python/mozbuild/mozbuild/gn_processor.py
--- a/python/mozbuild/mozbuild/gn_processor.py
+++ b/python/mozbuild/mozbuild/gn_processor.py
@@ -173,11 +173,10 @@
}
mozbuild_args = {
"MOZ_DEBUG": "1" if input_vars.get("is_debug") else None,
"OS_TARGET": oses[input_vars["target_os"]],
- "HOST_CPU_ARCH": cpus.get(input_vars["host_cpu"], input_vars["host_cpu"]),
"CPU_ARCH": cpus.get(input_vars["target_cpu"], input_vars["target_cpu"]),
}
if "use_x11" in input_vars:
mozbuild_args["MOZ_X11"] = "1" if input_vars["use_x11"] else None
@@ -504,20 +503,22 @@
all_args = [args for args, _ in configs]
# Start with attributes that will be a part of the mozconfig
# for every configuration, then factor by other potentially useful
# combinations.
+ # FIXME: this is a time-bomb. See bug 1775202.
for attrs in (
(),
("MOZ_DEBUG",),
("OS_TARGET",),
("CPU_ARCH",),
("MOZ_DEBUG", "OS_TARGET"),
("OS_TARGET", "MOZ_X11"),
("OS_TARGET", "CPU_ARCH"),
+ ("OS_TARGET", "CPU_ARCH", "MOZ_X11"),
("OS_TARGET", "CPU_ARCH", "MOZ_DEBUG"),
- ("MOZ_DEBUG", "OS_TARGET", "CPU_ARCH", "HOST_CPU_ARCH"),
+ ("OS_TARGET", "CPU_ARCH", "MOZ_DEBUG", "MOZ_X11"),
):
conditions = set()
for args in all_args:
cond = tuple(((k, args.get(k) or "") for k in attrs))
conditions.add(cond)

View File

@ -0,0 +1,35 @@
# Description: Don't pass -mfloat-abi=softfp on armhf
# Author: Chris Coulson <chris.coulson@canonical.com>
# Forwarded: no
--- a/build/gyp.mozbuild
+++ b/build/gyp.mozbuild
@@ -107,9 +107,15 @@ if CONFIG['ARM_ARCH']:
gyp_vars['arm_neon'] = 1
gyp_vars['build_with_neon'] = 1
else:
- # CPU detection for ARM works on Android only. armv7 always uses CPU
- # detection, so we have to set armv7=0 for non-Android target
- gyp_vars['armv7'] = 0
+ gyp_vars['armv7'] = 1
+ # We enable NEON for Ubuntu armhf. Note that these don't really
+ # have any effect here as NEON is hardcoded on in
+ # media/webrtc/trunk/webrtc/build/common.gypi. Disabling these
+ # without fixing that file will result in a link failure, as
+ # targets hidden behind the build_with_neon flag don't get
+ # built but WEBRTC_HAS_NEON is still defined
+ gyp_vars['arm_neon'] = 1
+ gyp_vars['build_with_neon'] = 1
# For libyuv
gyp_vars['arm_version'] = int(CONFIG['ARM_ARCH'])
--- a/third_party/libwebrtc/build/config/compiler/BUILD.gn
+++ b/third_party/libwebrtc/build/config/compiler/BUILD.gn
@@ -590,7 +590,6 @@ config("compiler_cpu_abi") {
if (!is_nacl) {
cflags += [
"-march=$arm_arch",
- "-mfloat-abi=$arm_float_abi",
]
}
if (arm_tune != "") {

66
debian/rules vendored Executable file
View File

@ -0,0 +1,66 @@
#!/usr/bin/make -f
MOZ_PKG_BASENAME := firefox
include $(CURDIR)/debian/build/config.mk
MOZ_APP := browser
MOZ_VENDOR := Mozilla
MOZ_MOZDIR :=
MOZ_APP_SUBDIR := browser
MOZ_BRANDING := $(CHANNEL)
ifneq (,$(filter release beta, $(MOZ_BRANDING)))
MOZ_BRANDING := official
endif
ifeq (1,$(MOZ_FORCE_UNOFFICIAL_BRANDING))
ifneq (,$(filter official aurora, $(MOZ_BRANDING)))
MOZ_BRANDING := unofficial
endif
endif
MOZ_BRANDING_DIR := $(MOZ_APP)/branding/$(MOZ_BRANDING)
ifeq (official,$(MOZ_BRANDING))
MOZ_BRANDING_OPTION := --enable-official-branding
else
MOZ_BRANDING_OPTION := --with-branding=$(MOZ_BRANDING_DIR)
endif
MOZ_PKGNAME_SUBST_FILES = \
debian/usr.bin.$(MOZ_PKG_NAME) \
debian/README.Debian \
debian/$(MOZ_PKG_BASENAME).sh \
debian/apport/blacklist \
debian/apport/native-origins \
debian/apport/source_$(MOZ_PKG_NAME).py \
$(NULL)
MOZ_APPNAME_SUBST_FILES = \
debian/$(MOZ_APP_NAME).1 \
$(NULL)
ifeq (1,${MOZ_OFFICIAL_BUILD})
export MOZILLA_OFFICIAL=1
endif
ifeq (1,${MOZ_ENABLE_TELEMETRY})
export MOZ_TELEMETRY_REPORTING=1
export MOZ_SOURCE_REPO=${MOZILLA_REPO}
export MOZ_SOURCE_CHANGESET=$(shell cat $(DEB_SRCDIR)/SOURCE_CHANGESET)
endif
include $(CURDIR)/debian/build/rules.mk
debian/usr.bin.firefox.in:
if [ '$(DISTRIB_VERSION_MAJOR)$(DISTRIB_VERSION_MINOR)' -ge '1410' ]; then \
cp $(CURDIR)/debian/usr.bin.firefox.apparmor.14.10 $(CURDIR)/debian/usr.bin.firefox.in ; \
fi
WRITE_SUBSTVARS = $(shell echo "$(2)=$(3)" | sed 's/[ \t\n]\+/ /g' >> debian/$(1).substvars)
ifeq (firefox, $(MOZ_PKG_NAME))
install/firefox::
$(call WRITE_SUBSTVARS,firefox,transitional:Replaces,kubuntu-firefox-installer)
endif
clean::
rm -f debian/usr.bin.firefox.in config.log

1
debian/source/format vendored Normal file
View File

@ -0,0 +1 @@
3.0 (quilt)

200
debian/source/include-binaries vendored Normal file
View File

@ -0,0 +1,200 @@
debian/tests/data/HTML5test/fonts/html5test.eot
debian/tests/data/HTML5test/fonts/html5test.ttf
debian/tests/data/HTML5test/fonts/html5test.woff
debian/tests/data/HTML5test/fonts/leaguegothic-condensed-italic-webfont.eot
debian/tests/data/HTML5test/fonts/leaguegothic-condensed-italic-webfont.ttf
debian/tests/data/HTML5test/fonts/leaguegothic-condensed-italic-webfont.woff
debian/tests/data/HTML5test/fonts/leaguegothic-condensed-regular-webfont.eot
debian/tests/data/HTML5test/fonts/leaguegothic-condensed-regular-webfont.ttf
debian/tests/data/HTML5test/fonts/leaguegothic-condensed-regular-webfont.woff
debian/tests/data/HTML5test/fonts/leaguegothic-italic-webfont.eot
debian/tests/data/HTML5test/fonts/leaguegothic-italic-webfont.ttf
debian/tests/data/HTML5test/fonts/leaguegothic-italic-webfont.woff
debian/tests/data/HTML5test/fonts/leaguegothic-regular-webfont.eot
debian/tests/data/HTML5test/fonts/leaguegothic-regular-webfont.ttf
debian/tests/data/HTML5test/fonts/leaguegothic-regular-webfont.woff
debian/tests/data/HTML5test/images/browsers/android.png
debian/tests/data/HTML5test/images/browsers/bb10.png
debian/tests/data/HTML5test/images/browsers/bb.png
debian/tests/data/HTML5test/images/browsers/chrome.png
debian/tests/data/HTML5test/images/browsers/coast.png
debian/tests/data/HTML5test/images/browsers/diigo.png
debian/tests/data/HTML5test/images/browsers/dolphin.png
debian/tests/data/HTML5test/images/browsers/firefox.png
debian/tests/data/HTML5test/images/browsers/ie10.png
debian/tests/data/HTML5test/images/browsers/ie6.png
debian/tests/data/HTML5test/images/browsers/ie7.png
debian/tests/data/HTML5test/images/browsers/ie9.png
debian/tests/data/HTML5test/images/browsers/ie-metro.png
debian/tests/data/HTML5test/images/browsers/ilunascape.png
debian/tests/data/HTML5test/images/browsers/inspect.png
debian/tests/data/HTML5test/images/browsers/maxthon.png
debian/tests/data/HTML5test/images/browsers/mercury.png
debian/tests/data/HTML5test/images/browsers/nokia.png
debian/tests/data/HTML5test/images/browsers/one.png
debian/tests/data/HTML5test/images/browsers/opera.png
debian/tests/data/HTML5test/images/browsers/puffin.png
debian/tests/data/HTML5test/images/browsers/qq.png
debian/tests/data/HTML5test/images/browsers/safari-ios-6.png
debian/tests/data/HTML5test/images/browsers/safari-ios-7.png
debian/tests/data/HTML5test/images/browsers/silk.png
debian/tests/data/HTML5test/images/browsers/sleipnir.png
debian/tests/data/HTML5test/images/browsers/tabletos.png
debian/tests/data/HTML5test/images/browsers/uc-iphone.png
debian/tests/data/HTML5test/images/browsers/uc-old.png
debian/tests/data/HTML5test/images/browsers/webos.png
debian/tests/data/HTML5test/images/devices/acer-a500.jpg
debian/tests/data/HTML5test/images/devices/alcatel-tpop.jpg
debian/tests/data/HTML5test/images/devices/aldi-minipad.jpg
debian/tests/data/HTML5test/images/devices/amazon-firehd.jpg
debian/tests/data/HTML5test/images/devices/amazon-kindle-4.jpg
debian/tests/data/HTML5test/images/devices/appletv.jpg
debian/tests/data/HTML5test/images/devices/archos-70b.jpg
debian/tests/data/HTML5test/images/devices/archos-70-cobalt.jpg
debian/tests/data/HTML5test/images/devices/archos-7-home-tablet.jpg
debian/tests/data/HTML5test/images/devices/arnova-7e-g2.jpg
debian/tests/data/HTML5test/images/devices/arnova-7h-g3.jpg
debian/tests/data/HTML5test/images/devices/asus-nexus-7-2013.jpg
debian/tests/data/HTML5test/images/devices/blackberry-8820.jpg
debian/tests/data/HTML5test/images/devices/blackberry-bold-9790.jpg
debian/tests/data/HTML5test/images/devices/blackberry-curve-8310.jpg
debian/tests/data/HTML5test/images/devices/blackberry-curve-9300.jpg
debian/tests/data/HTML5test/images/devices/blackberry-dev-alpha-c.jpg
debian/tests/data/HTML5test/images/devices/blackberry-dev-alpha.jpg
debian/tests/data/HTML5test/images/devices/blackberry-playbook.jpg
debian/tests/data/HTML5test/images/devices/blackberry-torch-9810.jpg
debian/tests/data/HTML5test/images/devices/blackberry-z10.jpg
debian/tests/data/HTML5test/images/devices/geeksphone-keon.jpg
debian/tests/data/HTML5test/images/devices/geeksphone-peak.jpg
debian/tests/data/HTML5test/images/devices/google-chromecast.jpg
debian/tests/data/HTML5test/images/devices/hp-mini-110.jpg
debian/tests/data/HTML5test/images/devices/htc-8s.jpg
debian/tests/data/HTML5test/images/devices/htc-desire-310.jpg
debian/tests/data/HTML5test/images/devices/htc-g1.jpg
debian/tests/data/HTML5test/images/devices/htc-nexus-one.jpg
debian/tests/data/HTML5test/images/devices/htc-touch-diamond-2.jpg
debian/tests/data/HTML5test/images/devices/htc-touch.jpg
debian/tests/data/HTML5test/images/devices/htc-touchpad.jpg
debian/tests/data/HTML5test/images/devices/htc-tytn.jpg
debian/tests/data/HTML5test/images/devices/htc-wildfire.jpg
debian/tests/data/HTML5test/images/devices/htc-wildfire-s.jpg
debian/tests/data/HTML5test/images/devices/iconbit-toucan.jpg
debian/tests/data/HTML5test/images/devices/ipad-3.jpg
debian/tests/data/HTML5test/images/devices/ipad-mini.jpg
debian/tests/data/HTML5test/images/devices/ipad-mini-retina.jpg
debian/tests/data/HTML5test/images/devices/iphone-3g.jpg
debian/tests/data/HTML5test/images/devices/iphone-3gs.jpg
debian/tests/data/HTML5test/images/devices/iphone-4s.jpg
debian/tests/data/HTML5test/images/devices/iphone-5.jpg
debian/tests/data/HTML5test/images/devices/iphone.jpg
debian/tests/data/HTML5test/images/devices/ipod-touch-1.jpg
debian/tests/data/HTML5test/images/devices/ipod-touch-2.jpg
debian/tests/data/HTML5test/images/devices/ipod-touch-5.jpg
debian/tests/data/HTML5test/images/devices/kin-one.jpg
debian/tests/data/HTML5test/images/devices/lg-c195.jpg
debian/tests/data/HTML5test/images/devices/lg-l5-ii.jpg
debian/tests/data/HTML5test/images/devices/lg-nexus-4.jpg
debian/tests/data/HTML5test/images/devices/lg-optimus-l3.jpg
debian/tests/data/HTML5test/images/devices/lg-renoir.jpg
debian/tests/data/HTML5test/images/devices/lg-t385.jpg
debian/tests/data/HTML5test/images/devices/lg-t565b.jpg
debian/tests/data/HTML5test/images/devices/microsoft-surface.jpg
debian/tests/data/HTML5test/images/devices/microsoft-xbox-360.jpg
debian/tests/data/HTML5test/images/devices/moto-g.jpg
debian/tests/data/HTML5test/images/devices/nexus-7.jpg
debian/tests/data/HTML5test/images/devices/nokia-500.jpg
debian/tests/data/HTML5test/images/devices/nokia-6301.jpg
debian/tests/data/HTML5test/images/devices/nokia-701.jpg
debian/tests/data/HTML5test/images/devices/nokia-asha-203.jpg
debian/tests/data/HTML5test/images/devices/nokia-asha-311.jpg
debian/tests/data/HTML5test/images/devices/nokia-asha-501.jpg
debian/tests/data/HTML5test/images/devices/nokia-c3-00.jpg
debian/tests/data/HTML5test/images/devices/nokia-c6-01.jpg
debian/tests/data/HTML5test/images/devices/nokia-c6.jpg
debian/tests/data/HTML5test/images/devices/nokia-e6-00.jpg
debian/tests/data/HTML5test/images/devices/nokia-lumia-610.jpg
debian/tests/data/HTML5test/images/devices/nokia-lumia-800.jpg
debian/tests/data/HTML5test/images/devices/nokia-lumia-820.jpg
debian/tests/data/HTML5test/images/devices/nokia-n900.jpg
debian/tests/data/HTML5test/images/devices/nokia-n93.jpg
debian/tests/data/HTML5test/images/devices/nokia-n95.jpg
debian/tests/data/HTML5test/images/devices/nokia-n96.jpg
debian/tests/data/HTML5test/images/devices/nokia-n97.jpg
debian/tests/data/HTML5test/images/devices/nokia-n9.jpg
debian/tests/data/HTML5test/images/devices/nokia-x3-02.jpg
debian/tests/data/HTML5test/images/devices/nokia-x7-00.jpg
debian/tests/data/HTML5test/images/devices/nokia-x.jpg
debian/tests/data/HTML5test/images/devices/palm-pixi.jpg
debian/tests/data/HTML5test/images/devices/palm-pre.jpg
debian/tests/data/HTML5test/images/devices/palm-tx.jpg
debian/tests/data/HTML5test/images/devices/raspberry-pi.jpg
debian/tests/data/HTML5test/images/devices/samsung-ace.jpg
debian/tests/data/HTML5test/images/devices/samsung-apollo.jpg
debian/tests/data/HTML5test/images/devices/samsung-chat-357.jpg
debian/tests/data/HTML5test/images/devices/samsung-chromebook.jpg
debian/tests/data/HTML5test/images/devices/samsung-galaxy-551.jpg
debian/tests/data/HTML5test/images/devices/samsung-galaxy-s2.jpg
debian/tests/data/HTML5test/images/devices/samsung-galaxy-s4.jpg
debian/tests/data/HTML5test/images/devices/samsung-jet.jpg
debian/tests/data/HTML5test/images/devices/samsung-monte.jpg
debian/tests/data/HTML5test/images/devices/samsung-nexus-10.jpg
debian/tests/data/HTML5test/images/devices/samsung-nexus.jpg
debian/tests/data/HTML5test/images/devices/samsung-nexus-s.jpg
debian/tests/data/HTML5test/images/devices/samsung-omniapro.jpg
debian/tests/data/HTML5test/images/devices/samsung-s3.jpg
debian/tests/data/HTML5test/images/devices/samsung-sgh-i780.jpg
debian/tests/data/HTML5test/images/devices/samsung-star-2.jpg
debian/tests/data/HTML5test/images/devices/samsung-tab-2-70.jpg
debian/tests/data/HTML5test/images/devices/samsung-wave-525.jpg
debian/tests/data/HTML5test/images/devices/samsung-wave-723.jpg
debian/tests/data/HTML5test/images/devices/samsung-wave.jpg
debian/tests/data/HTML5test/images/devices/samsung-xe500.jpg
debian/tests/data/HTML5test/images/devices/sony-cybershot.jpg
debian/tests/data/HTML5test/images/devices/sony-nsz-gs7.jpg
debian/tests/data/HTML5test/images/devices/sony-playstation-vita.jpg
debian/tests/data/HTML5test/images/devices/sony-prs-t2.jpg
debian/tests/data/HTML5test/images/devices/sony-psp.jpg
debian/tests/data/HTML5test/images/devices/sony-x10-mini.jpg
debian/tests/data/HTML5test/images/devices/sony-xperia-arc.jpg
debian/tests/data/HTML5test/images/devices/sony-xperia-e.jpg
debian/tests/data/HTML5test/images/devices/tomtec-ultimate-10.jpg
debian/tests/data/HTML5test/images/devices/vodafone-smart-mini.jpg
debian/tests/data/HTML5test/images/devices/wolfgang-as43d2.jpg
debian/tests/data/HTML5test/images/devices/wolfgang-as43d.jpg
debian/tests/data/HTML5test/images/external/ecma.png
debian/tests/data/HTML5test/images/external/khronos.png
debian/tests/data/HTML5test/images/external/w3c.png
debian/tests/data/HTML5test/images/external/wp.png
debian/tests/data/HTML5test/images/html5@2x.png
debian/tests/data/HTML5test/images/html5.png
debian/tests/data/HTML5test/images/icons/apple-touch-icon-114x114.png
debian/tests/data/HTML5test/images/icons/apple-touch-icon-120x120.png
debian/tests/data/HTML5test/images/icons/apple-touch-icon-144x144.png
debian/tests/data/HTML5test/images/icons/apple-touch-icon-152x152.png
debian/tests/data/HTML5test/images/icons/apple-touch-icon-57x57.png
debian/tests/data/HTML5test/images/icons/apple-touch-icon-60x60.png
debian/tests/data/HTML5test/images/icons/apple-touch-icon-72x72.png
debian/tests/data/HTML5test/images/icons/apple-touch-icon-76x76.png
debian/tests/data/HTML5test/images/icons/apple-touch-icon.png
debian/tests/data/HTML5test/images/icons/apple-touch-icon-precomposed.png
debian/tests/data/HTML5test/images/icons/favicon-160x160.png
debian/tests/data/HTML5test/images/icons/favicon-16x16.png
debian/tests/data/HTML5test/images/icons/favicon-196x196.png
debian/tests/data/HTML5test/images/icons/favicon-32x32.png
debian/tests/data/HTML5test/images/icons/favicon-96x96.png
debian/tests/data/HTML5test/images/icons/favicon.ico
debian/tests/data/HTML5test/images/icons/mstile-144x144.png
debian/tests/data/HTML5test/images/icons/mstile-150x150.png
debian/tests/data/HTML5test/images/icons/mstile-310x150.png
debian/tests/data/HTML5test/images/icons/mstile-310x310.png
debian/tests/data/HTML5test/images/icons/mstile-70x70.png
debian/tests/data/HTML5test/images/lab/header@2x.jpg
debian/tests/data/HTML5test/images/lab/header.jpg
debian/tests/data/HTML5test/images/lab/phones@2x.jpg
debian/tests/data/HTML5test/images/lab/phones.jpg
debian/tests/data/HTML5test/images/sponsors/cloudvps@2x.png
debian/tests/data/HTML5test/images/sponsors/cloudvps.png
debian/tests/data/HTML5test/images/sponsors/google.png
debian/tests/data/HTML5test/images/sponsors/labup.png
debian/tests/data/HTML5test/images/sponsors/salonhub.png
debian/tests/data/HTML5test/images/thumbnail.jpg

3
debian/source/options vendored Normal file
View File

@ -0,0 +1,3 @@
extend-diff-ignore = "^\.mozconfig\."
extend-diff-ignore = ".pyc$"
extend-diff-ignore = "^obj\-"

3
debian/symbolic.svg vendored Normal file
View File

@ -0,0 +1,3 @@
<svg id="Assets" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path d="M190.368 150.591c0.157 0.009 0.079 0.003 0 0zm-57.874-28.933c0.158 0.008 0.079 0.003 0 0zm346.228 44.674c-10.445-25.123-31.6-52.248-48.211-60.82 13.52 26.5 21.345 53.093 24.335 72.935 0 0.04 0.015 0.136 0.047 0.4-27.175-67.732-73.254-95.047-110.886-154.512-1.9-3.008-3.805-6.022-5.661-9.2a73.237 73.237 0 0 1-2.646-4.972 43.757 43.757 0 0 1-3.585-9.5 0.625 0.625 0 0 0-0.546-0.644 0.8 0.8 0 0 0-0.451 0c-0.033 0.011-0.084 0.051-0.119 0.065-0.053 0.02-0.12 0.069-0.176 0.095 0.026-0.036 0.083-0.117 0.1-0.135-53.437 31.3-75.587 86.093-81.282 120.97a128.057 128.057 0 0 0-47.624 12.153 6.144 6.144 0 0 0-3.041 7.63 6.034 6.034 0 0 0 8.192 3.525 116.175 116.175 0 0 1 41.481-10.826c0.468-0.033 0.937-0.062 1.405-0.1a117.624 117.624 0 0 1 5.932-0.211 120.831 120.831 0 0 1 34.491 4.777c0.654 0.192 1.295 0.414 1.946 0.616a120.15 120.15 0 0 1 5.539 1.842 121.852 121.852 0 0 1 3.992 1.564c1.074 0.434 2.148 0.868 3.206 1.331a118.453 118.453 0 0 1 4.9 2.307c0.743 0.368 1.485 0.735 2.217 1.117a120.535 120.535 0 0 1 4.675 2.587 107.785 107.785 0 0 1 2.952 1.776 123.018 123.018 0 0 1 42.028 43.477c-12.833-9.015-35.81-17.918-57.947-14.068 86.441 43.214 63.234 192.027-56.545 186.408a106.7 106.7 0 0 1-31.271-6.031 132.461 132.461 0 0 1-7.059-2.886c-1.356-0.618-2.711-1.243-4.051-1.935-29.349-15.168-53.583-43.833-56.611-78.643 0 0 11.093-41.335 79.433-41.335 7.388 0 28.508-20.614 28.9-26.593-0.09-1.953-41.917-18.59-58.223-34.656-8.714-8.585-12.851-12.723-16.514-15.829a71.7 71.7 0 0 0-6.225-4.7 111.335 111.335 0 0 1-0.675-58.733c-24.687 11.242-43.89 29.011-57.849 44.7h-0.111c-9.528-12.067-8.855-51.873-8.312-60.184-0.114-0.516-7.107 3.63-8.024 4.254a175.21 175.21 0 0 0-23.486 20.12 210.5 210.5 0 0 0-22.443 26.913c0 0.012-0.007 0.025-0.011 0.037 0-0.012 0.007-0.025 0.011-0.038a202.837 202.837 0 0 0-32.244 72.81c-0.058 0.265-2.29 10.054-3.92 22.147a265.794 265.794 0 0 0-0.769 5.651c-0.558 3.636-0.992 7.6-1.42 13.767-0.019 0.239-0.031 0.474-0.048 0.712a591.152 591.152 0 0 0-0.481 7.995c0 0.411-0.025 0.816-0.025 1.227 0 132.709 107.6 240.29 240.324 240.29 118.865 0 217.559-86.288 236.882-199.63 0.407-3.075 0.732-6.168 1.092-9.27 4.777-41.21-0.53-84.525-15.588-120.747zm-164.068 72.1z" fill="#fff"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

4
debian/syspref.js vendored Normal file
View File

@ -0,0 +1,4 @@
// This file can be used to configure global preferences for Firefox
// Example: Homepage
//pref("browser.startup.homepage", "http://www.weebls-stuff.com/wab/");

9
debian/tests/control vendored Normal file
View File

@ -0,0 +1,9 @@
Test-Command: timeout -v 600 debian/tests/firefox-version
Depends: coreutils, firefox, firefox-geckodriver, python3-apt, python3-selenium
Test-Command: timeout -v 600 debian/tests/html5test
Depends: coreutils, firefox, firefox-geckodriver, python3-selenium
Restrictions: allow-stderr
Test-Command: timeout -v 600 debian/tests/search-engines
Depends: coreutils, firefox, firefox-geckodriver, python3-selenium

62
debian/tests/data/HTML5test/.htaccess vendored Normal file
View File

@ -0,0 +1,62 @@
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.html5test\.com$
RewriteRule ^ http://html5test.com%{REQUEST_URI} [L,R=301]
RewriteRule ^compare.html$ /compare/browser/index.html [R]
RewriteRule ^results.html$ /results/desktop.html [R]
RewriteRule ^results-mobile.html$ /results/mobile.html [R]
RewriteRule ^results-tablets.html$ /results/tablet.html [R]
RewriteRule ^results-tv.html$ /results/television.html [R]
RewriteRule ^api/(.+)$ /backend/index.php?method=$1&%{QUERY_STRING}
RewriteRule ^s/(.+).html$ /backend/controllers/saved.php?id=$1
RewriteRule ^compare/browser/index.html$ /backend/controllers/browser.php?%{QUERY_STRING}
RewriteRule ^compare/browser/(.+).html$ /backend/controllers/browser.php?show=$1&%{QUERY_STRING}
RewriteRule ^compare/feature/index.html$ /backend/controllers/feature.php?%{QUERY_STRING}
RewriteRule ^compare/feature/(.+).html$ /backend/controllers/feature.php?show=$1&%{QUERY_STRING}
RewriteRule ^results/desktop.html$ /backend/controllers/results.php?type=desktop
RewriteRule ^results/mobile.html$ /backend/controllers/results.php?type=mobile
RewriteRule ^results/tablet.html$ /backend/controllers/results.php?type=tablet
RewriteRule ^results/gaming.html$ /backend/controllers/results.php?type=gaming
RewriteRule ^results/television.html$ /backend/controllers/results.php?type=television
RewriteRule ^results/other.html$ /backend/controllers/results.php?type=other
RewriteRule ^results/latest.html$ /backend/controllers/latest.php
RewriteRule ^results/search.html$ /backend/controllers/search.php
RewriteRule ^results/related/(.+).html$ /backend/controllers/fingerprint.php?id=$1
RewriteRule ^results/(.+)/timeline/(.+).html$ /backend/controllers/timeline.php?id=$2&type=$1
RewriteRule ^results/timeline/(.+).html$ /backend/controllers/timeline.php?id=$1&type=mobile
RewriteRule ^devicelab/inventory.html$ /backend/controllers/lab-inventory.php
RewriteRule ^devicelab/?$ /backend/controllers/lab.php
RewriteRule ^favicon(.*)$ /images/icons/favicon$1
RewriteRule ^apple-touch-icon(.*)$ /images/icons/apple-touch-icon$1
RewriteRule ^mstile-(.*)$ /images/icons/mstile-$1
RewriteRule ^browserconfig.xml /images/icons/browserconfig.xml
RewriteRule ^scripts/useragents http://api.whichbrowser.net/warning.js
<FilesMatch ".+\.[woff|eot|svg|ttf]">
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
</FilesMatch>
<FilesMatch "detect.html">
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
</FilesMatch>
SetEnvIf User-Agent .*Bada.* BROKEN_CSP
<FilesMatch "csp.html">
<IfModule mod_headers.c>
Header set Content-Security-Policy "default-src 'unsafe-inline' data: *; frame-src *; options inline-script;" env=!BROKEN_CSP
</IfModule>
</FilesMatch>

20
debian/tests/data/HTML5test/LICENSE vendored Normal file
View File

@ -0,0 +1,20 @@
Copyright (c) 2010-2015 Niels Leenheer
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

25
debian/tests/data/HTML5test/README.md vendored Normal file
View File

@ -0,0 +1,25 @@
<img src="https://html5te.st/assets/html5test.svg" width="250">
This is a website for testing web standards in the browser. The HTML5 test score is an indication
of how well your browser supports the HTML5 standard and related specifications. Find out which
parts of HTML5 are supported by your browser today and compare the results with other browsers.
[![Twitter Follow](https://img.shields.io/twitter/follow/html5test.svg?style=social)](https://twitter.com/html5test)
The HTML5 test does not try to test all of the new features offered by HTML5, nor does it try to
test the functionality of each feature it does detect. Despite these shortcomings we hope that
by quantifying the level of support users and web developers will get an idea of how hard the browser
manufacturers work on improving their browsers and the web as a development platform.
The score is calculated by testing for the many new features of HTML5. Each feature is worth one or
more points. Apart from the main HTML5 specification and other specifications created the W3C HTML
Working Group or WHATWG, this test also awards points for supporting related drafts and specifications.
Please be aware that although the HTML5 specification is now an official recommendation, other
specifications that are being tested are still in development and could change before receiving
an official status. In the future new tests will be added for new specifications and existing
tests will be updated when the specifications change.
**Thanks to:**
<a href="https://www.browserstack.com"><img src="https://html5te.st/assets/browserstack.svg" width="180"></a> &nbsp;&nbsp;&nbsp;&nbsp;
<a href="https://www.cloudvps.nl"><img src="https://html5test.com/images/sponsors/cloudvps@2x.png" width="59"></a>

237
debian/tests/data/HTML5test/about.html vendored Normal file
View File

@ -0,0 +1,237 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>HTML5test - How well does your browser support HTML5?</title>
<meta charset="UTF-8">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="css/main.css" type="text/css">
<script src='/scripts/template.js' type='text/javascript'></script>
<meta name="application-name" content="HTML5test"/>
<link rel="apple-touch-icon" sizes="57x57" href="/images/icons/apple-touch-icon-57x57.png" />
<link rel="apple-touch-icon" sizes="114x114" href="/images/icons/apple-touch-icon-114x114.png" />
<link rel="apple-touch-icon" sizes="72x72" href="/images/icons/apple-touch-icon-72x72.png" />
<link rel="apple-touch-icon" sizes="144x144" href="/images/icons/apple-touch-icon-144x144.png" />
<link rel="apple-touch-icon" sizes="60x60" href="/images/icons/apple-touch-icon-60x60.png" />
<link rel="apple-touch-icon" sizes="120x120" href="/images/icons/apple-touch-icon-120x120.png" />
<link rel="apple-touch-icon" sizes="76x76" href="/images/icons/apple-touch-icon-76x76.png" />
<link rel="apple-touch-icon" sizes="152x152" href="/images/icons/apple-touch-icon-152x152.png" />
<link rel="icon" type="image/png" href="/images/icons/favicon-16x16.png" sizes="16x16" />
<link rel="icon" type="image/png" href="/images/icons/favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="/images/icons/favicon-96x96.png" sizes="96x96" />
<link rel="icon" type="image/png" href="/images/icons/favicon-160x160.png" sizes="160x160" />
<link rel="icon" type="image/png" href="/images/icons/favicon-196x196.png" sizes="196x196" />
<meta name="msapplication-TileColor" content="#0092bf" />
<meta name="msapplication-TileImage" content="/images/icons/mstile-144x144.png" />
</head>
<body>
<div class='header'>
<h1><span>HTML<strong>5</strong>test</span> <em>how well does your browser support HTML5?</em></h1>
<div class='navigation'>
<ul class='left'>
<li><a href='/index.html'>Your browser</a></li>
<li><a href='/results/desktop.html'>Other<span> browser</span>s</a></li>
<li><a href='/compare/browser/index.html'>Compare</a></li>
</ul>
<ul class='right'>
<li><a href='http://blog.html5test.com/'>News</a></li>
<li><a href='/devicelab'>Device Lab</a></li>
<li class='selected'><a href='/about.html'>About<span> the test</span></a></li>
</ul>
</div>
</div>
<div class='page'>
<div class='column'>
<div class='paper hasNavigation'>
<ul class='navigation'>
<li class='selected'><a href='about.html'>Frequently asked questions</a></li>
<li><a href='donate.html'>Donate</a></li>
</ul>
<div>
<h2>Specifications</h2>
<h3>Why do you include specifications that are not part of HTML5?</h3>
<div class='text'>
<p>
HTML5 means different things to different people. You could argue that HTML5 only includes features that are
defined in the W3C HTML5 specification. Or you could argue that it includes every specification, draft or
experimental feature that is added to browsers in the last couple of years. We decided to take the middle
ground and split the test into three parts: the official HTML5 specification, specifications that are related
to HTML5 and some experimental new features that are extensions of HTML5.
</p>
<p>
Many of the related specifications were at one time part of HTML5. During the development of the specification
they were moved to separate specifications.
</p>
</div>
<h3>But WebGL isn't even a W3C specification!</h3>
<div class='text'>
The W3C isn't the only organization that creates open specifications for the web. The WebGL specification is
published by Kronos, the same group that is also responsible for OpenGL. WebGL is related to HTML5 though and
listed as one of the HTML5 technologies on the W3C HTML5 logo page. The W3C HTML5 specification allows the
canvas element to be extended by new drawing methods and WebGL is one of them.
</div>
<h3>Why do you test for Web SQL?</h3>
<div class='text'>
The Web SQL specification has been deprecated and replaced by the IndexedDB specification. It is however
still commonly used on mobile phones and at least three vendors have shipped desktop browsers supporting Web SQL. We've decided to include
this specification, but make it a special case. Web SQL is worth 5 points, but only if IndexedDB is not supported.
IndexedDB is worth 10 points. If a browser supports both, only 10 points are awarded. This way browsers
that only included IndexedDB are not penalized, but browsers that only support Web SQL do get some points.
</div>
<hr>
<h2>Scoring</h2>
<h3>What is the maximum number of points you can score?</h3>
<div class='text'>
If a browser passes all tests it would receive the maximum score of 555. Previous
versions of the HTML5test had less tests and therefore also a lower maximum score, such as 160, 300, 450, 475 and 500 points.
Previous versions of this test also awarded bonus points for some features, but as of version 5, we
no longer do.
</div>
<h3>The scoring seems arbitrary, who decides how many points are awarded?</h3>
<div class='text'>
We decided to award points for each feature depending on how important that feature is for web developers
and how difficult it is to implement that feature. A small and simple feature would be worth less points than a
large and complicated feature. We think this is the most honest way to grade browsers, because otherwise a browser
that only supports the small and simple features would score as high or higher than a browser that went the
extra mile and decided to tackle the big features. But in the end it is based on personal preference,
but I doubt there is a truly objective alternative.
</div>
<hr>
<h2>Reporting</h2>
<h3>Can my browser be included on the 'other browser' and 'compare' pages?</h3>
<div class='text'>
<p>
We would love to add new browsers, but not all browsers are eligible. First of all we only accept browsers that
are publicly available, either in beta form or a final release. We do not accept scores for internal development builds.
Secondly we only accept browsers that are available in English. We want to check browsers before including them and
unfortunately we do not speak Chinese, Japanese, Korean or Russian. And finally we only accept browsers which have a
unique score. There are many browsers that are forks or modified versions of Chromium or Firefox. Similarly there
are many browser that embed Internet Explorer or Webkit as provided by the operating system. These browser
do not qualify. For comparisons, simply choose the original browser on which the browser was based instead.
</p>
<p>
We retain the right to make exceptions to any of the rules above and to remove or refuse any browser we deem
necessary.
</p>
</div>
<h3>What happens when a browser cheats?</h3>
<div class='text'>
<p>
We cannot distinguish between a browser that supports a particular feature and a browser that lies about supporting
that feature. The only way to deal with these situations it to manually confirm the test results. And if a browser
is found to be overly confident about claiming support for certain features we can put that browser on a blacklist.
That means that that even though the browser claims to support a particular feature, we ignore what the browser says and do
not give any points. This is usually just a temporary problem and once the browser has been fixed we will remove
the new version from the blacklist.
</p>
<p>
Claiming to support a feature which isn't working is not just causing problems for the reliability of the
test results, but there are other real-world problems. For example if you claim to support WebGL, a website may decide
to serve WebGL content. If your browser does not support WebGL, the website may fail in an uncontrollable way. If you
correctly denied support for WebGL, the website may have served alternative content that would work in your browser.
If you claim to support features that you don't, you are breaking the web.
</p>
<p>
If we find that a browser is structurally lying about which features they support - deliberately or not - we will
usually give a warning to the developers of the browser and if the problem hasn't been fixed in the next version
we will remove the browser from the 'other browser' and 'compare' pages and/or give other penalties. In extreme
cases we may block the browser from showing test results and show a warning instead.
</p>
</div>
<hr>
<h2>Methods</h2>
<h3>Why are you using browser sniffing?</h3>
<div class='text'>
<p>
Unfortunately, in two very specific cases we are forced to use browser sniffing. The first case is <code>contentEditable</code>
which was not supported on many older mobile devices. Yet almost all mobile browsers claim to support <code>contentEditable</code>.
Fortunately modern mobile devices are starting to support <code>contentEditable</code>, but this left us with a problem. We
cannot reliably detect if a browser has proper support. The only way around this is to use a whitelist of
mobile browsers that do support this feature, otherwise you risk awarding points to mobile browsers that they
do not deserve. The second case is drag and drop, which is also not supported on mobile phones and tablets. </p>
<p>
Please open a new issue on <a href='https://github.com/NielsLeenheer/html5test'>Github</a> when you believe a
browser should be included on the whitelist.
</p>
</div>
<hr>
<h2>Privacy</h2>
<h3>What kind of data is collected from visitors?</h3>
<div class='text'>
<p>
Each time you visit this website your score and test results are logged on our servers.
We also store the user agent of your browser which contains information about the browser,
operating system and device you are using. The collected information is solely used to
generated anonymized reports about HTML5 support in browsers and improve the quality of
our software.
</p>
<p>
We do not store cookies in your browser, but we do use several external components that do,
including: Google Analytics, BuySellAds, Facebook, Twitter and Google+.
</p>
</div>
</div>
</div>
<div class='footer'>
<div>
<div class='copyright'>
<p>
Created by Niels Leenheer.<br>
Please note that the HTML5 test is not affiliated with the W3C or the HTML5 working group.<br>
HTML5 Logo by <a href="http://www.w3.org/"><abbr title="World Wide Web Consortium">W3C</abbr></a>.
Browser detection by <a href='http://whichbrowser.net'>WhichBrowser</a>.
</p>
<div id='cloudvps'>
<a href="http://www.cloudvps.nl" target="_blank" ><b>CloudVPS</b><br> High Availability<br> Cloud Servers</a>
</div>
</div>
</div>
</div>
</div>
</div>
<script src='//www.google-analytics.com/ga.js'></script>
<script>
<!--
try {
var pageTracker = _gat._getTracker("UA-68192-4");
pageTracker._trackPageview();
} catch(err) {}
//-->
</script>
</body>
</html>

View File

@ -0,0 +1,19 @@
<!doctype html>
<html>
<body>
<script>
var passed = false;
try {
eval('true');
} catch(e) {
passed = true;
}
window.top.postMessage('csp10:' + (passed ? 'passed' : 'failed'), '*');
</script>
</body>
</html>

View File

@ -0,0 +1 @@
<title>&amp;&<</title>

View File

@ -0,0 +1,14 @@
<?php
$GLOBALS['configuration'] = [
'readonly' => false,
'release' => 8,
'database' => [
'server' => 'localhost',
'username' => '******';
'password' => '******';
'database' => 'html5test'
]
];

View File

@ -0,0 +1,114 @@
<?php
include('../config.php');
include('../libraries/database.php');
include('../libraries/template.php');
include('../libraries/tools.php');
include('../models/browsers.php');
include('../models/results.php');
$tpl = new Template('../templates/browser.html');
$tpl->set('results', Browsers::getAll($GLOBALS['configuration']['release']));
if (isset($_REQUEST['show'])) {
$show = explode('/', $_REQUEST['show']);
if (isset($show[0])) {
if ($show[0] == 'mybrowser') {
$tpl->set('one', '');
}
else if (preg_match("/^[a-f0-9]{16,16}$/", $show[0])) {
if ($row = Results::getByUniqueId($show[0])) {
$tpl->set('one', json_encode($row));
}
}
else {
if ($row = Results::getByBrowser($show[0], $GLOBALS['configuration']['release'])) {
$tpl->set('one', json_encode($row));
}
}
}
if (isset($show[1])) {
if ($show[1] == 'mybrowser') {
$tpl->set('two', '');
}
else if (preg_match("/^[a-f0-9]{16,16}$/", $show[1])) {
if ($row = Results::getByUniqueId($show[1])) {
$tpl->set('two', json_encode($row));
}
}
else {
if ($row = Results::getByBrowser($show[1], $GLOBALS['configuration']['release'])) {
$tpl->set('two', json_encode($row));
}
}
}
if (isset($show[2])) {
if ($show[2] == 'mybrowser') {
$tpl->set('three', '');
}
else if (preg_match("/^[a-f0-9]{16,16}$/", $show[2])) {
if ($row = Results::getByUniqueId($show[2])) {
$tpl->set('three', json_encode($row));
}
}
else {
if ($row = Results::getByBrowser($show[2], $GLOBALS['configuration']['release'])) {
$tpl->set('three', json_encode($row));
}
}
}
if (isset($show[3])) {
if ($show[3] == 'mybrowser') {
$tpl->set('four', '');
}
else if (preg_match("/^[a-f0-9]{16,16}$/", $show[3])) {
if ($row = Results::getByUniqueId($show[3])) {
$tpl->set('four', json_encode($row));
}
}
else {
if ($row = Results::getByBrowser($show[3], $GLOBALS['configuration']['release'])) {
$tpl->set('four', json_encode($row));
}
}
}
if (isset($show[4])) {
if ($show[4] == 'mybrowser') {
$tpl->set('five', '');
}
else if (preg_match("/^[a-f0-9]{16,16}$/", $show[4])) {
if ($row = Results::getByUniqueId($show[4])) {
$tpl->set('five', json_encode($row));
}
}
else {
if ($row = Results::getByBrowser($show[4], $GLOBALS['configuration']['release'])) {
$tpl->set('five', json_encode($row));
}
}
}
}
echo $tpl->fetch();

View File

@ -0,0 +1,55 @@
<?php
include('../config.php');
include('../libraries/database.php');
include('../libraries/template.php');
include('../libraries/tools.php');
include('../models/browsers.php');
include('../models/results.php');
$tpl = new Template('../templates/feature.html');
$tpl->set('results', Browsers::getAll($GLOBALS['configuration']['release']));
if (isset($_REQUEST['show'])) {
$show = explode('/', $_REQUEST['show']);
if (isset($show[0])) {
$tpl->set('one', json_encode(array(
'key' => $show[0],
'supported' => implode(',', Results::getByFeature($show[0], $GLOBALS['configuration']['release']))
)));
}
if (isset($show[1])) {
$tpl->set('two', json_encode(array(
'key' => $show[1],
'supported' => implode(',', Results::getByFeature($show[1], $GLOBALS['configuration']['release']))
)));
}
if (isset($show[2])) {
$tpl->set('three', json_encode(array(
'key' => $show[2],
'supported' => implode(',', Results::getByFeature($show[2], $GLOBALS['configuration']['release']))
)));
}
if (isset($show[3])) {
$tpl->set('four', json_encode(array(
'key' => $show[3],
'supported' => implode(',', Results::getByFeature($show[3], $GLOBALS['configuration']['release']))
)));
}
if (isset($show[4])) {
$tpl->set('five', json_encode(array(
'key' => $show[4],
'supported' => implode(',', Results::getByFeature($show[4], $GLOBALS['configuration']['release']))
)));
}
}
echo $tpl->fetch();

View File

@ -0,0 +1,23 @@
<?php
include('../config.php');
include('../libraries/database.php');
include('../libraries/template.php');
include('../libraries/tools.php');
include('../models/fingerprint.php');
include('../models/results.php');
$tpl = new Template('../templates/fingerprint.html');
if (isset($_REQUEST['id'])) {
if ($row = Fingerprint::getById($_REQUEST['id'])) {
$tpl->set('fingerprint', $row);
}
if ($row = Results::getByFingerprint($_REQUEST['id'])) {
$tpl->set('results', $row);
}
}
echo $tpl->fetch();

View File

@ -0,0 +1,71 @@
<?php
include('../config.php');
include('../libraries/database.php');
include('../libraries/template.php');
$db = Factory::Database();
$tpl = new Template('../templates/lab-inventory.html');
$boxes = array();
$res = $db->query("
SELECT
labBoxes.id AS box, labDevices.*
FROM
labBoxes
LEFT JOIN labDevices ON (FIND_IN_SET(labDevices.id,labBoxes.devices))
ORDER BY
labBoxes.id, labDevices.deviceManufacturer, labDevices.deviceModel
");
while ($row = $res->fetch_object()) {
$boxes[$row->box][] = $row;
}
$tpl->set('boxes', $boxes);
$operatingsystems = array();
$res = $db->query("
SELECT
labBoxes.id AS box, labDevices.*
FROM
labBoxes
LEFT JOIN labDevices ON (FIND_IN_SET(labDevices.id,labBoxes.devices))
ORDER BY
labDevices.osName, labDevices.deviceManufacturer, labDevices.deviceModel
");
while ($row = $res->fetch_object()) {
$operatingsystems[] = $row;
}
$tpl->set('operatingsystems', $operatingsystems);
$manufacturers = array();
$res = $db->query("
SELECT
labBoxes.id AS box, labDevices.*
FROM
labBoxes
LEFT JOIN labDevices ON (FIND_IN_SET(labDevices.id,labBoxes.devices))
ORDER BY
labDevices.deviceManufacturer, labDevices.deviceModel, labDevices.osName
");
while ($row = $res->fetch_object()) {
$manufacturers[] = $row;
}
$tpl->set('manufacturers', $manufacturers);
echo $tpl->fetch();

View File

@ -0,0 +1,32 @@
<?php
include('../config.php');
include('../libraries/database.php');
include('../libraries/template.php');
$db = Factory::Database();
$tpl = new Template('../templates/lab.html');
$devices = array();
$available = 0;
$res = $db->query("
SELECT
*
FROM
labDevices
ORDER BY
osName IS NULL, osName, deviceManufacturer, deviceModel
");
while ($row = $res->fetch_object()) {
$devices[] = $row;
if ($row->isAvailable) $available++;
}
$tpl->set('devices', $devices);
$tpl->set('available', $available);
echo $tpl->fetch();

View File

@ -0,0 +1,14 @@
<?php
include('../config.php');
include('../libraries/database.php');
include('../libraries/template.php');
include('../libraries/tools.php');
include('../models/raw.php');
$tpl = new Template('../templates/latest.html');
$tpl->set('results', Raw::getAll());
echo $tpl->fetch();

View File

@ -0,0 +1,261 @@
<?php
include('../config.php');
include('../libraries/database.php');
include('../libraries/template.php');
$type = $_REQUEST['type'];
if (!in_array($type, array('desktop', 'mobile', 'tablet', 'gaming', 'television', 'other'))) $type = 'desktop';
if (in_array($type, array('gaming', 'television'))) {
header('Location: /results/other.html#' . $type);
exit;
}
$db = Factory::Database();
if ($type == 'other') {
$tpl = new Template('../templates/results-other.html');
$tpl->set('type', $type);
$consoles = array();
$result = $db->query("
SELECT
v.status, v.platform, IFNULL(p.related,p.platform) AS id, IFNULL(v.version,'') AS version, v.nickname, v.details, v.visible, f.score, f.points, f.results
FROM
data_versions AS v
LEFT JOIN data_platforms AS p ON (v.platform = p.platform)
LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL)))
LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint)
WHERE
s.release = '" . $GLOBALS['configuration']['release'] . "' AND
FIND_IN_SET('gaming-console',v.type)
ORDER BY
score DESC
");
while ($row = $result->fetch_object()) {
$consoles[] = $row;
}
$tpl->set('consoles', $consoles);
$portables = array();
$result = $db->query("
SELECT
v.status, v.platform, IFNULL(p.related,p.platform) AS id, IFNULL(v.version,'') AS version, v.nickname, v.details, v.visible, f.score, f.points, f.results
FROM
data_versions AS v
LEFT JOIN data_platforms AS p ON (v.platform = p.platform)
LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL)))
LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint)
WHERE
s.release = '" . $GLOBALS['configuration']['release'] . "' AND
FIND_IN_SET('gaming-portable',v.type)
ORDER BY
score DESC
");
while ($row = $result->fetch_object()) {
$portables[] = $row;
}
$tpl->set('portables', $portables);
$smarttvs = array();
$result = $db->query("
SELECT
v.status, v.platform, IFNULL(p.related,p.platform) AS id, IFNULL(v.version,'') AS version, v.nickname, v.details, v.visible, f.score, f.points, f.results
FROM
data_versions AS v
LEFT JOIN data_platforms AS p ON (v.platform = p.platform)
LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL)))
LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint)
WHERE
s.release = '" . $GLOBALS['configuration']['release'] . "' AND
FIND_IN_SET('television-smart',v.type)
ORDER BY
score DESC
");
while ($row = $result->fetch_object()) {
$smarttvs[$row->status][] = $row;
}
$tpl->set('smarttvs', $smarttvs);
$settopboxes = array();
$result = $db->query("
SELECT
v.status, v.platform, IFNULL(p.related,p.platform) AS id, IFNULL(v.version,'') AS version, v.nickname, v.details, v.visible, f.score, f.points, f.results
FROM
data_versions AS v
LEFT JOIN data_platforms AS p ON (v.platform = p.platform)
LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL)))
LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint)
WHERE
s.release = '" . $GLOBALS['configuration']['release'] . "' AND
FIND_IN_SET('television-box',v.type)
ORDER BY
score DESC
");
while ($row = $result->fetch_object()) {
$settopboxes[] = $row;
}
$tpl->set('settopboxes', $settopboxes);
$ereaders = array();
$result = $db->query("
SELECT
v.status, v.platform, IFNULL(p.related,p.platform) AS id, IFNULL(v.version,'') AS version, v.nickname, v.details, v.visible, f.score, f.points, f.results
FROM
data_versions AS v
LEFT JOIN data_platforms AS p ON (v.platform = p.platform)
LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL)))
LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint)
WHERE
s.release = '" . $GLOBALS['configuration']['release'] . "' AND
FIND_IN_SET('ereader',v.type)
ORDER BY
score DESC
");
while ($row = $result->fetch_object()) {
$ereaders[] = $row;
}
$tpl->set('ereaders', $ereaders);
echo $tpl->fetch();
}
else {
$tpl = new Template('../templates/results.html');
$tpl->set('type', $type);
$main = array();
$names = array();
$result = $db->query("
SELECT
v.status, IFNULL(pp.nickname,pp.name) as name, IFNULL(p.nickname,p.name) as alternative, v.platform, IFNULL(p.related,p.platform) AS id, IFNULL(v.version,'') AS version, f.score
FROM
data_versions AS v
LEFT JOIN data_platforms AS p ON (v.platform = p.platform)
LEFT JOIN data_platforms AS pp ON (pp.platform = IFNULL(p.related,p.platform))
LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL)))
LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint)
WHERE
pp.order > 0 AND
v.visible = 1 AND
s.release = '" . $GLOBALS['configuration']['release'] . "' AND
FIND_IN_SET('" . $type . "',v.type)
ORDER BY
pp.order DESC, IFNULL(p.related,p.platform), v.status = 'upcoming' DESC, v.status = 'current' DESC, v.status = 'legacy' DESC, !ISNULL(v.releasedate), v.releasedate DESC
");
$count = 0;
$previousPlatform = '';
$previousId = '';
while ($row = $result->fetch_object()) {
$names[$row->name] = array($row->name, $row->id);
if (!isset($main[$row->name])) {
$main[$row->name] = array(null, null);
}
if ($row->status == 'upcoming') {
$main[$row->name][0] = $row;
}
if ($row->status == 'current') {
$main[$row->name][1] = $row;
}
if ($row->status == 'legacy' && count($main[$row->name]) < 8) {
if ($row->id == $previousId && $row->platform != $previousPlatform) {
$main[$row->name][] = $row->alternative;
}
$main[$row->name][] = $row;
}
$previousPlatform = $row->platform;
$previousId = $row->id;
$count = max($count, count($main[$row->name]));
}
$tpl->set('main', $main);
$tpl->set('mainRows', $count);
$tpl->set('mainColumns', $names);
$results = array();
$result = $db->query("
SELECT
v.status, v.platform, IFNULL(p.related,p.platform) AS id, IFNULL(v.version,'') AS version, v.nickname, v.details, v.visible, f.score, f.points, f.results
FROM
data_versions AS v
LEFT JOIN data_platforms AS p ON (v.platform = p.platform)
LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL)))
LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint)
WHERE
s.release = '" . $GLOBALS['configuration']['release'] . "' AND
FIND_IN_SET('" . $type . "',v.type)
ORDER BY
score DESC, platform ASC, version DESC
");
while ($row = $result->fetch_object()) {
$results[$row->status][] = $row;
}
$tpl->set('results', $results);
$sets = array();
$result = $db->query("
SELECT
p.order, pp.name AS grouped, v.platform, IFNULL(p.related,p.platform) AS id, IFNULL(v.version,'') AS version, v.nickname, v.details, IF(ISNULL(v.releasedate),DATE(NOW()),v.releasedate) AS `releasedate`, v.status, f.score
FROM
data_versions AS v
LEFT JOIN data_platforms AS p ON (v.platform = p.platform)
LEFT JOIN data_platforms AS pp ON (pp.platform = IFNULL(p.related,p.platform))
LEFT JOIN scores AS s ON (v.platform = s.platform AND (v.version = s.version OR (v.version IS NULL AND s.version IS NULL)))
LEFT JOIN fingerprints AS f ON (f.fingerprint = s.fingerprint)
WHERE
(!ISNULL(v.releasedate) OR v.status = 'upcoming') AND
s.release = '" . $GLOBALS['configuration']['release'] . "' AND
FIND_IN_SET('" . $type . "',p.type) AND
!ISNULL(f.score)
ORDER BY
pp.name, `releasedate`
");
while ($row = $result->fetch_object()) {
$sets[$row->grouped]['name'] = $row->grouped;
$sets[$row->grouped]['data'][] = $row;
}
$tpl->set('sets', $sets);
echo $tpl->fetch();
}

View File

@ -0,0 +1,20 @@
<?php
include('../config.php');
include('../libraries/database.php');
include('../libraries/template.php');
include('../models/results.php');
$tpl = new Template('../templates/saved.html');
$tpl->set('release', intval($GLOBALS['configuration']['release']));
if (isset($_REQUEST['id'])) {
if ($row = Results::getByUniqueId($_REQUEST['id'])) {
$tpl->set('one', json_encode($row));
$tpl->set('legacy', intval($row->release) != intval($GLOBALS['configuration']['release']));
$tpl->set('release', intval($row->release));
}
}
echo $tpl->fetch();

View File

@ -0,0 +1,12 @@
<?php
include('../config.php');
include('../libraries/database.php');
include('../libraries/template.php');
include('../libraries/tools.php');
include('../models/raw.php');
$tpl = new Template('../templates/search.html');
echo $tpl->fetch();

View File

@ -0,0 +1,50 @@
<?php
include('../config.php');
include('../libraries/database.php');
include('../libraries/template.php');
include('../libraries/tools.php');
include('../models/results.php');
$tpl = new Template('../templates/timeline.html');
$db = Factory::Database();
if (isset($_REQUEST['id'])) {
$result = $db->query("
SELECT
*
FROM
data_platforms
WHERE
(platform = '" . $db->escape_string($_REQUEST['id']) . "' OR related = '" . $db->escape_string($_REQUEST['id']) . "') AND
FIND_IN_SET('" . $db->escape_string($_REQUEST['type']) . "',type)
ORDER BY
related IS NULL DESC, `order`
");
$names = [];
$name = '';
while ($row = $result->fetch_object()) {
$names[] = $row->name;
}
$last = array_pop($names);
if (count($names)) {
$name = implode(', ', $names) . ' and ' . $last;
} else {
$name = $last;
}
$tpl->set('name', $name);
if ($timeline = Results::getTimeline($_REQUEST['id'], $_REQUEST['type'], $GLOBALS['configuration']['release'])) {
$tpl->set('timeline', $timeline);
}
}
echo $tpl->fetch();

Some files were not shown because too many files have changed in this diff Show More