Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e71937e76a | ||
|
|
4a44bfe8fa | ||
|
|
adb58c5761 | ||
|
|
8f7e7bfbdc | ||
|
|
96ad821193 | ||
|
|
0742779ec4 |
No files matched your search
@@ -22,4 +22,4 @@
|
||||
# changes to stick? As of bug 928195, this shouldn't be necessary! Please
|
||||
# don't change CLOBBER for WebIDL changes any more.
|
||||
|
||||
Clobber for removal of network tickler
|
||||
Switching to C++17 requires CLOBBER to pick up compiler conf. (Issue #2281)
|
||||
+4
-8
@@ -14,7 +14,7 @@ endif
|
||||
export TOPLEVEL_BUILD := 1
|
||||
|
||||
default::
|
||||
BACKEND_ONCE_STAMP := backend.once.stamp
|
||||
|
||||
ifndef TEST_MOZBUILD
|
||||
ifdef MOZ_BUILD_APP
|
||||
include $(wildcard $(topsrcdir)/$(MOZ_BUILD_APP)/build.mk)
|
||||
@@ -46,7 +46,7 @@ ifndef TEST_MOZBUILD
|
||||
ifndef MOZ_PROFILE_USE
|
||||
# We need to explicitly put BUILD_BACKEND_FILES here otherwise the rule in
|
||||
# rules.mk doesn't run early enough.
|
||||
$(TIERS) binaries:: CLOBBER $(configure_dir)/configure config.status $(BACKEND_ONCE_STAMP)
|
||||
$(TIERS) binaries:: CLOBBER $(configure_dir)/configure config.status $(BUILD_BACKEND_FILES)
|
||||
|
||||
# While our mozbuild backend has some kind of crazy install_manfests junk to
|
||||
# try and make this not have to happen, we actually want dist/bin to be
|
||||
@@ -100,11 +100,7 @@ config.status js/src/config.status:
|
||||
ifndef TEST_MOZBUILD
|
||||
|
||||
.PHONY: backend
|
||||
backend: $(BACKEND_ONCE_STAMP)
|
||||
# Create a per-invocation stamp so backend regenerates only once
|
||||
$(BACKEND_ONCE_STAMP):
|
||||
@echo "Stamping backend regeneration."
|
||||
@$(TOUCH) $@
|
||||
backend: $(BUILD_BACKEND_FILES)
|
||||
|
||||
# A traditional rule would look like this:
|
||||
# backend.%:
|
||||
@@ -126,7 +122,7 @@ $(subst .,%,$(BUILD_BACKEND_FILES)):
|
||||
@echo 'Build configuration changed. Regenerating backend.'
|
||||
$(PYTHON) config.status
|
||||
|
||||
Makefile: $(BACKEND_ONCE_STAMP)
|
||||
Makefile: $(BUILD_BACKEND_FILES)
|
||||
@$(TOUCH) $@
|
||||
|
||||
define build_backend_rule
|
||||
|
||||
@@ -19,13 +19,6 @@ If you are interested in the development and building side of things, some
|
||||
information will be available on the [Pale Moon developer site](http://developer.palemoon.org).
|
||||
You are also always welcome to get in touch with our community on the [Pale Moon forum](https://forum.palemoon.org/).
|
||||
|
||||
### Code search
|
||||
|
||||
While our repo has basic code searching capabilities (via `git grep`), you are strongly
|
||||
encouraged to instead use the dedicated code search and cross-referencing site:
|
||||
[https://xref.palemoon.org/](https://xref.palemoon.org/)
|
||||
This repo and a copy of the front-end are amalgamated in the `goanna-central` index.
|
||||
|
||||
### A note about trademarks and branding
|
||||
|
||||
Although this repository is primarily licensed under Mozilla Public License v2.0, the
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
TRADEMARK NOTICE
|
||||
================
|
||||
|
||||
The name "Goanna" and visual representations (logo) have not been
|
||||
registered by the Copyright owners as a trademark in any jurisdiction.
|
||||
However, because Goanna has been distributed and maintained world-wide,
|
||||
continually since 2015, the Copyright owners claim "common-law trademark
|
||||
protection" in any jurisdiction where common-law trademark is recognized.
|
||||
+15
-65
@@ -6,7 +6,7 @@
|
||||
#include "Platform.h"
|
||||
|
||||
#include "nsIAccessibleEvent.h"
|
||||
#include "nsIGSettingsService.h"
|
||||
#include "nsIGConfService.h"
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsMai.h"
|
||||
#include "AtkSocketAccessible.h"
|
||||
@@ -18,6 +18,10 @@
|
||||
#endif
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#if (MOZ_WIDGET_GTK == 3)
|
||||
extern "C" __attribute__((weak,visibility("default"))) int atk_bridge_adaptor_init(int*, char **[]);
|
||||
#endif
|
||||
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::a11y;
|
||||
|
||||
@@ -29,20 +33,12 @@ extern "C" {
|
||||
typedef GType (* AtkGetTypeType) (void);
|
||||
typedef void (*GnomeAccessibilityInit) (void);
|
||||
typedef void (*GnomeAccessibilityShutdown) (void);
|
||||
#if (MOZ_WIDGET_GTK == 3)
|
||||
typedef int (*AtkBridgeAdaptorInit) (int*, char***);
|
||||
#endif
|
||||
}
|
||||
|
||||
static PRLibrary* sATKLib = nullptr;
|
||||
static const char sATKLibName[] = "libatk-1.0.so.0";
|
||||
static const char sATKHyperlinkImplGetTypeSymbol[] =
|
||||
"atk_hyperlink_impl_get_type";
|
||||
#if (MOZ_WIDGET_GTK == 3)
|
||||
static PRLibrary* sAtkBridgeAdaptorLib = nullptr;
|
||||
static const char sAtkBridgeAdaptorLibName[] = "libatk-bridge-2.0.so.0";
|
||||
static const char sAtkBridgeAdaptorInitSymbol[] = "atk_bridge_adaptor_init";
|
||||
#endif
|
||||
|
||||
gboolean toplevel_event_watcher(GSignalInvocationHint*, guint, const GValue*,
|
||||
gpointer);
|
||||
@@ -131,38 +127,6 @@ LoadGtkModule(GnomeAccessibilityModule& aModule)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
#if (MOZ_WIDGET_GTK == 3)
|
||||
static bool
|
||||
InitAtkBridgeAdaptor()
|
||||
{
|
||||
AtkBridgeAdaptorInit initBridge =
|
||||
reinterpret_cast<AtkBridgeAdaptorInit>(
|
||||
PR_FindFunctionSymbolAndLibrary(sAtkBridgeAdaptorInitSymbol,
|
||||
&sAtkBridgeAdaptorLib));
|
||||
|
||||
if (!initBridge) {
|
||||
sAtkBridgeAdaptorLib = PR_LoadLibrary(sAtkBridgeAdaptorLibName);
|
||||
if (sAtkBridgeAdaptorLib) {
|
||||
initBridge =
|
||||
reinterpret_cast<AtkBridgeAdaptorInit>(
|
||||
PR_FindFunctionSymbol(sAtkBridgeAdaptorLib,
|
||||
sAtkBridgeAdaptorInitSymbol));
|
||||
if (!initBridge) {
|
||||
PR_UnloadLibrary(sAtkBridgeAdaptorLib);
|
||||
sAtkBridgeAdaptorLib = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!initBridge) {
|
||||
return false;
|
||||
}
|
||||
|
||||
initBridge(nullptr, nullptr);
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
a11y::PlatformInit()
|
||||
{
|
||||
@@ -217,7 +181,9 @@ a11y::PlatformInit()
|
||||
// Init atk-bridge now
|
||||
PR_SetEnv("NO_AT_BRIDGE=0");
|
||||
#if (MOZ_WIDGET_GTK == 3)
|
||||
if (!InitAtkBridgeAdaptor())
|
||||
if (atk_bridge_adaptor_init) {
|
||||
atk_bridge_adaptor_init(nullptr, nullptr);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
nsresult rv = LoadGtkModule(sAtkBridge);
|
||||
@@ -262,13 +228,6 @@ a11y::PlatformShutdown()
|
||||
sAtkBridge.init = nullptr;
|
||||
sAtkBridge.shutdown = nullptr;
|
||||
}
|
||||
#if (MOZ_WIDGET_GTK == 3)
|
||||
if (sAtkBridgeAdaptorLib) {
|
||||
// Do not shutdown/unload atk-bridge; an exit function registered by
|
||||
// the bridge will take care of it.
|
||||
sAtkBridgeAdaptorLib = nullptr;
|
||||
}
|
||||
#endif
|
||||
#if (MOZ_WIDGET_GTK == 2)
|
||||
if (sGail.lib) {
|
||||
// Do not shutdown gail because
|
||||
@@ -401,22 +360,13 @@ dbus_done:
|
||||
return sShouldEnable;
|
||||
#endif
|
||||
|
||||
// check GSettings
|
||||
#define GSETINGS_A11Y_INTERFACE "org.gnome.desktop.interface"
|
||||
#define GSETINGS_A11Y_KEY "toolkit-accessibility"
|
||||
nsCOMPtr<nsIGSettingsService> gsettings =
|
||||
do_GetService(NS_GSETTINGSSERVICE_CONTRACTID);
|
||||
nsCOMPtr<nsIGSettingsCollection> a11y_settings;
|
||||
|
||||
if (gsettings) {
|
||||
gsettings->GetCollectionForSchema(NS_LITERAL_CSTRING(GSETINGS_A11Y_INTERFACE),
|
||||
getter_AddRefs(a11y_settings));
|
||||
|
||||
if (a11y_settings) {
|
||||
a11y_settings->GetBoolean(NS_LITERAL_CSTRING(GSETINGS_A11Y_KEY),
|
||||
&sShouldEnable);
|
||||
}
|
||||
}
|
||||
//check gconf-2 setting
|
||||
#define GCONF_A11Y_KEY "/desktop/gnome/interface/accessibility"
|
||||
nsresult rv = NS_OK;
|
||||
nsCOMPtr<nsIGConfService> gconf =
|
||||
do_GetService(NS_GCONFSERVICE_CONTRACTID, &rv);
|
||||
if (NS_SUCCEEDED(rv) && gconf)
|
||||
gconf->GetBool(NS_LITERAL_CSTRING(GCONF_A11Y_KEY), &sShouldEnable);
|
||||
|
||||
return sShouldEnable;
|
||||
}
|
||||
@@ -55,7 +55,7 @@ private:
|
||||
{
|
||||
explicit IteratorState(Accessible* aParent, IteratorState* mParentState = nullptr);
|
||||
|
||||
RefPtr<Accessible> mParent;
|
||||
Accessible* mParent;
|
||||
int32_t mIndex;
|
||||
IteratorState* mParentState;
|
||||
};
|
||||
|
||||
@@ -80,7 +80,7 @@ StyleInfo::TextIndent(nsAString& aValue)
|
||||
}
|
||||
|
||||
void
|
||||
StyleInfo::Margin(Side aSide, nsAString& aValue)
|
||||
StyleInfo::Margin(css::Side aSide, nsAString& aValue)
|
||||
{
|
||||
MOZ_ASSERT(mElement->GetPrimaryFrame(), " mElement->GetPrimaryFrame() needs to be valid pointer");
|
||||
aValue.Truncate();
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
#ifdef MOZ_ENABLE_NPAPI
|
||||
#include "nsPluginFrame.h"
|
||||
#endif
|
||||
#include "SVGGeometryFrame.h"
|
||||
#include "nsSVGPathGeometryFrame.h"
|
||||
#include "nsTreeBodyFrame.h"
|
||||
#include "nsTreeColumns.h"
|
||||
#include "nsTreeUtils.h"
|
||||
@@ -1165,8 +1165,8 @@ nsAccessibilityService::CreateAccessible(nsINode* aNode,
|
||||
|
||||
if (!newAcc) {
|
||||
if (content->IsSVGElement()) {
|
||||
SVGGeometryFrame* geometryFrame = do_QueryFrame(frame);
|
||||
if (geometryFrame) {
|
||||
nsSVGPathGeometryFrame* pathGeometryFrame = do_QueryFrame(frame);
|
||||
if (pathGeometryFrame) {
|
||||
// A graphic elements: rect, circle, ellipse, line, path, polygon,
|
||||
// polyline and image. A 'use' and 'text' graphic elements require
|
||||
// special support.
|
||||
|
||||
@@ -157,7 +157,7 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(DocAccessible, Accessible)
|
||||
tmp->mARIAOwnsHash.Clear();
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(DocAccessible)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(DocAccessible)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIDocumentObserver)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIMutationObserver)
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
|
||||
|
||||
@@ -76,7 +76,7 @@ HyperTextAccessible::NativeState()
|
||||
{
|
||||
uint64_t states = AccessibleWrap::NativeState();
|
||||
|
||||
if (mContent->AsElement()->State().HasState(NS_EVENT_STATE_READWRITE)) {
|
||||
if (mContent->AsElement()->State().HasState(NS_EVENT_STATE_MOZ_READWRITE)) {
|
||||
states |= states::EDITABLE;
|
||||
|
||||
} else if (mContent->IsHTMLElement(nsGkAtoms::article)) {
|
||||
|
||||
@@ -340,9 +340,9 @@ this.AccessFu = { // jshint ignore:line
|
||||
case 'remote-browser-shown':
|
||||
case 'inprocess-browser-shown':
|
||||
{
|
||||
// Ignore notifications that aren't from a Browser
|
||||
// Ignore notifications that aren't from a BrowserOrApp
|
||||
let frameLoader = aSubject.QueryInterface(Ci.nsIFrameLoader);
|
||||
if (!frameLoader.ownerIsMozBrowserFrame) {
|
||||
if (!frameLoader.ownerIsMozBrowserOrAppFrame) {
|
||||
return;
|
||||
}
|
||||
this._handleMessageManager(frameLoader.messageManager);
|
||||
|
||||
@@ -40,7 +40,7 @@ def loadEventIDL(parser, includePath, eventname):
|
||||
class Configuration:
|
||||
def __init__(self, filename):
|
||||
config = {}
|
||||
exec(compile(open(filename, "rb").read(), filename, 'exec'), config)
|
||||
execfile(filename, config)
|
||||
self.simple_events = config.get('simple_events', [])
|
||||
|
||||
def firstCap(str):
|
||||
@@ -64,7 +64,7 @@ def print_header_file(fd, conf, incdirs):
|
||||
for e in conf.simple_events:
|
||||
idl, idl_path = loadEventIDL(p, incdirs, e)
|
||||
idl_paths.add(idl_path)
|
||||
for iface in [p for p in idl.productions if p.kind == "interface"]:
|
||||
for iface in filter(lambda p: p.kind == "interface", idl.productions):
|
||||
classname = ("xpcAcc%s" % e)
|
||||
baseinterfaces = interfaces(iface)
|
||||
|
||||
@@ -73,7 +73,7 @@ def print_header_file(fd, conf, incdirs):
|
||||
fd.write("public:\n")
|
||||
|
||||
attributes = allAttributes(iface)
|
||||
args = list(map(writeAttributeParams, attributes))
|
||||
args = map(writeAttributeParams, attributes)
|
||||
fd.write(" %s(%s) :\n" % (classname, ", ".join(args)))
|
||||
|
||||
initializers = []
|
||||
@@ -83,7 +83,7 @@ def print_header_file(fd, conf, incdirs):
|
||||
fd.write(" NS_DECL_CYCLE_COLLECTING_ISUPPORTS\n")
|
||||
fd.write(" NS_DECL_CYCLE_COLLECTION_CLASS(%s)\n" % (classname))
|
||||
|
||||
for iface in [i for i in baseinterfaces if i.name != "nsISupports"]:
|
||||
for iface in filter(lambda i: i.name != "nsISupports", baseinterfaces):
|
||||
fd.write(" NS_DECL_%s\n" % iface.name.upper())
|
||||
|
||||
fd.write("\nprivate:\n")
|
||||
@@ -97,13 +97,13 @@ def print_header_file(fd, conf, incdirs):
|
||||
return idl_paths
|
||||
|
||||
def interfaceAttributeTypes(idl):
|
||||
ifaces = [p for p in idl.productions if p.kind == "interface"]
|
||||
ifaces = filter(lambda p: p.kind == "interface", idl.productions)
|
||||
attributes = []
|
||||
for i in ifaces:
|
||||
ifaceAttributes = allAttributes(i)
|
||||
attributes.extend(ifaceAttributes)
|
||||
ifaceAttrs = [a for a in attributes if a.realtype.nativeType("in").endswith("*")]
|
||||
return [a.realtype.nativeType("in").strip(" *") for a in ifaceAttrs]
|
||||
ifaceAttrs = filter(lambda a: a.realtype.nativeType("in").endswith("*"), attributes)
|
||||
return map(lambda a: a.realtype.nativeType("in").strip(" *"), ifaceAttrs)
|
||||
|
||||
def print_cpp(idl, fd, conf, eventname):
|
||||
for p in idl.productions:
|
||||
@@ -186,7 +186,7 @@ def interfaces(iface):
|
||||
def allAttributes(iface):
|
||||
attributes = []
|
||||
for i in interfaces(iface):
|
||||
attrs = [m for m in i.members if isinstance(m, xpidl.Attribute)]
|
||||
attrs = filter(lambda m: isinstance(m, xpidl.Attribute), i.members)
|
||||
attributes.extend(attrs)
|
||||
|
||||
return attributes
|
||||
@@ -194,7 +194,7 @@ def allAttributes(iface):
|
||||
def write_cpp(eventname, iface, fd):
|
||||
classname = "xpcAcc%s" % eventname
|
||||
attributes = allAttributes(iface)
|
||||
ccattributes = [m for m in attributes if m.realtype.nativeType('in').endswith('*')]
|
||||
ccattributes = filter(lambda m: m.realtype.nativeType('in').endswith('*'), attributes)
|
||||
fd.write("NS_IMPL_CYCLE_COLLECTION(%s" % classname)
|
||||
for c in ccattributes:
|
||||
fd.write(", m%s" % firstCap(c.name))
|
||||
|
||||
@@ -30,7 +30,7 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(xpcAccessibleDocument,
|
||||
tmp->mCache.Clear();
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(xpcAccessibleDocument)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(xpcAccessibleDocument)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIAccessibleDocument)
|
||||
NS_INTERFACE_MAP_END_INHERITING(xpcAccessibleHyperText)
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ XULTreeAccessible::~XULTreeAccessible()
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED(XULTreeAccessible, Accessible,
|
||||
mTree, mAccessibleCache)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(XULTreeAccessible)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(XULTreeAccessible)
|
||||
NS_INTERFACE_MAP_END_INHERITING(Accessible)
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(XULTreeAccessible, Accessible)
|
||||
@@ -709,9 +709,12 @@ XULTreeItemAccessibleBase::~XULTreeItemAccessibleBase()
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED(XULTreeItemAccessibleBase, Accessible,
|
||||
mTree)
|
||||
|
||||
NS_IMPL_ISUPPORTS_CYCLE_COLLECTION_INHERITED(XULTreeItemAccessibleBase,
|
||||
Accessible,
|
||||
XULTreeItemAccessibleBase)
|
||||
NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(XULTreeItemAccessibleBase)
|
||||
NS_INTERFACE_TABLE_INHERITED(XULTreeItemAccessibleBase,
|
||||
XULTreeItemAccessibleBase)
|
||||
NS_INTERFACE_TABLE_TAIL_INHERITING(Accessible)
|
||||
NS_IMPL_ADDREF_INHERITED(XULTreeItemAccessibleBase, Accessible)
|
||||
NS_IMPL_RELEASE_INHERITED(XULTreeItemAccessibleBase, Accessible)
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// XULTreeItemAccessibleBase: Accessible
|
||||
@@ -1081,7 +1084,7 @@ NS_IMPL_CYCLE_COLLECTION_INHERITED(XULTreeItemAccessible,
|
||||
XULTreeItemAccessibleBase,
|
||||
mColumn)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(XULTreeItemAccessible)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(XULTreeItemAccessible)
|
||||
NS_INTERFACE_MAP_END_INHERITING(XULTreeItemAccessibleBase)
|
||||
NS_IMPL_ADDREF_INHERITED(XULTreeItemAccessible, XULTreeItemAccessibleBase)
|
||||
NS_IMPL_RELEASE_INHERITED(XULTreeItemAccessible, XULTreeItemAccessibleBase)
|
||||
|
||||
@@ -263,7 +263,7 @@ NS_IMPL_CYCLE_COLLECTION_INHERITED(XULTreeGridRowAccessible,
|
||||
XULTreeItemAccessibleBase,
|
||||
mAccessibleCache)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(XULTreeGridRowAccessible)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(XULTreeGridRowAccessible)
|
||||
NS_INTERFACE_MAP_END_INHERITING(XULTreeItemAccessibleBase)
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(XULTreeGridRowAccessible,
|
||||
@@ -447,7 +447,7 @@ XULTreeGridCellAccessible::~XULTreeGridCellAccessible()
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED(XULTreeGridCellAccessible, LeafAccessible,
|
||||
mTree, mColumn)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(XULTreeGridCellAccessible)
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(XULTreeGridCellAccessible)
|
||||
NS_INTERFACE_MAP_END_INHERITING(LeafAccessible)
|
||||
NS_IMPL_ADDREF_INHERITED(XULTreeGridCellAccessible, LeafAccessible)
|
||||
NS_IMPL_RELEASE_INHERITED(XULTreeGridCellAccessible, LeafAccessible)
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
'''Parses a given application.ini file and outputs the corresponding
|
||||
XULAppData structure as a C++ header file'''
|
||||
|
||||
import configparser
|
||||
import ConfigParser
|
||||
import sys
|
||||
|
||||
def main(output, file):
|
||||
config = configparser.RawConfigParser()
|
||||
config = ConfigParser.RawConfigParser()
|
||||
config.read(file)
|
||||
flags = set()
|
||||
try:
|
||||
@@ -27,7 +27,8 @@ def main(output, file):
|
||||
'App:id', 'Gecko:minversion', 'Gecko:maxversion')
|
||||
missing = [var for var in expected if var not in appdata]
|
||||
if missing:
|
||||
print("Missing values in %s: %s" % (file, ', '.join(missing)), file=sys.stderr)
|
||||
print >>sys.stderr, \
|
||||
"Missing values in %s: %s" % (file, ', '.join(missing))
|
||||
sys.exit(1)
|
||||
|
||||
if not 'Crash Reporter:serverurl' in appdata:
|
||||
@@ -56,4 +57,4 @@ if __name__ == '__main__':
|
||||
if len(sys.argv) != 1:
|
||||
main(sys.stdout, sys.argv[1])
|
||||
else:
|
||||
print("Usage: %s /path/to/application.ini" % sys.argv[0], file=sys.stderr)
|
||||
print >>sys.stderr, "Usage: %s /path/to/application.ini" % sys.argv[0]
|
||||
@@ -188,7 +188,7 @@ if test "$GNU_CC"; then
|
||||
|
||||
if test -z "$CLANG_CC"; then
|
||||
case "$CC_VERSION" in
|
||||
4.* | 5.* | 6.* | 7.* | 8.*)
|
||||
4.* | 5.* | 6.*)
|
||||
AC_MSG_ERROR([Unsupported GCC version.])
|
||||
;;
|
||||
*)
|
||||
|
||||
Vendored
-3
@@ -982,9 +982,6 @@ EOF
|
||||
k1om:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
loongarch64:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
m32r*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
|
||||
exit ;;
|
||||
|
||||
@@ -34,7 +34,7 @@ def symlink(source, link_name):
|
||||
def check_run(args):
|
||||
global DEBUG
|
||||
if DEBUG:
|
||||
print(' '.join(args), file=sys.stderr)
|
||||
print >> sys.stderr, ' '.join(args)
|
||||
r = subprocess.call(args)
|
||||
assert r == 0
|
||||
|
||||
@@ -43,11 +43,11 @@ def run_in(path, args):
|
||||
d = os.getcwd()
|
||||
global DEBUG
|
||||
if DEBUG:
|
||||
print('cd "%s"' % path, file=sys.stderr)
|
||||
print >> sys.stderr, 'cd "%s"' % path
|
||||
os.chdir(path)
|
||||
check_run(args)
|
||||
if DEBUG:
|
||||
print('cd "%s"' % d, file=sys.stderr)
|
||||
print >> sys.stderr, 'cd "%s"' % d
|
||||
os.chdir(d)
|
||||
|
||||
|
||||
@@ -377,7 +377,7 @@ if __name__ == "__main__":
|
||||
extra_cflags2 = ["-fPIC"]
|
||||
extra_cxxflags2 = ["-fPIC", "-static-libstdc++"]
|
||||
|
||||
if 'LD_LIBRARY_PATH' in os.environ:
|
||||
if os.environ.has_key('LD_LIBRARY_PATH'):
|
||||
os.environ['LD_LIBRARY_PATH'] = '%s/lib64/:%s' % (gcc_dir, os.environ['LD_LIBRARY_PATH']);
|
||||
else:
|
||||
os.environ['LD_LIBRARY_PATH'] = '%s/lib64/' % gcc_dir
|
||||
|
||||
+3
-3
@@ -81,9 +81,9 @@ def process_files(files, output_filename, digests, strip):
|
||||
short_file = short_file.lstrip('/')
|
||||
else:
|
||||
short_file = file
|
||||
print('%s %s %s %s' % (hash, digest,
|
||||
print >>output, '%s %s %s %s' % (hash, digest,
|
||||
os.path.getsize(file),
|
||||
short_file), file=output)
|
||||
short_file)
|
||||
|
||||
def setup_logging(level=logging.DEBUG):
|
||||
'''This function sets up the logging module using a speficiable logging
|
||||
@@ -140,7 +140,7 @@ def main():
|
||||
try:
|
||||
for digest in options.digests:
|
||||
hashlib.new(digest)
|
||||
except ValueError as ve:
|
||||
except ValueError, ve:
|
||||
logger.error('Could not create a "%s" hash object (%s)' %
|
||||
(digest, ve.args[0]))
|
||||
exit(1)
|
||||
|
||||
@@ -11,7 +11,7 @@ import logging
|
||||
import os
|
||||
import site
|
||||
import sys
|
||||
import urllib.request, urllib.error, urllib.parse
|
||||
import urllib2
|
||||
import difflib
|
||||
|
||||
FAILURE_CODE = 1
|
||||
@@ -40,10 +40,10 @@ def make_hg_url(hgHost, repoPath, protocol='https', revision=None,
|
||||
|
||||
def readConfig(configfile, keys=[], required=[]):
|
||||
c = {}
|
||||
exec(compile(open(configfile, "rb").read(), configfile, 'exec'), c)
|
||||
execfile(configfile, c)
|
||||
for k in keys:
|
||||
c = c[k]
|
||||
items = list(c.keys())
|
||||
items = c.keys()
|
||||
err = False
|
||||
for key in required:
|
||||
if key not in items:
|
||||
@@ -126,7 +126,7 @@ def get_mozconfig(path, options):
|
||||
else:
|
||||
url = make_hg_url(options.hghost, options.branch, 'http',
|
||||
options.revision, path)
|
||||
return urllib.request.urlopen(url).readlines()
|
||||
return urllib2.urlopen(url).readlines()
|
||||
|
||||
if __name__ == '__main__':
|
||||
from optparse import OptionParser
|
||||
|
||||
@@ -43,6 +43,8 @@ gyp_vars.update({
|
||||
'arm_neon': 0,
|
||||
'arm_neon_optional': 1,
|
||||
|
||||
'moz_webrtc_omx': 0,
|
||||
'moz_webrtc_mediacodec': 0,
|
||||
|
||||
# Turn off multi monitor screen share
|
||||
'multi_monitor_screenshare%' : 0,
|
||||
@@ -71,6 +73,8 @@ if CONFIG['ARM_ARCH']:
|
||||
if int(CONFIG['ARM_ARCH']) < 7:
|
||||
gyp_vars['armv7'] = 0
|
||||
gyp_vars['arm_neon_optional'] = 0
|
||||
elif os == 'Android':
|
||||
gyp_vars['armv7'] = 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
|
||||
|
||||
@@ -18,7 +18,7 @@ flavors = {
|
||||
'Linux': 'linux',
|
||||
'Darwin': 'mac',
|
||||
'SunOS': 'solaris',
|
||||
'kFreeBSD': 'freebsd',
|
||||
'GNU/kFreeBSD': 'freebsd',
|
||||
'DragonFly': 'dragonfly',
|
||||
'FreeBSD': 'freebsd',
|
||||
'NetBSD': 'netbsd',
|
||||
|
||||
+9
-14
@@ -12,7 +12,7 @@ import random
|
||||
import subprocess
|
||||
import sys
|
||||
import uuid
|
||||
import builtins
|
||||
import __builtin__
|
||||
|
||||
from types import ModuleType
|
||||
|
||||
@@ -170,16 +170,11 @@ def bootstrap(topsrcdir, mozilla_dir=None):
|
||||
if mozilla_dir is None:
|
||||
mozilla_dir = topsrcdir
|
||||
|
||||
# Ensure we are not running Python 2.
|
||||
# We put this check here so we generate a user-friendly error message
|
||||
# rather than a cryptic stack trace on module import.
|
||||
if sys.version_info[0] < 3 or sys.version_info[1] < 3:
|
||||
print('Python 3.3 or above is required to run mach.')
|
||||
print('You are running Python', platform.python_version())
|
||||
sys.exit(1)
|
||||
# This sanity check is overkill, but why not?
|
||||
if sys.version_info[0] > 3:
|
||||
print('Python 4.x or higher not supported. Use Python 3 instead.')
|
||||
# Ensure we are running Python 2.7+. We put this check here so we generate a
|
||||
# user-friendly error message rather than a cryptic stack trace on module
|
||||
# import.
|
||||
if sys.version_info[0] != 2 or sys.version_info[1] < 7:
|
||||
print('Python 2.7 or above (but not Python 3) is required to run mach.')
|
||||
print('You are running Python', platform.python_version())
|
||||
sys.exit(1)
|
||||
|
||||
@@ -340,7 +335,7 @@ def bootstrap(topsrcdir, mozilla_dir=None):
|
||||
# always load local repository configuration
|
||||
mach.settings_paths.append(mozilla_dir)
|
||||
|
||||
for category, meta in list(CATEGORIES.items()):
|
||||
for category, meta in CATEGORIES.items():
|
||||
mach.define_category(category, meta['short'], meta['long'],
|
||||
meta['priority'])
|
||||
|
||||
@@ -365,7 +360,7 @@ class ImportHook(object):
|
||||
self._modules = set()
|
||||
|
||||
def __call__(self, name, globals=None, locals=None, fromlist=None,
|
||||
level=0):
|
||||
level=-1):
|
||||
# name might be a relative import. Instead of figuring out what that
|
||||
# resolves to, which is complex, just rely on the real import.
|
||||
# Since we don't know the full module name, we can't check sys.modules,
|
||||
@@ -414,4 +409,4 @@ class ImportHook(object):
|
||||
|
||||
|
||||
# Install our hook
|
||||
builtins.__import__ = ImportHook(builtins.__import__)
|
||||
__builtin__.__import__ = ImportHook(__builtin__.__import__)
|
||||
@@ -11,7 +11,7 @@
|
||||
# _declare_exceptions template, and add it to the return statement. Then
|
||||
# destructure in the assignment below the function declaration.
|
||||
@template
|
||||
@imports(_from='builtins', _import='Exception')
|
||||
@imports(_from='__builtin__', _import='Exception')
|
||||
def _declare_exceptions():
|
||||
class FatalCheckError(Exception):
|
||||
'''An exception to throw from a function decorated with @checking.
|
||||
|
||||
@@ -133,8 +133,7 @@ option(env='PYTHON', nargs=1, help='Python interpreter')
|
||||
@imports(_from='mozbuild.configure.util', _import='LineIO')
|
||||
@imports(_from='mozbuild.virtualenv', _import='VirtualenvManager')
|
||||
@imports(_from='mozbuild.virtualenv', _import='verify_python_version')
|
||||
@imports(_from='mozpack.path', _import='normsep')
|
||||
@imports('sysconfig')
|
||||
@imports('distutils.sysconfig')
|
||||
def virtualenv_python(env_python, build_env, mozconfig, help):
|
||||
if help:
|
||||
return
|
||||
@@ -166,9 +165,6 @@ def virtualenv_python(env_python, build_env, mozconfig, help):
|
||||
os.path.join(topobjdir, '_virtualenv'), out,
|
||||
os.path.join(topsrcdir, 'build', 'virtualenv_packages.txt'))
|
||||
|
||||
if normsep(sys.executable) == normsep(manager.python_path):
|
||||
return normsep(manager.python_path)
|
||||
|
||||
if python:
|
||||
# If we're not in the virtualenv, we need the which module for
|
||||
# find_program.
|
||||
@@ -197,10 +193,10 @@ def virtualenv_python(env_python, build_env, mozconfig, help):
|
||||
sys.exit(subprocess.call([python] + sys.argv))
|
||||
|
||||
# We are now in the virtualenv
|
||||
if not sysconfig.get_path("purelib"):
|
||||
if not distutils.sysconfig.get_python_lib():
|
||||
die('Could not determine python site packages directory')
|
||||
|
||||
return normsep(python)
|
||||
return python
|
||||
|
||||
set_config('PYTHON', virtualenv_python)
|
||||
add_old_configure_assignment('PYTHON', virtualenv_python)
|
||||
@@ -216,7 +212,7 @@ def early_options():
|
||||
def early_options():
|
||||
return set(
|
||||
option.env
|
||||
for option in __sandbox__._options.values()
|
||||
for option in __sandbox__._options.itervalues()
|
||||
if option.env
|
||||
)
|
||||
return early_options
|
||||
@@ -244,17 +240,17 @@ def mozconfig_options(mozconfig, help):
|
||||
log.info(' %s' % arg)
|
||||
helper.add(arg, origin='mozconfig', args=helper._args)
|
||||
|
||||
for key, value in mozconfig['env']['added'].items():
|
||||
for key, value in mozconfig['env']['added'].iteritems():
|
||||
add(key, value)
|
||||
os.environ[key] = value
|
||||
for key, (_, value) in mozconfig['env']['modified'].items():
|
||||
for key, (_, value) in mozconfig['env']['modified'].iteritems():
|
||||
add(key, value)
|
||||
os.environ[key] = value
|
||||
for key, value in mozconfig['vars']['added'].items():
|
||||
for key, value in mozconfig['vars']['added'].iteritems():
|
||||
# mozconfig_loader adds _IS_SET variables that are irrelevant
|
||||
if not key.endswith('_IS_SET'):
|
||||
add(key, value)
|
||||
for key, (_, value) in mozconfig['vars']['modified'].items():
|
||||
for key, (_, value) in mozconfig['vars']['modified'].iteritems():
|
||||
add(key, value)
|
||||
|
||||
|
||||
@@ -294,7 +290,6 @@ option('--target', nargs=1,
|
||||
@imports(_from='mozbuild.configure.constants', _import='Endianness')
|
||||
@imports(_from='mozbuild.configure.constants', _import='Kernel')
|
||||
@imports(_from='mozbuild.configure.constants', _import='OS')
|
||||
@imports(_from='mozbuild.configure.constants', _import='OS_and_Kernel')
|
||||
def split_triplet(triplet):
|
||||
# The standard triplet is defined as
|
||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||
@@ -344,7 +339,7 @@ def split_triplet(triplet):
|
||||
if cpu.endswith('86') or (cpu.startswith('i') and '86' in cpu):
|
||||
canonical_cpu = 'x86'
|
||||
endianness = 'little'
|
||||
elif cpu == 'x86_64':
|
||||
elif cpu in ('x86_64', 'ia64'):
|
||||
canonical_cpu = cpu
|
||||
endianness = 'little'
|
||||
elif cpu in ('s390', 's390x'):
|
||||
@@ -380,9 +375,6 @@ def split_triplet(triplet):
|
||||
elif cpu.startswith('aarch64'):
|
||||
canonical_cpu = 'aarch64'
|
||||
endianness = 'little'
|
||||
elif cpu.startswith('loongarch64'):
|
||||
canonical_cpu = 'loongarch64'
|
||||
endianness = 'little'
|
||||
else:
|
||||
die('Unknown CPU type: %s' % cpu)
|
||||
|
||||
@@ -390,8 +382,8 @@ def split_triplet(triplet):
|
||||
alias=triplet,
|
||||
cpu=CPU(canonical_cpu),
|
||||
bitness=CPU_bitness[canonical_cpu],
|
||||
kernel=OS_and_Kernel(canonical_kernel),
|
||||
os=OS_and_Kernel(canonical_os),
|
||||
kernel=Kernel(canonical_kernel),
|
||||
os=OS(canonical_os),
|
||||
endianness=Endianness(endianness),
|
||||
raw_cpu=cpu,
|
||||
raw_os=os,
|
||||
@@ -405,8 +397,7 @@ def split_triplet(triplet):
|
||||
def config_sub(shell, triplet):
|
||||
config_sub = os.path.join(os.path.dirname(__file__), '..',
|
||||
'autoconf', 'config.sub')
|
||||
return subprocess.check_output([shell, config_sub, triplet],
|
||||
universal_newlines=True).strip()
|
||||
return subprocess.check_output([shell, config_sub, triplet]).strip()
|
||||
|
||||
|
||||
@depends('--host', shell)
|
||||
@@ -416,8 +407,7 @@ def host(value, shell):
|
||||
if not value:
|
||||
config_guess = os.path.join(os.path.dirname(__file__), '..',
|
||||
'autoconf', 'config.guess')
|
||||
host = subprocess.check_output([shell, config_guess],
|
||||
universal_newlines=True).strip()
|
||||
host = subprocess.check_output([shell, config_guess]).strip()
|
||||
else:
|
||||
host = value[0]
|
||||
|
||||
@@ -768,7 +758,7 @@ def enabled_in_nightly(milestone, _):
|
||||
def all_configure_options(_):
|
||||
result = []
|
||||
previous = None
|
||||
for option in __sandbox__._options.values():
|
||||
for option in __sandbox__._options.itervalues():
|
||||
# __sandbox__._options contains items for both option.name and
|
||||
# option.env. But it's also an OrderedDict, meaning both are
|
||||
# consecutive.
|
||||
|
||||
@@ -11,14 +11,9 @@ def moz_jemalloc4(value):
|
||||
|
||||
option('--enable-jemalloc', env='MOZ_MEMORY',
|
||||
help='Replace system memory allocator with jemalloc')
|
||||
option('--enable-mimalloc',
|
||||
help='Replace system memory allocator with mimalloc')
|
||||
|
||||
@depends('--enable-jemalloc', '--enable-mimalloc', target, build_project,
|
||||
c_compiler)
|
||||
def jemalloc(value, mimalloc, target, build_project, c_compiler):
|
||||
if value and mimalloc:
|
||||
die('--enable-jemalloc and --enable-mimalloc cannot be used together')
|
||||
@depends('--enable-jemalloc', target, build_project, c_compiler)
|
||||
def jemalloc(value, target, build_project, c_compiler):
|
||||
if value.origin != 'default':
|
||||
return bool(value) or None
|
||||
|
||||
@@ -35,38 +30,11 @@ def jemalloc(value, mimalloc, target, build_project, c_compiler):
|
||||
if target.kernel == 'Linux':
|
||||
return True
|
||||
|
||||
@depends('--enable-mimalloc', '--enable-jemalloc', target)
|
||||
def mimalloc(value, jemalloc, target):
|
||||
if value and jemalloc:
|
||||
die('--enable-jemalloc and --enable-mimalloc cannot be used together')
|
||||
if value.origin != 'default':
|
||||
if not value:
|
||||
return None
|
||||
if target.kernel not in ('Darwin', 'WINNT', 'Linux', 'kFreeBSD', 'FreeBSD',
|
||||
'NetBSD', 'OpenBSD', 'DragonFly'):
|
||||
die('--enable-mimalloc is not supported on %s', target.kernel)
|
||||
return True
|
||||
|
||||
@depends('--enable-mimalloc', '--enable-jemalloc')
|
||||
def mimalloc_requires_disable(mimalloc, jemalloc):
|
||||
if not mimalloc:
|
||||
return
|
||||
if jemalloc or jemalloc.origin not in ('command-line', 'mozconfig'):
|
||||
die('--enable-mimalloc requires --disable-jemalloc to be passed explicitly')
|
||||
|
||||
|
||||
set_config('MOZ_MEMORY', jemalloc)
|
||||
set_define('MOZ_MEMORY', jemalloc)
|
||||
add_old_configure_assignment('MOZ_MEMORY', jemalloc)
|
||||
|
||||
@depends(mimalloc)
|
||||
def mimalloc_config(mimalloc):
|
||||
return True if mimalloc else False
|
||||
|
||||
set_config('MOZ_MIMALLOC', mimalloc_config)
|
||||
set_define('MOZ_MIMALLOC', mimalloc)
|
||||
add_old_configure_assignment('MOZ_MIMALLOC', mimalloc_config)
|
||||
|
||||
|
||||
# Because --enable-jemalloc doesn't use a default because of the dependency
|
||||
# on the target, we can't use a js_option for it to propagate to js/src
|
||||
|
||||
@@ -3,6 +3,13 @@
|
||||
# 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/.
|
||||
|
||||
@imports('codecs')
|
||||
@imports('sys')
|
||||
def encoded_open(path, mode):
|
||||
encoding = 'mbcs' if sys.platform == 'win32' else 'utf-8'
|
||||
return codecs.open(path, mode, encoding)
|
||||
|
||||
|
||||
m4 = check_prog(
|
||||
"M4",
|
||||
(
|
||||
@@ -24,10 +31,8 @@ m4 = check_prog(
|
||||
@imports(_from='os.path', _import='exists')
|
||||
@imports(_from='mozbuild.shellutil', _import='quote')
|
||||
@imports(_from='os', _import='environ')
|
||||
@imports(_from='mozbuild.getencoding', _import='getencoding')
|
||||
def prepare_configure(old_configure, mozconfig, awk, m4, build_env, shell,
|
||||
old_configure_assignments, build_project):
|
||||
encoding = getencoding()
|
||||
# os.path.abspath in the sandbox will ensure forward slashes on Windows,
|
||||
# which is actually necessary because this path actually ends up literally
|
||||
# as $0, and backslashes there breaks autoconf's detection of the source
|
||||
@@ -38,6 +43,7 @@ def prepare_configure(old_configure, mozconfig, awk, m4, build_env, shell,
|
||||
if not old_configure_dir.endswith('/js/src'):
|
||||
old_configure = os.path.join(old_configure_dir, 'js', 'src',
|
||||
os.path.basename(old_configure))
|
||||
|
||||
refresh = True
|
||||
if exists(old_configure):
|
||||
mtime = getmtime(old_configure)
|
||||
@@ -61,21 +67,25 @@ def prepare_configure(old_configure, mozconfig, awk, m4, build_env, shell,
|
||||
env['AWK'] = awk
|
||||
env['AC_MACRODIR'] = os.path.join(build_env.topsrcdir, 'build', 'autoconf')
|
||||
my_env = env
|
||||
# Handle Python 2.7 not allowing unicode in the environment on Windows
|
||||
if sys.platform == 'win32':
|
||||
my_env = dict()
|
||||
for e in env:
|
||||
my_env[e.encode('ascii','ignore')] = env[e].encode('ascii','ignore')
|
||||
script = subprocess.check_output([
|
||||
shell, autoconf,
|
||||
'--localdir=%s' % os.path.dirname(old_configure),
|
||||
old_configure + '.in'], env=my_env)
|
||||
script = script.decode(encoding, errors='replace')
|
||||
|
||||
# Make old-configure append to config.log, where we put our own log.
|
||||
# This could be done with a m4 macro, but it's way easier this way
|
||||
script = script.replace('>./config.log', '>>./config.log')
|
||||
|
||||
with open(old_configure, 'w', encoding=encoding, errors='replace') as fh:
|
||||
with open(old_configure, 'wb') as fh:
|
||||
fh.write(script)
|
||||
|
||||
cmd = [shell, old_configure]
|
||||
with open('old-configure.vars', 'w', encoding=encoding, errors='replace') as out:
|
||||
with encoded_open('old-configure.vars', 'w') as out:
|
||||
log.debug('Injecting the following to old-configure:')
|
||||
def inject(command):
|
||||
print(command, file=out)
|
||||
@@ -117,6 +127,7 @@ def old_configure_options(*options):
|
||||
'--enable-alsa',
|
||||
'--enable-appcompat-guid',
|
||||
'--enable-av1',
|
||||
'--enable-jxl',
|
||||
'--enable-b2g-bt',
|
||||
'--enable-b2g-camera',
|
||||
'--enable-b2g-ril',
|
||||
@@ -142,7 +153,10 @@ def old_configure_options(*options):
|
||||
'--enable-faststripe',
|
||||
'--enable-feeds',
|
||||
'--enable-gamepad',
|
||||
'--enable-gconf',
|
||||
'--enable-gczeal',
|
||||
'--enable-gio',
|
||||
'--enable-gnomeui',
|
||||
'--enable-gold',
|
||||
'--enable-hardware-aec-ns',
|
||||
'--enable-icf',
|
||||
@@ -152,7 +166,6 @@ def old_configure_options(*options):
|
||||
'--enable-jitspew',
|
||||
'--enable-js-lto',
|
||||
'--enable-leak-sanitizer',
|
||||
'--enable-libaom',
|
||||
'--enable-libjpeg-turbo',
|
||||
'--enable-libproxy',
|
||||
'--enable-llvm-hacks',
|
||||
@@ -164,7 +177,6 @@ def old_configure_options(*options):
|
||||
'--enable-negotiateauth',
|
||||
'--enable-nfc',
|
||||
'--enable-npapi',
|
||||
'--enable-npapi-gtk2',
|
||||
'--enable-nspr-build',
|
||||
'--enable-official-branding',
|
||||
'--enable-official-vendor',
|
||||
@@ -286,11 +298,8 @@ def old_configure_options(*options):
|
||||
@imports('subprocess')
|
||||
@imports('sys')
|
||||
@imports(_from='mozbuild.shellutil', _import='quote')
|
||||
@imports(_from='mozbuild.util', _import='exec_')
|
||||
@imports(_from='mozbuild.getencoding', _import='getencoding')
|
||||
def old_configure(prepare_configure, extra_old_configure_args, all_options,
|
||||
*options):
|
||||
encoding = getencoding()
|
||||
cmd = prepare_configure
|
||||
|
||||
# old-configure only supports the options listed in @old_configure_options
|
||||
@@ -327,7 +336,7 @@ def old_configure(prepare_configure, extra_old_configure_args, all_options,
|
||||
ret = subprocess.call(cmd)
|
||||
if ret:
|
||||
with log.queue_debug():
|
||||
with open('config.log', 'r', encoding=encoding, errors='replace') as fh:
|
||||
with encoded_open('config.log', 'r') as fh:
|
||||
fh.seek(log_size)
|
||||
for line in fh:
|
||||
log.debug(line.rstrip())
|
||||
@@ -335,12 +344,12 @@ def old_configure(prepare_configure, extra_old_configure_args, all_options,
|
||||
sys.exit(ret)
|
||||
|
||||
raw_config = {}
|
||||
with open('config.data', 'r', encoding=encoding, errors='replace') as fh:
|
||||
with encoded_open('config.data', 'r') as fh:
|
||||
code = compile(fh.read(), 'config.data', 'exec')
|
||||
# Every variation of the exec() function I tried led to:
|
||||
# SyntaxError: unqualified exec is not allowed in function 'main' it
|
||||
# contains a nested function with free variables
|
||||
exec_(code, raw_config)
|
||||
exec code in raw_config
|
||||
|
||||
# Ensure all the flags known to old-configure appear in the
|
||||
# @old_configure_options above.
|
||||
@@ -374,9 +383,9 @@ def set_old_configure_define(name, value):
|
||||
def post_old_configure(raw_config):
|
||||
for k, v in raw_config['substs']:
|
||||
set_old_configure_config(
|
||||
k[1:-1], v[1:-1] if isinstance(v, str) else v)
|
||||
k[1:-1], v[1:-1] if isinstance(v, types.StringTypes) else v)
|
||||
|
||||
for k, v in dict(raw_config['defines']).items():
|
||||
for k, v in dict(raw_config['defines']).iteritems():
|
||||
set_old_configure_define(k[1:-1], v[1:-1])
|
||||
|
||||
set_old_configure_config('non_global_defines',
|
||||
|
||||
@@ -61,44 +61,6 @@ set_config('HAVE_YASM', have_yasm)
|
||||
# Until the YASM variable is not necessary in old-configure.
|
||||
add_old_configure_assignment('YASM', have_yasm)
|
||||
|
||||
# nasm detection
|
||||
# ==============================================================
|
||||
nasm = check_prog('NASM', ['nasm'], allow_missing=True)
|
||||
|
||||
@depends_if(nasm)
|
||||
@checking('nasm version')
|
||||
def nasm_version(nasm):
|
||||
version = check_cmd_output(
|
||||
nasm, '-v',
|
||||
onerror=lambda: die('Failed to get nasm version.')
|
||||
).splitlines()[0].split()[2]
|
||||
return Version(version)
|
||||
|
||||
@depends(nasm, nasm_version)
|
||||
def have_nasm(nasm, version):
|
||||
if nasm and version >= Version('2.14'):
|
||||
return True
|
||||
|
||||
set_config('HAVE_NASM', have_nasm)
|
||||
|
||||
@depends(have_nasm, target)
|
||||
def nasm_asflags(have_nasm, target):
|
||||
if have_nasm:
|
||||
asflags = {
|
||||
('OSX', 'x86'): '-f macho32',
|
||||
('OSX', 'x86_64'): '-f macho64',
|
||||
('WINNT', 'x86'): '-f win32',
|
||||
('WINNT', 'x86_64'): '-f win64',
|
||||
}.get((target.os, target.cpu), None)
|
||||
if asflags is None:
|
||||
if target.cpu == 'x86':
|
||||
asflags = '-f elf32'
|
||||
elif target.cpu == 'x86_64':
|
||||
asflags = '-f elf64'
|
||||
return asflags
|
||||
|
||||
set_config('NASM_ASFLAGS', nasm_asflags)
|
||||
|
||||
# MacOS deployment target version
|
||||
# ==============================================================
|
||||
# This needs to happen before any compilation test is done.
|
||||
@@ -274,7 +236,7 @@ def get_compiler_info(compiler, language):
|
||||
('CPU', CPU_preprocessor_checks),
|
||||
('KERNEL', kernel_preprocessor_checks),
|
||||
):
|
||||
for n, (value, condition) in enumerate(preprocessor_checks.items()):
|
||||
for n, (value, condition) in enumerate(preprocessor_checks.iteritems()):
|
||||
check += dedent('''\
|
||||
#%(if)s %(condition)s
|
||||
%%%(name)s "%(value)s"
|
||||
@@ -307,7 +269,7 @@ def get_compiler_info(compiler, language):
|
||||
# have non-ASCII characters. Treat the output as bytearray.
|
||||
data = {}
|
||||
for line in result.splitlines():
|
||||
if line.startswith('%'):
|
||||
if line.startswith(b'%'):
|
||||
k, _, v = line.partition(' ')
|
||||
k = k.lstrip('%')
|
||||
data[k] = v.replace(' ', '').lstrip('"').rstrip('"')
|
||||
@@ -435,11 +397,10 @@ def check_compiler(compiler, language, target):
|
||||
@imports('json')
|
||||
@imports('subprocess')
|
||||
@imports('sys')
|
||||
@imports(_from='locale', _import='getpreferredencoding')
|
||||
def get_vc_paths(topsrcdir):
|
||||
encoding = getpreferredencoding(False)
|
||||
def vswhere(args):
|
||||
return json.loads(subprocess.check_output([os.path.join(topsrcdir, 'build/win32/vswhere.exe'), '-format', 'json'] + args).decode(encoding, errors='replace'))
|
||||
encoding = 'mbcs' if sys.platform == 'win32' else 'utf-8'
|
||||
return json.loads(subprocess.check_output([os.path.join(topsrcdir, 'build/win32/vswhere.exe'), '-format', 'json'] + args).decode(encoding, 'replace'))
|
||||
|
||||
# Can't pass -requires with -legacy, so query each separately.
|
||||
# Legacy versions first (VS2015)
|
||||
@@ -458,7 +419,7 @@ def get_vc_paths(topsrcdir):
|
||||
# Then VS2017 and newer.
|
||||
for install in vswhere(['-requires', 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64']):
|
||||
path = install['installationPath']
|
||||
tools_version = open(os.path.join(path, r'VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt'), 'r', encoding=encoding, errors='replace').read().strip()
|
||||
tools_version = open(os.path.join(path, r'VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt'), 'rb').read().strip()
|
||||
tools_path = os.path.join(path, r'VC\Tools\MSVC', tools_version, r'bin\HostX64')
|
||||
yield (Version(install['installationVersion']), {
|
||||
'x64': [os.path.join(tools_path, 'x64')],
|
||||
@@ -640,7 +601,7 @@ def compiler(language, host_or_target, c_compiler=None, other_compiler=None,
|
||||
if cross_compiling and other_compiler.type == 'clang':
|
||||
return namespace(**{
|
||||
k: [] if k == 'flags' else v
|
||||
for k, v in other_compiler.__dict__.items()
|
||||
for k, v in other_compiler.__dict__.iteritems()
|
||||
})
|
||||
|
||||
# Normally, we'd use `var` instead of `_var`, but the interaction with
|
||||
@@ -734,9 +695,9 @@ def compiler(language, host_or_target, c_compiler=None, other_compiler=None,
|
||||
# Check the compiler version here instead of in `compiler_version` so
|
||||
# that the `checking` message doesn't pretend the compiler can be used
|
||||
# to then bail out one line later.
|
||||
if info.type == 'gcc' and info.version < '9.1.0':
|
||||
if info.type == 'gcc' and info.version < '7.1.0':
|
||||
raise FatalCheckError(
|
||||
'Only GCC 9.1 or newer is supported (found version %s).'
|
||||
'Only GCC 7.1 or newer is supported (found version %s).'
|
||||
% info.version)
|
||||
|
||||
# If you want to bump the version check here search for
|
||||
|
||||
@@ -25,22 +25,15 @@ def configure_error(message):
|
||||
@imports('sys')
|
||||
@imports(_from='mozbuild.configure.util', _import='LineIO')
|
||||
@imports(_from='mozbuild.shellutil', _import='quote')
|
||||
@imports(_from='mozbuild.getencoding', _import='getencoding')
|
||||
def check_cmd_output(*args, **kwargs):
|
||||
encoding = getencoding()
|
||||
onerror = kwargs.pop('onerror', None)
|
||||
|
||||
with log.queue_debug():
|
||||
log.debug('Executing: `%s`', quote(*args))
|
||||
proc = subprocess.Popen(args, stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE)
|
||||
|
||||
stdout, stderr = proc.communicate()
|
||||
retcode = proc.wait()
|
||||
|
||||
stdout = stdout.decode(encoding, errors='replace')
|
||||
stderr = stderr.decode(encoding, errors='replace')
|
||||
|
||||
if retcode == 0:
|
||||
return stdout
|
||||
|
||||
@@ -77,7 +70,7 @@ def windows_binary_type(path):
|
||||
Returns WindowsBinaryType constant.
|
||||
"""
|
||||
GetBinaryTypeW = ctypes.windll.kernel32.GetBinaryTypeW
|
||||
GetBinaryTypeW.argtypes = [wintypes.LPWSTR, ctypes.POINTER(wintypes.DWORD)]
|
||||
GetBinaryTypeW.argtypes = [wintypes.LPWSTR, wintypes.POINTER(wintypes.DWORD)]
|
||||
GetBinaryTypeW.restype = wintypes.BOOL
|
||||
|
||||
bin_type = wintypes.DWORD()
|
||||
@@ -239,7 +232,7 @@ def unique_list(l):
|
||||
# ('19.0', 'arm', r'C:\...\amd64_arm\cl.exe')
|
||||
# ('19.0', 'x64', r'C:\...\amd64\cl.exe')
|
||||
# ('19.0', 'x86', r'C:\...\amd64_x86\cl.exe')
|
||||
@imports(_import='winreg', _as='winreg')
|
||||
@imports(_import='_winreg', _as='winreg')
|
||||
@imports(_from='__builtin__', _import='WindowsError')
|
||||
@imports(_from='fnmatch', _import='fnmatch')
|
||||
def get_registry_values(pattern):
|
||||
@@ -302,7 +295,7 @@ def get_registry_values(pattern):
|
||||
keys = next_keys
|
||||
|
||||
|
||||
@imports(_from='mozbuild.version', _import='RichVersion', _as='_Version')
|
||||
@imports(_from='mozbuild.configure.util', _import='Version', _as='_Version')
|
||||
def Version(v):
|
||||
'A version number that can be compared usefully.'
|
||||
return _Version(v)
|
||||
|
||||
@@ -408,12 +408,9 @@ mt = check_prog('MT', depends_win()(lambda: ('mt.exe',)), input='MT',
|
||||
@depends_win(mt)
|
||||
@checking('whether MT is really Microsoft Manifest Tool', lambda x: bool(x))
|
||||
@imports('subprocess')
|
||||
@imports(_from='locale', _import='getpreferredencoding')
|
||||
def valid_mt(path):
|
||||
encoding = getpreferredencoding(False)
|
||||
try:
|
||||
out = subprocess.check_output([path])
|
||||
out = out.decode(encoding, errors='replace').splitlines()
|
||||
out = subprocess.check_output([path]).splitlines()
|
||||
out = '\n'.join(l for l in out
|
||||
if 'Microsoft (R) Manifest Tool' in l)
|
||||
if out:
|
||||
|
||||
+13
-13
@@ -58,7 +58,7 @@ def runUtil(util, args, inputdata = None):
|
||||
|
||||
|
||||
def createRandomFile(randomFile):
|
||||
for count in range(0, 2048):
|
||||
for count in xrange(0, 2048):
|
||||
randomFile.write(chr(random.randint(0, 255)))
|
||||
|
||||
|
||||
@@ -125,7 +125,7 @@ def createSSLServerCertificate(build, srcDir):
|
||||
iterator = iter(locations)
|
||||
|
||||
# Skips the first entry, I don't know why: bug 879740
|
||||
next(iterator)
|
||||
iterator.next()
|
||||
|
||||
locationsParam = ""
|
||||
firstLocation = ""
|
||||
@@ -148,7 +148,7 @@ def createSSLServerCertificate(build, srcDir):
|
||||
firstLocation = loc.host
|
||||
|
||||
if not firstLocation:
|
||||
print("Nothing to generate, no automatic secure hosts specified")
|
||||
print "Nothing to generate, no automatic secure hosts specified"
|
||||
else:
|
||||
createRandomFile(rndfile)
|
||||
|
||||
@@ -162,7 +162,7 @@ def createSSLServerCertificate(build, srcDir):
|
||||
return 0
|
||||
|
||||
if len(sys.argv) == 1:
|
||||
print("Specify --gen-server or --gen-ca")
|
||||
print "Specify --gen-server or --gen-ca"
|
||||
sys.exit(1)
|
||||
|
||||
build = MozbuildObject.from_environment()
|
||||
@@ -170,23 +170,23 @@ certdir = os.path.join(build.topsrcdir, "build", "pgo", "certs")
|
||||
if sys.argv[1] == "--gen-server":
|
||||
certificateStatus = createSSLServerCertificate(build, certdir)
|
||||
if certificateStatus:
|
||||
print("TEST-UNEXPECTED-FAIL | SSL Server Certificate generation")
|
||||
print "TEST-UNEXPECTED-FAIL | SSL Server Certificate generation"
|
||||
|
||||
sys.exit(certificateStatus)
|
||||
|
||||
if sys.argv[1] == "--gen-ca":
|
||||
certificateStatus = createCertificateAuthority(build, certdir)
|
||||
if certificateStatus:
|
||||
print("TEST-UNEXPECTED-FAIL | Certificate Authority generation")
|
||||
print "TEST-UNEXPECTED-FAIL | Certificate Authority generation"
|
||||
else:
|
||||
print("\n\n")
|
||||
print("===================================================")
|
||||
print(" IMPORTANT:")
|
||||
print(" To use this new certificate authority in tests")
|
||||
print(" run 'make' at testing/mochitest")
|
||||
print("===================================================")
|
||||
print "\n\n"
|
||||
print "==================================================="
|
||||
print " IMPORTANT:"
|
||||
print " To use this new certificate authority in tests"
|
||||
print " run 'make' at testing/mochitest"
|
||||
print "==================================================="
|
||||
|
||||
sys.exit(certificateStatus)
|
||||
|
||||
print("Invalid option specified")
|
||||
print "Invalid option specified"
|
||||
sys.exit(1)
|
||||
@@ -88,7 +88,7 @@ var decompressedJQuery = function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(par
|
||||
for documentation and information on getting the source.
|
||||
*/
|
||||
|
||||
var decompressedDojo = function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('if(V z=="1k"){(B(){if(V D["1o"]=="1k"){D.1o={}}if((!D["1z"])||(!1z["ca"])){D.1z={}}A cn=["rA","rz","1K","ry","rx","9f","rw","rv","ru","rt","rs","rr","rq","ro","rn","rm"];A i=0,24;1s(24=cn[i++]){if(!1z[24]){1z[24]=B(){}}}if(V D["z"]=="1k"){D.z={}}z.1W=D;A d3={im:U,rl:U,rk:"",rj:"",ri:"",rh:K,rg:U};R(A 8z in d3){if(V 1o[8z]=="1k"){1o[8z]=d3[8z]}}A jK=["rf","rd","rc","rb"];A t;1s(t=jK.3a()){z["is"+t]=U}})();z.8h=1o.8h;z.cY={jJ:0,jI:9,jH:0,jG:"",jF:2V("$ra: r9 $".1f(/[0-9]+/)[0]),2i:B(){4G(z.cY){C jJ+"."+jI+"."+jH+jG+" ("+jF+")"}}};z.d1=B(jE,jD,1V){A 2h=1V||z.1W;R(A i=0,p;2h&&(p=jE[i]);i++){2h=(p in 2h?2h[p]:(jD?2h[p]={}:1k))}C 2h};z.88=B(jC,jA,jB){A d2=jC.1A("."),p=d2.8q(),M=z.d1(d2,K,jB);C(M&&p?(M[p]=jA):1k)};z.6q=B(jz,jy,jx){C z.d1(jz.1A("."),jy,jx)};z.r8=B(jw,M){C!!z.6q(jw,U,M)};z["3u"]=B(d0){C z.1W.3u?z.1W.3u(d0):3u(d0)};z.ia=B(jv,cZ,cX){A 8y="r7: "+jv;if(cZ){8y+=" "+cZ}if(cX){8y+=" -- r6 be r5 in cY: "+cX}1z.1K(8y)};z.r4=B(ju,cW){A cV="r3: "+ju+" -- r2 r1 4F r0 qZ qY.";if(cW){cV+=" "+cW}1z.1K(cV)};(B(){A cR={53:{},6p:0,1h:{},8k:{z:{1p:"z",1Z:"."},cU:{1p:"cU",1Z:"../qX/cU"},cT:{1p:"cT",1Z:"cT"}},cN:B(cS){A mp=D.8k;C jp(mp[cS]&&mp[cS].1Z)},jk:B(8x){A mp=D.8k;if(D.cN(8x)){C mp[8x].1Z}C 8x},8v:[],6t:U,56:[],8t:[],8u:U};R(A cQ in cR){z[cQ]=cR[cQ]}})();z.jg=B(8w,cP,cb){A 1g=(((8w.2s(0)=="/"||8w.1f(/^\\w+:/)))?"":D.51)+8w;if(1o.jt&&z.c8){1g+="?"+67(1o.jt).2f(/\\W+/g,"")}1u{C!cP?D.cO(1g,cb):D.jq(1g,cP,cb)}1y(e){1z.1K(e);C U}};z.cO=B(1g,cb){if(D.8v[1g]){C K}A 6u=D.iR(1g,K);if(!6u){C U}D.8v[1g]=K;D.8v.Y(1g);if(cb){6u="("+6u+")"}A jr=z["3u"](6u+"\\r\\n//@ qW="+1g);if(cb){cb(jr)}C K};z.jq=B(1g,jo,cb){A ok=U;1u{ok=D.cO(1g,cb)}1y(e){1z.1K("qV je ",1g," 4G 9f: ",e)}C jp(ok&&D.53[jo])};z.6m=B(){D.8u=K;D.6t=K;A 57=D.56;D.56=[];R(A x=0;x<57.G;x++){57[x]()}D.8u=U;if(z.6t&&z.6p==0&&D.56.G>0){z.8s()}};z.ck=B(){A 57=D.8t;1s(57.G){(57.8q())()}};z.qU=B(M,jn){A d=z;if(P.G==1){d.56.Y(M)}I{if(P.G>1){d.56.Y(B(){M[jn]()})}}if(d.6t&&d.6p==0&&!d.8u){d.8s()}};z.dW=B(M,jm){A d=z;if(P.G==1){d.8t.Y(M)}I{if(P.G>1){d.8t.Y(B(){M[jm]()})}}};z.iM=B(){if(D.6t){C}if(D.6p>0){1z.1K("qT qS in qR!");C}z.8s()};z.8s=B(){if(V 5c=="8b"||(1o["qQ"]&&z.2M)){5c("z.6m();",0)}I{z.6m()}};z.cF=B(jl){A 4v=jl.1A(".");R(A i=4v.G;i>0;i--){A 8r=4v.2w(0,i).22(".");if((i==1)&&!D.cN(8r)){4v[0]="../"+4v[0]}I{A cM=D.jk(8r);if(cM!=8r){4v.3S(0,i,cM);3f}}}C 4v};z.jj=U;z.8m=B(2T,qP,55){55=D.jj||55;A 54=D.53[2T];if(54){C 54}A cL=2T.1A(".");A 3L=D.cF(2T);A jh=((3L[0].2s(0)!="/")&&!3L[0].1f(/^\\w+:/));A ji=3L[3L.G-1];A 3m;if(ji=="*"){2T=cL.2w(0,-1).22(".");3L.8q();3m=3L.22("/")+"/"+(1o["qO"]||"qN")+".js";if(jh&&3m.2s(0)=="/"){3m=3m.2w(1)}}I{3m=3L.22("/")+".js";2T=cL.22(".")}A jf=(!55)?2T:L;A ok=D.jg(3m,jf);if((!ok)&&(!55)){2m S 1O("qM 3O 4E \'"+2T+"\'; 72 qL \'"+3m+"\'")}if((!55)&&(!D["qK"])){54=D.53[2T];if(!54){2m S 1O("qJ \'"+2T+"\' is 3O qI a8 je \'"+3m+"\'")}}C 54};z.8c=z.8m;z.1Q=B(cK){A cJ=cK+"";A 8p=cJ;A 6s=cK.1A(/\\./);if(6s[6s.G-1]=="*"){6s.8q();8p=6s.22(".")}A 8o=z.6q(8p,K);D.53[cJ]=8o;D.53[8p]=8o;C 8o};z.qH=B(8n){A jd=8n["qG"]||[];A cI=jd.3U(8n[z.j4]||8n["aY"]||[]);R(A x=0;x<cI.G;x++){A 8l=cI[x];if(8l.1P==4e){z.8m.14(z,8l)}I{z.8m(8l)}}};z.jb=B(jc,qF){if(jc===K){A cH=[];R(A i=1;i<P.G;i++){cH.Y(P[i])}z.8c.14(z,cH)}};z.qE=z.jb;z.io=B(cG,ja){D.8k[cG]={1p:cG,1Z:ja}};z.qD=B(qC,qB,qA,qz){z.8c("z.j9");z.j9.qy.14(z.qx,P)};(B(){A j7=S 9G("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\\\?([^#]*))?(#(.*))?$");A j6=S 9G("^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$");z.4r=B(){A n=L;A 1V=P;A 1g=1V[0];R(A i=1;i<1V.G;i++){if(!1V[i]){6c}A 1t=S z.4r(1V[i]+"");A 4u=S z.4r(1g+"");if((1t.28=="")&&(!1t.4t)&&(!1t.3l)&&(!1t.1r)){if(1t.52!=n){4u.52=1t.52}1t=4u}I{if(!1t.4t){1t.4t=4u.4t;if(!1t.3l){1t.3l=4u.3l;if(1t.28.2s(0)!="/"){A j8=4u.28.21(0,4u.28.31("/")+1)+1t.28;A 1X=j8.1A("/");R(A j=0;j<1X.G;j++){if(1X[j]=="."){if(j==1X.G-1){1X[j]=""}I{1X.3S(j,1);j--}}I{if(j>0&&!(j==1&&1X[0]=="")&&1X[j]==".."&&1X[j-1]!=".."){if(j==(1X.G-1)){1X.3S(j,1);1X[j-1]=""}I{1X.3S(j-1,2);j-=2}}}}1t.28=1X.22("/")}}}}1g="";if(1t.4t){1g+=1t.4t+":"}if(1t.3l){1g+="//"+1t.3l}1g+=1t.28;if(1t.1r){1g+="?"+1t.1r}if(1t.52){1g+="#"+1t.52}}D.1g=1g.2i();A r=D.1g.1f(j7);D.4t=r[2]||(r[1]?"":n);D.3l=r[4]||(r[3]?"":n);D.28=r[5];D.1r=r[7]||(r[6]?"":n);D.52=r[9]||(r[8]?"":n);if(D.3l!=n){r=D.3l.1f(j6);D.8X=r[3]||n;D.8W=r[4]||n;D.qw=r[5];D.qv=r[7]||n}};z.4r.1C.2i=B(){C D.1g}})();z.qu=B(j5,2E){A 2B=z.cF(j5).22("/");if(!2B){C L}if(2B.31("/")!=2B.G-1){2B+="/"}A cE=2B.T(":");if(2B.2s(0)!="/"&&(cE==-1||cE>2B.T("/"))){2B=z.51+2B}C S z.4r(2B,2E)};if(V 26!="1k"){z.c8=K;z.j4="qt";(B(){A d=z;if(1q&&1q.4I){A 8j=1q.4I("ak");A j3=/z(\\.qs)?\\.js([\\?\\.]|$)/i;R(A i=0;i<8j.G;i++){A 4X=8j[i].5t("4X");if(!4X){6c}A m=4X.1fLine truncated
|
||||
var decompressedDojo = function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('if(V z=="1k"){(B(){if(V D["1o"]=="1k"){D.1o={}}if((!D["1z"])||(!1z["ca"])){D.1z={}}A cn=["rA","rz","1K","ry","rx","9f","rw","rv","ru","rt","rs","rr","rq","ro","rn","rm"];A i=0,24;1s(24=cn[i++]){if(!1z[24]){1z[24]=B(){}}}if(V D["z"]=="1k"){D.z={}}z.1W=D;A d3={im:U,rl:U,rk:"",rj:"",ri:"",rh:K,rg:U};R(A 8z in d3){if(V 1o[8z]=="1k"){1o[8z]=d3[8z]}}A jK=["rf","rd","rc","rb"];A t;1s(t=jK.3a()){z["is"+t]=U}})();z.8h=1o.8h;z.cY={jJ:0,jI:9,jH:0,jG:"",jF:2V("$ra: r9 $".1f(/[0-9]+/)[0]),2i:B(){4G(z.cY){C jJ+"."+jI+"."+jH+jG+" ("+jF+")"}}};z.d1=B(jE,jD,1V){A 2h=1V||z.1W;R(A i=0,p;2h&&(p=jE[i]);i++){2h=(p in 2h?2h[p]:(jD?2h[p]={}:1k))}C 2h};z.88=B(jC,jA,jB){A d2=jC.1A("."),p=d2.8q(),M=z.d1(d2,K,jB);C(M&&p?(M[p]=jA):1k)};z.6q=B(jz,jy,jx){C z.d1(jz.1A("."),jy,jx)};z.r8=B(jw,M){C!!z.6q(jw,U,M)};z["3u"]=B(d0){C z.1W.3u?z.1W.3u(d0):3u(d0)};z.ia=B(jv,cZ,cX){A 8y="r7: "+jv;if(cZ){8y+=" "+cZ}if(cX){8y+=" -- r6 be r5 in cY: "+cX}1z.1K(8y)};z.r4=B(ju,cW){A cV="r3: "+ju+" -- r2 r1 4F r0 qZ qY.";if(cW){cV+=" "+cW}1z.1K(cV)};(B(){A cR={53:{},6p:0,1h:{},8k:{z:{1p:"z",1Z:"."},cU:{1p:"cU",1Z:"../qX/cU"},cT:{1p:"cT",1Z:"cT"}},cN:B(cS){A mp=D.8k;C jp(mp[cS]&&mp[cS].1Z)},jk:B(8x){A mp=D.8k;if(D.cN(8x)){C mp[8x].1Z}C 8x},8v:[],6t:U,56:[],8t:[],8u:U};R(A cQ in cR){z[cQ]=cR[cQ]}})();z.jg=B(8w,cP,cb){A 1g=(((8w.2s(0)=="/"||8w.1f(/^\\w+:/)))?"":D.51)+8w;if(1o.jt&&z.c8){1g+="?"+67(1o.jt).2f(/\\W+/g,"")}1u{C!cP?D.cO(1g,cb):D.jq(1g,cP,cb)}1y(e){1z.1K(e);C U}};z.cO=B(1g,cb){if(D.8v[1g]){C K}A 6u=D.iR(1g,K);if(!6u){C U}D.8v[1g]=K;D.8v.Y(1g);if(cb){6u="("+6u+")"}A jr=z["3u"](6u+"\\r\\n//@ qW="+1g);if(cb){cb(jr)}C K};z.jq=B(1g,jo,cb){A ok=U;1u{ok=D.cO(1g,cb)}1y(e){1z.1K("qV je ",1g," 4G 9f: ",e)}C jp(ok&&D.53[jo])};z.6m=B(){D.8u=K;D.6t=K;A 57=D.56;D.56=[];R(A x=0;x<57.G;x++){57[x]()}D.8u=U;if(z.6t&&z.6p==0&&D.56.G>0){z.8s()}};z.ck=B(){A 57=D.8t;1s(57.G){(57.8q())()}};z.qU=B(M,jn){A d=z;if(P.G==1){d.56.Y(M)}I{if(P.G>1){d.56.Y(B(){M[jn]()})}}if(d.6t&&d.6p==0&&!d.8u){d.8s()}};z.dW=B(M,jm){A d=z;if(P.G==1){d.8t.Y(M)}I{if(P.G>1){d.8t.Y(B(){M[jm]()})}}};z.iM=B(){if(D.6t){C}if(D.6p>0){1z.1K("qT qS in qR!");C}z.8s()};z.8s=B(){if(V 5c=="8b"||(1o["qQ"]&&z.2M)){5c("z.6m();",0)}I{z.6m()}};z.cF=B(jl){A 4v=jl.1A(".");R(A i=4v.G;i>0;i--){A 8r=4v.2w(0,i).22(".");if((i==1)&&!D.cN(8r)){4v[0]="../"+4v[0]}I{A cM=D.jk(8r);if(cM!=8r){4v.3S(0,i,cM);3f}}}C 4v};z.jj=U;z.8m=B(2T,qP,55){55=D.jj||55;A 54=D.53[2T];if(54){C 54}A cL=2T.1A(".");A 3L=D.cF(2T);A jh=((3L[0].2s(0)!="/")&&!3L[0].1f(/^\\w+:/));A ji=3L[3L.G-1];A 3m;if(ji=="*"){2T=cL.2w(0,-1).22(".");3L.8q();3m=3L.22("/")+"/"+(1o["qO"]||"qN")+".js";if(jh&&3m.2s(0)=="/"){3m=3m.2w(1)}}I{3m=3L.22("/")+".js";2T=cL.22(".")}A jf=(!55)?2T:L;A ok=D.jg(3m,jf);if((!ok)&&(!55)){2m S 1O("qM 3O 4E \'"+2T+"\'; 72 qL \'"+3m+"\'")}if((!55)&&(!D["qK"])){54=D.53[2T];if(!54){2m S 1O("qJ \'"+2T+"\' is 3O qI a8 je \'"+3m+"\'")}}C 54};z.8c=z.8m;z.1Q=B(cK){A cJ=cK+"";A 8p=cJ;A 6s=cK.1A(/\\./);if(6s[6s.G-1]=="*"){6s.8q();8p=6s.22(".")}A 8o=z.6q(8p,K);D.53[cJ]=8o;D.53[8p]=8o;C 8o};z.qH=B(8n){A jd=8n["qG"]||[];A cI=jd.3U(8n[z.j4]||8n["aY"]||[]);R(A x=0;x<cI.G;x++){A 8l=cI[x];if(8l.1P==4e){z.8m.14(z,8l)}I{z.8m(8l)}}};z.jb=B(jc,qF){if(jc===K){A cH=[];R(A i=1;i<P.G;i++){cH.Y(P[i])}z.8c.14(z,cH)}};z.qE=z.jb;z.io=B(cG,ja){D.8k[cG]={1p:cG,1Z:ja}};z.qD=B(qC,qB,qA,qz){z.8c("z.j9");z.j9.qy.14(z.qx,P)};(B(){A j7=S 9G("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\\\?([^#]*))?(#(.*))?$");A j6=S 9G("^((([^:]+:)?([^@]+))@)?([^:]*)(:([0-9]+))?$");z.4r=B(){A n=L;A 1V=P;A 1g=1V[0];R(A i=1;i<1V.G;i++){if(!1V[i]){6c}A 1t=S z.4r(1V[i]+"");A 4u=S z.4r(1g+"");if((1t.28=="")&&(!1t.4t)&&(!1t.3l)&&(!1t.1r)){if(1t.52!=n){4u.52=1t.52}1t=4u}I{if(!1t.4t){1t.4t=4u.4t;if(!1t.3l){1t.3l=4u.3l;if(1t.28.2s(0)!="/"){A j8=4u.28.21(0,4u.28.31("/")+1)+1t.28;A 1X=j8.1A("/");R(A j=0;j<1X.G;j++){if(1X[j]=="."){if(j==1X.G-1){1X[j]=""}I{1X.3S(j,1);j--}}I{if(j>0&&!(j==1&&1X[0]=="")&&1X[j]==".."&&1X[j-1]!=".."){if(j==(1X.G-1)){1X.3S(j,1);1X[j-1]=""}I{1X.3S(j-1,2);j-=2}}}}1t.28=1X.22("/")}}}}1g="";if(1t.4t){1g+=1t.4t+":"}if(1t.3l){1g+="//"+1t.3l}1g+=1t.28;if(1t.1r){1g+="?"+1t.1r}if(1t.52){1g+="#"+1t.52}}D.1g=1g.2i();A r=D.1g.1f(j7);D.4t=r[2]||(r[1]?"":n);D.3l=r[4]||(r[3]?"":n);D.28=r[5];D.1r=r[7]||(r[6]?"":n);D.52=r[9]||(r[8]?"":n);if(D.3l!=n){r=D.3l.1f(j6);D.8X=r[3]||n;D.8W=r[4]||n;D.qw=r[5];D.qv=r[7]||n}};z.4r.1C.2i=B(){C D.1g}})();z.qu=B(j5,2E){A 2B=z.cF(j5).22("/");if(!2B){C L}if(2B.31("/")!=2B.G-1){2B+="/"}A cE=2B.T(":");if(2B.2s(0)!="/"&&(cE==-1||cE>2B.T("/"))){2B=z.51+2B}C S z.4r(2B,2E)};if(V 26!="1k"){z.c8=K;z.j4="qt";(B(){A d=z;if(1q&&1q.4I){A 8j=1q.4I("ak");A j3=/z(\\.qs)?\\.js([\\?\\.]|$)/i;R(A i=0;i<8j.G;i++){A 4X=8j[i].5t("4X");if(!4X){6c}A m=4X.1fLine truncated
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -77,7 +77,7 @@ if __name__ == '__main__':
|
||||
jarlog = os.getenv("JARLOG_FILE")
|
||||
if jarlog:
|
||||
env["MOZ_JAR_LOG_FILE"] = os.path.abspath(jarlog)
|
||||
print("jarlog: %s" % env["MOZ_JAR_LOG_FILE"])
|
||||
print "jarlog: %s" % env["MOZ_JAR_LOG_FILE"]
|
||||
|
||||
cmdargs = ["http://localhost:%d/index.html" % PORT]
|
||||
runner = FirefoxRunner(profile=profile,
|
||||
|
||||
+11
-22
@@ -3,7 +3,7 @@
|
||||
from __future__ import print_function
|
||||
import os, sys
|
||||
|
||||
if not len(sys.argv) == 2 or not os.path.exists(sys.argv[1]):
|
||||
if not len(sys.argv) is 2 or not os.path.exists(sys.argv[1]):
|
||||
print("\nYou did not supply a valid path to check.")
|
||||
exit(1)
|
||||
else:
|
||||
@@ -44,8 +44,7 @@ PP_DIRECTIVES = [
|
||||
]
|
||||
|
||||
PP_FILES = []
|
||||
PP_BAD_DIRECTIVE_FILES = []
|
||||
PP_BAD_ENCODING_FILES = []
|
||||
PP_BAD_FILES = []
|
||||
|
||||
for root, directories, filenames in os.walk(DIST_PATH):
|
||||
for filename in filenames:
|
||||
@@ -53,31 +52,21 @@ for root, directories, filenames in os.walk(DIST_PATH):
|
||||
PP_FILES += [ os.path.join(root, filename).replace(os.sep, '/') ]
|
||||
|
||||
for file in PP_FILES:
|
||||
with open(file, encoding='utf-8') as fp:
|
||||
with open(file) as fp:
|
||||
marker = '%' if file.endswith(PP_SPECIAL_TYPES) else '#'
|
||||
directives = tuple(marker + directive for directive in PP_DIRECTIVES)
|
||||
try:
|
||||
for line in fp:
|
||||
if line.startswith(directives):
|
||||
PP_BAD_DIRECTIVE_FILES += [ file.replace(DIST_PATH + '/', '') ]
|
||||
except UnicodeDecodeError:
|
||||
PP_BAD_ENCODING_FILES += [ file.replace(DIST_PATH+ '/' , '') ]
|
||||
|
||||
for line in fp:
|
||||
if line.startswith(directives):
|
||||
PP_BAD_FILES += [ file.replace(DIST_PATH + '/', '') ]
|
||||
fp.close()
|
||||
|
||||
PP_BAD_DIRECTIVE_FILES = list(dict.fromkeys(PP_BAD_DIRECTIVE_FILES))
|
||||
PP_BAD_ENCODING_FILES = list(dict.fromkeys(PP_BAD_ENCODING_FILES))
|
||||
PP_BAD_FILES = list(dict.fromkeys(PP_BAD_FILES))
|
||||
|
||||
print('Done!')
|
||||
|
||||
if len(PP_BAD_DIRECTIVE_FILES) > 0:
|
||||
print("\nWARNING: The following {0} file(s) in {1} may require preprocessing:\n".format(len(PP_BAD_DIRECTIVE_FILES), DIST_PATH))
|
||||
for file in PP_BAD_DIRECTIVE_FILES:
|
||||
if len(PP_BAD_FILES) > 0:
|
||||
print("\nWARNING: The following {0} file(s) in {1} may require preprocessing:\n".format(len(PP_BAD_FILES), DIST_PATH))
|
||||
for file in PP_BAD_FILES:
|
||||
print(file)
|
||||
|
||||
if len(PP_BAD_ENCODING_FILES) > 0:
|
||||
print("\nWARNING: The following {0} file(s) in {1} are not valid UTF-8:\n".format(len(PP_BAD_ENCODING_FILES), DIST_PATH))
|
||||
for file in PP_BAD_ENCODING_FILES:
|
||||
print(file)
|
||||
|
||||
sys.exit(0)
|
||||
exit(0)
|
||||
@@ -10,4 +10,4 @@ with open(filename, 'rU') as fh:
|
||||
source = fh.read()
|
||||
|
||||
statements = pymake.parser.parsestring(source, filename)
|
||||
print(statements.to_source())
|
||||
print statements.to_source()
|
||||
@@ -4,9 +4,9 @@ import sys
|
||||
import pymake.parser
|
||||
|
||||
for f in sys.argv[1:]:
|
||||
print("Parsing %s" % f)
|
||||
print "Parsing %s" % f
|
||||
fd = open(f, 'rU')
|
||||
s = fd.read()
|
||||
fd.close()
|
||||
stmts = pymake.parser.parsestring(s, f)
|
||||
print(stmts)
|
||||
print stmts
|
||||
@@ -2,7 +2,7 @@
|
||||
import errno, sys, os, shutil, time
|
||||
from getopt import getopt, GetoptError
|
||||
|
||||
from .process import PythonException
|
||||
from process import PythonException
|
||||
|
||||
__all__ = ["mkdir", "rm", "sleep", "touch"]
|
||||
|
||||
@@ -13,8 +13,8 @@ def mkdir(args):
|
||||
"""
|
||||
try:
|
||||
opts, args = getopt(args, "p", ["parents"])
|
||||
except GetoptError as e:
|
||||
raise PythonException("mkdir: %s" % e, 1)
|
||||
except GetoptError, e:
|
||||
raise PythonException, ("mkdir: %s" % e, 1)
|
||||
parents = False
|
||||
for o, a in opts:
|
||||
if o in ('-p', '--parents'):
|
||||
@@ -25,11 +25,11 @@ def mkdir(args):
|
||||
os.makedirs(f)
|
||||
else:
|
||||
os.mkdir(f)
|
||||
except OSError as e:
|
||||
except OSError, e:
|
||||
if e.errno == errno.EEXIST and parents:
|
||||
pass
|
||||
else:
|
||||
raise PythonException("mkdir: %s" % e, 1)
|
||||
raise PythonException, ("mkdir: %s" % e, 1)
|
||||
|
||||
def rm(args):
|
||||
"""
|
||||
@@ -38,8 +38,8 @@ def rm(args):
|
||||
"""
|
||||
try:
|
||||
opts, args = getopt(args, "rRf", ["force", "recursive"])
|
||||
except GetoptError as e:
|
||||
raise PythonException("rm: %s" % e, 1)
|
||||
except GetoptError, e:
|
||||
raise PythonException, ("rm: %s" % e, 1)
|
||||
force = False
|
||||
recursive = False
|
||||
for o, a in opts:
|
||||
@@ -50,7 +50,7 @@ def rm(args):
|
||||
for f in args:
|
||||
if os.path.isdir(f):
|
||||
if not recursive:
|
||||
raise PythonException("rm: cannot remove '%s': Is a directory" % f, 1)
|
||||
raise PythonException, ("rm: cannot remove '%s': Is a directory" % f, 1)
|
||||
else:
|
||||
shutil.rmtree(f, force)
|
||||
elif os.path.exists(f):
|
||||
@@ -58,9 +58,9 @@ def rm(args):
|
||||
os.unlink(f)
|
||||
except:
|
||||
if not force:
|
||||
raise PythonException("rm: failed to remove '%s': %s" % (f, sys.exc_info()[0]), 1)
|
||||
raise PythonException, ("rm: failed to remove '%s': %s" % (f, sys.exc_info()[0]), 1)
|
||||
elif not force:
|
||||
raise PythonException("rm: cannot remove '%s': No such file or directory" % f, 1)
|
||||
raise PythonException, ("rm: cannot remove '%s': No such file or directory" % f, 1)
|
||||
|
||||
def sleep(args):
|
||||
"""
|
||||
@@ -70,7 +70,7 @@ def sleep(args):
|
||||
values = {'s': 1, 'm': 60, 'h': 3600, 'd': 86400}
|
||||
for a in args:
|
||||
multiplier = 1
|
||||
for k, v in values.items():
|
||||
for k, v in values.iteritems():
|
||||
if a.endswith(k):
|
||||
a = a[:-1]
|
||||
multiplier = v
|
||||
@@ -79,7 +79,7 @@ def sleep(args):
|
||||
f = float(a)
|
||||
total += f * multiplier
|
||||
except ValueError:
|
||||
raise PythonException("sleep: invalid time interval '%s'" % a, 1)
|
||||
raise PythonException, ("sleep: invalid time interval '%s'" % a, 1)
|
||||
time.sleep(total)
|
||||
|
||||
def touch(args):
|
||||
@@ -88,8 +88,8 @@ def touch(args):
|
||||
"""
|
||||
try:
|
||||
opts, args = getopt(args, "t:")
|
||||
except GetoptError as e:
|
||||
raise PythonException("touch: %s" % e, 1)
|
||||
except GetoptError, e:
|
||||
raise PythonException, ("touch: %s" % e, 1)
|
||||
opts = dict(opts)
|
||||
times = None
|
||||
if '-t' in opts:
|
||||
@@ -97,7 +97,7 @@ def touch(args):
|
||||
from time import mktime, localtime
|
||||
m = re.match('^(?P<Y>(?:\d\d)?\d\d)?(?P<M>\d\d)(?P<D>\d\d)(?P<h>\d\d)(?P<m>\d\d)(?:\.(?P<s>\d\d))?$', opts['-t'])
|
||||
if not m:
|
||||
raise PythonException("touch: invalid date format '%s'" % opts['-t'], 1)
|
||||
raise PythonException, ("touch: invalid date format '%s'" % opts['-t'], 1)
|
||||
def normalized_field(m, f):
|
||||
if f == 'Y':
|
||||
if m.group(f) is None:
|
||||
|
||||
@@ -11,7 +11,7 @@ except when a submake specifies -j1 when the parent make is building in parallel
|
||||
|
||||
import os, subprocess, sys, logging, time, traceback, re
|
||||
from optparse import OptionParser
|
||||
from . import data, parserdata, process, util
|
||||
import data, parserdata, process, util
|
||||
|
||||
# TODO: If this ever goes from relocatable package to system-installed, this may need to be
|
||||
# a configured-in path.
|
||||
@@ -62,7 +62,7 @@ def parsemakeflags(env):
|
||||
return opts
|
||||
|
||||
def _version(*args):
|
||||
print("""pymake: GNU-compatible make program
|
||||
print """pymake: GNU-compatible make program
|
||||
Copyright (C) 2009 The Mozilla Foundation <http://www.mozilla.org/>
|
||||
This is free software; see the source for copying conditions.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
@@ -71,7 +71,7 @@ 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.""")
|
||||
DEALINGS IN THE SOFTWARE."""
|
||||
|
||||
_log = logging.getLogger('pymake.execution')
|
||||
|
||||
@@ -95,7 +95,7 @@ class _MakeContext(object):
|
||||
|
||||
def remakecb(self, remade, error=None):
|
||||
if error is not None:
|
||||
print(error)
|
||||
print error
|
||||
self.context.defer(self.cb, 2)
|
||||
return
|
||||
|
||||
@@ -124,15 +124,15 @@ class _MakeContext(object):
|
||||
self.makefile.include(f)
|
||||
self.makefile.finishparsing()
|
||||
self.makefile.remakemakefiles(self.remakecb)
|
||||
except util.MakeError as e:
|
||||
print(e)
|
||||
except util.MakeError, e:
|
||||
print e
|
||||
self.context.defer(self.cb, 2)
|
||||
|
||||
return
|
||||
|
||||
if len(self.targets) == 0:
|
||||
if self.makefile.defaulttarget is None:
|
||||
print("No target specified and no default target found.")
|
||||
print "No target specified and no default target found."
|
||||
self.context.defer(self.cb, 2)
|
||||
return
|
||||
|
||||
@@ -154,7 +154,7 @@ class _MakeContext(object):
|
||||
|
||||
if not len(self.realtargets):
|
||||
if self.options.printdir:
|
||||
print("make.py[%i]: Leaving directory '%s'" % (self.makelevel, self.workdir))
|
||||
print "make.py[%i]: Leaving directory '%s'" % (self.makelevel, self.workdir)
|
||||
sys.stdout.flush()
|
||||
|
||||
self.context.defer(self.cb, 0)
|
||||
@@ -255,24 +255,24 @@ def main(args, env, cwd, cb):
|
||||
context = process.getcontext(options.jobcount)
|
||||
|
||||
if options.printdir:
|
||||
print("make.py[%i]: Entering directory '%s'" % (makelevel, workdir))
|
||||
print "make.py[%i]: Entering directory '%s'" % (makelevel, workdir)
|
||||
sys.stdout.flush()
|
||||
|
||||
if len(options.makefiles) == 0:
|
||||
if os.path.exists(util.normaljoin(workdir, 'Makefile')):
|
||||
options.makefiles.append('Makefile')
|
||||
else:
|
||||
print("No makefile found")
|
||||
print "No makefile found"
|
||||
cb(2)
|
||||
return
|
||||
|
||||
ostmts, targets, overrides = parserdata.parsecommandlineargs(arguments)
|
||||
|
||||
_MakeContext(makeflags, makelevel, workdir, context, env, targets, options, ostmts, overrides, cb)
|
||||
except (util.MakeError) as e:
|
||||
print(e)
|
||||
except (util.MakeError), e:
|
||||
print e
|
||||
if options.printdir:
|
||||
print("make.py[%i]: Leaving directory '%s'" % (makelevel, workdir))
|
||||
print "make.py[%i]: Leaving directory '%s'" % (makelevel, workdir)
|
||||
sys.stdout.flush()
|
||||
cb(2)
|
||||
return
|
||||
+18
-18
@@ -3,9 +3,8 @@ A representation of makefile data structures.
|
||||
"""
|
||||
|
||||
import logging, re, os, sys
|
||||
from . import parserdata, parser, functions, process, util, implicit
|
||||
from io import StringIO
|
||||
from functools import reduce
|
||||
import parserdata, parser, functions, process, util, implicit
|
||||
from cStringIO import StringIO
|
||||
|
||||
if sys.version_info[0] < 3:
|
||||
str_type = basestring
|
||||
@@ -406,7 +405,7 @@ class Expansion(BaseExpansion, list):
|
||||
if len(a) != len(b):
|
||||
return False
|
||||
|
||||
for i in range(len(self)):
|
||||
for i in xrange(len(self)):
|
||||
e1, is_func1 = a[i]
|
||||
e2, is_func2 = b[i]
|
||||
|
||||
@@ -448,7 +447,7 @@ class Variables(object):
|
||||
self.parent = parent
|
||||
|
||||
def readfromenvironment(self, env):
|
||||
for k, v in env.items():
|
||||
for k, v in env.iteritems():
|
||||
self.set(k, self.FLAVOR_RECURSIVE, self.SOURCE_ENVIRONMENT, v)
|
||||
|
||||
def get(self, name, expand=True):
|
||||
@@ -548,7 +547,7 @@ class Variables(object):
|
||||
self.set(k, flavor, source, value)
|
||||
|
||||
def __iter__(self):
|
||||
for k, (flavor, source, value, valueexp) in self._map.items():
|
||||
for k, (flavor, source, value, valueexp) in self._map.iteritems():
|
||||
yield k, flavor, source, value
|
||||
|
||||
def __contains__(self, item):
|
||||
@@ -865,7 +864,7 @@ class RemakeRuleContext(object):
|
||||
assert error in (True, False)
|
||||
|
||||
if error:
|
||||
print("<%s>: Found error" % self.target.target)
|
||||
print "<%s>: Found error" % self.target.target
|
||||
self.error = True
|
||||
if didanything:
|
||||
self.didanything = True
|
||||
@@ -950,8 +949,8 @@ class RemakeRuleContext(object):
|
||||
self.target.didanything = True
|
||||
try:
|
||||
self.commands = [c for c in self.rule.getcommands(self.target, self.makefile)]
|
||||
except util.MakeError as e:
|
||||
print(e)
|
||||
except util.MakeError, e:
|
||||
print e
|
||||
sys.stdout.flush()
|
||||
cb(error=True)
|
||||
return
|
||||
@@ -1284,9 +1283,9 @@ class Target(object):
|
||||
|
||||
try:
|
||||
self.resolvedeps(makefile, targetstack, [], False)
|
||||
except util.MakeError as e:
|
||||
except util.MakeError, e:
|
||||
if printerror:
|
||||
print(e)
|
||||
print e
|
||||
self.error = True
|
||||
self.notifydone(makefile)
|
||||
return
|
||||
@@ -1398,7 +1397,7 @@ class _CommandWrapper(object):
|
||||
|
||||
def _cb(self, res):
|
||||
if res != 0 and not self.ignoreErrors:
|
||||
print("%s: command '%s' failed, return code %i" % (self.loc, self.cline, res))
|
||||
print "%s: command '%s' failed, return code %i" % (self.loc, self.cline, res)
|
||||
self.usercb(error=True)
|
||||
else:
|
||||
self.usercb(error=False)
|
||||
@@ -1592,7 +1591,7 @@ class _RemakeContext(object):
|
||||
assert error in (True, False)
|
||||
|
||||
if error and self.required:
|
||||
print("Error remaking makefiles (ignored)")
|
||||
print "Error remaking makefiles (ignored)"
|
||||
|
||||
if len(self.toremake):
|
||||
target, self.required = self.toremake.pop(0)
|
||||
@@ -1679,7 +1678,7 @@ class Makefile(object):
|
||||
self.variables.set('MAKECMDGOALS', Variables.FLAVOR_SIMPLE,
|
||||
Variables.SOURCE_AUTOMATIC, ' '.join(targets))
|
||||
|
||||
for vname, val in implicit.variables.items():
|
||||
for vname, val in implicit.variables.iteritems():
|
||||
self.variables.set(vname,
|
||||
Variables.FLAVOR_SIMPLE,
|
||||
Variables.SOURCE_IMPLICIT, val)
|
||||
@@ -1751,10 +1750,11 @@ class Makefile(object):
|
||||
if value is None:
|
||||
self._vpath = []
|
||||
else:
|
||||
self._vpath = [e for e in re.split('[%s\s]+' % os.pathsep,
|
||||
value.resolvestr(self, self.variables, ['VPATH'])) if e != '']
|
||||
self._vpath = filter(lambda e: e != '',
|
||||
re.split('[%s\s]+' % os.pathsep,
|
||||
value.resolvestr(self, self.variables, ['VPATH'])))
|
||||
|
||||
targets = list(self._targets.values())
|
||||
targets = list(self._targets.itervalues())
|
||||
for t in targets:
|
||||
t.explicit = True
|
||||
for r in t.rules:
|
||||
@@ -1825,7 +1825,7 @@ class Makefile(object):
|
||||
|
||||
def getsubenvironment(self, variables):
|
||||
env = dict(self.env)
|
||||
for vname, v in self.exportedvars.items():
|
||||
for vname, v in self.exportedvars.iteritems():
|
||||
if v:
|
||||
flavor, source, val = variables.get(vname)
|
||||
if val is None:
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
Makefile functions.
|
||||
"""
|
||||
|
||||
from . import parser, util
|
||||
import parser, util
|
||||
import subprocess, os, logging, sys
|
||||
from .globrelative import glob
|
||||
from io import StringIO
|
||||
from globrelative import glob
|
||||
from cStringIO import StringIO
|
||||
|
||||
log = logging.getLogger('pymake.data')
|
||||
|
||||
@@ -135,7 +135,7 @@ class Function(object):
|
||||
if len(self._arguments) != len(other._arguments):
|
||||
return False
|
||||
|
||||
for i in range(len(self._arguments)):
|
||||
for i in xrange(len(self._arguments)):
|
||||
# According to the GNU make manual Section 8.1, whitespace around
|
||||
# arguments is *not* part of the argument's value. So, we do a
|
||||
# whitespace-agnostic comparison.
|
||||
@@ -525,7 +525,7 @@ class JoinFunction(Function):
|
||||
|
||||
@staticmethod
|
||||
def iterjoin(l1, l2):
|
||||
for i in range(0, max(len(l1), len(l2))):
|
||||
for i in xrange(0, max(len(l1), len(l2))):
|
||||
i1 = i < len(l1) and l1[i] or ''
|
||||
i2 = i < len(l2) and l2[i] or ''
|
||||
yield i1 + i2
|
||||
@@ -670,7 +670,7 @@ class CallFunction(Function):
|
||||
|
||||
v = data.Variables(parent=variables)
|
||||
v.set('0', data.Variables.FLAVOR_SIMPLE, data.Variables.SOURCE_AUTOMATIC, vname)
|
||||
for i in range(1, len(self._arguments)):
|
||||
for i in xrange(1, len(self._arguments)):
|
||||
param = self._arguments[i].resolvestr(makefile, variables, setting)
|
||||
v.set(str(i), data.Variables.FLAVOR_SIMPLE, data.Variables.SOURCE_AUTOMATIC, param)
|
||||
|
||||
@@ -770,7 +770,7 @@ class ShellFunction(Function):
|
||||
__slots__ = Function.__slots__
|
||||
|
||||
def resolve(self, makefile, variables, fd, setting):
|
||||
from .process import prepare_command
|
||||
from process import prepare_command
|
||||
cline = self._arguments[0].resolvestr(makefile, variables, setting)
|
||||
executable, cline = prepare_command(cline, makefile.workdir, self.loc)
|
||||
|
||||
@@ -785,8 +785,8 @@ class ShellFunction(Function):
|
||||
try:
|
||||
p = subprocess.Popen(cline, executable=executable, env=makefile.env, shell=False,
|
||||
stdout=subprocess.PIPE, cwd=makefile.workdir)
|
||||
except OSError as e:
|
||||
print("Error executing command %s" % cline[0], e, file=sys.stderr)
|
||||
except OSError, e:
|
||||
print >>sys.stderr, "Error executing command %s" % cline[0], e
|
||||
return
|
||||
finally:
|
||||
os.environ['PATH'] = oldpath
|
||||
@@ -830,7 +830,7 @@ class InfoFunction(Function):
|
||||
|
||||
def resolve(self, makefile, variables, fd, setting):
|
||||
v = self._arguments[0].resolvestr(makefile, variables, setting)
|
||||
print(v)
|
||||
print v
|
||||
|
||||
functionmap = {
|
||||
'subst': SubstFunction,
|
||||
@@ -870,4 +870,4 @@ functionmap = {
|
||||
'info': InfoFunction,
|
||||
}
|
||||
|
||||
from . import data
|
||||
import data
|
||||
@@ -7,7 +7,7 @@ Filename globbing like the python glob module with minor differences:
|
||||
"""
|
||||
|
||||
import os, re, fnmatch
|
||||
from . import util
|
||||
import util
|
||||
|
||||
_globcheck = re.compile('[[*?]')
|
||||
|
||||
@@ -62,7 +62,7 @@ def globpattern(dir, pattern):
|
||||
if not leaf.startswith('.')]
|
||||
|
||||
leaves = fnmatch.filter(leaves, pattern)
|
||||
leaves = [l for l in leaves if os.path.exists(util.normaljoin(dir, l))]
|
||||
leaves = filter(lambda l: os.path.exists(util.normaljoin(dir, l)), leaves)
|
||||
|
||||
leaves.sort()
|
||||
return leaves
|
||||
@@ -34,7 +34,7 @@ coming.
|
||||
"""
|
||||
|
||||
import logging, re, os, sys
|
||||
from . import data, functions, util, parserdata
|
||||
import data, functions, util, parserdata
|
||||
|
||||
_log = logging.getLogger('pymake.parser')
|
||||
|
||||
@@ -108,7 +108,7 @@ _alltokens = re.compile(r'''\\*\# | # hash mark preceeded by any number of backs
|
||||
:: |
|
||||
(?:\$(?:$|[\(\{](?:%s)\s+|.)) | # dollar sign followed by EOF, a function keyword with whitespace, or any character
|
||||
:(?![\\/]) | # colon followed by anything except a slash (Windows path detection)
|
||||
[=#{}();,|'"]''' % '|'.join(iter(functions.functionmap.keys())), re.VERBOSE)
|
||||
[=#{}();,|'"]''' % '|'.join(functions.functionmap.iterkeys()), re.VERBOSE)
|
||||
|
||||
def iterdata(d, offset, tokenlist, it):
|
||||
"""
|
||||
@@ -336,7 +336,7 @@ _conditionkeywords = {
|
||||
'ifndef': ifndef
|
||||
}
|
||||
|
||||
_conditiontokens = tuple(_conditionkeywords.keys())
|
||||
_conditiontokens = tuple(_conditionkeywords.iterkeys())
|
||||
_conditionre = re.compile(r'(%s)(?:$|\s+)' % '|'.join(_conditiontokens))
|
||||
|
||||
_directivestokenlist = _conditiontokens + \
|
||||
@@ -691,7 +691,7 @@ def parsemakesyntax(d, offset, stopon, iterfunc):
|
||||
while True: # this is not a for loop because `di` changes during the function
|
||||
assert stacktop is not None
|
||||
try:
|
||||
s, token, tokenoffset, offset = next(di)
|
||||
s, token, tokenoffset, offset = di.next()
|
||||
except StopIteration:
|
||||
break
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import logging, re, os
|
||||
from . import data, parser, functions, util
|
||||
from io import StringIO
|
||||
import data, parser, functions, util
|
||||
from cStringIO import StringIO
|
||||
from pymake.globrelative import hasglob, glob
|
||||
|
||||
_log = logging.getLogger('pymake.data')
|
||||
@@ -76,7 +76,7 @@ def parsecommandlineargs(args):
|
||||
overrides = []
|
||||
stmts = StatementList()
|
||||
r = []
|
||||
for i in range(0, len(args)):
|
||||
for i in xrange(0, len(args)):
|
||||
a = args[i]
|
||||
|
||||
vname, t, val = util.strpartition(a, ':=')
|
||||
@@ -195,7 +195,7 @@ class Rule(Statement):
|
||||
|
||||
deps = list(_expandwildcards(makefile, data.stripdotslashes(self.depexp.resolvesplit(makefile, makefile.variables))))
|
||||
if ispattern:
|
||||
rule = data.PatternRule(targets, list(map(data.Pattern, deps)), self.doublecolon, loc=self.targetexp.loc)
|
||||
rule = data.PatternRule(targets, map(data.Pattern, deps), self.doublecolon, loc=self.targetexp.loc)
|
||||
makefile.appendimplicitrule(rule)
|
||||
else:
|
||||
rule = data.Rule(deps, self.doublecolon, loc=self.targetexp.loc, weakdeps=False)
|
||||
@@ -207,7 +207,7 @@ class Rule(Statement):
|
||||
context.currule = rule
|
||||
|
||||
def dump(self, fd, indent):
|
||||
print("%sRule %s: %s" % (indent, self.targetexp, self.depexp), file=fd)
|
||||
print >>fd, "%sRule %s: %s" % (indent, self.targetexp, self.depexp)
|
||||
|
||||
def to_source(self):
|
||||
sep = ':'
|
||||
@@ -285,7 +285,7 @@ class StaticPatternRule(Statement):
|
||||
context.currule = rule
|
||||
|
||||
def dump(self, fd, indent):
|
||||
print("%sStaticPatternRule %s: %s: %s" % (indent, self.targetexp, self.patternexp, self.depexp), file=fd)
|
||||
print >>fd, "%sStaticPatternRule %s: %s: %s" % (indent, self.targetexp, self.patternexp, self.depexp)
|
||||
|
||||
def to_source(self):
|
||||
sep = ':'
|
||||
@@ -339,7 +339,7 @@ class Command(Statement):
|
||||
context.currule.addcommand(self.exp)
|
||||
|
||||
def dump(self, fd, indent):
|
||||
print("%sCommand %s" % (indent, self.exp,), file=fd)
|
||||
print >>fd, "%sCommand %s" % (indent, self.exp,)
|
||||
|
||||
def to_source(self):
|
||||
# Commands have some interesting quirks when it comes to source
|
||||
@@ -438,7 +438,7 @@ class SetVariable(Statement):
|
||||
v.set(vname, flavor, self.source, value)
|
||||
|
||||
def dump(self, fd, indent):
|
||||
print("%sSetVariable<%s> %s %s\n%s %r" % (indent, self.valueloc, self.vnameexp, self.token, indent, self.value), file=fd)
|
||||
print >>fd, "%sSetVariable<%s> %s %s\n%s %r" % (indent, self.valueloc, self.vnameexp, self.token, indent, self.value)
|
||||
|
||||
def __eq__(self, other):
|
||||
if not isinstance(other, SetVariable):
|
||||
@@ -452,7 +452,7 @@ class SetVariable(Statement):
|
||||
|
||||
def to_source(self):
|
||||
chars = []
|
||||
for i in range(0, len(self.value)):
|
||||
for i in xrange(0, len(self.value)):
|
||||
c = self.value[i]
|
||||
|
||||
# Literal # is escaped in variable assignment otherwise it would be
|
||||
@@ -651,14 +651,14 @@ class ConditionBlock(Statement):
|
||||
i += 1
|
||||
|
||||
def dump(self, fd, indent):
|
||||
print("%sConditionBlock" % (indent,), file=fd)
|
||||
print >>fd, "%sConditionBlock" % (indent,)
|
||||
|
||||
indent2 = indent + ' '
|
||||
for c, statements in self._groups:
|
||||
print("%s Condition %s" % (indent, c), file=fd)
|
||||
print >>fd, "%s Condition %s" % (indent, c)
|
||||
statements.dump(fd, indent2)
|
||||
print("%s ~Condition" % (indent,), file=fd)
|
||||
print("%s~ConditionBlock" % (indent,), file=fd)
|
||||
print >>fd, "%s ~Condition" % (indent,)
|
||||
print >>fd, "%s~ConditionBlock" % (indent,)
|
||||
|
||||
def to_source(self):
|
||||
lines = []
|
||||
@@ -681,7 +681,7 @@ class ConditionBlock(Statement):
|
||||
if len(self) != len(other):
|
||||
return False
|
||||
|
||||
for i in range(0, len(self)):
|
||||
for i in xrange(0, len(self)):
|
||||
our_condition, our_statements = self[i]
|
||||
other_condition, other_statements = other[i]
|
||||
|
||||
@@ -793,7 +793,7 @@ class Include(Statement):
|
||||
makefile.include(f, self.required, loc=self.exp.loc, weak=self.weak)
|
||||
|
||||
def dump(self, fd, indent):
|
||||
print("%sInclude %s" % (indent, self.exp), file=fd)
|
||||
print >>fd, "%sInclude %s" % (indent, self.exp)
|
||||
|
||||
def to_source(self):
|
||||
prefix = ''
|
||||
@@ -840,7 +840,7 @@ class VPathDirective(Statement):
|
||||
makefile.addvpath(pattern, dirs)
|
||||
|
||||
def dump(self, fd, indent):
|
||||
print("%sVPath %s" % (indent, self.exp), file=fd)
|
||||
print >>fd, "%sVPath %s" % (indent, self.exp)
|
||||
|
||||
def to_source(self):
|
||||
return 'vpath %s' % self.exp.to_source()
|
||||
@@ -885,7 +885,7 @@ class ExportDirective(Statement):
|
||||
makefile.exportedvars[v] = True
|
||||
|
||||
def dump(self, fd, indent):
|
||||
print("%sExport (single=%s) %s" % (indent, self.single, self.exp), file=fd)
|
||||
print >>fd, "%sExport (single=%s) %s" % (indent, self.single, self.exp)
|
||||
|
||||
def to_source(self):
|
||||
return ('export %s' % self.exp.to_source()).rstrip()
|
||||
@@ -915,7 +915,7 @@ class UnexportDirective(Statement):
|
||||
makefile.exportedvars[v] = False
|
||||
|
||||
def dump(self, fd, indent):
|
||||
print("%sUnexport %s" % (indent, self.exp), file=fd)
|
||||
print >>fd, "%sUnexport %s" % (indent, self.exp)
|
||||
|
||||
def to_source(self):
|
||||
return 'unexport %s' % self.exp.to_source()
|
||||
@@ -947,7 +947,7 @@ class EmptyDirective(Statement):
|
||||
raise data.DataError("Line expands to non-empty value", self.exp.loc)
|
||||
|
||||
def dump(self, fd, indent):
|
||||
print("%sEmptyDirective: %s" % (indent, self.exp), file=fd)
|
||||
print >>fd, "%sEmptyDirective: %s" % (indent, self.exp)
|
||||
|
||||
def to_source(self):
|
||||
return self.exp.to_source()
|
||||
|
||||
@@ -10,9 +10,9 @@ import site
|
||||
from collections import deque
|
||||
# XXXkhuey Work around http://bugs.python.org/issue1731717
|
||||
subprocess._cleanup = lambda: None
|
||||
from . import command, util
|
||||
import command, util
|
||||
if sys.platform=='win32':
|
||||
from . import win32process
|
||||
import win32process
|
||||
|
||||
_log = logging.getLogger('pymake.process')
|
||||
|
||||
@@ -28,7 +28,7 @@ def tokens2re(tokens):
|
||||
# which matches the pattern and captures it in a named match group.
|
||||
# The group names and patterns come are given as a dict in the function
|
||||
# argument.
|
||||
nonescaped = r'(?<!\\)(?:%s)' % '|'.join('(?P<%s>%s)' % (name, value) for name, value in tokens.items())
|
||||
nonescaped = r'(?<!\\)(?:%s)' % '|'.join('(?P<%s>%s)' % (name, value) for name, value in tokens.iteritems())
|
||||
# The final pattern matches either the above pattern, or an escaped
|
||||
# backslash, captured in the "escape" match group.
|
||||
return re.compile('(?:%s|%s)' % (nonescaped, r'(?P<escape>\\\\)'))
|
||||
@@ -115,7 +115,7 @@ class ClineSplitter(list):
|
||||
self._push(self.cline[:m.start()])
|
||||
self.cline = self.cline[m.end():]
|
||||
|
||||
match = dict([(name, value) for name, value in list(m.groupdict().items()) if value])
|
||||
match = dict([(name, value) for name, value in m.groupdict().items() if value])
|
||||
if 'quote' in match:
|
||||
# " or ' start a quoted string
|
||||
if match['quote'] == '"':
|
||||
@@ -129,7 +129,7 @@ class ClineSplitter(list):
|
||||
elif 'special' in match:
|
||||
# Unquoted, non-escaped special characters need to be sent to a
|
||||
# shell.
|
||||
raise MetaCharacterException(match['special'])
|
||||
raise MetaCharacterException, match['special']
|
||||
elif 'whitespace' in match:
|
||||
# Whitespaces terminate current argument.
|
||||
self._next()
|
||||
@@ -145,7 +145,7 @@ class ClineSplitter(list):
|
||||
self.glob = True
|
||||
self._push(m.group(0))
|
||||
else:
|
||||
raise Exception("Shouldn't reach here")
|
||||
raise Exception, "Shouldn't reach here"
|
||||
if self.arg:
|
||||
self._next()
|
||||
|
||||
@@ -153,20 +153,20 @@ class ClineSplitter(list):
|
||||
# Single quoted strings are preserved, except for the final quote
|
||||
index = self.cline.find("'")
|
||||
if index == -1:
|
||||
raise Exception('Unterminated quoted string in command')
|
||||
raise Exception, 'Unterminated quoted string in command'
|
||||
self._push(self.cline[:index])
|
||||
self.cline = self.cline[index+1:]
|
||||
|
||||
def _parse_doubly_quoted(self):
|
||||
if not self.cline:
|
||||
raise Exception('Unterminated quoted string in command')
|
||||
raise Exception, 'Unterminated quoted string in command'
|
||||
while self.cline:
|
||||
m = _doubly_quoted_tokens.search(self.cline)
|
||||
if not m:
|
||||
raise Exception('Unterminated quoted string in command')
|
||||
raise Exception, 'Unterminated quoted string in command'
|
||||
self._push(self.cline[:m.start()])
|
||||
self.cline = self.cline[m.end():]
|
||||
match = dict([(name, value) for name, value in list(m.groupdict().items()) if value])
|
||||
match = dict([(name, value) for name, value in m.groupdict().items() if value])
|
||||
if 'quote' in match:
|
||||
# a double quote ends the quoted string, so go back to
|
||||
# unquoted parsing
|
||||
@@ -175,7 +175,7 @@ class ClineSplitter(list):
|
||||
# Unquoted, non-escaped special characters in a doubly quoted
|
||||
# string still have a special meaning and need to be sent to a
|
||||
# shell.
|
||||
raise MetaCharacterException(match['special'])
|
||||
raise MetaCharacterException, match['special']
|
||||
elif 'escape' in match:
|
||||
# Escaped backslashes turn into a single backslash
|
||||
self._push('\\')
|
||||
@@ -194,7 +194,7 @@ def clinetoargv(cline, cwd):
|
||||
str = _escapednewlines.sub('', cline)
|
||||
try:
|
||||
args = ClineSplitter(str, cwd)
|
||||
except MetaCharacterException as e:
|
||||
except MetaCharacterException, e:
|
||||
return None, e.char
|
||||
|
||||
if len(args) and args[0].find('=') != -1:
|
||||
@@ -327,12 +327,12 @@ class PopenJob(Job):
|
||||
# general overview of "subprocess PATH semantics and portability".
|
||||
oldpath = os.environ['PATH']
|
||||
try:
|
||||
if self.env is not None and 'PATH' in self.env:
|
||||
if self.env is not None and self.env.has_key('PATH'):
|
||||
os.environ['PATH'] = self.env['PATH']
|
||||
p = subprocess.Popen(self.argv, executable=self.executable, shell=self.shell, env=self.env, cwd=self.cwd)
|
||||
return p.wait()
|
||||
except OSError as e:
|
||||
print(e, file=sys.stderr)
|
||||
except OSError, e:
|
||||
print >>sys.stderr, e
|
||||
return -127
|
||||
finally:
|
||||
os.environ['PATH'] = oldpath
|
||||
@@ -383,30 +383,30 @@ class PythonJob(Job):
|
||||
try:
|
||||
__import__(self.module)
|
||||
except Exception as e:
|
||||
print('Error importing %s: %s' % (
|
||||
self.module, e), file=sys.stderr)
|
||||
print >>sys.stderr, 'Error importing %s: %s' % (
|
||||
self.module, e)
|
||||
return -127
|
||||
|
||||
m = sys.modules[self.module]
|
||||
if self.method not in m.__dict__:
|
||||
print("No method named '%s' in module %s" % (self.method, self.module), file=sys.stderr)
|
||||
print >>sys.stderr, "No method named '%s' in module %s" % (self.method, self.module)
|
||||
return -127
|
||||
rv = m.__dict__[self.method](self.argv)
|
||||
if rv != 0 and rv is not None:
|
||||
print((
|
||||
print >>sys.stderr, (
|
||||
"Native command '%s %s' returned value '%s'" %
|
||||
(self.module, self.method, rv)), file=sys.stderr)
|
||||
(self.module, self.method, rv))
|
||||
return (rv if isinstance(rv, int) else 1)
|
||||
|
||||
except PythonException as e:
|
||||
print(e, file=sys.stderr)
|
||||
except PythonException, e:
|
||||
print >>sys.stderr, e
|
||||
return e.exitcode
|
||||
except:
|
||||
e = sys.exc_info()[1]
|
||||
if isinstance(e, SystemExit) and (e.code == 0 or e.code is None):
|
||||
pass # sys.exit(0) is not a failure
|
||||
else:
|
||||
print(e, file=sys.stderr)
|
||||
print >>sys.stderr, e
|
||||
traceback.print_exc()
|
||||
return -127
|
||||
finally:
|
||||
@@ -461,7 +461,7 @@ class ParallelContext(object):
|
||||
|
||||
def _docall_generic(self, pool, job, cb, echo, justprint):
|
||||
if echo is not None:
|
||||
print(echo)
|
||||
print echo
|
||||
processcb = job.get_callback(ParallelContext._condition)
|
||||
if justprint:
|
||||
processcb(0)
|
||||
@@ -491,7 +491,7 @@ class ParallelContext(object):
|
||||
def _checkdone():
|
||||
jobs = []
|
||||
for c in ParallelContext._allcontexts:
|
||||
for i in range(0, len(c.running)):
|
||||
for i in xrange(0, len(c.running)):
|
||||
if c.running[i][0].done:
|
||||
jobs.append(c.running[i])
|
||||
for j in jobs:
|
||||
|
||||
@@ -82,7 +82,7 @@ else:
|
||||
return str[:offset], token, str[offset + len(token):]
|
||||
|
||||
try:
|
||||
from builtins import any
|
||||
from __builtin__ import any
|
||||
except ImportError:
|
||||
def any(it):
|
||||
for i in it:
|
||||
@@ -138,7 +138,7 @@ class MostUsedCache(object):
|
||||
return item.o
|
||||
|
||||
def verify(self):
|
||||
for k, v in self.d.items():
|
||||
for k, v in self.d.iteritems():
|
||||
if v.o:
|
||||
assert v in self.active
|
||||
else:
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import pymake.data, pymake.functions, pymake.util
|
||||
import unittest
|
||||
import re
|
||||
from io import StringIO
|
||||
from cStringIO import StringIO
|
||||
|
||||
def multitest(cls):
|
||||
for name in cls.testdata.keys():
|
||||
for name in cls.testdata.iterkeys():
|
||||
def m(self, name=name):
|
||||
return self.runSingle(*self.testdata[name])
|
||||
|
||||
@@ -63,7 +63,7 @@ class LRUTest(unittest.TestCase):
|
||||
c = pymake.util.LRUCache(3, self.spaceFunc, lambda k, v: k % 2)
|
||||
self.assertEqual(tuple(c.debugitems()), ())
|
||||
|
||||
for i in range(0, len(self.expected)):
|
||||
for i in xrange(0, len(self.expected)):
|
||||
k, e, fc, di = self.expected[i]
|
||||
|
||||
v = c.get(k)
|
||||
|
||||
@@ -277,7 +277,7 @@ class MakefileCorupusTest(TestBase):
|
||||
|
||||
self.assertEqual(len(statements), len(new_statements))
|
||||
|
||||
for i in range(0, len(statements)):
|
||||
for i in xrange(0, len(statements)):
|
||||
original = statements[i]
|
||||
formatted = new_statements[i]
|
||||
|
||||
|
||||
@@ -2,10 +2,10 @@ import pymake.data, pymake.parser, pymake.parserdata, pymake.functions
|
||||
import unittest
|
||||
import logging
|
||||
|
||||
from io import StringIO
|
||||
from cStringIO import StringIO
|
||||
|
||||
def multitest(cls):
|
||||
for name in cls.testdata.keys():
|
||||
for name in cls.testdata.iterkeys():
|
||||
def m(self, name=name):
|
||||
return self.runSingle(*self.testdata[name])
|
||||
|
||||
@@ -134,7 +134,7 @@ class IterTest(TestBase):
|
||||
self.assertEqual(actual, expected)
|
||||
|
||||
if ifunc == pymake.parser.itermakefilechars:
|
||||
print("testing %r" % expected)
|
||||
print "testing %r" % expected
|
||||
self.assertEqual(pymake.parser.flattenmakesyntax(d, 0), expected)
|
||||
|
||||
multitest(IterTest)
|
||||
@@ -207,7 +207,7 @@ class MakeSyntaxTest(TestBase):
|
||||
def compareRecursive(self, actual, expected, path):
|
||||
self.assertEqual(len(actual), len(expected),
|
||||
"compareRecursive: %s %r" % (path, actual))
|
||||
for i in range(0, len(actual)):
|
||||
for i in xrange(0, len(actual)):
|
||||
ipath = path + [i]
|
||||
|
||||
a, isfunc = actual[i]
|
||||
@@ -217,7 +217,7 @@ class MakeSyntaxTest(TestBase):
|
||||
else:
|
||||
self.assertEqual(type(a), getattr(pymake.functions, e['type']),
|
||||
"compareRecursive: %s" % (ipath,))
|
||||
for k, v in e.items():
|
||||
for k, v in e.iteritems():
|
||||
if k == 'type':
|
||||
pass
|
||||
elif k[0] == '[':
|
||||
@@ -264,7 +264,7 @@ class VariableTest(TestBase):
|
||||
|
||||
m = pymake.data.Makefile()
|
||||
stmts.execute(m)
|
||||
for k, v in self.expected.items():
|
||||
for k, v in self.expected.iteritems():
|
||||
flavor, source, val = m.variables.get(k)
|
||||
if val is None:
|
||||
self.assertEqual(val, v, 'variable named %s' % k)
|
||||
|
||||
@@ -63,7 +63,7 @@ def runTest(makefile, make, logfile, options):
|
||||
"""
|
||||
|
||||
if os.path.exists(opts.tempdir): shutil.rmtree(opts.tempdir)
|
||||
os.mkdir(opts.tempdir, 0o755)
|
||||
os.mkdir(opts.tempdir, 0755)
|
||||
|
||||
logfd = open(logfile, 'w')
|
||||
p = Popen(make + options['commandline'], stdout=logfd, stderr=STDOUT, env=options['env'])
|
||||
@@ -78,15 +78,15 @@ def runTest(makefile, make, logfile, options):
|
||||
logfd.close()
|
||||
|
||||
if stdout.find('TEST-FAIL') != -1:
|
||||
print(stdout)
|
||||
print stdout
|
||||
return False, "FAIL (TEST-FAIL printed)"
|
||||
|
||||
if options['grepfor'] and stdout.find(options['grepfor']) == -1:
|
||||
print(stdout)
|
||||
print stdout
|
||||
return False, "FAIL (%s not in output)" % options['grepfor']
|
||||
|
||||
if options['returncode'] == 0 and stdout.find('TEST-PASS') == -1:
|
||||
print(stdout)
|
||||
print stdout
|
||||
return False, 'FAIL (No TEST-PASS printed)'
|
||||
|
||||
if options['returncode'] != 0:
|
||||
@@ -94,7 +94,7 @@ def runTest(makefile, make, logfile, options):
|
||||
|
||||
return True, 'PASS'
|
||||
|
||||
print("%-30s%-28s%-28s" % ("Test:", "gmake:", "pymake:"))
|
||||
print "%-30s%-28s%-28s" % ("Test:", "gmake:", "pymake:")
|
||||
|
||||
gmakefails = 0
|
||||
pymakefails = 0
|
||||
@@ -144,7 +144,7 @@ for makefile in makefiles:
|
||||
if sys.platform in data:
|
||||
d['returncode'] = data[sys.platform]
|
||||
elif key == 'environment':
|
||||
for k, v in data.items():
|
||||
for k, v in data.iteritems():
|
||||
d['env'][k] = v
|
||||
elif key == 'grep-for':
|
||||
d['grepfor'] = data
|
||||
@@ -153,7 +153,7 @@ for makefile in makefiles:
|
||||
elif key == 'skip':
|
||||
d['skip'] = True
|
||||
else:
|
||||
print("%s: Unexpected #T key: %s" % (makefile, key), file=sys.stderr)
|
||||
print >>sys.stderr, "%s: Unexpected #T key: %s" % (makefile, key)
|
||||
sys.exit(1)
|
||||
|
||||
mdata.close()
|
||||
@@ -190,12 +190,12 @@ for makefile in makefiles:
|
||||
else:
|
||||
pymakemsg = "OK (known fail)"
|
||||
|
||||
print("%-30.30s%-28.28s%-28.28s" % (os.path.basename(makefile),
|
||||
gmakemsg, pymakemsg))
|
||||
print "%-30.30s%-28.28s%-28.28s" % (os.path.basename(makefile),
|
||||
gmakemsg, pymakemsg)
|
||||
|
||||
print()
|
||||
print("Summary:")
|
||||
print("%-30s%-28s%-28s" % ("", "gmake:", "pymake:"))
|
||||
print
|
||||
print "Summary:"
|
||||
print "%-30s%-28s%-28s" % ("", "gmake:", "pymake:")
|
||||
|
||||
if gmakefails == 0:
|
||||
gmakemsg = 'PASS'
|
||||
@@ -207,7 +207,7 @@ if pymakefails == 0:
|
||||
else:
|
||||
pymakemsg = 'FAIL (%i failures)' % pymakefails
|
||||
|
||||
print("%-30.30s%-28.28s%-28.28s" % ('', gmakemsg, pymakemsg))
|
||||
print "%-30.30s%-28.28s%-28.28s" % ('', gmakemsg, pymakemsg)
|
||||
|
||||
shutil.rmtree(opts.tempdir)
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ from os import path
|
||||
import re
|
||||
import shutil
|
||||
import sys
|
||||
from urllib.request import urlopen
|
||||
from urllib2 import urlopen
|
||||
|
||||
from release.paths import makeCandidatesDir
|
||||
|
||||
@@ -50,7 +50,7 @@ def findOldBuildIDs(product, version, buildNumber, platforms,
|
||||
id = getBuildID(platform, product, version, n, nightlyDir,
|
||||
server)
|
||||
ids[platform].append(id)
|
||||
except Exception as e:
|
||||
except Exception, e:
|
||||
log.error("Hit exception: %s" % e)
|
||||
return ids
|
||||
|
||||
@@ -87,10 +87,10 @@ def readBranchConfig(dir, localconfig, branch, required=[]):
|
||||
|
||||
def readConfig(configfile, keys=[], required=[]):
|
||||
c = {}
|
||||
exec(compile(open(configfile, "rb").read(), configfile, 'exec'), c)
|
||||
execfile(configfile, c)
|
||||
for k in keys:
|
||||
c = c[k]
|
||||
items = list(c.keys())
|
||||
items = c.keys()
|
||||
err = False
|
||||
for key in required:
|
||||
if key not in items:
|
||||
@@ -137,7 +137,7 @@ def getReleaseName(product, version, buildNumber):
|
||||
|
||||
|
||||
def getRepoMatchingBranch(branch, sourceRepositories):
|
||||
for sr in list(sourceRepositories.values()):
|
||||
for sr in sourceRepositories.values():
|
||||
if branch in sr['path']:
|
||||
return sr
|
||||
return None
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import difflib
|
||||
import logging
|
||||
import re
|
||||
import urllib.request, urllib.error, urllib.parse
|
||||
import urllib2
|
||||
from util.commands import run_cmd, get_output
|
||||
from util.hg import get_repo_name, make_hg_url
|
||||
from subprocess import CalledProcessError
|
||||
|
||||
+24
-29
@@ -13,11 +13,9 @@ import re
|
||||
import subprocess
|
||||
import sys
|
||||
import pickle
|
||||
from locale import getpreferredencoding
|
||||
|
||||
import mozpack.path as mozpath
|
||||
|
||||
encoding = getpreferredencoding(False)
|
||||
|
||||
class Pool(object):
|
||||
def __new__(cls, size):
|
||||
@@ -29,7 +27,7 @@ class Pool(object):
|
||||
return super(Pool, cls).__new__(cls)
|
||||
|
||||
def imap_unordered(self, fn, iterable):
|
||||
return map(fn, iterable)
|
||||
return itertools.imap(fn, iterable)
|
||||
|
||||
def close(self):
|
||||
pass
|
||||
@@ -62,7 +60,7 @@ class File(object):
|
||||
|
||||
modified = True
|
||||
if os.path.exists(self._path):
|
||||
if open(self._path, 'r', encoding=encoding, errors='replace').read() == self._content:
|
||||
if open(self._path, 'rb').read() == self._content:
|
||||
modified = False
|
||||
self._modified = modified
|
||||
return modified
|
||||
@@ -133,11 +131,11 @@ def maybe_clear_cache(data):
|
||||
is_set = cache.get('ac_cv_env_%s_set' % precious) == 'set'
|
||||
value = cache.get('ac_cv_env_%s_value' % precious) if is_set else None
|
||||
if value != env.get(precious):
|
||||
print('Removing %s because of %s value change from:' \
|
||||
% (data['cache-file'], precious))
|
||||
print(' %s' % (value if value is not None else 'undefined'))
|
||||
print('to:')
|
||||
print(' %s' % env.get(precious, 'undefined'))
|
||||
print 'Removing %s because of %s value change from:' \
|
||||
% (data['cache-file'], precious)
|
||||
print ' %s' % (value if value is not None else 'undefined')
|
||||
print 'to:'
|
||||
print ' %s' % env.get(precious, 'undefined')
|
||||
os.remove(data['cache-file'])
|
||||
return True
|
||||
return False
|
||||
@@ -162,11 +160,9 @@ def get_config_files(data):
|
||||
|
||||
# Scan the config.status output for information about configuration files
|
||||
# it generates.
|
||||
raw_output = subprocess.check_output(
|
||||
config_status_output = subprocess.check_output(
|
||||
[data['shell'], '-c', '%s --help' % config_status],
|
||||
stderr=subprocess.STDOUT)
|
||||
config_status_output = raw_output.decode(encoding,
|
||||
errors='replace').splitlines()
|
||||
stderr=subprocess.STDOUT).splitlines()
|
||||
state = None
|
||||
for line in config_status_output:
|
||||
if line.startswith('Configuration') and line.endswith(':'):
|
||||
@@ -187,6 +183,7 @@ def get_config_files(data):
|
||||
|
||||
return config_files, command_files
|
||||
|
||||
|
||||
def prepare(srcdir, objdir, shell, args):
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--target', type=str)
|
||||
@@ -235,7 +232,7 @@ def prepare(srcdir, objdir, shell, args):
|
||||
'args': others,
|
||||
'shell': shell,
|
||||
'srcdir': srcdir,
|
||||
'env': {str(k): str(v) for k, v in environ.items()},
|
||||
'env': environ,
|
||||
}
|
||||
|
||||
if args.cache_file:
|
||||
@@ -252,9 +249,9 @@ def prepare(srcdir, objdir, shell, args):
|
||||
except OSError as e:
|
||||
if e.errno != errno.EEXIST:
|
||||
raise
|
||||
for k, v in data.items():
|
||||
with open(data_file, 'wb') as f:
|
||||
pickle.dump(data, f)
|
||||
|
||||
with open(data_file, 'wb') as f:
|
||||
pickle.dump(data, f)
|
||||
|
||||
|
||||
def prefix_lines(text, prefix):
|
||||
@@ -264,6 +261,7 @@ def prefix_lines(text, prefix):
|
||||
def run(objdir):
|
||||
ret = 0
|
||||
output = ''
|
||||
|
||||
with open(os.path.join(objdir, CONFIGURE_DATA), 'rb') as f:
|
||||
data = pickle.load(f)
|
||||
|
||||
@@ -335,16 +333,14 @@ def run(objdir):
|
||||
# We're going to run it ourselves.
|
||||
command += ['--no-create']
|
||||
|
||||
print(prefix_lines('configuring', relobjdir))
|
||||
print(prefix_lines('running %s' % ' '.join(command[:-1]), relobjdir))
|
||||
print prefix_lines('configuring', relobjdir)
|
||||
print prefix_lines('running %s' % ' '.join(command[:-1]), relobjdir)
|
||||
sys.stdout.flush()
|
||||
try:
|
||||
raw_output = subprocess.check_output(command,
|
||||
output += subprocess.check_output(command,
|
||||
stderr=subprocess.STDOUT, cwd=objdir, env=data['env'])
|
||||
output += raw_output.decode(encoding, errors='replace')
|
||||
except subprocess.CalledProcessError as e:
|
||||
err = e.output.decode(encoding, errors='replace')
|
||||
return relobjdir, e.returncode, err
|
||||
return relobjdir, e.returncode, e.output
|
||||
|
||||
# Leave config.status with a new timestamp if configure is newer than
|
||||
# its original mtime.
|
||||
@@ -372,13 +368,12 @@ def run(objdir):
|
||||
|
||||
if not skip_config_status:
|
||||
if skip_configure:
|
||||
print(prefix_lines('running config.status', relobjdir))
|
||||
print prefix_lines('running config.status', relobjdir)
|
||||
sys.stdout.flush()
|
||||
try:
|
||||
raw_output = subprocess.check_output([data['shell'], '-c',
|
||||
output += subprocess.check_output([data['shell'], '-c',
|
||||
'./config.status'], stderr=subprocess.STDOUT, cwd=objdir,
|
||||
env=data['env'])
|
||||
output += raw_output.decode(encoding, errors='replace')
|
||||
except subprocess.CalledProcessError as e:
|
||||
ret = e.returncode
|
||||
output += e.output
|
||||
@@ -400,9 +395,9 @@ def subconfigure(args):
|
||||
args, others = parser.parse_known_args(args)
|
||||
subconfigures = args.subconfigures
|
||||
if args.list:
|
||||
subconfigures.extend(open(args.list, 'r', encoding=encoding, errors='replace').read().splitlines())
|
||||
subconfigures.extend(open(args.list, 'rb').read().splitlines())
|
||||
if args.skip:
|
||||
skips = set(open(args.skip, 'r', encoding=encoding, errors='replace').read().splitlines())
|
||||
skips = set(open(args.skip, 'rb').read().splitlines())
|
||||
subconfigures = [s for s in subconfigures if s not in skips]
|
||||
|
||||
if not subconfigures:
|
||||
@@ -415,7 +410,7 @@ def subconfigure(args):
|
||||
pool = Pool(len(subconfigures))
|
||||
for relobjdir, returncode, output in \
|
||||
pool.imap_unordered(run, subconfigures):
|
||||
print(prefix_lines(output, relobjdir))
|
||||
print prefix_lines(output, relobjdir)
|
||||
sys.stdout.flush()
|
||||
ret = max(returncode, ret)
|
||||
if ret:
|
||||
|
||||
@@ -290,6 +290,11 @@ fi
|
||||
if [ -n "$LD_LIBRARY_PATH_64" ]; then
|
||||
LD_LIBRARY_PATH_64=${MOZ_DIST_BIN}:${MOZ_DIST_BIN}/plugins:${MRE_HOME}${LD_LIBRARY_PATH_64:+":$LD_LIBRARY_PATH_64"}
|
||||
fi
|
||||
#
|
||||
#
|
||||
## Set SHLIB_PATH for HPUX
|
||||
SHLIB_PATH=${MOZ_DIST_BIN}:${MRE_HOME}${SHLIB_PATH:+":$SHLIB_PATH"}
|
||||
#
|
||||
## Set LIBPATH for AIX
|
||||
LIBPATH=${MOZ_DIST_BIN}:${MRE_HOME}${LIBPATH:+":$LIBPATH"}
|
||||
#
|
||||
@@ -334,6 +339,7 @@ then
|
||||
fi
|
||||
echo "DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH"
|
||||
echo " LIBRARY_PATH=$LIBRARY_PATH"
|
||||
echo " SHLIB_PATH=$SHLIB_PATH"
|
||||
echo " LIBPATH=$LIBPATH"
|
||||
echo " ADDON_PATH=$ADDON_PATH"
|
||||
echo " MOZ_PROGRAM=$MOZ_PROGRAM"
|
||||
@@ -344,7 +350,7 @@ then
|
||||
fi
|
||||
#
|
||||
export MOZILLA_FIVE_HOME LD_LIBRARY_PATH
|
||||
export LIBPATH LIBRARY_PATH ADDON_PATH DYLD_LIBRARY_PATH
|
||||
export SHLIB_PATH LIBPATH LIBRARY_PATH ADDON_PATH DYLD_LIBRARY_PATH
|
||||
|
||||
if [ $moz_debug -eq 1 ]
|
||||
then
|
||||
|
||||
+17
-17
@@ -104,10 +104,10 @@ def DoSSHCommand(command, user, host, port=None, ssh_key=None):
|
||||
try:
|
||||
output = f(cmdline, stderr=STDOUT).strip()
|
||||
except CalledProcessError as e:
|
||||
print("failed ssh command output:")
|
||||
print('=' * 20)
|
||||
print(e.output)
|
||||
print('=' * 20)
|
||||
print "failed ssh command output:"
|
||||
print '=' * 20
|
||||
print e.output
|
||||
print '=' * 20
|
||||
raise
|
||||
return output
|
||||
|
||||
@@ -118,7 +118,7 @@ def DoSCPFile(file, remote_path, user, host, port=None, ssh_key=None,
|
||||
"""Upload file to user@host:remote_path using scp. Optionally use
|
||||
port and ssh_key, if provided."""
|
||||
if log:
|
||||
print('Uploading %s' % file)
|
||||
print 'Uploading %s' % file
|
||||
cmdline = ["scp"]
|
||||
AppendOptionalArgsToSSHCommandline(cmdline, port, ssh_key)
|
||||
cmdline.extend([WindowsPathToMsysPath(file),
|
||||
@@ -221,8 +221,8 @@ def UploadFiles(user, host, path, files, verbose=False, port=None, ssh_key=None,
|
||||
if not host or not user:
|
||||
return {}
|
||||
if (not path and not upload_to_temp_dir) or (path and upload_to_temp_dir):
|
||||
print("One (and only one of UPLOAD_PATH or UPLOAD_TO_TEMP must be " + \
|
||||
"defined.")
|
||||
print "One (and only one of UPLOAD_PATH or UPLOAD_TO_TEMP must be " + \
|
||||
"defined."
|
||||
sys.exit(1)
|
||||
|
||||
if upload_to_temp_dir:
|
||||
@@ -269,18 +269,18 @@ def UploadFiles(user, host, path, files, verbose=False, port=None, ssh_key=None,
|
||||
|
||||
if post_upload_command is not None:
|
||||
if verbose:
|
||||
print("Running post-upload command: " + post_upload_command)
|
||||
print "Running post-upload command: " + post_upload_command
|
||||
file_list = '"' + '" "'.join(remote_files) + '"'
|
||||
output = DoSSHCommand('%s "%s" %s' % (post_upload_command, path, file_list), user, host, port=port, ssh_key=ssh_key)
|
||||
# We print since mozharness may parse URLs from the output stream.
|
||||
print(output)
|
||||
print output
|
||||
properties = GetUrlProperties(output, package)
|
||||
finally:
|
||||
if upload_to_temp_dir:
|
||||
DoSSHCommand("rm -rf %s" % path, user, host, port=port,
|
||||
ssh_key=ssh_key)
|
||||
if verbose:
|
||||
print("Upload complete")
|
||||
print "Upload complete"
|
||||
return properties
|
||||
|
||||
def CopyFilesLocally(path, files, verbose=False, base_path=None, package=None):
|
||||
@@ -299,7 +299,7 @@ def CopyFilesLocally(path, files, verbose=False, base_path=None, package=None):
|
||||
if not os.path.exists(target_path):
|
||||
os.makedirs(target_path)
|
||||
if verbose:
|
||||
print("Copying " + file + " to " + target_path)
|
||||
print "Copying " + file + " to " + target_path
|
||||
shutil.copy(file, target_path)
|
||||
|
||||
def WriteProperties(files, properties_file, url_properties, package):
|
||||
@@ -341,20 +341,20 @@ if __name__ == '__main__':
|
||||
help="Name of the main package.")
|
||||
(options, args) = parser.parse_args()
|
||||
if len(args) < 1:
|
||||
print("You must specify at least one file to upload")
|
||||
print "You must specify at least one file to upload"
|
||||
sys.exit(1)
|
||||
if not options.properties_file:
|
||||
print("You must specify a --properties-file")
|
||||
print "You must specify a --properties-file"
|
||||
sys.exit(1)
|
||||
|
||||
if host == "localhost":
|
||||
if upload_to_temp_dir:
|
||||
print("Cannot use UPLOAD_TO_TEMP with UPLOAD_HOST=localhost")
|
||||
print "Cannot use UPLOAD_TO_TEMP with UPLOAD_HOST=localhost"
|
||||
sys.exit(1)
|
||||
if post_upload_command:
|
||||
# POST_UPLOAD_COMMAND is difficult to extract from the mozharness
|
||||
# scripts, so just ignore it until it's no longer used anywhere
|
||||
print("Ignoring POST_UPLOAD_COMMAND with UPLOAD_HOST=localhost")
|
||||
print "Ignoring POST_UPLOAD_COMMAND with UPLOAD_HOST=localhost"
|
||||
|
||||
try:
|
||||
if host == "localhost":
|
||||
@@ -370,6 +370,6 @@ if __name__ == '__main__':
|
||||
package=options.package, verbose=True)
|
||||
|
||||
WriteProperties(args, options.properties_file, url_properties, options.package)
|
||||
except IOError as strerror:
|
||||
print(strerror)
|
||||
except IOError, (strerror):
|
||||
print strerror
|
||||
sys.exit(1)
|
||||
@@ -36,7 +36,7 @@ def count_ctors(filename):
|
||||
# Even if we have .ctors, we shouldn't have any constructors in .ctors.
|
||||
# Complain if .ctors does not look how we expect it to.
|
||||
if have_ctors and n_ctors_ctors != 0:
|
||||
print("Unexpected .ctors contents for", filename, file=sys.stderr)
|
||||
print >>sys.stderr, "Unexpected .ctors contents for", filename
|
||||
sys.exit(1)
|
||||
return n_init_array_ctors
|
||||
if have_ctors:
|
||||
@@ -44,7 +44,7 @@ def count_ctors(filename):
|
||||
|
||||
# We didn't find anything; somebody switched initialization mechanisms on
|
||||
# us, or the binary is completely busted. Complain either way.
|
||||
print("Couldn't find .init_array or .ctors in", filename, file=sys.stderr)
|
||||
print >>sys.stderr, "Couldn't find .init_array or .ctors in", filename
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == '__main__':
|
||||
@@ -60,5 +60,5 @@ if __name__ == '__main__':
|
||||
}]}
|
||||
]
|
||||
}
|
||||
print("PERFHERDER_DATA: %s" % json.dumps(perfherder_data))
|
||||
print "PERFHERDER_DATA: %s" % json.dumps(perfherder_data)
|
||||
|
||||
+7
-7
@@ -2,8 +2,8 @@
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
from urllib.parse import urlsplit
|
||||
from configparser import RawConfigParser
|
||||
from urlparse import urlsplit
|
||||
from ConfigParser import RawConfigParser
|
||||
|
||||
from util.commands import run_cmd, get_output, remove_path
|
||||
from util.retry import retry
|
||||
@@ -105,7 +105,7 @@ def purge(dest):
|
||||
try:
|
||||
run_cmd(['hg', '--config', 'extensions.purge=', 'purge',
|
||||
'-a', '--all', dest], cwd=dest)
|
||||
except subprocess.CalledProcessError as e:
|
||||
except subprocess.CalledProcessError, e:
|
||||
log.debug('purge failed: %s' % e)
|
||||
raise
|
||||
|
||||
@@ -306,7 +306,7 @@ def out(src, remote, **kwargs):
|
||||
branch = "default"
|
||||
revs.append((rev, branch))
|
||||
return revs
|
||||
except subprocess.CalledProcessError as inst:
|
||||
except subprocess.CalledProcessError, inst:
|
||||
# In some situations, some versions of Mercurial return "1"
|
||||
# if no changes are found, so we need to ignore this return code
|
||||
if inst.returncode == 1:
|
||||
@@ -500,7 +500,7 @@ def apply_and_push(localrepo, remote, changer, max_attempts=10,
|
||||
push(src=localrepo, remote=remote, ssh_username=ssh_username,
|
||||
ssh_key=ssh_key, force=force)
|
||||
return
|
||||
except subprocess.CalledProcessError as e:
|
||||
except subprocess.CalledProcessError, e:
|
||||
log.debug("Hit error when trying to push: %s" % str(e))
|
||||
if n == max_attempts:
|
||||
log.debug("Tried %d times, giving up" % max_attempts)
|
||||
@@ -515,7 +515,7 @@ def apply_and_push(localrepo, remote, changer, max_attempts=10,
|
||||
try:
|
||||
run_cmd(['hg', '--config', 'ui.merge=internal:merge',
|
||||
'rebase'], cwd=localrepo)
|
||||
except subprocess.CalledProcessError as e:
|
||||
except subprocess.CalledProcessError, e:
|
||||
log.debug("Failed to rebase: %s" % str(e))
|
||||
update(localrepo, branch=branch)
|
||||
for r in reversed(new_revs):
|
||||
@@ -578,7 +578,7 @@ def adjust_paths(dest, **paths):
|
||||
config.add_section('paths')
|
||||
|
||||
changed = False
|
||||
for path_name, path_value in list(paths.items()):
|
||||
for path_name, path_value in paths.items():
|
||||
if (not config.has_option('paths', path_name) or
|
||||
config.get('paths', path_name) != path_value):
|
||||
changed = True
|
||||
|
||||
@@ -11,6 +11,7 @@ mozbuild.pth:python/mozbuild
|
||||
mozversioncontrol.pth:python/mozversioncontrol
|
||||
mozlint.pth:python/mozlint
|
||||
pymake.pth:build/pymake
|
||||
optional:setup.py:python/psutil:build_ext:--inplace
|
||||
optional:psutil.pth:python/psutil
|
||||
which.pth:python/which
|
||||
ply.pth:other-licenses/ply/
|
||||
@@ -28,7 +29,6 @@ moztreedocs.pth:tools/docs
|
||||
packages.txt:testing/mozbase/packages.txt
|
||||
objdir:build
|
||||
gyp.pth:media/webrtc/trunk/tools/gyp/pylib
|
||||
six.pth:python/requests/requests/packages/urllib3/packages
|
||||
pyasn1.pth:python/pyasn1
|
||||
pyasn1_modules.pth:python/pyasn1-modules
|
||||
bitstring.pth:python/bitstring
|
||||
|
||||
+11
-13
@@ -23,8 +23,8 @@ BINSCOPE_OUTPUT_LOGFILE = r".\binscope_xml_output.log"
|
||||
|
||||
# usage
|
||||
if len(sys.argv) < 3:
|
||||
print("""usage : autobinscope.by path_to_binary path_to_symbols [log_file_path]"
|
||||
log_file_path is optional, log will be written to .\binscope_xml_output.log by default""")
|
||||
print """usage : autobinscope.by path_to_binary path_to_symbols [log_file_path]"
|
||||
log_file_path is optional, log will be written to .\binscope_xml_output.log by default"""
|
||||
sys.exit(0)
|
||||
|
||||
binary_path = sys.argv[1]
|
||||
@@ -40,7 +40,7 @@ else:
|
||||
try:
|
||||
binscope_path = os.environ['BINSCOPE']
|
||||
except KeyError:
|
||||
print("BINSCOPE environment variable is not set, can't check DEP/ASLR etc. status.")
|
||||
print "BINSCOPE environment variable is not set, can't check DEP/ASLR etc. status."
|
||||
sys.exit(0)
|
||||
|
||||
try:
|
||||
@@ -51,15 +51,13 @@ try:
|
||||
"/c", "CompilerVersionCheck", "/c", "SafeSEHCheck", "/c", "SNCheck",
|
||||
"/c", "DBCheck"], stdout=subprocess.PIPE)
|
||||
|
||||
except OSError as e:
|
||||
errno = e.errno
|
||||
strerror = e.strerror or str(e)
|
||||
except WindowsError, (errno, strerror):
|
||||
if errno != 2 and errno != 3:
|
||||
print("Unexpected error ! \nError " + str(errno) + " : " + strerror + "\nExiting !\n")
|
||||
print "Unexpected error ! \nError " + str(errno) + " : " + strerror + "\nExiting !\n"
|
||||
sys.exit(0)
|
||||
else:
|
||||
print("Could not locate binscope at location : %s\n" % binscope_path)
|
||||
print("Binscope wasn't installed or the BINSCOPE env variable wasn't set correctly, skipping this check and exiting...")
|
||||
print "Could not locate binscope at location : %s\n" % binscope_path
|
||||
print "Binscope wasn't installed or the BINSCOPE env variable wasn't set correctly, skipping this check and exiting..."
|
||||
sys.exit(0)
|
||||
|
||||
proc.wait()
|
||||
@@ -68,10 +66,10 @@ output = proc.communicate()[0]
|
||||
|
||||
# is this a PASS or a FAIL ?
|
||||
if proc.returncode != 0:
|
||||
print("Error count: %d" % proc.returncode)
|
||||
print("TEST-UNEXPECTED-FAIL | autobinscope.py | %s is missing a needed Windows protection, such as /GS or ASLR" % binary_path)
|
||||
print "Error count: %d" % proc.returncode
|
||||
print "TEST-UNEXPECTED-FAIL | autobinscope.py | %s is missing a needed Windows protection, such as /GS or ASLR" % binary_path
|
||||
logfile = open(log_file_path, "r")
|
||||
for line in logfile:
|
||||
print((line), end=' ')
|
||||
print(line),
|
||||
else:
|
||||
print("TEST-PASS | autobinscope.py | %s succeeded" % binary_path)
|
||||
print "TEST-PASS | autobinscope.py | %s succeeded" % binary_path
|
||||
@@ -39,6 +39,6 @@ def MergePGOFiles(basename, pgddir, pgcdir):
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) != 3:
|
||||
print("Usage: pgomerge.py <binary basename> <dist/bin>", file=sys.stderr)
|
||||
print >>sys.stderr, "Usage: pgomerge.py <binary basename> <dist/bin>"
|
||||
sys.exit(1)
|
||||
MergePGOFiles(sys.argv[1], os.getcwd(), sys.argv[2])
|
||||
@@ -40,9 +40,9 @@ if __name__ == '__main__':
|
||||
0, # no inherit
|
||||
int(pid))
|
||||
if handle:
|
||||
print("Process %s:" % pid)
|
||||
print "Process %s:" % pid
|
||||
vsize, peak_vsize = get_vmsize(handle)
|
||||
print("peak vsize: %d" % peak_vsize)
|
||||
print "peak vsize: %d" % peak_vsize
|
||||
ctypes.windll.kernel32.CloseHandle(handle)
|
||||
else:
|
||||
print("Couldn't open process %s" % pid)
|
||||
print "Couldn't open process %s" % pid
|
||||
@@ -200,7 +200,7 @@ def format_manifest(manifest):
|
||||
|
||||
def write_zip(zip_path, prefix=None):
|
||||
"""Write toolchain data to a zip file."""
|
||||
if isinstance(prefix, str):
|
||||
if isinstance(prefix, unicode):
|
||||
prefix = prefix.encode('utf-8')
|
||||
|
||||
with JarWriter(file=zip_path, optimize=False, compress=5) as zip:
|
||||
@@ -226,7 +226,7 @@ def write_zip(zip_path, prefix=None):
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) != 3:
|
||||
print(('usage: %s create-zip <path-prefix>' % sys.argv[0]))
|
||||
print('usage: %s create-zip <path-prefix>' % sys.argv[0])
|
||||
sys.exit(1)
|
||||
|
||||
assert sys.argv[1] == 'create-zip'
|
||||
@@ -244,7 +244,7 @@ if __name__ == '__main__':
|
||||
sha256.update(data)
|
||||
sha512.update(data)
|
||||
|
||||
print(('Hashes of %s (size=%d)' % (destzip, len(data))))
|
||||
print(('SHA-1: %s' % sha1.hexdigest()))
|
||||
print(('SHA-256: %s' % sha256.hexdigest()))
|
||||
print(('SHA-512: %s' % sha512.hexdigest()))
|
||||
print('Hashes of %s (size=%d)' % (destzip, len(data)))
|
||||
print('SHA-1: %s' % sha1.hexdigest())
|
||||
print('SHA-256: %s' % sha256.hexdigest())
|
||||
print('SHA-512: %s' % sha512.hexdigest())
|
||||
+8
-21
@@ -343,8 +343,7 @@ OriginAttributes::IsFirstPartyEnabled()
|
||||
return sFirstPartyIsolation;
|
||||
}
|
||||
|
||||
BasePrincipal::BasePrincipal(PrincipalKind aKind)
|
||||
: mKind(aKind)
|
||||
BasePrincipal::BasePrincipal()
|
||||
{}
|
||||
|
||||
BasePrincipal::~BasePrincipal()
|
||||
@@ -561,23 +560,6 @@ BasePrincipal::GetCspJSON(nsAString& outCSPinJSON)
|
||||
return mCSP->ToJSON(outCSPinJSON);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
BasePrincipal::IsSameOrigin(nsIURI* aURI, bool aIsPrivateWin, bool* aRes) {
|
||||
*aRes = false;
|
||||
nsCOMPtr<nsIURI> prinURI;
|
||||
nsresult rv = GetURI(getter_AddRefs(prinURI));
|
||||
if (NS_FAILED(rv) || !prinURI) {
|
||||
return NS_OK;
|
||||
}
|
||||
nsIScriptSecurityManager* ssm = nsContentUtils::GetSecurityManager();
|
||||
if (!ssm) {
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
;
|
||||
}
|
||||
*aRes = NS_SUCCEEDED(ssm->CheckSameOriginURI(prinURI, aURI, aIsPrivateWin));
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
BasePrincipal::GetIsNullPrincipal(bool* aResult)
|
||||
{
|
||||
@@ -625,8 +607,13 @@ BasePrincipal::GetOriginSuffix(nsACString& aOriginAttributes)
|
||||
NS_IMETHODIMP
|
||||
BasePrincipal::GetAppStatus(uint16_t* aAppStatus)
|
||||
{
|
||||
// TODO: Remove GetAppStatus.
|
||||
*aAppStatus = nsIPrincipal::APP_STATUS_NOT_INSTALLED;
|
||||
if (AppId() == nsIScriptSecurityManager::UNKNOWN_APP_ID) {
|
||||
NS_WARNING("Asking for app status on a principal with an unknown app id");
|
||||
*aAppStatus = nsIPrincipal::APP_STATUS_NOT_INSTALLED;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
*aAppStatus = nsScriptSecurityManager::AppStatusForPrincipal(this);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
+9
-20
@@ -251,14 +251,7 @@ public:
|
||||
class BasePrincipal : public nsJSPrincipals
|
||||
{
|
||||
public:
|
||||
enum PrincipalKind {
|
||||
eNullPrincipal,
|
||||
eCodebasePrincipal,
|
||||
eExpandedPrincipal,
|
||||
eSystemPrincipal
|
||||
};
|
||||
|
||||
explicit BasePrincipal(PrincipalKind aKind);
|
||||
BasePrincipal();
|
||||
|
||||
enum DocumentDomainConsideration { DontConsiderDocumentDomain, ConsiderDocumentDomain};
|
||||
bool Subsumes(nsIPrincipal* aOther, DocumentDomainConsideration aConsideration);
|
||||
@@ -289,7 +282,6 @@ public:
|
||||
NS_IMETHOD GetUnknownAppId(bool* aUnknownAppId) final;
|
||||
NS_IMETHOD GetUserContextId(uint32_t* aUserContextId) final;
|
||||
NS_IMETHOD GetPrivateBrowsingId(uint32_t* aPrivateBrowsingId) final;
|
||||
NS_IMETHOD IsSameOrigin(nsIURI* aURI, bool aIsPrivateWin, bool* aRes) override;
|
||||
|
||||
bool EqualsIgnoringAddonId(nsIPrincipal *aOther);
|
||||
|
||||
@@ -308,19 +300,17 @@ public:
|
||||
uint32_t PrivateBrowsingId() const { return mOriginAttributes.mPrivateBrowsingId; }
|
||||
bool IsInIsolatedMozBrowserElement() const { return mOriginAttributes.mInIsolatedMozBrowser; }
|
||||
|
||||
PrincipalKind Kind() const { return mKind; }
|
||||
enum PrincipalKind {
|
||||
eNullPrincipal,
|
||||
eCodebasePrincipal,
|
||||
eExpandedPrincipal,
|
||||
eSystemPrincipal
|
||||
};
|
||||
|
||||
virtual PrincipalKind Kind() = 0;
|
||||
|
||||
already_AddRefed<BasePrincipal> CloneStrippingUserContextIdAndFirstPartyDomain();
|
||||
|
||||
/**
|
||||
* Returns true if this principal's CSP should override a document's CSP for
|
||||
* loads that it triggers. Currently true only for expanded principals which
|
||||
* subsume the document principal.
|
||||
*/
|
||||
bool OverridesCSP(nsIPrincipal* aDocumentPrincipal) {
|
||||
return mKind == eExpandedPrincipal && Subsumes(aDocumentPrincipal, DontConsiderDocumentDomain);
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual ~BasePrincipal();
|
||||
|
||||
@@ -342,7 +332,6 @@ protected:
|
||||
nsCOMPtr<nsIContentSecurityPolicy> mCSP;
|
||||
nsCOMPtr<nsIContentSecurityPolicy> mPreloadCSP;
|
||||
PrincipalOriginAttributes mOriginAttributes;
|
||||
PrincipalKind mKind;
|
||||
};
|
||||
|
||||
} // namespace mozilla
|
||||
|
||||
@@ -223,12 +223,6 @@ interface nsIPrincipal : nsISerializable
|
||||
*/
|
||||
readonly attribute AUTF8String originSuffix;
|
||||
|
||||
/**
|
||||
* Uses NS_Security Compare to determine if the
|
||||
* other URI is same-origin as the uri of the Principal
|
||||
*/
|
||||
bool IsSameOrigin(in nsIURI otherURI, in bool aIsPrivateWin);
|
||||
|
||||
/**
|
||||
* The base domain of the codebase URI to which this principal pertains
|
||||
* (generally the document URI), handling null principals and
|
||||
@@ -303,6 +297,15 @@ interface nsIPrincipal : nsISerializable
|
||||
*/
|
||||
[infallible] readonly attribute unsigned long privateBrowsingId;
|
||||
|
||||
/**
|
||||
* Returns true iff the principal is inside an isolated mozbrowser element.
|
||||
* <iframe mozbrowser mozapp> and <xul:browser> are not considered to be
|
||||
* mozbrowser elements. <iframe mozbrowser noisolation> does not count as
|
||||
* isolated since isolation is disabled. Isolation can only be disabled if
|
||||
* the containing document is chrome.
|
||||
*/
|
||||
[infallible] readonly attribute boolean isInIsolatedMozBrowserElement;
|
||||
|
||||
/**
|
||||
* Returns true if this principal has an unknown appId. This shouldn't
|
||||
* generally be used. We only expose it due to not providing the correct
|
||||
|
||||
@@ -36,9 +36,7 @@ public:
|
||||
// This should only be used by deserialization, and the factory constructor.
|
||||
// Other consumers should use the Create and CreateWithInheritedAttributes
|
||||
// methods.
|
||||
nsNullPrincipal()
|
||||
: BasePrincipal(eNullPrincipal)
|
||||
{}
|
||||
nsNullPrincipal() {}
|
||||
|
||||
NS_DECL_NSISERIALIZABLE
|
||||
|
||||
@@ -62,6 +60,8 @@ public:
|
||||
|
||||
virtual nsresult GetScriptLocation(nsACString &aStr) override;
|
||||
|
||||
PrincipalKind Kind() override { return eNullPrincipal; }
|
||||
|
||||
protected:
|
||||
virtual ~nsNullPrincipal() {}
|
||||
|
||||
|
||||
+4
-16
@@ -31,6 +31,8 @@
|
||||
#include "mozilla/Preferences.h"
|
||||
#include "mozilla/HashFunctions.h"
|
||||
|
||||
#include "nsIAppsService.h"
|
||||
|
||||
using namespace mozilla;
|
||||
|
||||
static bool gCodeBasePrincipalSupport = false;
|
||||
@@ -64,11 +66,10 @@ nsPrincipal::InitializeStatics()
|
||||
}
|
||||
|
||||
nsPrincipal::nsPrincipal()
|
||||
: BasePrincipal(eCodebasePrincipal)
|
||||
, mCodebaseImmutable(false)
|
||||
: mCodebaseImmutable(false)
|
||||
, mDomainImmutable(false)
|
||||
, mInitialized(false)
|
||||
{}
|
||||
{ }
|
||||
|
||||
nsPrincipal::~nsPrincipal()
|
||||
{
|
||||
@@ -464,18 +465,6 @@ nsPrincipal::Write(nsIObjectOutputStream* aStream)
|
||||
rv = aStream->WriteStringZ(suffix.get());
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// This is an ugly hack to prevent re-entrancy calls into nsPrincipal::Write()
|
||||
// because of repeat CSP processing.
|
||||
// We refcount the context and if found 3+ refcounts on the same, skip writing
|
||||
// the mCSP compound object.
|
||||
// TODO: figure out exactly why this happens and fix the root cause.
|
||||
nsCSPContext* CSPContext = static_cast<nsCSPContext*>(mCSP.get());
|
||||
if(CSPContext) {
|
||||
auto CSPDepth = CSPContext->AddRef();
|
||||
CSPContext->Release();
|
||||
if(CSPDepth > 2) return NS_OK;
|
||||
}
|
||||
|
||||
rv = NS_WriteOptionalCompoundObject(aStream, mCSP,
|
||||
NS_GET_IID(nsIContentSecurityPolicy),
|
||||
true);
|
||||
@@ -527,7 +516,6 @@ struct OriginComparator
|
||||
|
||||
nsExpandedPrincipal::nsExpandedPrincipal(nsTArray<nsCOMPtr<nsIPrincipal>> &aWhiteList,
|
||||
const PrincipalOriginAttributes& aAttrs)
|
||||
: BasePrincipal(eExpandedPrincipal)
|
||||
{
|
||||
// We force the principals to be sorted by origin so that nsExpandedPrincipal
|
||||
// origins can have a canonical form.
|
||||
|
||||
@@ -46,6 +46,8 @@ public:
|
||||
*/
|
||||
static void InitializeStatics();
|
||||
|
||||
PrincipalKind Kind() override { return eCodebasePrincipal; }
|
||||
|
||||
nsCOMPtr<nsIURI> mDomain;
|
||||
nsCOMPtr<nsIURI> mCodebase;
|
||||
// If mCodebaseImmutable is true, mCodebase is non-null and immutable
|
||||
@@ -80,6 +82,8 @@ public:
|
||||
virtual nsresult GetScriptLocation(nsACString &aStr) override;
|
||||
nsresult GetOriginInternal(nsACString& aOrigin) override;
|
||||
|
||||
PrincipalKind Kind() override { return eExpandedPrincipal; }
|
||||
|
||||
protected:
|
||||
virtual ~nsExpandedPrincipal();
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#include "xpcpublic.h"
|
||||
#include "XPCWrapper.h"
|
||||
#include "nsIAppsService.h"
|
||||
#include "nsIInputStreamChannel.h"
|
||||
#include "nsILoadContext.h"
|
||||
#include "nsIServiceManager.h"
|
||||
@@ -54,6 +55,7 @@
|
||||
#include "nsIChromeRegistry.h"
|
||||
#include "nsIContentSecurityPolicy.h"
|
||||
#include "nsIAsyncVerifyRedirectCallback.h"
|
||||
#include "mozIApplication.h"
|
||||
#include "mozilla/Preferences.h"
|
||||
#include "mozilla/dom/BindingUtils.h"
|
||||
#include "mozilla/dom/ContentParent.h"
|
||||
@@ -74,7 +76,6 @@ nsIIOService *nsScriptSecurityManager::sIOService = nullptr;
|
||||
nsIStringBundle *nsScriptSecurityManager::sStrBundle = nullptr;
|
||||
JSContext *nsScriptSecurityManager::sContext = nullptr;
|
||||
bool nsScriptSecurityManager::sStrictFileOriginPolicy = true;
|
||||
bool nsScriptSecurityManager::sSameOriginPolicy = true;
|
||||
|
||||
///////////////////////////
|
||||
// Convenience Functions //
|
||||
@@ -238,6 +239,68 @@ nsScriptSecurityManager::SecurityHashURI(nsIURI* aURI)
|
||||
return NS_SecurityHashURI(aURI);
|
||||
}
|
||||
|
||||
uint16_t
|
||||
nsScriptSecurityManager::AppStatusForPrincipal(nsIPrincipal *aPrin)
|
||||
{
|
||||
uint32_t appId = aPrin->GetAppId();
|
||||
|
||||
// After bug 1238160, the principal no longer knows how to answer "is this a
|
||||
// browser element", which is really what this code path wants. Currently,
|
||||
// desktop is the only platform where we intend to disable isolation on a
|
||||
// browser frame, so non-desktop should be able to assume that
|
||||
// inIsolatedMozBrowser is true for all mozbrowser frames. Additionally,
|
||||
// apps are no longer used on desktop, so appId is always NO_APP_ID. We use
|
||||
// a release assertion in nsFrameLoader::OwnerIsIsolatedMozBrowserFrame so
|
||||
// that platforms with apps can assume inIsolatedMozBrowser is true for all
|
||||
// mozbrowser frames.
|
||||
bool inIsolatedMozBrowser = aPrin->GetIsInIsolatedMozBrowserElement();
|
||||
|
||||
NS_WARNING_ASSERTION(
|
||||
appId != nsIScriptSecurityManager::UNKNOWN_APP_ID,
|
||||
"Asking for app status on a principal with an unknown app id");
|
||||
|
||||
// Installed apps have a valid app id (not NO_APP_ID or UNKNOWN_APP_ID)
|
||||
// and they are not inside a mozbrowser.
|
||||
if (appId == nsIScriptSecurityManager::NO_APP_ID ||
|
||||
appId == nsIScriptSecurityManager::UNKNOWN_APP_ID ||
|
||||
inIsolatedMozBrowser)
|
||||
{
|
||||
return nsIPrincipal::APP_STATUS_NOT_INSTALLED;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIAppsService> appsService = do_GetService(APPS_SERVICE_CONTRACTID);
|
||||
NS_ENSURE_TRUE(appsService, nsIPrincipal::APP_STATUS_NOT_INSTALLED);
|
||||
|
||||
nsCOMPtr<mozIApplication> app;
|
||||
appsService->GetAppByLocalId(appId, getter_AddRefs(app));
|
||||
NS_ENSURE_TRUE(app, nsIPrincipal::APP_STATUS_NOT_INSTALLED);
|
||||
|
||||
uint16_t status = nsIPrincipal::APP_STATUS_INSTALLED;
|
||||
NS_ENSURE_SUCCESS(app->GetAppStatus(&status),
|
||||
nsIPrincipal::APP_STATUS_NOT_INSTALLED);
|
||||
|
||||
nsString appOrigin;
|
||||
NS_ENSURE_SUCCESS(app->GetOrigin(appOrigin),
|
||||
nsIPrincipal::APP_STATUS_NOT_INSTALLED);
|
||||
nsCOMPtr<nsIURI> appURI;
|
||||
NS_ENSURE_SUCCESS(NS_NewURI(getter_AddRefs(appURI), appOrigin),
|
||||
nsIPrincipal::APP_STATUS_NOT_INSTALLED);
|
||||
|
||||
// The app could contain a cross-origin iframe - make sure that the content
|
||||
// is actually same-origin with the app.
|
||||
MOZ_ASSERT(inIsolatedMozBrowser == false, "Checked this above");
|
||||
nsAutoCString suffix;
|
||||
PrincipalOriginAttributes attrs;
|
||||
NS_ENSURE_TRUE(attrs.PopulateFromOrigin(NS_ConvertUTF16toUTF8(appOrigin), suffix),
|
||||
nsIPrincipal::APP_STATUS_NOT_INSTALLED);
|
||||
attrs.mAppId = appId;
|
||||
attrs.mInIsolatedMozBrowser = false;
|
||||
nsCOMPtr<nsIPrincipal> appPrin = BasePrincipal::CreateCodebasePrincipal(appURI, attrs);
|
||||
NS_ENSURE_TRUE(appPrin, nsIPrincipal::APP_STATUS_NOT_INSTALLED);
|
||||
return aPrin->Equals(appPrin) ? status
|
||||
: nsIPrincipal::APP_STATUS_NOT_INSTALLED;
|
||||
}
|
||||
|
||||
/*
|
||||
* GetChannelResultPrincipal will return the principal that the resource
|
||||
* returned by this channel will use. For example, if the resource is in
|
||||
@@ -544,7 +607,7 @@ nsScriptSecurityManager::CheckSameOriginURI(nsIURI* aSourceURI,
|
||||
nsIURI* aTargetURI,
|
||||
bool reportError)
|
||||
{
|
||||
if (sSameOriginPolicy && !SecurityCompareURIs(aSourceURI, aTargetURI))
|
||||
if (!SecurityCompareURIs(aSourceURI, aTargetURI))
|
||||
{
|
||||
if (reportError) {
|
||||
ReportError(nullptr, NS_LITERAL_STRING("CheckSameOriginError"),
|
||||
@@ -1371,13 +1434,10 @@ nsScriptSecurityManager::CanGetService(JSContext *cx,
|
||||
const char sJSEnabledPrefName[] = "javascript.enabled";
|
||||
const char sFileOriginPolicyPrefName[] =
|
||||
"security.fileuri.strict_origin_policy";
|
||||
const char sSameOriginPolicyPrefName[] =
|
||||
"security.same_origin_policy.enabled";
|
||||
|
||||
static const char* kObservedPrefs[] = {
|
||||
sJSEnabledPrefName,
|
||||
sFileOriginPolicyPrefName,
|
||||
sSameOriginPolicyPrefName,
|
||||
"capability.policy.",
|
||||
nullptr
|
||||
};
|
||||
@@ -1533,8 +1593,6 @@ nsScriptSecurityManager::ScriptSecurityPrefChanged()
|
||||
Preferences::GetBool(sJSEnabledPrefName, mIsJavaScriptEnabled);
|
||||
sStrictFileOriginPolicy =
|
||||
Preferences::GetBool(sFileOriginPolicyPrefName, false);
|
||||
sSameOriginPolicy =
|
||||
Preferences::GetBool(sSameOriginPolicyPrefName, true);
|
||||
mFileURIWhitelist.reset();
|
||||
}
|
||||
|
||||
|
||||
@@ -152,7 +152,6 @@ private:
|
||||
}
|
||||
|
||||
static bool sStrictFileOriginPolicy;
|
||||
static bool sSameOriginPolicy;
|
||||
|
||||
static nsIIOService *sIOService;
|
||||
static nsIStringBundle *sStrBundle;
|
||||
|
||||
@@ -36,9 +36,7 @@ public:
|
||||
NS_IMETHOD GetBaseDomain(nsACString& aBaseDomain) override;
|
||||
nsresult GetOriginInternal(nsACString& aOrigin) override;
|
||||
|
||||
nsSystemPrincipal()
|
||||
: BasePrincipal(eSystemPrincipal)
|
||||
{}
|
||||
nsSystemPrincipal() {}
|
||||
|
||||
virtual nsresult GetScriptLocation(nsACString &aStr) override;
|
||||
|
||||
@@ -54,6 +52,8 @@ protected:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
PrincipalKind Kind() override { return eSystemPrincipal; }
|
||||
};
|
||||
|
||||
#endif // nsSystemPrincipal_h__
|
||||
@@ -4,6 +4,7 @@ support-files =
|
||||
file_disableScript.html
|
||||
!/js/xpconnect/tests/mochitest/file_empty.html
|
||||
|
||||
[test_app_principal_equality.html]
|
||||
[test_bug246699.html]
|
||||
[test_bug292789.html]
|
||||
[test_bug423375.html]
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=777467
|
||||
-->
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test app principal's equality</title>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=777467">Mozilla Bug 777467</a>
|
||||
<p id="display"></p>
|
||||
<script>
|
||||
|
||||
/** Test for app principal's equality **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var permissions = new Promise(resolve => {
|
||||
SpecialPowers.pushPermissions(
|
||||
[{ type: "browser", allow: true, context: document },
|
||||
{ type: "embed-apps", allow: true, context: document }],
|
||||
resolve);
|
||||
});
|
||||
|
||||
permissions.then(() => {
|
||||
$('content').innerHTML =
|
||||
'<iframe src="error404"></iframe>\n' +
|
||||
'<iframe mozbrowser src="error404"></iframe>\n' +
|
||||
'<iframe mozapp="http://example.org/manifest.webapp" mozbrowser src="error404"></iframe>';
|
||||
|
||||
var iframes = document.getElementsByTagName("iframe");
|
||||
var promises = []
|
||||
for (var i = 0; i < promises.length; ++i) {
|
||||
promises.push(new Promise(resolve => {
|
||||
iframes[i].addEventListener("load", resolve);
|
||||
}));
|
||||
}
|
||||
|
||||
return Promise.all(promises);
|
||||
});
|
||||
|
||||
var prefs = new Promise(resolve => {
|
||||
SpecialPowers.pushPrefEnv(
|
||||
{ set: [[ "dom.mozBrowserFramesEnabled", true ],
|
||||
[ "dom.ipc.browser_frames.oop_by_default", false ]] },
|
||||
resolve);
|
||||
});
|
||||
</script>
|
||||
<div id="content" style="display: none;">
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script type="application/javascript">
|
||||
|
||||
function canAccessDocument(win) {
|
||||
var result = true;
|
||||
try {
|
||||
win.document;
|
||||
} catch(e) {
|
||||
result = false;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
var loaded = new Promise(resolve => addLoadEvent(resolve));
|
||||
|
||||
Promise.all([ permissions, prefs, loaded ]).then(runTest);
|
||||
|
||||
function runTest() {
|
||||
// Test the witness frame (we can access same-origin frame).
|
||||
is(canAccessDocument(frames[0]), true,
|
||||
"should be able to access the first frame");
|
||||
|
||||
// Test different app/browserElement frames.
|
||||
for (var i=1; i<frames.length; ++i) {
|
||||
is(canAccessDocument(frames[i]), false,
|
||||
"should not be able to access the other frames");
|
||||
}
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
@@ -66,7 +66,7 @@ endif
|
||||
|
||||
SH := /bin/sh
|
||||
PERL ?= perl
|
||||
PYTHON ?= $(shell which python3 > /dev/null 2>&1 && echo python3 || echo python)
|
||||
PYTHON ?= $(shell which python2.7 > /dev/null 2>&1 && echo python2.7 || echo python)
|
||||
|
||||
CONFIG_GUESS_SCRIPT := $(wildcard $(TOPSRCDIR)/build/autoconf/config.guess)
|
||||
ifdef CONFIG_GUESS_SCRIPT
|
||||
|
||||
@@ -22,7 +22,7 @@ if topsrcdir == '':
|
||||
topsrcdir = '.'
|
||||
|
||||
def check_call_noisy(cmd, *args, **kwargs):
|
||||
print("Executing command:", cmd)
|
||||
print "Executing command:", cmd
|
||||
check_call(cmd, *args, **kwargs)
|
||||
|
||||
def do_hg_pull(dir, repository, hg):
|
||||
@@ -67,22 +67,22 @@ def do_cvs_export(modules, tag, cvsroot, cvs):
|
||||
cvs_module = module_tuple[1]
|
||||
fullpath = os.path.join(topsrcdir, module)
|
||||
if os.path.exists(fullpath):
|
||||
print("Removing '%s'" % fullpath)
|
||||
print "Removing '%s'" % fullpath
|
||||
shutil.rmtree(fullpath)
|
||||
|
||||
(parent, leaf) = os.path.split(module)
|
||||
print("CVS export begin: " + datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S UTC"))
|
||||
print "CVS export begin: " + datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S UTC")
|
||||
check_call_noisy([cvs, '-d', cvsroot,
|
||||
'export', '-r', tag, '-d', leaf, cvs_module],
|
||||
cwd=os.path.join(topsrcdir, parent))
|
||||
print("CVS export end: " + datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S UTC"))
|
||||
print "CVS export end: " + datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S UTC")
|
||||
|
||||
def toggle_trailing_blank_line(depname):
|
||||
"""If the trailing line is empty, then we'll delete it.
|
||||
Otherwise we'll add a blank line."""
|
||||
lines = open(depname, "r").readlines()
|
||||
if not lines:
|
||||
print("unexpected short file", file=sys.stderr)
|
||||
print >>sys.stderr, "unexpected short file"
|
||||
return
|
||||
|
||||
if not lines[-1].strip():
|
||||
@@ -95,7 +95,7 @@ def toggle_trailing_blank_line(depname):
|
||||
def get_trailing_blank_line_state(depname):
|
||||
lines = open(depname, "r").readlines()
|
||||
if not lines:
|
||||
print("unexpected short file", file=sys.stderr)
|
||||
print >>sys.stderr, "unexpected short file"
|
||||
return "no blank line"
|
||||
|
||||
if not lines[-1].strip():
|
||||
@@ -104,18 +104,18 @@ def get_trailing_blank_line_state(depname):
|
||||
return "no blank line"
|
||||
|
||||
def update_nspr_or_nss(tag, depfile, destination, hgpath):
|
||||
print("reverting to HG version of %s to get its blank line state" % depfile)
|
||||
print "reverting to HG version of %s to get its blank line state" % depfile
|
||||
check_call_noisy([options.hg, 'revert', depfile])
|
||||
old_state = get_trailing_blank_line_state(depfile)
|
||||
print("old state of %s is: %s" % (depfile, old_state))
|
||||
print "old state of %s is: %s" % (depfile, old_state)
|
||||
do_hg_replace(destination, hgpath, tag, HG_EXCLUSIONS, options.hg)
|
||||
new_state = get_trailing_blank_line_state(depfile)
|
||||
print("new state of %s is: %s" % (depfile, new_state))
|
||||
print "new state of %s is: %s" % (depfile, new_state)
|
||||
if old_state == new_state:
|
||||
print("toggling blank line in: ", depfile)
|
||||
print "toggling blank line in: ", depfile
|
||||
toggle_trailing_blank_line(depfile)
|
||||
tag_file = destination + "/TAG-INFO"
|
||||
print(tag, file=file(tag_file, "w"))
|
||||
print >>file(tag_file, "w"), tag
|
||||
|
||||
o = OptionParser(usage="client.py [options] update_nspr tagname | update_nss tagname | update_libffi tagname")
|
||||
o.add_option("--skip-mozilla", dest="skip_mozilla",
|
||||
@@ -139,7 +139,7 @@ except IndexError:
|
||||
sys.exit(2)
|
||||
|
||||
if action in ('checkout', 'co'):
|
||||
print("Warning: client.py checkout is obsolete.", file=sys.stderr)
|
||||
print >>sys.stderr, "Warning: client.py checkout is obsolete."
|
||||
pass
|
||||
elif action in ('update_nspr'):
|
||||
tag, = args[1:]
|
||||
|
||||
@@ -46,7 +46,7 @@ class ZipFile(zipfile.ZipFile):
|
||||
date_time=time.localtime(time.time()))
|
||||
zinfo.compress_type = self.compression
|
||||
# Add some standard UNIX file access permissions (-rw-r--r--).
|
||||
zinfo.external_attr = (0x81a4 & 0xFFFF) << 16
|
||||
zinfo.external_attr = (0x81a4 & 0xFFFF) << 16L
|
||||
else:
|
||||
zinfo = zinfo_or_arcname
|
||||
|
||||
@@ -58,7 +58,7 @@ class ZipFile(zipfile.ZipFile):
|
||||
# as the old, reuse the existing entry.
|
||||
|
||||
doSeek = False # store if we need to seek to the eof after overwriting
|
||||
if zinfo.filename in self.NameToInfo:
|
||||
if self.NameToInfo.has_key(zinfo.filename):
|
||||
# Find the last ZipInfo with our name.
|
||||
# Last, because that's catching multiple overwrites
|
||||
i = len(self.filelist)
|
||||
@@ -109,14 +109,14 @@ class ZipFile(zipfile.ZipFile):
|
||||
# adjust file mode if we originally just wrote, now we rewrite
|
||||
self.fp.close()
|
||||
self.fp = open(self.filename, 'r+b')
|
||||
all = [(zi, True) for zi in self.filelist] + \
|
||||
[(zi, False) for zi in self._remove]
|
||||
all = map(lambda zi: (zi, True), self.filelist) + \
|
||||
map(lambda zi: (zi, False), self._remove)
|
||||
all.sort(lambda l, r: cmp(l[0].header_offset, r[0].header_offset))
|
||||
# empty _remove for multiple closes
|
||||
self._remove = []
|
||||
|
||||
lengths = [all[i+1][0].header_offset - all[i][0].header_offset
|
||||
for i in range(len(all)-1)]
|
||||
for i in xrange(len(all)-1)]
|
||||
lengths.append(self.end - all[-1][0].header_offset)
|
||||
to_pos = 0
|
||||
for (zi, keep), length in zip(all, lengths):
|
||||
|
||||
@@ -1,354 +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 https://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* C++ replacement for mozbuild/action/cl.py that wraps cl.exe on Windows.
|
||||
* This is a Windows-only host tool, built well before XPCOM.
|
||||
*/
|
||||
#include <windows.h>
|
||||
#include <string> // We don't use XPCOM string classes here.
|
||||
#include <vector>
|
||||
#include <fstream>
|
||||
#include <algorithm>
|
||||
#pragma warning(disable:4530)
|
||||
using namespace std;
|
||||
|
||||
|
||||
/* Make passed argv into a command line for cl.exe */
|
||||
static wstring quoteArg(const wstring& aCmdArgv) {
|
||||
bool addQuotes = aCmdArgv.find_first_of(L" \t\"") != wstring::npos;
|
||||
|
||||
if (!addQuotes) {
|
||||
return aCmdArgv;
|
||||
}
|
||||
|
||||
wstring out = L"\"";
|
||||
size_t backslash = 0;
|
||||
|
||||
for (wchar_t ch : aCmdArgv) {
|
||||
if (ch == L'\\') {
|
||||
backslash++;
|
||||
} else if (ch == L'"') {
|
||||
// Escape all backslashes before a quote
|
||||
out.append(backslash * 2, L'\\');
|
||||
backslash = 0;
|
||||
out += L"\\\"";
|
||||
} else {
|
||||
out.append(backslash, L'\\');
|
||||
backslash = 0;
|
||||
out += ch;
|
||||
}
|
||||
}
|
||||
|
||||
out.append(backslash * 2, L'\\');
|
||||
out += L"\"";
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
/* We need to detect the showIncludes prefix to extract raw paths for
|
||||
dep files, and drop the lines from display to avoid console spam. */
|
||||
static string showIncludesPrefixDetection(const string& aLine) {
|
||||
// Look for absolute Windows paths
|
||||
size_t pos = string::npos;
|
||||
|
||||
// Drive letter: C:\...
|
||||
for (size_t i = 0; i + 2 < aLine.size(); i++) {
|
||||
if (isalpha((unsigned char)aLine[i]) &&
|
||||
aLine[i + 1] == ':' &&
|
||||
(aLine[i + 2] == '\\' || aLine[i + 2] == '/')) {
|
||||
pos = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// UNC path: \\server\share
|
||||
if (pos == string::npos) {
|
||||
if (aLine.size() >= 2 && aLine[0] == '\\' && aLine[1] == '\\') {
|
||||
pos = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (pos == string::npos) {
|
||||
return "";
|
||||
}
|
||||
|
||||
// Prefix is everything before the path
|
||||
return aLine.substr(0, pos);
|
||||
}
|
||||
|
||||
/* Extract the header path from an include line using the known prefix */
|
||||
static string extractHeaderPath(const string& aLine, const string& aPrefix) {
|
||||
if (aLine.rfind(aPrefix, 0) != 0) {
|
||||
return "";
|
||||
}
|
||||
|
||||
// Strip prefix
|
||||
string path = aLine.substr(aPrefix.size());
|
||||
|
||||
// Trim leading whitespace
|
||||
while (!path.empty() && (path[0] == ' ' || path[0] == '\t')) {
|
||||
path.erase(0, 1);
|
||||
}
|
||||
|
||||
// Remove trailing newline
|
||||
if (!path.empty() && (path.back() == '\n' || path.back() == '\r')) {
|
||||
path.pop_back();
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
|
||||
/* Sanitize a dependency path for Makefile depfiles.
|
||||
Performs:
|
||||
1. Strip trailing CR/LF
|
||||
2. Strip leading MSVC indentation
|
||||
3. Normalize slashes to '/'
|
||||
4. Escape spaces and backslashes for Make */
|
||||
static string sanitizeMakeDeps(string aLine) {
|
||||
// 1. Strip trailing CR/LF
|
||||
while (!aLine.empty() && (aLine.back() == '\r' || aLine.back() == '\n')) {
|
||||
aLine.pop_back();
|
||||
}
|
||||
|
||||
// 2. Strip leading indentation (MSVC indents include lines)
|
||||
while (!aLine.empty() && (aLine.front() == ' ' || aLine.front() == '\t')) {
|
||||
aLine.erase(aLine.begin());
|
||||
}
|
||||
|
||||
// 3. Normalize slashes
|
||||
for (char& ch : aLine) {
|
||||
if (ch == '\\') {
|
||||
ch = '/';
|
||||
}
|
||||
}
|
||||
|
||||
// 4. Escape for Make
|
||||
string out;
|
||||
out.reserve(aLine.size() * 2);
|
||||
|
||||
for (char ch : aLine) {
|
||||
if (ch == ' ') {
|
||||
out += "\\ ";
|
||||
} else if (ch == '\\') {
|
||||
// After normalization this shouldn't occur, but safe anyway
|
||||
out += "\\\\";
|
||||
} else {
|
||||
out += ch;
|
||||
}
|
||||
}
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
/* MSYS1 does not use wide APIs, so ensure we get the narrow version here. */
|
||||
static string getWinEnvVar(const char* aName) {
|
||||
char buffer[32768];
|
||||
DWORD length = GetEnvironmentVariableA(aName, buffer, sizeof(buffer));
|
||||
|
||||
if (length == 0 || length >= sizeof(buffer)) {
|
||||
return string();
|
||||
}
|
||||
|
||||
return string(buffer, length);
|
||||
}
|
||||
|
||||
/* Exclude system headers by ignoring anything not in our directories.
|
||||
* We don't know where people will put their objdir, so it has to be
|
||||
* tracked separately.
|
||||
*/
|
||||
static bool isProjectDep(const string& aPath,
|
||||
const string& aTopSrcDir,
|
||||
const string& aTopObjDir) {
|
||||
// We need forward slashes for our build system.
|
||||
auto norm = [](string aStr) {
|
||||
replace(aStr.begin(), aStr.end(), '\\', '/');
|
||||
return aStr;
|
||||
};
|
||||
|
||||
string path = norm(aPath);
|
||||
string topSrcDir = norm(aTopSrcDir);
|
||||
string topObjDir = norm(aTopObjDir);
|
||||
|
||||
// Must be absolute or relative under one of the two roots
|
||||
return (path.rfind(topSrcDir, 0) == 0) ||
|
||||
(path.rfind(topObjDir, 0) == 0);
|
||||
}
|
||||
|
||||
/* Read stdout from the compiler pipe line-by-line, filtering include
|
||||
lines and collecting dependency paths. */
|
||||
static vector<string> processOutput(HANDLE aReadPipe) {
|
||||
string lineBuf;
|
||||
vector<string> deps;
|
||||
string topSrcDir = getWinEnvVar("CL_TOPSRCDIR");
|
||||
string topObjDir = getWinEnvVar("CL_TOPOBJDIR");
|
||||
char buffer[4096];
|
||||
DWORD bytesRead;
|
||||
|
||||
string includePrefix;
|
||||
bool prefixFound = false;
|
||||
|
||||
while (ReadFile(aReadPipe, buffer, sizeof(buffer), &bytesRead, nullptr)) {
|
||||
lineBuf.append(buffer, bytesRead);
|
||||
|
||||
size_t pos;
|
||||
while ((pos = lineBuf.find('\n')) != string::npos) {
|
||||
string line = lineBuf.substr(0, pos + 1);
|
||||
lineBuf.erase(0, pos + 1);
|
||||
|
||||
if (!prefixFound) {
|
||||
string maybe = showIncludesPrefixDetection(line);
|
||||
if (!maybe.empty()) {
|
||||
includePrefix = maybe;
|
||||
prefixFound = true;
|
||||
}
|
||||
}
|
||||
|
||||
// If prefix is known and this line starts with it, it's an include line
|
||||
if (prefixFound && line.rfind(includePrefix, 0) == 0) {
|
||||
string header = extractHeaderPath(line, includePrefix);
|
||||
if (!header.empty()) {
|
||||
header = sanitizeMakeDeps(header);
|
||||
if (isProjectDep(header, topSrcDir, topObjDir)) {
|
||||
deps.push_back(header);
|
||||
}
|
||||
}
|
||||
// This is an include line, don't print it
|
||||
continue;
|
||||
}
|
||||
|
||||
// Otherwise, just print
|
||||
fwrite(line.data(), 1, line.size(), stdout);
|
||||
}
|
||||
}
|
||||
|
||||
if (!lineBuf.empty()) {
|
||||
fwrite(lineBuf.data(), 1, lineBuf.size(), stdout);
|
||||
}
|
||||
|
||||
return deps;
|
||||
}
|
||||
|
||||
/* Convert a UTF-16 wide string to a UTF-8 narrow string. */
|
||||
static string wideToUtf8(const wstring& aWide) {
|
||||
if (aWide.empty()) {
|
||||
return {};
|
||||
}
|
||||
|
||||
int len = WideCharToMultiByte(CP_UTF8, 0, aWide.c_str(), -1, nullptr, 0, nullptr, nullptr);
|
||||
|
||||
string out(len - 1, '\0');
|
||||
|
||||
WideCharToMultiByte(CP_UTF8, 0, aWide.c_str(), -1, &out[0], len - 1, nullptr, nullptr);
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
/* Compute the .pp depfile path next to the given object file. */
|
||||
static string makeDepfilePath(const string& aObjUtf8) {
|
||||
size_t pos = aObjUtf8.find_last_of("/\\");
|
||||
string dir = (pos == string::npos) ? "" : aObjUtf8.substr(0, pos + 1);
|
||||
string base = (pos == string::npos) ? aObjUtf8 : aObjUtf8.substr(pos + 1);
|
||||
|
||||
return dir + ".deps/" + base + ".pp";
|
||||
}
|
||||
|
||||
/* Write a Make-style dependency file for the given object and dep list. */
|
||||
static void writeDepfile(const wstring& aObjFile, const vector<string>& aDeps) {
|
||||
string objUtf8 = wideToUtf8(aObjFile);
|
||||
string ppName = makeDepfilePath(objUtf8);
|
||||
|
||||
ofstream out(ppName);
|
||||
out << objUtf8 << ":";
|
||||
|
||||
for (auto& dep : aDeps) {
|
||||
out << " " << dep;
|
||||
}
|
||||
|
||||
out << "\r\n";
|
||||
}
|
||||
|
||||
int wmain(int argc, wchar_t** argv) {
|
||||
if (argc < 2) {
|
||||
fwprintf(stderr, L"Usage: action_cl.exe <compiler> [args...]\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
const wchar_t* compiler = argv[1];
|
||||
|
||||
// Build command line
|
||||
wstring cmd = quoteArg(compiler);
|
||||
wstring objFile;
|
||||
wstring sourceFile;
|
||||
cmd += L" -showIncludes";
|
||||
|
||||
for (int i = 2; i < argc; i++) {
|
||||
cmd += L" ";
|
||||
cmd += quoteArg(argv[i]);
|
||||
}
|
||||
|
||||
vector<wchar_t> cmdLine(cmd.begin(), cmd.end());
|
||||
cmdLine.push_back(L'\0');
|
||||
|
||||
for (int i = 2; i < argc; i++) {
|
||||
wstring arg = argv[i];
|
||||
|
||||
if (arg.rfind(L"/Fo", 0) == 0 || arg.rfind(L"-Fo", 0) == 0) {
|
||||
objFile = arg.substr(3); // strip /Fo or -Fo
|
||||
}
|
||||
|
||||
if (!arg.empty() && arg[0] != L'-' && arg[0] != L'/') {
|
||||
sourceFile = arg; // last non-flag argument is the source file
|
||||
}
|
||||
}
|
||||
|
||||
// Create pipe for capturing stdout
|
||||
HANDLE readPipe, writePipe;
|
||||
SECURITY_ATTRIBUTES sa = { sizeof(sa), nullptr, TRUE };
|
||||
|
||||
if (!CreatePipe(&readPipe, &writePipe, &sa, 0)) {
|
||||
fwprintf(stderr, L"Failed to create pipe\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
SetHandleInformation(readPipe, HANDLE_FLAG_INHERIT, 0);
|
||||
|
||||
STARTUPINFOW si = { sizeof(si) };
|
||||
si.dwFlags = STARTF_USESTDHANDLES;
|
||||
si.hStdOutput = writePipe;
|
||||
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
|
||||
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
|
||||
PROCESS_INFORMATION pi;
|
||||
|
||||
BOOL ok = CreateProcessW(nullptr, cmdLine.data(), nullptr, nullptr, TRUE, 0, nullptr, nullptr, &si, &pi);
|
||||
|
||||
CloseHandle(writePipe);
|
||||
|
||||
if (!ok) {
|
||||
fwprintf(stderr, L"Failed to launch compiler: %ls (error %lu)\n", compiler, GetLastError());
|
||||
CloseHandle(readPipe);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Read compiler output and collect dependencies
|
||||
auto deps = processOutput(readPipe);
|
||||
CloseHandle(readPipe);
|
||||
|
||||
WaitForSingleObject(pi.hProcess, INFINITE);
|
||||
|
||||
DWORD exitCode = 0;
|
||||
GetExitCodeProcess(pi.hProcess, &exitCode);
|
||||
|
||||
// Write the depfile only if we know the output object path
|
||||
if (!objFile.empty()) {
|
||||
string srcUtf8 = wideToUtf8(sourceFile);
|
||||
deps.insert(deps.begin(), sanitizeMakeDeps(srcUtf8));
|
||||
writeDepfile(objFile, deps);
|
||||
}
|
||||
|
||||
CloseHandle(pi.hProcess);
|
||||
CloseHandle(pi.hThread);
|
||||
|
||||
return exitCode;
|
||||
}
|
||||
@@ -275,7 +275,7 @@ def check_style():
|
||||
edges[inclname] = set()
|
||||
|
||||
# Process all the JS files.
|
||||
for filename in list(js_names.keys()):
|
||||
for filename in js_names.keys():
|
||||
inclname = js_names[filename]
|
||||
file_kind = FileKind.get(filename)
|
||||
if file_kind == FileKind.C or file_kind == FileKind.CPP or \
|
||||
|
||||
+3
-4
@@ -120,8 +120,8 @@ CONFIG_TOOLS = $(MOZ_BUILD_ROOT)/config
|
||||
AUTOCONF_TOOLS = $(MOZILLA_DIR)/build/autoconf
|
||||
|
||||
ifdef _MSC_VER
|
||||
CC_WRAPPER ?= $(DEPTH)/config/action_cl$(BIN_SUFFIX)
|
||||
CXX_WRAPPER ?= $(DEPTH)/config/action_cl$(BIN_SUFFIX)
|
||||
CC_WRAPPER ?= $(call py_action,cl)
|
||||
CXX_WRAPPER ?= $(call py_action,cl)
|
||||
endif # _MSC_VER
|
||||
|
||||
CC := $(CC_WRAPPER) $(CC)
|
||||
@@ -562,8 +562,7 @@ endif
|
||||
|
||||
PLY_INCLUDE = -I$(MOZILLA_DIR)/other-licenses/ply
|
||||
|
||||
export CL_TOPOBJDIR = $(MOZ_BUILD_ROOT)
|
||||
export CL_TOPSRCDIR = $(EXTERNAL_SOURCE_DIR)
|
||||
export CL_INCLUDES_PREFIX
|
||||
# Make sure that the build system can handle non-ASCII characters
|
||||
# in environment variables to prevent it from breking silently on
|
||||
# non-English systems.
|
||||
|
||||
@@ -56,12 +56,10 @@ def generate_precomplete(root_path):
|
||||
precomplete_file = open(precomplete_file_path, "wb")
|
||||
rel_file_path_list, rel_dir_path_list = get_build_entries(root_path)
|
||||
for rel_file_path in rel_file_path_list:
|
||||
line = "remove \""+rel_file_path+"\"\n"
|
||||
precomplete_file.write(line.encode('utf-8'))
|
||||
precomplete_file.writelines("remove \""+rel_file_path+"\"\n")
|
||||
|
||||
for rel_dir_path in rel_dir_path_list:
|
||||
line = "rmdir \""+rel_dir_path+"\"\n"
|
||||
precomplete_file.write(line.encode('utf-8'))
|
||||
precomplete_file.writelines("rmdir \""+rel_dir_path+"\"\n")
|
||||
|
||||
precomplete_file.close()
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ def ensureParentDir(file):
|
||||
if dir and not os.path.exists(dir):
|
||||
try:
|
||||
os.makedirs(dir)
|
||||
except OSError as error:
|
||||
except OSError, error:
|
||||
if error.errno != errno.EEXIST:
|
||||
raise
|
||||
|
||||
@@ -140,4 +140,4 @@ class ExpandArgs(list):
|
||||
return [relativize(arg)]
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(" ".join(ExpandArgs(sys.argv[1:])))
|
||||
print " ".join(ExpandArgs(sys.argv[1:]))
|
||||
@@ -305,11 +305,11 @@ class SectionFinder(object):
|
||||
return syms
|
||||
|
||||
def print_command(out, args):
|
||||
print("Executing: " + " ".join(args), file=out)
|
||||
print >>out, "Executing: " + " ".join(args)
|
||||
for tmp in [f for f in args.tmp if os.path.isfile(f)]:
|
||||
print(tmp + ":", file=out)
|
||||
print >>out, tmp + ":"
|
||||
with open(tmp) as file:
|
||||
print("".join([" " + l for l in file.readlines()]), file=out)
|
||||
print >>out, "".join([" " + l for l in file.readlines()])
|
||||
out.flush()
|
||||
|
||||
def main(args, proc_callback=None):
|
||||
@@ -339,14 +339,14 @@ def main(args, proc_callback=None):
|
||||
proc = subprocess.Popen(args, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
|
||||
if proc_callback:
|
||||
proc_callback(proc)
|
||||
except Exception as e:
|
||||
print('error: Launching', args, ':', e, file=sys.stderr)
|
||||
except Exception, e:
|
||||
print >>sys.stderr, 'error: Launching', args, ':', e
|
||||
raise e
|
||||
(stdout, stderr) = proc.communicate()
|
||||
if proc.returncode and not options.verbose:
|
||||
print_command(sys.stderr, args)
|
||||
sys.stderr.buffer.write(stdout)
|
||||
sys.stderr.buffer.flush()
|
||||
sys.stderr.write(stdout)
|
||||
sys.stderr.flush()
|
||||
if proc.returncode:
|
||||
return proc.returncode
|
||||
return 0
|
||||
|
||||
@@ -38,4 +38,4 @@ if __name__ == '__main__':
|
||||
|
||||
ensureParentDir(options.output)
|
||||
with open(options.output, 'w') as outfile:
|
||||
print(generate(args), file=outfile)
|
||||
print >>outfile, generate(args)
|
||||
Vendored
-2
@@ -101,8 +101,6 @@ else:
|
||||
ASFLAGS += ['-no-integrated-as']
|
||||
elif CONFIG['FFI_TARGET'] == 'AARCH64':
|
||||
ffi_srcs = ('sysv.S', 'ffi.c')
|
||||
elif CONFIG['FFI_TARGET'] == 'LOONGARCH64':
|
||||
ffi_srcs = ('ffi.c', 'sysv.S')
|
||||
elif CONFIG['FFI_TARGET'] == 'X86':
|
||||
ffi_srcs = ('ffi.c', 'sysv.S', 'win32.S')
|
||||
elif CONFIG['FFI_TARGET'] == 'X86_64':
|
||||
|
||||
+1
-20
@@ -18,30 +18,20 @@ sources = [
|
||||
'/intl/icu/source/common/dictionarydata.cpp',
|
||||
'/intl/icu/source/common/dtintrv.cpp',
|
||||
'/intl/icu/source/common/edits.cpp',
|
||||
'/intl/icu/source/common/emojiprops.cpp',
|
||||
'/intl/icu/source/common/errorcode.cpp',
|
||||
'/intl/icu/source/common/filteredbrk.cpp',
|
||||
'/intl/icu/source/common/filterednormalizer2.cpp',
|
||||
'/intl/icu/source/common/fixedstring.cpp',
|
||||
'/intl/icu/source/common/loadednormalizer2impl.cpp',
|
||||
'/intl/icu/source/common/localebuilder.cpp',
|
||||
'/intl/icu/source/common/localematcher.cpp',
|
||||
'/intl/icu/source/common/localeprioritylist.cpp',
|
||||
'/intl/icu/source/common/locavailable.cpp',
|
||||
'/intl/icu/source/common/locbased.cpp',
|
||||
'/intl/icu/source/common/locdispnames.cpp',
|
||||
'/intl/icu/source/common/locdistance.cpp',
|
||||
'/intl/icu/source/common/locdspnm.cpp',
|
||||
'/intl/icu/source/common/locid.cpp',
|
||||
'/intl/icu/source/common/loclikely.cpp',
|
||||
'/intl/icu/source/common/loclikelysubtags.cpp',
|
||||
'/intl/icu/source/common/locmap.cpp',
|
||||
'/intl/icu/source/common/locresdata.cpp',
|
||||
'/intl/icu/source/common/locutil.cpp',
|
||||
'/intl/icu/source/common/lsr.cpp',
|
||||
'/intl/icu/source/common/lstmbe.cpp',
|
||||
'/intl/icu/source/common/messagepattern.cpp',
|
||||
'/intl/icu/source/common/mlbe.cpp',
|
||||
'/intl/icu/source/common/normalizer2.cpp',
|
||||
'/intl/icu/source/common/normalizer2impl.cpp',
|
||||
'/intl/icu/source/common/normlzr.cpp',
|
||||
@@ -61,7 +51,6 @@ sources = [
|
||||
'/intl/icu/source/common/rbbitblb.cpp',
|
||||
'/intl/icu/source/common/resbund.cpp',
|
||||
'/intl/icu/source/common/resource.cpp',
|
||||
'/intl/icu/source/common/restrace.cpp',
|
||||
'/intl/icu/source/common/ruleiter.cpp',
|
||||
'/intl/icu/source/common/schriter.cpp',
|
||||
'/intl/icu/source/common/serv.cpp',
|
||||
@@ -121,8 +110,6 @@ sources = [
|
||||
'/intl/icu/source/common/uloc.cpp',
|
||||
'/intl/icu/source/common/uloc_keytype.cpp',
|
||||
'/intl/icu/source/common/uloc_tag.cpp',
|
||||
'/intl/icu/source/common/ulocale.cpp',
|
||||
'/intl/icu/source/common/ulocbuilder.cpp',
|
||||
'/intl/icu/source/common/umapfile.cpp',
|
||||
'/intl/icu/source/common/umath.cpp',
|
||||
'/intl/icu/source/common/umutablecptrie.cpp',
|
||||
@@ -164,7 +151,6 @@ sources = [
|
||||
'/intl/icu/source/common/utext.cpp',
|
||||
'/intl/icu/source/common/utf_impl.cpp',
|
||||
'/intl/icu/source/common/util.cpp',
|
||||
'/intl/icu/source/common/util_props.cpp',
|
||||
'/intl/icu/source/common/utrace.cpp',
|
||||
'/intl/icu/source/common/utrie.cpp',
|
||||
'/intl/icu/source/common/utrie2.cpp',
|
||||
@@ -204,6 +190,7 @@ other_sources = [
|
||||
'/intl/icu/source/common/usc_impl.cpp',
|
||||
'/intl/icu/source/common/ushape.cpp',
|
||||
'/intl/icu/source/common/ustr_wcs.cpp',
|
||||
'/intl/icu/source/common/util_props.cpp',
|
||||
]
|
||||
EXPORTS.unicode += [
|
||||
'/intl/icu/source/common/unicode/appendable.h',
|
||||
@@ -225,8 +212,6 @@ EXPORTS.unicode += [
|
||||
'/intl/icu/source/common/unicode/icudataver.h',
|
||||
'/intl/icu/source/common/unicode/icuplug.h',
|
||||
'/intl/icu/source/common/unicode/idna.h',
|
||||
'/intl/icu/source/common/unicode/localebuilder.h',
|
||||
'/intl/icu/source/common/unicode/localematcher.h',
|
||||
'/intl/icu/source/common/unicode/localpointer.h',
|
||||
'/intl/icu/source/common/unicode/locdspnm.h',
|
||||
'/intl/icu/source/common/unicode/locid.h',
|
||||
@@ -274,8 +259,6 @@ EXPORTS.unicode += [
|
||||
'/intl/icu/source/common/unicode/uiter.h',
|
||||
'/intl/icu/source/common/unicode/uldnames.h',
|
||||
'/intl/icu/source/common/unicode/uloc.h',
|
||||
'/intl/icu/source/common/unicode/ulocale.h',
|
||||
'/intl/icu/source/common/unicode/ulocbuilder.h',
|
||||
'/intl/icu/source/common/unicode/umachine.h',
|
||||
'/intl/icu/source/common/unicode/umisc.h',
|
||||
'/intl/icu/source/common/unicode/umutablecptrie.h',
|
||||
@@ -303,8 +286,6 @@ EXPORTS.unicode += [
|
||||
'/intl/icu/source/common/unicode/utf32.h',
|
||||
'/intl/icu/source/common/unicode/utf8.h',
|
||||
'/intl/icu/source/common/unicode/utf_old.h',
|
||||
'/intl/icu/source/common/unicode/utfiterator.h',
|
||||
'/intl/icu/source/common/unicode/utfstring.h',
|
||||
'/intl/icu/source/common/unicode/utrace.h',
|
||||
'/intl/icu/source/common/unicode/utypes.h',
|
||||
'/intl/icu/source/common/unicode/uvernum.h',
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Vendored
-22
@@ -3,15 +3,12 @@
|
||||
# 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/.
|
||||
|
||||
# Also see <http://www.icu-project.org/repos/icu/tags/latest/icu4c/readme.html#RecBuild> for the
|
||||
# recommended build options when compiling ICU.
|
||||
DEFINES.update(
|
||||
# Don't use icu namespace automatically in client code.
|
||||
U_USING_ICU_NAMESPACE = 0,
|
||||
|
||||
# Don't include obsolete header files.
|
||||
U_NO_DEFAULT_INCLUDE_UTF_HEADERS = 1,
|
||||
U_HIDE_OBSOLETE_UTF_OLD_H = 1,
|
||||
|
||||
# Remove chunks of the library that we don't need (yet).
|
||||
UCONFIG_NO_LEGACY_CONVERSION = True,
|
||||
@@ -20,13 +17,6 @@ DEFINES.update(
|
||||
|
||||
# We don't need to pass data to and from legacy char* APIs.
|
||||
U_CHARSET_IS_UTF8 = True,
|
||||
|
||||
# Add 'explicit' keyword to UnicodeString constructors.
|
||||
UNISTR_FROM_CHAR_EXPLICIT = 'explicit',
|
||||
UNISTR_FROM_STRING_EXPLICIT = 'explicit',
|
||||
|
||||
# Disable dynamic loading of ICU data as a loadable library.
|
||||
U_ENABLE_DYLOAD = 0,
|
||||
)
|
||||
|
||||
if not CONFIG['HAVE_LANGINFO_CODESET']:
|
||||
@@ -48,24 +38,12 @@ ALLOW_COMPILER_WARNINGS = True
|
||||
# warnings that get triggered for every file.
|
||||
if CONFIG['CLANG_CL']:
|
||||
CFLAGS += [
|
||||
'-Wno-c++20-compat',
|
||||
'-Wno-comma',
|
||||
'-Wno-implicit-const-int-float-conversion',
|
||||
'-Wno-macro-redefined',
|
||||
'-Wno-microsoft-include',
|
||||
'-Wno-tautological-unsigned-enum-zero-compare',
|
||||
'-Wno-unreachable-code-loop-increment',
|
||||
'-Wno-unreachable-code-return',
|
||||
]
|
||||
CXXFLAGS += [
|
||||
'-Wno-c++20-compat',
|
||||
'-Wno-comma',
|
||||
'-Wno-implicit-const-int-float-conversion',
|
||||
'-Wno-macro-redefined',
|
||||
'-Wno-microsoft-include',
|
||||
'-Wno-tautological-unsigned-enum-zero-compare',
|
||||
'-Wno-unreachable-code-loop-increment',
|
||||
'-Wno-unreachable-code-return',
|
||||
]
|
||||
|
||||
if CONFIG['_MSC_VER'] and not CONFIG['CLANG_CL']:
|
||||
|
||||
+5
-47
@@ -42,14 +42,13 @@ sources = [
|
||||
'/intl/icu/source/i18n/decContext.cpp',
|
||||
'/intl/icu/source/i18n/decimfmt.cpp',
|
||||
'/intl/icu/source/i18n/decNumber.cpp',
|
||||
'/intl/icu/source/i18n/displayoptions.cpp',
|
||||
'/intl/icu/source/i18n/double-conversion-bignum-dtoa.cpp',
|
||||
'/intl/icu/source/i18n/double-conversion-bignum.cpp',
|
||||
'/intl/icu/source/i18n/double-conversion-cached-powers.cpp',
|
||||
'/intl/icu/source/i18n/double-conversion-double-to-string.cpp',
|
||||
'/intl/icu/source/i18n/double-conversion-diy-fp.cpp',
|
||||
'/intl/icu/source/i18n/double-conversion-fast-dtoa.cpp',
|
||||
'/intl/icu/source/i18n/double-conversion-string-to-double.cpp',
|
||||
'/intl/icu/source/i18n/double-conversion-strtod.cpp',
|
||||
'/intl/icu/source/i18n/double-conversion.cpp',
|
||||
'/intl/icu/source/i18n/dtfmtsym.cpp',
|
||||
'/intl/icu/source/i18n/dtitvfmt.cpp',
|
||||
'/intl/icu/source/i18n/dtitvinf.cpp',
|
||||
@@ -59,10 +58,6 @@ sources = [
|
||||
'/intl/icu/source/i18n/ethpccal.cpp',
|
||||
'/intl/icu/source/i18n/fmtable.cpp',
|
||||
'/intl/icu/source/i18n/format.cpp',
|
||||
'/intl/icu/source/i18n/formatted_string_builder.cpp',
|
||||
'/intl/icu/source/i18n/formattedval_iterimpl.cpp',
|
||||
'/intl/icu/source/i18n/formattedval_sbimpl.cpp',
|
||||
'/intl/icu/source/i18n/formattedvalue.cpp',
|
||||
'/intl/icu/source/i18n/fphdlimp.cpp',
|
||||
'/intl/icu/source/i18n/fpositer.cpp',
|
||||
'/intl/icu/source/i18n/gregocal.cpp',
|
||||
@@ -70,28 +65,16 @@ sources = [
|
||||
'/intl/icu/source/i18n/hebrwcal.cpp',
|
||||
'/intl/icu/source/i18n/indiancal.cpp',
|
||||
'/intl/icu/source/i18n/islamcal.cpp',
|
||||
'/intl/icu/source/i18n/iso8601cal.cpp',
|
||||
'/intl/icu/source/i18n/japancal.cpp',
|
||||
'/intl/icu/source/i18n/listformatter.cpp',
|
||||
'/intl/icu/source/i18n/measfmt.cpp',
|
||||
'/intl/icu/source/i18n/measunit.cpp',
|
||||
'/intl/icu/source/i18n/measunit_extra.cpp',
|
||||
'/intl/icu/source/i18n/measure.cpp',
|
||||
'/intl/icu/source/i18n/messageformat2.cpp',
|
||||
'/intl/icu/source/i18n/messageformat2_arguments.cpp',
|
||||
'/intl/icu/source/i18n/messageformat2_checker.cpp',
|
||||
'/intl/icu/source/i18n/messageformat2_data_model.cpp',
|
||||
'/intl/icu/source/i18n/messageformat2_errors.cpp',
|
||||
'/intl/icu/source/i18n/messageformat2_evaluation.cpp',
|
||||
'/intl/icu/source/i18n/messageformat2_formattable.cpp',
|
||||
'/intl/icu/source/i18n/messageformat2_formatter.cpp',
|
||||
'/intl/icu/source/i18n/messageformat2_function_registry.cpp',
|
||||
'/intl/icu/source/i18n/messageformat2_parser.cpp',
|
||||
'/intl/icu/source/i18n/messageformat2_serializer.cpp',
|
||||
'/intl/icu/source/i18n/msgfmt.cpp',
|
||||
'/intl/icu/source/i18n/nfrs.cpp',
|
||||
'/intl/icu/source/i18n/nfrule.cpp',
|
||||
'/intl/icu/source/i18n/nfsubs.cpp',
|
||||
'/intl/icu/source/i18n/nounit.cpp',
|
||||
'/intl/icu/source/i18n/number_affixutils.cpp',
|
||||
'/intl/icu/source/i18n/number_asformat.cpp',
|
||||
'/intl/icu/source/i18n/number_capi.cpp',
|
||||
@@ -108,16 +91,13 @@ sources = [
|
||||
'/intl/icu/source/i18n/number_modifiers.cpp',
|
||||
'/intl/icu/source/i18n/number_multiplier.cpp',
|
||||
'/intl/icu/source/i18n/number_notation.cpp',
|
||||
'/intl/icu/source/i18n/number_output.cpp',
|
||||
'/intl/icu/source/i18n/number_padding.cpp',
|
||||
'/intl/icu/source/i18n/number_patternmodifier.cpp',
|
||||
'/intl/icu/source/i18n/number_patternstring.cpp',
|
||||
'/intl/icu/source/i18n/number_rounding.cpp',
|
||||
'/intl/icu/source/i18n/number_scientific.cpp',
|
||||
'/intl/icu/source/i18n/number_simple.cpp',
|
||||
'/intl/icu/source/i18n/number_skeletons.cpp',
|
||||
'/intl/icu/source/i18n/number_symbolswrapper.cpp',
|
||||
'/intl/icu/source/i18n/number_usageprefs.cpp',
|
||||
'/intl/icu/source/i18n/number_stringbuilder.cpp',
|
||||
'/intl/icu/source/i18n/number_utils.cpp',
|
||||
'/intl/icu/source/i18n/numfmt.cpp',
|
||||
'/intl/icu/source/i18n/numparse_affixes.cpp',
|
||||
@@ -127,15 +107,14 @@ sources = [
|
||||
'/intl/icu/source/i18n/numparse_impl.cpp',
|
||||
'/intl/icu/source/i18n/numparse_parsednumber.cpp',
|
||||
'/intl/icu/source/i18n/numparse_scientific.cpp',
|
||||
'/intl/icu/source/i18n/numparse_stringsegment.cpp',
|
||||
'/intl/icu/source/i18n/numparse_symbols.cpp',
|
||||
'/intl/icu/source/i18n/numparse_validators.cpp',
|
||||
'/intl/icu/source/i18n/numrange_capi.cpp',
|
||||
'/intl/icu/source/i18n/numrange_fluent.cpp',
|
||||
'/intl/icu/source/i18n/numrange_impl.cpp',
|
||||
'/intl/icu/source/i18n/numsys.cpp',
|
||||
'/intl/icu/source/i18n/olsontz.cpp',
|
||||
'/intl/icu/source/i18n/persncal.cpp',
|
||||
'/intl/icu/source/i18n/pluralranges.cpp',
|
||||
'/intl/icu/source/i18n/plurfmt.cpp',
|
||||
'/intl/icu/source/i18n/plurrule.cpp',
|
||||
'/intl/icu/source/i18n/quantityformatter.cpp',
|
||||
@@ -154,7 +133,6 @@ sources = [
|
||||
'/intl/icu/source/i18n/smpdtfst.cpp',
|
||||
'/intl/icu/source/i18n/sortkey.cpp',
|
||||
'/intl/icu/source/i18n/standardplural.cpp',
|
||||
'/intl/icu/source/i18n/string_segment.cpp',
|
||||
'/intl/icu/source/i18n/stsearch.cpp',
|
||||
'/intl/icu/source/i18n/taiwncal.cpp',
|
||||
'/intl/icu/source/i18n/timezone.cpp',
|
||||
@@ -179,10 +157,6 @@ sources = [
|
||||
'/intl/icu/source/i18n/uitercollationiterator.cpp',
|
||||
'/intl/icu/source/i18n/ulistformatter.cpp',
|
||||
'/intl/icu/source/i18n/umsg.cpp',
|
||||
'/intl/icu/source/i18n/units_complexconverter.cpp',
|
||||
'/intl/icu/source/i18n/units_converter.cpp',
|
||||
'/intl/icu/source/i18n/units_data.cpp',
|
||||
'/intl/icu/source/i18n/units_router.cpp',
|
||||
'/intl/icu/source/i18n/unum.cpp',
|
||||
'/intl/icu/source/i18n/unumsys.cpp',
|
||||
'/intl/icu/source/i18n/upluralrules.cpp',
|
||||
@@ -271,7 +245,6 @@ EXPORTS.unicode += [
|
||||
'/intl/icu/source/i18n/unicode/datefmt.h',
|
||||
'/intl/icu/source/i18n/unicode/dcfmtsym.h',
|
||||
'/intl/icu/source/i18n/unicode/decimfmt.h',
|
||||
'/intl/icu/source/i18n/unicode/displayoptions.h',
|
||||
'/intl/icu/source/i18n/unicode/dtfmtsym.h',
|
||||
'/intl/icu/source/i18n/unicode/dtitvfmt.h',
|
||||
'/intl/icu/source/i18n/unicode/dtitvinf.h',
|
||||
@@ -280,8 +253,6 @@ EXPORTS.unicode += [
|
||||
'/intl/icu/source/i18n/unicode/fieldpos.h',
|
||||
'/intl/icu/source/i18n/unicode/fmtable.h',
|
||||
'/intl/icu/source/i18n/unicode/format.h',
|
||||
'/intl/icu/source/i18n/unicode/formattednumber.h',
|
||||
'/intl/icu/source/i18n/unicode/formattedvalue.h',
|
||||
'/intl/icu/source/i18n/unicode/fpositer.h',
|
||||
'/intl/icu/source/i18n/unicode/gender.h',
|
||||
'/intl/icu/source/i18n/unicode/gregocal.h',
|
||||
@@ -289,12 +260,6 @@ EXPORTS.unicode += [
|
||||
'/intl/icu/source/i18n/unicode/measfmt.h',
|
||||
'/intl/icu/source/i18n/unicode/measunit.h',
|
||||
'/intl/icu/source/i18n/unicode/measure.h',
|
||||
'/intl/icu/source/i18n/unicode/messageformat2.h',
|
||||
'/intl/icu/source/i18n/unicode/messageformat2_arguments.h',
|
||||
'/intl/icu/source/i18n/unicode/messageformat2_data_model.h',
|
||||
'/intl/icu/source/i18n/unicode/messageformat2_data_model_names.h',
|
||||
'/intl/icu/source/i18n/unicode/messageformat2_formattable.h',
|
||||
'/intl/icu/source/i18n/unicode/messageformat2_function_registry.h',
|
||||
'/intl/icu/source/i18n/unicode/msgfmt.h',
|
||||
'/intl/icu/source/i18n/unicode/nounit.h',
|
||||
'/intl/icu/source/i18n/unicode/numberformatter.h',
|
||||
@@ -311,7 +276,6 @@ EXPORTS.unicode += [
|
||||
'/intl/icu/source/i18n/unicode/scientificnumberformatter.h',
|
||||
'/intl/icu/source/i18n/unicode/search.h',
|
||||
'/intl/icu/source/i18n/unicode/selfmt.h',
|
||||
'/intl/icu/source/i18n/unicode/simplenumberformatter.h',
|
||||
'/intl/icu/source/i18n/unicode/simpletz.h',
|
||||
'/intl/icu/source/i18n/unicode/smpdtfmt.h',
|
||||
'/intl/icu/source/i18n/unicode/sortkey.h',
|
||||
@@ -333,11 +297,8 @@ EXPORTS.unicode += [
|
||||
'/intl/icu/source/i18n/unicode/udat.h',
|
||||
'/intl/icu/source/i18n/unicode/udateintervalformat.h',
|
||||
'/intl/icu/source/i18n/unicode/udatpg.h',
|
||||
'/intl/icu/source/i18n/unicode/udisplayoptions.h',
|
||||
'/intl/icu/source/i18n/unicode/ufieldpositer.h',
|
||||
'/intl/icu/source/i18n/unicode/uformattable.h',
|
||||
'/intl/icu/source/i18n/unicode/uformattednumber.h',
|
||||
'/intl/icu/source/i18n/unicode/uformattedvalue.h',
|
||||
'/intl/icu/source/i18n/unicode/ugender.h',
|
||||
'/intl/icu/source/i18n/unicode/ulistformatter.h',
|
||||
'/intl/icu/source/i18n/unicode/ulocdata.h',
|
||||
@@ -345,15 +306,12 @@ EXPORTS.unicode += [
|
||||
'/intl/icu/source/i18n/unicode/unirepl.h',
|
||||
'/intl/icu/source/i18n/unicode/unum.h',
|
||||
'/intl/icu/source/i18n/unicode/unumberformatter.h',
|
||||
'/intl/icu/source/i18n/unicode/unumberoptions.h',
|
||||
'/intl/icu/source/i18n/unicode/unumberrangeformatter.h',
|
||||
'/intl/icu/source/i18n/unicode/unumsys.h',
|
||||
'/intl/icu/source/i18n/unicode/upluralrules.h',
|
||||
'/intl/icu/source/i18n/unicode/uregex.h',
|
||||
'/intl/icu/source/i18n/unicode/uregion.h',
|
||||
'/intl/icu/source/i18n/unicode/ureldatefmt.h',
|
||||
'/intl/icu/source/i18n/unicode/usearch.h',
|
||||
'/intl/icu/source/i18n/unicode/usimplenumberformatter.h',
|
||||
'/intl/icu/source/i18n/unicode/uspoof.h',
|
||||
'/intl/icu/source/i18n/unicode/utmscale.h',
|
||||
'/intl/icu/source/i18n/unicode/utrans.h',
|
||||
|
||||
Vendored
+4
-6
@@ -29,10 +29,7 @@ if CONFIG['MOZ_WEBM_ENCODER']:
|
||||
external_dirs += ['media/libvpx']
|
||||
|
||||
if CONFIG['MOZ_AV1']:
|
||||
if CONFIG['AV1_USE_AOM']:
|
||||
external_dirs += ['media/libaom']
|
||||
else:
|
||||
external_dirs += ['media/libdav1d']
|
||||
external_dirs += ['media/libaom']
|
||||
|
||||
external_dirs += ['media/libpng']
|
||||
|
||||
@@ -44,11 +41,12 @@ if CONFIG['CPU_ARCH'] == 'arm':
|
||||
if CONFIG['MOZ_FFVPX']:
|
||||
external_dirs += ['media/ffvpx']
|
||||
|
||||
if CONFIG["MOZ_JXL"]:
|
||||
external_dirs += ["media/libjxl", "media/highway"]
|
||||
|
||||
external_dirs += [
|
||||
'media/highway',
|
||||
'media/kiss_fft',
|
||||
'media/libcubeb',
|
||||
'media/libjxl',
|
||||
'media/libnestegg',
|
||||
'media/libogg',
|
||||
'media/libopus',
|
||||
|
||||
@@ -95,12 +95,12 @@ def count_lines():
|
||||
"""Keep track of the amount of times individual lines occur, in order to
|
||||
prioritize the errors which occur most frequently."""
|
||||
counts = {}
|
||||
for string,count in list(blacklist.items()):
|
||||
for string,count in blacklist.items():
|
||||
for line in string.split("\n"):
|
||||
counts[line] = counts.get(line, 0) + count
|
||||
|
||||
lines = []
|
||||
for k,v in list(counts.items()):
|
||||
for k,v in counts.items():
|
||||
lines.append("{0:6}: {1}".format(v, k))
|
||||
|
||||
lines.sort()
|
||||
|
||||
+2
-2
@@ -18,7 +18,7 @@ def periodically_print_status(proc):
|
||||
time.sleep(0.5)
|
||||
idleTime += 0.5
|
||||
if idleTime > 20 * 60:
|
||||
print("Still linking, 20 minutes passed...")
|
||||
print "Still linking, 20 minutes passed..."
|
||||
sys.stdout.flush()
|
||||
idleTime = 0
|
||||
|
||||
@@ -42,6 +42,6 @@ def wrap_linker(args):
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 2:
|
||||
print("Usage: link.py <commandline>", file=sys.stderr)
|
||||
print >>sys.stderr, "Usage: link.py <commandline>"
|
||||
sys.exit(1)
|
||||
sys.exit(wrap_linker(sys.argv[1:]))
|
||||
@@ -8,4 +8,4 @@
|
||||
# Referenced by milestone.py.
|
||||
#--------------------------------------------------------
|
||||
|
||||
6.9.0
|
||||
6.6.0
|
||||
@@ -23,19 +23,11 @@ if CONFIG['HOST_OS_ARCH'] != 'WINNT':
|
||||
'nsinstall.c',
|
||||
'pathsub.c',
|
||||
]
|
||||
|
||||
# stdc++compat depends on config/export, so avoid a circular
|
||||
# dependency added by HostProgram depending on stdc++compat,
|
||||
# while the program here is in C.
|
||||
HostProgram('nsinstall_real', c_only=True)
|
||||
|
||||
if CONFIG['HOST_OS_ARCH'] == 'WINNT':
|
||||
HOST_SOURCES +=[
|
||||
'action_cl.cpp',
|
||||
]
|
||||
|
||||
HostProgram('action_cl')
|
||||
|
||||
if CONFIG['GKMEDIAS_SHARED_LIBRARY']:
|
||||
DEFINES['GKMEDIAS_SHARED_LIBRARY'] = True
|
||||
|
||||
|
||||
+7
-7
@@ -5,7 +5,7 @@
|
||||
from unittest import TextTestRunner as _TestRunner, TestResult as _TestResult
|
||||
import unittest
|
||||
import inspect
|
||||
from io import StringIO
|
||||
from StringIO import StringIO
|
||||
import os
|
||||
import sys
|
||||
|
||||
@@ -140,7 +140,7 @@ class MockedOpen(object):
|
||||
'''
|
||||
def __init__(self, files = {}):
|
||||
self.files = {}
|
||||
for name, content in files.items():
|
||||
for name, content in files.iteritems():
|
||||
self.files[normcase(os.path.abspath(name))] = content
|
||||
|
||||
def __call__(self, name, mode = 'r'):
|
||||
@@ -158,19 +158,19 @@ class MockedOpen(object):
|
||||
return file
|
||||
|
||||
def __enter__(self):
|
||||
import builtins
|
||||
self.open = builtins.open
|
||||
import __builtin__
|
||||
self.open = __builtin__.open
|
||||
self._orig_path_exists = os.path.exists
|
||||
self._orig_path_isdir = os.path.isdir
|
||||
self._orig_path_isfile = os.path.isfile
|
||||
builtins.open = self
|
||||
__builtin__.open = self
|
||||
os.path.exists = self._wrapped_exists
|
||||
os.path.isdir = self._wrapped_isdir
|
||||
os.path.isfile = self._wrapped_isfile
|
||||
|
||||
def __exit__(self, type, value, traceback):
|
||||
import builtins
|
||||
builtins.open = self.open
|
||||
import __builtin__
|
||||
__builtin__.open = self.open
|
||||
os.path.exists = self._orig_path_exists
|
||||
os.path.isdir = self._orig_path_isdir
|
||||
os.path.isfile = self._orig_path_isfile
|
||||
|
||||
+6
-3
@@ -149,7 +149,7 @@ def _nsinstall_internal(argv):
|
||||
|
||||
# nsinstall as a native command is always UTF-8
|
||||
def nsinstall(argv):
|
||||
return _nsinstall_internal([str(arg, "utf-8") for arg in argv])
|
||||
return _nsinstall_internal([unicode(arg, "utf-8") for arg in argv])
|
||||
|
||||
if __name__ == '__main__':
|
||||
# sys.argv corrupts characters outside the system code page on Windows
|
||||
@@ -173,7 +173,10 @@ if __name__ == '__main__':
|
||||
# The first argv will be "python", the second will be the .py file
|
||||
argv = argv_arr[1:argc.value]
|
||||
else:
|
||||
# On Py3, we shouldn't do this for non-Windows. sys.argv is UTF-8 (or ASCII on old Unix).
|
||||
argv = sys.argv
|
||||
# For consistency, do it on Unix as well
|
||||
if sys.stdin.encoding is not None:
|
||||
argv = [unicode(arg, sys.stdin.encoding) for arg in sys.argv]
|
||||
else:
|
||||
argv = [unicode(arg) for arg in sys.argv]
|
||||
|
||||
sys.exit(_nsinstall_internal(argv[1:]))
|
||||
@@ -5,27 +5,27 @@
|
||||
import configobj
|
||||
import sys
|
||||
import re
|
||||
from io import StringIO
|
||||
from StringIO import StringIO
|
||||
|
||||
try:
|
||||
(file, section, key) = sys.argv[1:]
|
||||
except ValueError:
|
||||
print("Usage: printconfigsetting.py <file> <section> <setting>")
|
||||
print "Usage: printconfigsetting.py <file> <section> <setting>"
|
||||
sys.exit(1)
|
||||
|
||||
with open(file) as fh:
|
||||
content = re.sub(r'^\s*;', '#', fh.read(), flags=re.M)
|
||||
content = re.sub('^\s*;', '#', fh.read(), flags=re.M)
|
||||
|
||||
c = configobj.ConfigObj(StringIO(content))
|
||||
|
||||
try:
|
||||
s = c[section]
|
||||
except KeyError:
|
||||
print("Section [%s] not found." % section, file=sys.stderr)
|
||||
print >>sys.stderr, "Section [%s] not found." % section
|
||||
sys.exit(1)
|
||||
|
||||
try:
|
||||
print(s[key])
|
||||
print s[key]
|
||||
except KeyError:
|
||||
print("Key %s not found." % key, file=sys.stderr)
|
||||
print >>sys.stderr, "Key %s not found." % key
|
||||
sys.exit(1)
|
||||
@@ -9,7 +9,7 @@ Run a python script, adding extra directories to the python path.
|
||||
|
||||
def main(args):
|
||||
def usage():
|
||||
print("pythonpath.py -I directory script.py [args...]", file=sys.stderr)
|
||||
print >>sys.stderr, "pythonpath.py -I directory script.py [args...]"
|
||||
sys.exit(150)
|
||||
|
||||
paths = []
|
||||
@@ -45,7 +45,7 @@ def main(args):
|
||||
frozenglobals['__name__'] = '__main__'
|
||||
frozenglobals['__file__'] = script
|
||||
|
||||
exec(compile(open(script, "rb").read(), script, 'exec'), frozenglobals)
|
||||
execfile(script, frozenglobals)
|
||||
|
||||
# Freeze scope here ... why this makes things work I have no idea ...
|
||||
frozenglobals = globals()
|
||||
|
||||
Loaded 100 of 13817 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user