Compare commits
288
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
baeae97784 | ||
|
|
0324bfa219 | ||
|
|
b279fd025b | ||
|
|
f31546817a | ||
|
|
f272382a9c | ||
|
|
aa8af9d7f8 | ||
|
|
e1f03ae019 | ||
|
|
f316bc6535 | ||
|
|
82e4c66520 | ||
|
|
3c923e0467 | ||
|
|
866985ac88 | ||
|
|
ba772b40ad | ||
|
|
7a86f0e1b7 | ||
|
|
7e9286f2d8 | ||
|
|
b0d1e365ec | ||
|
|
dbd5a2cbf4 | ||
|
|
d60fb1d5c0 | ||
|
|
29c91fcdba | ||
|
|
fe65674f3f | ||
|
|
a3a6b5ed7e | ||
|
|
d2de8658a7 | ||
|
|
be785b4783 | ||
|
|
70e34941c4 | ||
|
|
545d52572d | ||
|
|
dfa0736b49 | ||
|
|
c7bb5664d9 | ||
|
|
6bbc6f3417 | ||
|
|
631169a312 | ||
|
|
427b3312a6 | ||
|
|
2287b0b57a | ||
|
|
56aaba09b1 | ||
|
|
332938fef3 | ||
|
|
13710f7a06 | ||
|
|
530693099b | ||
|
|
f68aa7ea88 | ||
|
|
5bdaee5e40 | ||
|
|
1b465bc2e2 | ||
|
|
e455021bea | ||
|
|
4fe1246bcc | ||
|
|
59b4ac4d5f | ||
|
|
de641fedfe | ||
|
|
cb99fabcc0 | ||
|
|
f996ea12c2 | ||
|
|
4e7fb3e0ea | ||
|
|
e7cbbbef0f | ||
|
|
a181078981 | ||
|
|
987a662b51 | ||
|
|
77e3e14e55 | ||
|
|
98ddf30155 | ||
|
|
83da5c58a2 | ||
|
|
7136ae45a7 | ||
|
|
97d3d61749 | ||
|
|
9c8bf1fe5d | ||
|
|
d1cc6ff3cb | ||
|
|
db76d74820 | ||
|
|
8fdd9d52f9 | ||
|
|
d42797f587 | ||
|
|
6b9c1f6ab8 | ||
|
|
4aedc96db2 | ||
|
|
234830da1e | ||
|
|
244b95968f | ||
|
|
810cd553b5 | ||
|
|
e52eaa961c | ||
|
|
b7827091b8 | ||
|
|
2e344377b5 | ||
|
|
15335ce39d | ||
|
|
14b03e1f8c | ||
|
|
0968b94e5c | ||
|
|
ba6b2258aa | ||
|
|
1e1715ff11 | ||
|
|
c93381fa79 | ||
|
|
65b0a59757 | ||
|
|
c785639043 | ||
|
|
512c259822 | ||
|
|
90fea6f0d4 | ||
|
|
d892468fd0 | ||
|
|
81ab98b329 | ||
|
|
3f1cacd3e6 | ||
|
|
6e41e01a29 | ||
|
|
9ce81488d4 | ||
|
|
25bc2630d9 | ||
|
|
e5b69418a0 | ||
|
|
229a69be5f | ||
|
|
7f2561312a | ||
|
|
93d11a07f9 | ||
|
|
8e5e24c4c6 | ||
|
|
517ee6754c | ||
|
|
47690c287c | ||
|
|
364b95170e | ||
|
|
407006d673 | ||
|
|
2d60605cc6 | ||
|
|
2d1129eb7e | ||
|
|
495b4980e7 | ||
|
|
ad480be112 | ||
|
|
a06001c022 | ||
|
|
6cbda74aeb | ||
|
|
576fbdf490 | ||
|
|
52b00c38ea | ||
|
|
8ec56f459b | ||
|
|
5cbe423461 | ||
|
|
369fbba750 | ||
|
|
8e3c35efc6 | ||
|
|
b3b852b877 | ||
|
|
d5c6e20e9e | ||
|
|
89b36775fb | ||
|
|
df16df5693 | ||
|
|
aa1fd576ac | ||
|
|
2512188ca7 | ||
|
|
89e88ca6a0 | ||
|
|
2697dd162f | ||
|
|
53a4179c4a | ||
|
|
a120731ddd | ||
|
|
bda611a41a | ||
|
|
5a02a4a1a4 | ||
|
|
e59f358b45 | ||
|
|
90c9535b39 | ||
|
|
ad778bbfdb | ||
|
|
8868552b24 | ||
|
|
66826eb487 | ||
|
|
39127b5ee9 | ||
|
|
80cff816a8 | ||
|
|
e9dda8dafa | ||
|
|
11fc818dfb | ||
|
|
84ed844e3f | ||
|
|
50af804f1c | ||
|
|
82ce93bce9 | ||
|
|
228abc8259 | ||
|
|
1692fa5291 | ||
|
|
bb58c6ae38 | ||
|
|
4f58dc27f9 | ||
|
|
fc5324b9f7 | ||
|
|
561f65aabf | ||
|
|
9acfe36b95 | ||
|
|
ce495cbd85 | ||
|
|
c44020f188 | ||
|
|
35e7a695af | ||
|
|
7a55055d22 | ||
|
|
061900b87f | ||
|
|
abe32f7309 | ||
|
|
7bfd4c7fe7 | ||
|
|
859d6a3e2c | ||
|
|
c2f05f99af | ||
|
|
55b33fb02b | ||
|
|
c247e40d41 | ||
|
|
05c58f159d | ||
|
|
67d5fefcf2 | ||
|
|
aad017be9e | ||
|
|
4543dbf3ff | ||
|
|
b1cb7e0a8f | ||
|
|
1c6d21c97d | ||
|
|
fc42fb38c9 | ||
|
|
618068c15b | ||
|
|
808516a0a8 | ||
|
|
7d6b806040 | ||
|
|
6b4e2c9d73 | ||
|
|
787883f6a4 | ||
|
|
7f02753c04 | ||
|
|
8fa38b3445 | ||
|
|
541c5f9f45 | ||
|
|
4b6bd4976a | ||
|
|
a0843d52b4 | ||
|
|
977a8cbed8 | ||
|
|
1e85085305 | ||
|
|
188f61505f | ||
|
|
a514d7f6a4 | ||
|
|
47c2c75ceb | ||
|
|
7082ec8a9a | ||
|
|
2907a84362 | ||
|
|
b8d1ee05c3 | ||
|
|
0b625e624a | ||
|
|
a4da712f91 | ||
|
|
185f124e87 | ||
|
|
8633077691 | ||
|
|
39a1899045 | ||
|
|
4dc011a187 | ||
|
|
ccb12e1dda | ||
|
|
63f0d3e295 | ||
|
|
09d598c496 | ||
|
|
7e60482d80 | ||
|
|
10b3237e52 | ||
|
|
99af7cc028 | ||
|
|
76b360b5d1 | ||
|
|
4001b58a3e | ||
|
|
134a8aac87 | ||
|
|
3e2e48872a | ||
|
|
622b43cbc5 | ||
|
|
75b44ef620 | ||
|
|
00084ea49c | ||
|
|
b6fae24296 | ||
|
|
13c6b7422d | ||
|
|
24f2e663cd | ||
|
|
f96b155988 | ||
|
|
d5cc24e916 | ||
|
|
8eba271c5f | ||
|
|
19955c82b3 | ||
|
|
80ae8aec7c | ||
|
|
d8441d7c81 | ||
|
|
c2446f2478 | ||
|
|
6efb7a1904 | ||
|
|
fa0b03a10f | ||
|
|
3ae2972950 | ||
|
|
2d48de9998 | ||
|
|
3b029cdfe4 | ||
|
|
ea9077a8a5 | ||
|
|
b4af6b6265 | ||
|
|
ae1d53ceb1 | ||
|
|
c3f4709d5e | ||
|
|
a7bb3fc175 | ||
|
|
6a0203f25f | ||
|
|
b0dfcb147f | ||
|
|
06fd4c9357 | ||
|
|
b9ea7fd9ee | ||
|
|
58308a5c7a | ||
|
|
88c7d54975 | ||
|
|
eadb5678b3 | ||
|
|
54e3e60796 | ||
|
|
2a05494abe | ||
|
|
bc89e58def | ||
|
|
3a009b97f6 | ||
|
|
a105f6d5e9 | ||
|
|
5db241c0c0 | ||
|
|
d38dca10e5 | ||
|
|
54fc723126 | ||
|
|
9b8ca17ee4 | ||
|
|
cddc95b39b | ||
|
|
5676529793 | ||
|
|
ce68156cf4 | ||
|
|
5032ad9593 | ||
|
|
b55f765f2e | ||
|
|
856078d435 | ||
|
|
c74c262d2f | ||
|
|
787e29e374 | ||
|
|
e439896c9b | ||
|
|
15b508f1fb | ||
|
|
5651ebfc76 | ||
|
|
593bfc1ce8 | ||
|
|
28953cda7a | ||
|
|
516f3f545d | ||
|
|
83aff65a42 | ||
|
|
5bd97df957 | ||
|
|
8772711181 | ||
|
|
dc9526f4c6 | ||
|
|
9ab36e7ae0 | ||
|
|
e8d30841e7 | ||
|
|
9faf29374e | ||
|
|
75e4818d36 | ||
|
|
a65144e9e0 | ||
|
|
4f29548526 | ||
|
|
528db2cbd8 | ||
|
|
84e6bcc1e6 | ||
|
|
0dc9ff518d | ||
|
|
a2e3bd44aa | ||
|
|
163a0e7caf | ||
|
|
49a86db5f3 | ||
|
|
2640953d8b | ||
|
|
7eb7d67f7a | ||
|
|
e28860ba7f | ||
|
|
49a96b1d91 | ||
|
|
3130812693 | ||
|
|
71ae69aea8 | ||
|
|
9e34d697c7 | ||
|
|
8fa9125d02 | ||
|
|
4b4488c3e4 | ||
|
|
248db7d301 | ||
|
|
e199f2949b | ||
|
|
456b5450a4 | ||
|
|
d8e629c4a3 | ||
|
|
4898c4f297 | ||
|
|
7cd578bbc6 | ||
|
|
1e91df628a | ||
|
|
b110549cbd | ||
|
|
971047835a | ||
|
|
dd4d9eb032 | ||
|
|
8b94f1e480 | ||
|
|
c89610a5c7 | ||
|
|
217963cbed | ||
|
|
c4f4e18340 | ||
|
|
8a7c0e7345 | ||
|
|
52e304d450 | ||
|
|
cfc0eeca53 | ||
|
|
ebd3dd9228 | ||
|
|
cb40e4e7ef | ||
|
|
662dba55fd | ||
|
|
8760ce023c | ||
|
|
b86e148bb7 | ||
|
|
9e83721e5e | ||
|
|
dc2d6c2e60 | ||
|
|
4ada6f6762 |
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
|
||||
Clobber for ICU 78.1
|
||||
+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
|
||||
|
||||
@@ -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.
|
||||
@@ -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
|
||||
|
||||
@@ -55,7 +55,7 @@ private:
|
||||
{
|
||||
explicit IteratorState(Accessible* aParent, IteratorState* mParentState = nullptr);
|
||||
|
||||
RefPtr<Accessible> mParent;
|
||||
Accessible* mParent;
|
||||
int32_t mIndex;
|
||||
IteratorState* mParentState;
|
||||
};
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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]
|
||||
@@ -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'):
|
||||
@@ -390,8 +385,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 +400,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 +410,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 +761,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.
|
||||
|
||||
@@ -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',
|
||||
@@ -152,7 +163,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 +174,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 +295,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 +333,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 +341,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 +380,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
|
||||
|
||||
@@ -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)
|
||||
@@ -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())
|
||||
@@ -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':
|
||||
|
||||
Vendored
+1
-4
@@ -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']
|
||||
|
||||
|
||||
@@ -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.8.1
|
||||
@@ -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()
|
||||
|
||||
@@ -18,7 +18,7 @@ def rebuild_check(args):
|
||||
deps = args[1:]
|
||||
t = mtime(target)
|
||||
if t < 0:
|
||||
print(target)
|
||||
print target
|
||||
return
|
||||
|
||||
newer = []
|
||||
@@ -31,13 +31,13 @@ def rebuild_check(args):
|
||||
newer.append(dep)
|
||||
|
||||
if newer and removed:
|
||||
print('Rebuilding %s because %s changed and %s was removed' % (target, ', '.join(newer), ', '.join(removed)))
|
||||
print 'Rebuilding %s because %s changed and %s was removed' % (target, ', '.join(newer), ', '.join(removed))
|
||||
elif newer:
|
||||
print('Rebuilding %s because %s changed' % (target, ', '.join(newer)))
|
||||
print 'Rebuilding %s because %s changed' % (target, ', '.join(newer))
|
||||
elif removed:
|
||||
print('Rebuilding %s because %s was removed' % (target, ', '.join(removed)))
|
||||
print 'Rebuilding %s because %s was removed' % (target, ', '.join(removed))
|
||||
else:
|
||||
print('Rebuilding %s for an unknown reason' % target)
|
||||
print 'Rebuilding %s for an unknown reason' % target
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
|
||||
@@ -335,6 +335,8 @@ curses.h
|
||||
cxxabi.h
|
||||
DateTimeUtils.h
|
||||
dbus/dbus.h
|
||||
dbus/dbus-glib.h
|
||||
dbus/dbus-glib-lowlevel.h
|
||||
ddeml.h
|
||||
Debug.h
|
||||
dem.h
|
||||
@@ -448,6 +450,7 @@ gtk/gtkx.h
|
||||
gtk/gtkunixprint.h
|
||||
HIToolbox/HIToolbox.h
|
||||
hlink.h
|
||||
ia64/sys/inline.h
|
||||
Icons.h
|
||||
iconv.h
|
||||
ieeefp.h
|
||||
|
||||
@@ -7,7 +7,7 @@ from tempfile import mkdtemp
|
||||
from shutil import rmtree
|
||||
import mozunit
|
||||
|
||||
from collections import UserString
|
||||
from UserString import UserString
|
||||
# Create a controlled configuration for use by expandlibs
|
||||
config_win = {
|
||||
'AR': 'lib',
|
||||
@@ -120,7 +120,8 @@ class ReplicateTests(type):
|
||||
del dict[name]
|
||||
return type.__new__(cls, clsName, bases, dict)
|
||||
|
||||
class TestCaseWithTmpDir(unittest.TestCase, metaclass=ReplicateTests):
|
||||
class TestCaseWithTmpDir(unittest.TestCase):
|
||||
__metaclass__ = ReplicateTests
|
||||
def init(self):
|
||||
self.tmpdir = os.path.abspath(mkdtemp(dir=os.curdir))
|
||||
|
||||
|
||||
@@ -28,9 +28,9 @@ class TestNsinstall(unittest.TestCase):
|
||||
# Unicode strings means non-ASCII children can be deleted properly on
|
||||
# Windows
|
||||
if sys.stdin.encoding is None:
|
||||
tmpdir = str(self.tmpdir)
|
||||
tmpdir = unicode(self.tmpdir)
|
||||
else:
|
||||
tmpdir = str(self.tmpdir, sys.stdin.encoding)
|
||||
tmpdir = unicode(self.tmpdir, sys.stdin.encoding)
|
||||
rmtree(tmpdir)
|
||||
|
||||
# utility methods for tests
|
||||
@@ -50,14 +50,14 @@ class TestNsinstall(unittest.TestCase):
|
||||
"Test nsinstall -D <dir>"
|
||||
testdir = os.path.join(self.tmpdir, "test")
|
||||
self.assertEqual(nsinstall(["-D", testdir]), 0)
|
||||
self.assertTrue(os.path.isdir(testdir))
|
||||
self.assert_(os.path.isdir(testdir))
|
||||
|
||||
def test_nsinstall_basic(self):
|
||||
"Test nsinstall <file> <dir>"
|
||||
testfile = self.touch("testfile")
|
||||
testdir = self.mkdirs("testdir")
|
||||
self.assertEqual(nsinstall([testfile, testdir]), 0)
|
||||
self.assertTrue(os.path.isfile(os.path.join(testdir, "testfile")))
|
||||
self.assert_(os.path.isfile(os.path.join(testdir, "testfile")))
|
||||
|
||||
def test_nsinstall_basic_recursive(self):
|
||||
"Test nsinstall <dir> <dest dir>"
|
||||
@@ -76,12 +76,12 @@ class TestNsinstall(unittest.TestCase):
|
||||
'-X', Xdir]), 0)
|
||||
|
||||
testdir = os.path.join(destdir, "sourcedir")
|
||||
self.assertTrue(os.path.isdir(testdir))
|
||||
self.assertTrue(os.path.isfile(os.path.join(testdir, "testfile")))
|
||||
self.assertTrue(not os.path.exists(os.path.join(testdir, "Xfile")))
|
||||
self.assertTrue(os.path.isdir(os.path.join(testdir, "copieddir")))
|
||||
self.assertTrue(os.path.isfile(os.path.join(testdir, "copieddir", "testfile2")))
|
||||
self.assertTrue(not os.path.exists(os.path.join(testdir, "Xdir")))
|
||||
self.assert_(os.path.isdir(testdir))
|
||||
self.assert_(os.path.isfile(os.path.join(testdir, "testfile")))
|
||||
self.assert_(not os.path.exists(os.path.join(testdir, "Xfile")))
|
||||
self.assert_(os.path.isdir(os.path.join(testdir, "copieddir")))
|
||||
self.assert_(os.path.isfile(os.path.join(testdir, "copieddir", "testfile2")))
|
||||
self.assert_(not os.path.exists(os.path.join(testdir, "Xdir")))
|
||||
|
||||
def test_nsinstall_multiple(self):
|
||||
"Test nsinstall <three files> <dest dir>"
|
||||
@@ -91,7 +91,7 @@ class TestNsinstall(unittest.TestCase):
|
||||
testdir = self.mkdirs("testdir")
|
||||
self.assertEqual(nsinstall(testfiles + [testdir]), 0)
|
||||
for f in testfiles:
|
||||
self.assertTrue(os.path.isfile(os.path.join(testdir,
|
||||
self.assert_(os.path.isfile(os.path.join(testdir,
|
||||
os.path.basename(f))))
|
||||
|
||||
def test_nsinstall_dir_exists(self):
|
||||
@@ -99,7 +99,7 @@ class TestNsinstall(unittest.TestCase):
|
||||
srcdir = self.mkdirs("test")
|
||||
destdir = self.mkdirs("testdir/test")
|
||||
self.assertEqual(nsinstall([srcdir, os.path.dirname(destdir)]), 0)
|
||||
self.assertTrue(os.path.isdir(destdir))
|
||||
self.assert_(os.path.isdir(destdir))
|
||||
|
||||
def test_nsinstall_t(self):
|
||||
"Test that nsinstall -t works (preserve timestamp)"
|
||||
@@ -110,7 +110,7 @@ class TestNsinstall(unittest.TestCase):
|
||||
os.utime(testfile, (t, t))
|
||||
self.assertEqual(nsinstall(["-t", testfile, testdir]), 0)
|
||||
destfile = os.path.join(testdir, "testfile")
|
||||
self.assertTrue(os.path.isfile(destfile))
|
||||
self.assert_(os.path.isfile(destfile))
|
||||
self.assertEqual(os.stat(testfile).st_mtime,
|
||||
os.stat(destfile).st_mtime)
|
||||
|
||||
@@ -125,7 +125,7 @@ class TestNsinstall(unittest.TestCase):
|
||||
self.assertEqual(nsinstall(["-m", "{0:04o}"
|
||||
.format(mode), testfile, testdir]), 0)
|
||||
destfile = os.path.join(testdir, "testfile")
|
||||
self.assertTrue(os.path.isfile(destfile))
|
||||
self.assert_(os.path.isfile(destfile))
|
||||
self.assertEqual(os.stat(testfile).st_mode,
|
||||
os.stat(destfile).st_mode)
|
||||
|
||||
@@ -136,25 +136,25 @@ class TestNsinstall(unittest.TestCase):
|
||||
testdir = self.mkdirs("testdir")
|
||||
destdir = os.path.join(testdir, "subdir")
|
||||
self.assertEqual(nsinstall(["-d", testfile, destdir]), 0)
|
||||
self.assertTrue(os.path.isdir(os.path.join(destdir, "testfile")))
|
||||
self.assert_(os.path.isdir(os.path.join(destdir, "testfile")))
|
||||
|
||||
if RUN_NON_ASCII_TESTS:
|
||||
def test_nsinstall_non_ascii(self):
|
||||
"Test that nsinstall handles non-ASCII files"
|
||||
filename = "\u2325\u3452\u2415\u5081"
|
||||
filename = u"\u2325\u3452\u2415\u5081"
|
||||
testfile = self.touch(filename)
|
||||
testdir = self.mkdirs("\u4241\u1D04\u1414")
|
||||
testdir = self.mkdirs(u"\u4241\u1D04\u1414")
|
||||
self.assertEqual(nsinstall([testfile.encode("utf-8"),
|
||||
testdir.encode("utf-8")]), 0)
|
||||
|
||||
destfile = os.path.join(testdir, filename)
|
||||
self.assertTrue(os.path.isfile(destfile))
|
||||
self.assert_(os.path.isfile(destfile))
|
||||
|
||||
def test_nsinstall_non_ascii_subprocess(self):
|
||||
"Test that nsinstall as a subprocess handles non-ASCII files"
|
||||
filename = "\u2325\u3452\u2415\u5081"
|
||||
filename = u"\u2325\u3452\u2415\u5081"
|
||||
testfile = self.touch(filename)
|
||||
testdir = self.mkdirs("\u4241\u1D04\u1414")
|
||||
testdir = self.mkdirs(u"\u4241\u1D04\u1414")
|
||||
# We don't use subprocess because it can't handle Unicode on
|
||||
# Windows <http://bugs.python.org/issue1759845>. mozprocess calls
|
||||
# CreateProcessW directly so it's perfect.
|
||||
@@ -166,7 +166,7 @@ class TestNsinstall(unittest.TestCase):
|
||||
|
||||
self.assertEqual(rv, 0)
|
||||
destfile = os.path.join(testdir, filename)
|
||||
self.assertTrue(os.path.isfile(destfile))
|
||||
self.assert_(os.path.isfile(destfile))
|
||||
|
||||
#TODO: implement -R, -l, -L and test them!
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ import sys
|
||||
import random
|
||||
import copy
|
||||
from string import letters
|
||||
from functools import reduce
|
||||
|
||||
'''
|
||||
Test case infrastructure for MozZipFile.
|
||||
@@ -39,7 +38,7 @@ leafs = (
|
||||
'firstdir/oneleaf',
|
||||
'seconddir/twoleaf',
|
||||
'thirddir/with/sub/threeleaf')
|
||||
_lengths = [n * 64 for n in [16, 64, 80]]
|
||||
_lengths = map(lambda n: n * 64, [16, 64, 80])
|
||||
lengths = 3
|
||||
writes = 5
|
||||
|
||||
@@ -72,7 +71,7 @@ def getid(descs):
|
||||
def getContent(length):
|
||||
'Get pseudo random content of given length.'
|
||||
rv = [None] * length
|
||||
for i in range(length):
|
||||
for i in xrange(length):
|
||||
rv[i] = random.choice(letters)
|
||||
return ''.join(rv)
|
||||
|
||||
@@ -134,13 +133,13 @@ class TestExtensiveStored(unittest.TestCase):
|
||||
def _verifyZip(self):
|
||||
zf = zipfile.ZipFile(self.f)
|
||||
badEntry = zf.testzip()
|
||||
self.assertFalse(badEntry, badEntry)
|
||||
self.failIf(badEntry, badEntry)
|
||||
zlist = zf.namelist()
|
||||
zlist.sort()
|
||||
vlist = list(self.ref.keys())
|
||||
vlist = self.ref.keys()
|
||||
vlist.sort()
|
||||
self.assertEqual(zlist, vlist)
|
||||
for leaf, content in self.ref.items():
|
||||
for leaf, content in self.ref.iteritems():
|
||||
zcontent = zf.read(leaf)
|
||||
self.assertEqual(content, zcontent)
|
||||
|
||||
@@ -159,16 +158,16 @@ class TestExtensiveStored(unittest.TestCase):
|
||||
open(self.leaf('stage', leaf), 'w').write(content)
|
||||
|
||||
# all leafs in all lengths
|
||||
atomics = list(prod(range(len(leafs)), range(lengths)))
|
||||
atomics = list(prod(xrange(len(leafs)), xrange(lengths)))
|
||||
|
||||
# populate TestExtensiveStore with testcases
|
||||
for w in range(writes):
|
||||
for w in xrange(writes):
|
||||
# Don't iterate over all files for the the first n passes,
|
||||
# those are redundant as long as w < lengths.
|
||||
# There are symmetries in the trailing end, too, but I don't know
|
||||
# how to reduce those out right now.
|
||||
nonatomics = [list(prod(list(range(min(i,len(leafs)))), range(lengths)))
|
||||
for i in range(1, w+1)] + [atomics]
|
||||
nonatomics = [list(prod(range(min(i,len(leafs))), xrange(lengths)))
|
||||
for i in xrange(1, w+1)] + [atomics]
|
||||
for descs in prod(*nonatomics):
|
||||
suffix = getid(descs)
|
||||
dicts = [dict(leaf=leaf, length=length) for leaf, length in descs]
|
||||
@@ -182,9 +181,9 @@ for w in range(writes):
|
||||
# and then write all atomics again.
|
||||
# This should catch more or less all artifacts generated
|
||||
# by the final ordering step when closing the jar.
|
||||
files = [list(prod([i], range(lengths))) for i in range(len(leafs))]
|
||||
files = [list(prod([i], xrange(lengths))) for i in xrange(len(leafs))]
|
||||
allfiles = reduce(lambda l,r:l+r,
|
||||
[list(prod(*files[:(i+1)])) for i in range(len(leafs))])
|
||||
[list(prod(*files[:(i+1)])) for i in xrange(len(leafs))])
|
||||
|
||||
for first in allfiles:
|
||||
testbasename = 'test{0}_'.format(getid(first))
|
||||
|
||||
+1
-1
@@ -22,4 +22,4 @@ SRCDIR=$(dirname $0)
|
||||
TOPSRCDIR="$SRCDIR"
|
||||
export OLD_CONFIGURE="$SRCDIR"/old-configure
|
||||
|
||||
which python3 > /dev/null && exec python3 "$TOPSRCDIR/configure.py" "$@" || exec python "$TOPSRCDIR/configure.py" "$@"
|
||||
which python2.7 > /dev/null && exec python2.7 "$TOPSRCDIR/configure.py" "$@" || exec python "$TOPSRCDIR/configure.py" "$@"
|
||||
+22
-17
@@ -10,11 +10,13 @@ import subprocess
|
||||
import sys
|
||||
import textwrap
|
||||
|
||||
|
||||
base_dir = os.path.abspath(os.path.dirname(__file__))
|
||||
sys.path.insert(0, os.path.join(base_dir, 'python', 'mozbuild'))
|
||||
from mozbuild.configure import ConfigureSandbox
|
||||
from mozbuild.util import (
|
||||
indented_repr,
|
||||
encode,
|
||||
)
|
||||
|
||||
|
||||
@@ -34,24 +36,20 @@ def config_status(config):
|
||||
# Ideally, all the backend and frontend code would handle the booleans, but
|
||||
# there are so many things involved, that it's easier to keep config.status
|
||||
# untouched for now.
|
||||
def sanitized_values(v):
|
||||
def sanitized_bools(v):
|
||||
if v is True:
|
||||
return '1'
|
||||
if v is False:
|
||||
return ''
|
||||
if isinstance(v, dict):
|
||||
return {key: sanitized_values(value) for key, value in v.items()}
|
||||
if isinstance(v, (list, tuple)):
|
||||
return [sanitized_values(value) for value in v]
|
||||
return v
|
||||
|
||||
sanitized_config = {}
|
||||
sanitized_config['substs'] = {
|
||||
key: sanitized_values(value) for key, value in config.items()
|
||||
if key not in ('DEFINES', 'non_global_defines', 'TOPSRCDIR', 'TOPOBJDIR')
|
||||
k: sanitized_bools(v) for k, v in config.iteritems()
|
||||
if k not in ('DEFINES', 'non_global_defines', 'TOPSRCDIR', 'TOPOBJDIR')
|
||||
}
|
||||
sanitized_config['defines'] = {
|
||||
key: sanitized_values(value) for key, value in config['DEFINES'].items()
|
||||
k: sanitized_bools(v) for k, v in config['DEFINES'].iteritems()
|
||||
}
|
||||
sanitized_config['non_global_defines'] = config['non_global_defines']
|
||||
sanitized_config['topsrcdir'] = config['TOPSRCDIR']
|
||||
@@ -62,16 +60,19 @@ def config_status(config):
|
||||
# here, when we're able to skip configure tests/use cached results/not rely
|
||||
# on autoconf.
|
||||
print("Creating config.status", file=sys.stderr)
|
||||
with codecs.open('config.status', 'w', encoding='utf-8', errors='replace') as fh:
|
||||
encoding = 'mbcs' if sys.platform == 'win32' else 'utf-8'
|
||||
with codecs.open('config.status', 'w', encoding) as fh:
|
||||
fh.write(textwrap.dedent('''\
|
||||
#!%(python)s
|
||||
# coding=%(encoding)s
|
||||
from __future__ import unicode_literals
|
||||
''') % {'python': config['PYTHON'], 'encoding': 'utf-8'})
|
||||
from mozbuild.util import encode
|
||||
encoding = '%(encoding)s'
|
||||
''') % {'python': config['PYTHON'], 'encoding': encoding})
|
||||
# A lot of the build backend code is currently expecting byte
|
||||
# strings and breaks in subtle ways with unicode strings. (bug 1296508)
|
||||
for k, v in sanitized_config.items():
|
||||
fh.write('%s = %s\n' % (k, indented_repr(v)))
|
||||
for k, v in sanitized_config.iteritems():
|
||||
fh.write('%s = encode(%s, encoding)\n' % (k, indented_repr(v)))
|
||||
fh.write("__all__ = ['topobjdir', 'topsrcdir', 'defines', "
|
||||
"'non_global_defines', 'substs', 'mozconfig']")
|
||||
|
||||
@@ -87,14 +88,18 @@ def config_status(config):
|
||||
# executable permissions.
|
||||
os.chmod('config.status', 0o755)
|
||||
if config.get('MOZ_BUILD_APP') != 'js' or config.get('JS_STANDALONE'):
|
||||
os.environ['WRITE_MOZINFO'] = '1'
|
||||
os.environ[b'WRITE_MOZINFO'] = b'1'
|
||||
from mozbuild.config_status import config_status
|
||||
|
||||
# Some values in sanitized_config also have more complex types, such as
|
||||
# EnumString and tuples. Converting string subclasses to plain strings
|
||||
# and tuples to lists keeps this code path consistent with the
|
||||
# generated config.status file, which serializes iterables as lists.
|
||||
return config_status(args=[], **sanitized_config)
|
||||
# EnumString, which using when calling config_status would currently
|
||||
# break the build, as well as making it inconsistent with re-running
|
||||
# config.status. Fortunately, EnumString derives from unicode, so it's
|
||||
# covered by converting unicode strings.
|
||||
|
||||
# A lot of the build backend code is currently expecting byte strings
|
||||
# and breaks in subtle ways with unicode strings.
|
||||
return config_status(args=[], **encode(sanitized_config, encoding))
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
@@ -143,8 +143,7 @@ TooltipsOverlay.prototype = {
|
||||
// Font preview tooltip
|
||||
if (type === VIEW_NODE_VALUE_TYPE && prop.property === "font-family") {
|
||||
let value = prop.value.toLowerCase();
|
||||
if (value !== "inherit" && value !== "unset" && value !== "initial" &&
|
||||
value !== "revert" && value !== "revert-layer") {
|
||||
if (value !== "inherit" && value !== "unset" && value !== "initial" && value !== "revert") {
|
||||
tooltipType = TOOLTIP_FONTFAMILY_TYPE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -204,22 +204,21 @@ function initialHTML(doc) {
|
||||
os = "linux";
|
||||
}
|
||||
|
||||
// The appRoot URI is prepended to all URIs instead of using a <base> element
|
||||
// because the latter can cause spurious network requests (UXP Issue #3122)
|
||||
let appRoot = "resource://devtools/client/jsonview/";
|
||||
let base = doc.createElement("base");
|
||||
base.href = "resource://devtools/client/jsonview/";
|
||||
|
||||
let style = doc.createElement("link");
|
||||
style.rel = "stylesheet";
|
||||
style.type = "text/css";
|
||||
style.href = appRoot +"css/main.css";
|
||||
style.href = "css/main.css";
|
||||
|
||||
let script = doc.createElement("script");
|
||||
script.src = appRoot + "lib/require.js";
|
||||
script.dataset.main = appRoot + "viewer-config.js";
|
||||
script.src = "lib/require.js";
|
||||
script.dataset.main = "viewer-config";
|
||||
script.defer = true;
|
||||
|
||||
let head = doc.createElement("head");
|
||||
head.append(style, script);
|
||||
head.append(base, style, script);
|
||||
|
||||
return "<!DOCTYPE html>\n" +
|
||||
startTag("html", {
|
||||
|
||||
@@ -4,8 +4,6 @@ subsuite = devtools
|
||||
support-files =
|
||||
array_json.json
|
||||
array_json.json^headers^
|
||||
csp_json.json
|
||||
csp_json.json^headers^
|
||||
doc_frame_script.js
|
||||
head.js
|
||||
invalid_json.json
|
||||
@@ -24,7 +22,6 @@ subsuite = clipboard
|
||||
subsuite = clipboard
|
||||
[browser_jsonview_copy_rawdata.js]
|
||||
subsuite = clipboard
|
||||
[browser_jsonview_csp_json.js]
|
||||
[browser_jsonview_filter.js]
|
||||
[browser_jsonview_invalid_json.js]
|
||||
[browser_jsonview_valid_json.js]
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
const TEST_JSON_URL = URL_ROOT + "csp_json.json";
|
||||
|
||||
add_task(function* () {
|
||||
info("Test CSP JSON started");
|
||||
|
||||
yield addJsonViewTab(TEST_JSON_URL);
|
||||
|
||||
let count = yield getElementCount(".jsonPanelBox .treeTable .treeRow");
|
||||
is(count, 1, "There must be one row");
|
||||
});
|
||||
@@ -1 +0,0 @@
|
||||
{"csp": true}
|
||||
@@ -1,2 +0,0 @@
|
||||
Content-Type: application/json
|
||||
Content-Security-Policy: default-src 'none'; base-uri 'none';
|
||||
@@ -23,7 +23,7 @@
|
||||
* of the code base, so it's consistent and modules can be easily reused.
|
||||
*/
|
||||
require.config({
|
||||
baseUrl: "resource://devtools/client/jsonview/",
|
||||
baseUrl: ".",
|
||||
paths: {
|
||||
"devtools/client/shared": "resource://devtools/client/shared",
|
||||
"devtools/shared": "resource://devtools/shared",
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
# 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/.
|
||||
|
||||
JS_PREFERENCE_FILES += [
|
||||
JS_PREFERENCE_PP_FILES += [
|
||||
'devtools.js',
|
||||
]
|
||||
@@ -10,8 +10,7 @@ const SPECIALVALUES = new Set([
|
||||
"initial",
|
||||
"inherit",
|
||||
"unset",
|
||||
"revert",
|
||||
"revert-layer"
|
||||
"revert"
|
||||
]);
|
||||
|
||||
const {getCSSLexer} = require("devtools/shared/css/lexer");
|
||||
|
||||
@@ -99,14 +99,7 @@ const filterList = [
|
||||
];
|
||||
|
||||
// Valid values that shouldn't be parsed for filters.
|
||||
const SPECIAL_VALUES = new Set([
|
||||
"none",
|
||||
"unset",
|
||||
"initial",
|
||||
"inherit",
|
||||
"revert",
|
||||
"revert-layer"
|
||||
]);
|
||||
const SPECIAL_VALUES = new Set(["none", "unset", "initial", "inherit", "revert"]);
|
||||
|
||||
/**
|
||||
* A CSS Filter editor widget used to add/remove/modify
|
||||
|
||||
@@ -103,6 +103,12 @@ function StyleSheetEditor(styleSheet, win, file, isNew, walker, highlighter) {
|
||||
}
|
||||
};
|
||||
|
||||
this._styleSheetFilePath = null;
|
||||
if (styleSheet.href &&
|
||||
Services.io.extractScheme(this.styleSheet.href) == "file") {
|
||||
this._styleSheetFilePath = this.styleSheet.href;
|
||||
}
|
||||
|
||||
this._onPropertyChange = this._onPropertyChange.bind(this);
|
||||
this._onError = this._onError.bind(this);
|
||||
this._onMediaRuleMatchesChange = this._onMediaRuleMatchesChange.bind(this);
|
||||
@@ -658,7 +664,8 @@ StyleSheetEditor.prototype = {
|
||||
if (this._friendlyName) {
|
||||
defaultName = OS.Path.basename(this._friendlyName);
|
||||
}
|
||||
showFilePicker(file, true, this._window, onFile, defaultName);
|
||||
showFilePicker(file || this._styleSheetFilePath, true, this._window,
|
||||
onFile, defaultName);
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,112 +1,98 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
"use strict";
|
||||
|
||||
// Test that 'Save' function works.
|
||||
|
||||
const TESTCASE_URI_HTML = TEST_BASE_HTTP + "simple.html";
|
||||
const TESTCASE_URI_CSS = TEST_BASE_HTTP + "simple.css";
|
||||
|
||||
var tempScope = {};
|
||||
Components.utils.import("resource://gre/modules/FileUtils.jsm", tempScope);
|
||||
Components.utils.import("resource://gre/modules/NetUtil.jsm", tempScope);
|
||||
var FileUtils = tempScope.FileUtils;
|
||||
var NetUtil = tempScope.NetUtil;
|
||||
|
||||
add_task(function* () {
|
||||
let htmlFile = yield copy(TESTCASE_URI_HTML, "simple.html");
|
||||
const cssFile = await copy(TESTCASE_URI_CSS, "simple.css");
|
||||
let uri = Services.io.newFileURI(htmlFile);
|
||||
let filePath = uri.resolve("");
|
||||
|
||||
let { ui } = yield openStyleEditorForURL(filePath);
|
||||
|
||||
let editor = ui.editors[0];
|
||||
yield editor.getSourceEditor();
|
||||
|
||||
is(
|
||||
editor.savedFile,
|
||||
null,
|
||||
"savedFile should not be pre-populated from the source file"
|
||||
);
|
||||
|
||||
info("Editing the style sheet.");
|
||||
let dirty = editor.sourceEditor.once("dirty-change");
|
||||
let beginCursor = {line: 0, ch: 0};
|
||||
editor.sourceEditor.replaceText("DIRTY TEXT", beginCursor, beginCursor);
|
||||
|
||||
yield dirty;
|
||||
|
||||
is(editor.sourceEditor.isClean(), false, "Editor is dirty.");
|
||||
ok(editor.summary.classList.contains("unsaved"),
|
||||
"Star icon is present in the corresponding summary.");
|
||||
|
||||
info(
|
||||
"Saving the changes with an explicit file (simulating a user-chosen save location)."
|
||||
);
|
||||
dirty = editor.sourceEditor.once("dirty-change");
|
||||
|
||||
editor.saveToFile(cssFile, function (file) {
|
||||
ok(file, "file should get saved when explicitly passing a file");
|
||||
});
|
||||
|
||||
yield dirty;
|
||||
|
||||
is(editor.sourceEditor.isClean(), true, "Editor is clean.");
|
||||
ok(!editor.summary.classList.contains("unsaved"),
|
||||
"Star icon is not present in the corresponding summary.");
|
||||
|
||||
is(
|
||||
editor.savedFile?.path,
|
||||
cssFile.path,
|
||||
"savedFile should now be set on the editor"
|
||||
);
|
||||
});
|
||||
|
||||
function copy(srcChromeURL, destFileName) {
|
||||
let deferred = defer();
|
||||
let destFile = FileUtils.getFile("ProfD", [destFileName]);
|
||||
write(read(srcChromeURL), destFile, deferred.resolve);
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function read(srcChromeURL) {
|
||||
let scriptableStream = Cc["@mozilla.org/scriptableinputstream;1"]
|
||||
.getService(Ci.nsIScriptableInputStream);
|
||||
|
||||
let channel = NetUtil.newChannel({
|
||||
uri: srcChromeURL,
|
||||
loadUsingSystemPrincipal: true
|
||||
});
|
||||
let input = channel.open2();
|
||||
scriptableStream.init(input);
|
||||
|
||||
let data = "";
|
||||
while (input.available()) {
|
||||
data = data.concat(scriptableStream.read(input.available()));
|
||||
}
|
||||
scriptableStream.close();
|
||||
input.close();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function write(data, file, callback) {
|
||||
let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"]
|
||||
.createInstance(Ci.nsIScriptableUnicodeConverter);
|
||||
|
||||
converter.charset = "UTF-8";
|
||||
|
||||
let istream = converter.convertToInputStream(data);
|
||||
let ostream = FileUtils.openSafeFileOutputStream(file);
|
||||
|
||||
NetUtil.asyncCopy(istream, ostream, function (status) {
|
||||
if (!Components.isSuccessCode(status)) {
|
||||
info("Couldn't write to " + file.path);
|
||||
return;
|
||||
}
|
||||
|
||||
callback(file);
|
||||
});
|
||||
}
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
"use strict";
|
||||
|
||||
// Test that 'Save' function works.
|
||||
|
||||
const TESTCASE_URI_HTML = TEST_BASE_HTTP + "simple.html";
|
||||
const TESTCASE_URI_CSS = TEST_BASE_HTTP + "simple.css";
|
||||
|
||||
var tempScope = {};
|
||||
Components.utils.import("resource://gre/modules/FileUtils.jsm", tempScope);
|
||||
Components.utils.import("resource://gre/modules/NetUtil.jsm", tempScope);
|
||||
var FileUtils = tempScope.FileUtils;
|
||||
var NetUtil = tempScope.NetUtil;
|
||||
|
||||
add_task(function* () {
|
||||
let htmlFile = yield copy(TESTCASE_URI_HTML, "simple.html");
|
||||
yield copy(TESTCASE_URI_CSS, "simple.css");
|
||||
let uri = Services.io.newFileURI(htmlFile);
|
||||
let filePath = uri.resolve("");
|
||||
|
||||
let { ui } = yield openStyleEditorForURL(filePath);
|
||||
|
||||
let editor = ui.editors[0];
|
||||
yield editor.getSourceEditor();
|
||||
|
||||
info("Editing the style sheet.");
|
||||
let dirty = editor.sourceEditor.once("dirty-change");
|
||||
let beginCursor = {line: 0, ch: 0};
|
||||
editor.sourceEditor.replaceText("DIRTY TEXT", beginCursor, beginCursor);
|
||||
|
||||
yield dirty;
|
||||
|
||||
is(editor.sourceEditor.isClean(), false, "Editor is dirty.");
|
||||
ok(editor.summary.classList.contains("unsaved"),
|
||||
"Star icon is present in the corresponding summary.");
|
||||
|
||||
info("Saving the changes.");
|
||||
dirty = editor.sourceEditor.once("dirty-change");
|
||||
|
||||
editor.saveToFile(null, function (file) {
|
||||
ok(file, "file should get saved directly when using a file:// URI");
|
||||
});
|
||||
|
||||
yield dirty;
|
||||
|
||||
is(editor.sourceEditor.isClean(), true, "Editor is clean.");
|
||||
ok(!editor.summary.classList.contains("unsaved"),
|
||||
"Star icon is not present in the corresponding summary.");
|
||||
});
|
||||
|
||||
function copy(srcChromeURL, destFileName) {
|
||||
let deferred = defer();
|
||||
let destFile = FileUtils.getFile("ProfD", [destFileName]);
|
||||
write(read(srcChromeURL), destFile, deferred.resolve);
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function read(srcChromeURL) {
|
||||
let scriptableStream = Cc["@mozilla.org/scriptableinputstream;1"]
|
||||
.getService(Ci.nsIScriptableInputStream);
|
||||
|
||||
let channel = NetUtil.newChannel({
|
||||
uri: srcChromeURL,
|
||||
loadUsingSystemPrincipal: true
|
||||
});
|
||||
let input = channel.open2();
|
||||
scriptableStream.init(input);
|
||||
|
||||
let data = "";
|
||||
while (input.available()) {
|
||||
data = data.concat(scriptableStream.read(input.available()));
|
||||
}
|
||||
scriptableStream.close();
|
||||
input.close();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function write(data, file, callback) {
|
||||
let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"]
|
||||
.createInstance(Ci.nsIScriptableUnicodeConverter);
|
||||
|
||||
converter.charset = "UTF-8";
|
||||
|
||||
let istream = converter.convertToInputStream(data);
|
||||
let ostream = FileUtils.openSafeFileOutputStream(file);
|
||||
|
||||
NetUtil.asyncCopy(istream, ostream, function (status) {
|
||||
if (!Components.isSuccessCode(status)) {
|
||||
info("Couldn't write to " + file.path);
|
||||
return;
|
||||
}
|
||||
|
||||
callback(file);
|
||||
});
|
||||
}
|
||||
@@ -28,10 +28,7 @@ add_task(function* () {
|
||||
let HTMLFile = yield copy(TESTCASE_URI_HTML, ["sourcemaps.html"]);
|
||||
let CSSFile = yield copy(TESTCASE_URI_CSS,
|
||||
["sourcemap-css", "sourcemaps.css"]);
|
||||
const SCSSFile = await copy(TESTCASE_URI_SCSS, [
|
||||
"sourcemap-sass",
|
||||
"sourcemaps.scss",
|
||||
]);
|
||||
yield copy(TESTCASE_URI_SCSS, ["sourcemap-sass", "sourcemaps.scss"]);
|
||||
yield copy(TESTCASE_URI_MAP, ["sourcemap-css", "sourcemaps.css.map"]);
|
||||
yield copy(TESTCASE_URI_REG_CSS, ["simple.css"]);
|
||||
|
||||
@@ -62,7 +59,7 @@ add_task(function* () {
|
||||
|
||||
// Edit and save Sass in the editor. This will start off a file-watching
|
||||
// process waiting for the CSS file to change.
|
||||
yield editSCSS(SCSSFile, editor);
|
||||
yield editSCSS(editor);
|
||||
|
||||
// We can't run Sass or another compiler, so we fake it by just
|
||||
// directly changing the CSS file.
|
||||
@@ -76,12 +73,12 @@ add_task(function* () {
|
||||
is(color, "rgb(0, 0, 255)", "div is blue after saving file");
|
||||
});
|
||||
|
||||
function editSCSS(SCSSFile, editor) {
|
||||
function editSCSS(editor) {
|
||||
let deferred = defer();
|
||||
|
||||
editor.sourceEditor.setText(CSS_TEXT);
|
||||
|
||||
editor.saveToFile(SCSSFile, function (file) {
|
||||
editor.saveToFile(null, function (file) {
|
||||
ok(file, "Scss file should be saved");
|
||||
deferred.resolve();
|
||||
});
|
||||
|
||||
@@ -20,8 +20,7 @@ const SPECIALVALUES = new Set([
|
||||
"inherit",
|
||||
"transparent",
|
||||
"unset",
|
||||
"revert",
|
||||
"revert-layer"
|
||||
"revert"
|
||||
]);
|
||||
|
||||
/**
|
||||
|
||||
@@ -43,7 +43,7 @@ class MachCommands(MachCommandBase):
|
||||
if not os.path.exists(generated_dir):
|
||||
generated_dir = mozpath.join(self.topsrcdir, 'platform',
|
||||
'devtools/shared/css/generated')
|
||||
if not os.path.exists(generated_dir):
|
||||
else:
|
||||
raise Exception('Directory expected at %s does not exist.' % generated_dir)
|
||||
self.generated_dir = generated_dir
|
||||
|
||||
@@ -75,9 +75,6 @@ class MachCommands(MachCommandBase):
|
||||
contents = subprocess.check_output([xpcshell_path, '-g', gre_path,
|
||||
'-a', browser_path, script_path],
|
||||
env = sub_env)
|
||||
if not isinstance(contents, str):
|
||||
contents = contents.decode('utf-8')
|
||||
|
||||
# Extract just the output between the delimiters as the xpcshell output can
|
||||
# have extra output that we don't want.
|
||||
contents = contents.split('DEVTOOLS_CSS_DB_DELIMITER')[1]
|
||||
@@ -91,13 +88,13 @@ class MachCommands(MachCommandBase):
|
||||
destination_path = mozpath.join(self.generated_dir,
|
||||
'properties-db.js')
|
||||
|
||||
with open(js_template_path, 'r') as handle:
|
||||
with open(js_template_path, 'rb') as handle:
|
||||
js_template = handle.read()
|
||||
|
||||
preamble = '/* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT */\n\n'
|
||||
contents = string.Template(js_template).substitute(substitutions)
|
||||
|
||||
with open(destination_path, 'w') as destination:
|
||||
with open(destination_path, 'wb') as destination:
|
||||
destination.write(preamble + contents)
|
||||
|
||||
print(('The database was successfully generated at ' + destination_path))
|
||||
print('The database was successfully generated at ' + destination_path)
|
||||
File diff suppressed because it is too large.
Load diff
@@ -152,12 +152,12 @@ receipt_with_wrong_typ = {
|
||||
"reissue": "http://mochi.test:8888/reissue/5169314356"
|
||||
}
|
||||
|
||||
print(("let valid_receipt1 = \"" + jwt.encode(receipt1, "") + "\";\n"))
|
||||
print(("let valid_receipt2 = \"" + jwt.encode(receipt2, "") + "\";\n"))
|
||||
print(("let receipt_without_typ = \"" + jwt.encode(receipt_without_typ, "") + "\";\n"))
|
||||
print(("let receipt_without_product = \"" + jwt.encode(receipt_without_product, "") + "\";\n"))
|
||||
print(("let receipt_without_user = \"" + jwt.encode(receipt_without_user, "") + "\";\n"))
|
||||
print(("let receipt_without_iss = \"" + jwt.encode(receipt_without_iss, "") + "\";\n"))
|
||||
print(("let receipt_without_nbf = \"" + jwt.encode(receipt_without_nbf, "") + "\";\n"))
|
||||
print(("let receipt_without_iat = \"" + jwt.encode(receipt_without_iat, "") + "\";\n"))
|
||||
print(("let receipt_with_wrong_typ = \"" + jwt.encode(receipt_with_wrong_typ, "") + "\";\n"))
|
||||
print("let valid_receipt1 = \"" + jwt.encode(receipt1, "") + "\";\n")
|
||||
print("let valid_receipt2 = \"" + jwt.encode(receipt2, "") + "\";\n")
|
||||
print("let receipt_without_typ = \"" + jwt.encode(receipt_without_typ, "") + "\";\n")
|
||||
print("let receipt_without_product = \"" + jwt.encode(receipt_without_product, "") + "\";\n")
|
||||
print("let receipt_without_user = \"" + jwt.encode(receipt_without_user, "") + "\";\n")
|
||||
print("let receipt_without_iss = \"" + jwt.encode(receipt_without_iss, "") + "\";\n")
|
||||
print("let receipt_without_nbf = \"" + jwt.encode(receipt_without_nbf, "") + "\";\n")
|
||||
print("let receipt_without_iat = \"" + jwt.encode(receipt_without_iat, "") + "\";\n")
|
||||
print("let receipt_with_wrong_typ = \"" + jwt.encode(receipt_with_wrong_typ, "") + "\";\n")
|
||||
+13
-18
@@ -304,18 +304,12 @@ Element::TabIndex()
|
||||
}
|
||||
|
||||
void
|
||||
Element::Focus(const FocusOptions& aOptions, ErrorResult& aError)
|
||||
Element::Focus(mozilla::ErrorResult& aError)
|
||||
{
|
||||
nsCOMPtr<nsIDOMElement> domElement = do_QueryInterface(this);
|
||||
nsIFocusManager* fm = nsFocusManager::GetFocusManager();
|
||||
// Also other browsers seem to have the hack to not re-focus (and flush) when
|
||||
// the element is already focused.
|
||||
// Until https://github.com/whatwg/html/issues/4512 is clarified, we'll
|
||||
// maintain interoperatibility by not re-focusing, independent of aOptions.
|
||||
// I.e., `focus({ preventScroll: true})` followed by `focus( { preventScroll:
|
||||
// false })` won't re-focus.
|
||||
if (fm && domElement) {
|
||||
aError = fm->SetFocus(domElement, nsFocusManager::FocusOptionsToFocusManagerFlags(aOptions));
|
||||
aError = fm->SetFocus(domElement, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2332,7 +2326,6 @@ Element::MaybeCheckSameAttrVal(int32_t aNamespaceID,
|
||||
bool* aOldValueSet)
|
||||
{
|
||||
bool modification = false;
|
||||
CustomElementData* customElementData = GetCustomElementData();
|
||||
*aHasListeners = aNotify &&
|
||||
nsContentUtils::HasMutationListeners(this,
|
||||
NS_EVENT_BITS_MUTATION_ATTRMODIFIED,
|
||||
@@ -2348,14 +2341,13 @@ Element::MaybeCheckSameAttrVal(int32_t aNamespaceID,
|
||||
if (*aHasListeners || aNotify) {
|
||||
BorrowedAttrInfo info(GetAttrInfo(aNamespaceID, aName));
|
||||
if (info.mValue) {
|
||||
bool valueMatches = aValue.EqualsAsStrings(*info.mValue);
|
||||
if (valueMatches && aPrefix == info.mName->GetPrefix()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Need to store the old value if listeners are present or this is a
|
||||
// custom element that may run an attribute-changed callback.
|
||||
if (*aHasListeners || customElementData) {
|
||||
// Check whether the old value is the same as the new one. Note that we
|
||||
// only need to actually _get_ the old value if we have listeners or
|
||||
// if the element is a custom element (because it may have an
|
||||
// attribute changed callback).
|
||||
if (*aHasListeners || GetCustomElementData()) {
|
||||
// Need to store the old value.
|
||||
//
|
||||
// If the current attribute value contains a pointer to some other data
|
||||
// structure that gets updated in the process of setting the attribute
|
||||
// we'll no longer have the old value of the attribute. Therefore, we
|
||||
@@ -2366,7 +2358,10 @@ Element::MaybeCheckSameAttrVal(int32_t aNamespaceID,
|
||||
aOldValue.SetToSerialized(*info.mValue);
|
||||
*aOldValueSet = true;
|
||||
}
|
||||
|
||||
bool valueMatches = aValue.EqualsAsStrings(*info.mValue);
|
||||
if (valueMatches && aPrefix == info.mName->GetPrefix()) {
|
||||
return true;
|
||||
}
|
||||
modification = true;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -216,7 +216,7 @@ public:
|
||||
/**
|
||||
* Make focus on this element.
|
||||
*/
|
||||
virtual void Focus(const FocusOptions& aOptions, ErrorResult& aError);
|
||||
virtual void Focus(mozilla::ErrorResult& aError);
|
||||
|
||||
/**
|
||||
* Show blur and clear focus.
|
||||
|
||||
@@ -395,14 +395,8 @@ FileReader::ReadFileContent(Blob& aBlob,
|
||||
return;
|
||||
}
|
||||
|
||||
CheckedInt<size_t> size(mTotal);
|
||||
if (!size.isValid()) {
|
||||
aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
|
||||
return;
|
||||
}
|
||||
|
||||
if (mDataFormat == FILE_AS_ARRAYBUFFER) {
|
||||
mFileData = js_pod_malloc<char>(size.value());
|
||||
mFileData = js_pod_malloc<char>(mTotal);
|
||||
if (!mFileData) {
|
||||
NS_WARNING("Preallocation failed for ReadFileData");
|
||||
aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
|
||||
|
||||
@@ -400,7 +400,6 @@ ImageEncoder::ExtractDataInternal(const nsAString& aType,
|
||||
layers::PlanarYCbCrImage* ycbcrImage = static_cast<layers::PlanarYCbCrImage*> (aImage);
|
||||
gfxImageFormat format = SurfaceFormat::A8R8G8B8_UINT32;
|
||||
uint32_t stride = GetAlignedStride<16>(aSize.width, 4);
|
||||
auto size = stride * aSize.height;
|
||||
size_t length = BufferSizeFromStrideAndHeight(stride, aSize.height);
|
||||
if (length == 0) {
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
@@ -414,10 +413,10 @@ ImageEncoder::ExtractDataInternal(const nsAString& aType,
|
||||
stride);
|
||||
|
||||
rv = aEncoder->InitFromData(data.Elements(),
|
||||
size,
|
||||
aSize.width * aSize.height * 4,
|
||||
aSize.width,
|
||||
aSize.height,
|
||||
stride,
|
||||
aSize.width * 4,
|
||||
imgIEncoder::INPUT_FORMAT_HOSTARGB,
|
||||
aOptions);
|
||||
} else {
|
||||
@@ -434,10 +433,10 @@ ImageEncoder::ExtractDataInternal(const nsAString& aType,
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
rv = aEncoder->InitFromData(map.mData,
|
||||
map.mStride * aSize.height,
|
||||
aSize.width * aSize.height * 4,
|
||||
aSize.width,
|
||||
aSize.height,
|
||||
map.mStride,
|
||||
aSize.width * 4,
|
||||
imgIEncoder::INPUT_FORMAT_HOSTARGB,
|
||||
aOptions);
|
||||
dataSurface->Unmap();
|
||||
@@ -468,10 +467,10 @@ ImageEncoder::ExtractDataInternal(const nsAString& aType,
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
rv = aEncoder->InitFromData(map.mData,
|
||||
map.mStride * aSize.height,
|
||||
aSize.width * aSize.height * 4,
|
||||
aSize.width,
|
||||
aSize.height,
|
||||
map.mStride,
|
||||
aSize.width * 4,
|
||||
imgIEncoder::INPUT_FORMAT_HOSTARGB,
|
||||
aOptions);
|
||||
emptyCanvas->Unmap();
|
||||
|
||||
@@ -196,7 +196,7 @@ public:
|
||||
{
|
||||
MOZ_ASSERT(!NS_IsMainThread());
|
||||
|
||||
int32_t written = mLength < INT32_MAX ? PR_Write(mFD, mData, mLength) : -1;
|
||||
int32_t written = PR_Write(mFD, mData, mLength);
|
||||
if (NS_WARN_IF(written < 0 || uint32_t(written) != mLength)) {
|
||||
return NS_DispatchToMainThread(
|
||||
new ErrorPropagationRunnable(mBlobStorage, NS_ERROR_FAILURE));
|
||||
|
||||
@@ -274,7 +274,7 @@ public:
|
||||
}
|
||||
|
||||
template<typename T,
|
||||
typename = typename std::enable_if_t<std::is_enum_v<T>>>
|
||||
typename = typename std::enable_if<std::is_enum<T>::value>::type>
|
||||
EnumTable(const char* aTag, T aValue)
|
||||
: tag(aTag)
|
||||
, value(static_cast<int16_t>(aValue))
|
||||
|
||||
@@ -523,8 +523,7 @@ nsContentList::NamedItem(const nsAString& aName, bool aDoFlush)
|
||||
}
|
||||
|
||||
void
|
||||
nsContentList::GetSupportedNames(nsTArray<nsString>& aNames,
|
||||
FilterElementWithName aFilter)
|
||||
nsContentList::GetSupportedNames(nsTArray<nsString>& aNames)
|
||||
{
|
||||
BringSelfUpToDate(true);
|
||||
|
||||
@@ -547,8 +546,7 @@ nsContentList::GetSupportedNames(nsTArray<nsString>& aNames,
|
||||
// Note: nsINode::HasName means the name is exposed on the document,
|
||||
// which is false for options, so we don't check it here.
|
||||
const nsAttrValue* val = el->GetParsedAttr(nsGkAtoms::name);
|
||||
if (val && val->Type() == nsAttrValue::eAtom &&
|
||||
(!aFilter || aFilter(el))) {
|
||||
if (val && val->Type() == nsAttrValue::eAtom) {
|
||||
nsIAtom* name = val->GetAtomValue();
|
||||
MOZ_ASSERT(name != nsGkAtoms::_empty,
|
||||
"Empty names don't get atomized");
|
||||
|
||||
Loaded 100 of 3302 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user