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