mirror of https://gitee.com/openkylin/firefox.git
Import Debian changes 102.0+build2-ok1
firefox (102.0+build2-ok1) yangtze; urgency=medium * Build for openKylin.
This commit is contained in:
parent
f045b3d5ed
commit
bb8dbabd7d
|
@ -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."
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
|
|
@ -0,0 +1,4 @@
|
|||
%%ifdef MOZ_ENABLE_BREAKPAD
|
||||
/@MOZ_LIBDIR@/@MOZ_APP_NAME@
|
||||
/@MOZ_LIBDIR@/plugin-container
|
||||
%%endif
|
|
@ -0,0 +1,3 @@
|
|||
LP-PPA-ubuntu-mozilla-daily
|
||||
LP-PPA-ubuntu-mozilla-daily-firefox-aurora
|
||||
LP-PPA-mozillateam-firefox-next
|
File diff suppressed because it is too large
Load Diff
|
@ -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
|
|
@ -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()
|
|
@ -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)
|
|
@ -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()
|
|
@ -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;
|
||||
}
|
|
@ -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])
|
|
@ -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()
|
|
@ -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);
|
|
@ -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
|
|
@ -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)
|
|
@ -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
|
|
@ -0,0 +1 @@
|
|||
9
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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 }
|
||||
]
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -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
|
|
@ -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
|
|
@ -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.
|
File diff suppressed because it is too large
Load Diff
|
@ -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"
|
|
@ -0,0 +1,2 @@
|
|||
debian/MPL-1.1
|
||||
debian/MPL-2.0
|
|
@ -0,0 +1,3 @@
|
|||
%%ifdef MOZ_ENABLE_BREAKPAD
|
||||
@MOZ_DISTDIR@/*symbols.zip @MOZ_LIBDIR@
|
||||
%%endif
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -0,0 +1 @@
|
|||
debian/@MOZ_APP_NAME@.1
|
|
@ -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#
|
|
@ -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#
|
|
@ -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#
|
||||
|
|
@ -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#
|
|
@ -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
|
|
@ -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']
|
||||
|
|
@ -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)
|
|
@ -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"):
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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");
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
|
@ -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 = []
|
||||
|
|
@ -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"}
|
|
@ -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
|
|
@ -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
|
|
@ -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",
|
File diff suppressed because one or more lines are too long
|
@ -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")
|
|
@ -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,
|
||||
]
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -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
|
||||
|
|
@ -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"
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -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)
|
||||
|
|
@ -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")
|
||||
|
||||
|
|
@ -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,
|
||||
)
|
||||
|
|
@ -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")
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -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:
|
||||
|
|
@ -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]
|
||||
|
|
@ -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)
|
||||
|
|
@ -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 != "") {
|
|
@ -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
|
|
@ -0,0 +1 @@
|
|||
3.0 (quilt)
|
|
@ -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
|
|
@ -0,0 +1,3 @@
|
|||
extend-diff-ignore = "^\.mozconfig\."
|
||||
extend-diff-ignore = ".pyc$"
|
||||
extend-diff-ignore = "^obj\-"
|
|
@ -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 |
|
@ -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/");
|
||||
|
|
@ -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
|
|
@ -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>
|
|
@ -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.
|
|
@ -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>
|
||||
<a href="https://www.cloudvps.nl"><img src="https://html5test.com/images/sponsors/cloudvps@2x.png" width="59"></a>
|
|
@ -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>
|
|
@ -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>
|
|
@ -0,0 +1 @@
|
|||
<title>&&<</title>
|
|
@ -0,0 +1,14 @@
|
|||
<?php
|
||||
|
||||
$GLOBALS['configuration'] = [
|
||||
'readonly' => false,
|
||||
|
||||
'release' => 8,
|
||||
|
||||
'database' => [
|
||||
'server' => 'localhost',
|
||||
'username' => '******';
|
||||
'password' => '******';
|
||||
'database' => 'html5test'
|
||||
]
|
||||
];
|
|
@ -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();
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -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();
|
|
@ -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();
|
|
@ -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();
|
|
@ -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();
|
|
@ -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();
|
|
@ -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();
|
||||
}
|
|
@ -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();
|
|
@ -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();
|
|
@ -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
Loading…
Reference in New Issue