widgetproperty
changeset 0 ad87c5e85a41
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/widgetproperty	Sat Nov 28 13:56:10 2009 +0100
@@ -0,0 +1,188 @@
+diff --git a/xpcom/build/Makefile.in b/xpcom/build/Makefile.in
+--- a/xpcom/build/Makefile.in
++++ b/xpcom/build/Makefile.in
+@@ -161,17 +161,18 @@ OS_LIBS += $(LIBICONV)
+ GARBAGE         += $(XPCOM_GLUE_SRC_LCSRCS) $(XPCOM_GLUE_SRC_LCPPSRCS) $(XPCOM_GLUENS_SRC_LCPPSRCS) $(wildcard *.$(OBJ_SUFFIX))
+ 
+ include $(topsrcdir)/config/rules.mk
+ 
+ DEFINES		+= \
+ 		-D_IMPL_NS_COM \
+ 		-D_IMPL_NS_STRINGAPI \
+ 		-DEXPORT_XPT_API \
+-		-DEXPORT_XPTC_API
++		-DEXPORT_XPTC_API \
++		-DMOZ_WIDGET_TOOLKIT=\"$(MOZ_WIDGET_TOOLKIT)\"
+ 
+ EXTRA_DSO_LDOPTS += $(NSPR_LIBS)
+ 
+ ifdef GC_LEAK_DETECTOR
+ DEFINES += -DGC_LEAK_DETECTOR
+ endif
+ 
+ ifdef TARGET_XPCOM_ABI
+diff --git a/xpcom/glue/Makefile.in b/xpcom/glue/Makefile.in
+--- a/xpcom/glue/Makefile.in
++++ b/xpcom/glue/Makefile.in
+@@ -157,11 +157,13 @@ include $(topsrcdir)/config/rules.mk
+ 
+ ifdef _MSC_VER
+ # Don't include directives about which CRT to use
+ OS_COMPILE_CXXFLAGS += -Zl
+ OS_COMPILE_CFLAGS += -Zl
+ DEFINES += -D_USE_ANSI_CPP
+ endif
+ 
++DEFINES += -DMOZ_WIDGET_TOOLKIT=\"$(MOZ_WIDGET_TOOLKIT)\"
++
+ ifdef TARGET_XPCOM_ABI
+ DEFINES += -DTARGET_XPCOM_ABI=\"$(TARGET_XPCOM_ABI)\"
+ endif
+diff --git a/xpcom/glue/nsGREGlue.cpp b/xpcom/glue/nsGREGlue.cpp
+--- a/xpcom/glue/nsGREGlue.cpp
++++ b/xpcom/glue/nsGREGlue.cpp
+@@ -157,36 +157,46 @@ GRE_GetPathFromRegKey(HKEY aRegKey,
+ 
+ nsresult
+ GRE_GetGREPathWithProperties(const GREVersionRange *versions,
+                              PRUint32 versionsLength,
+                              const GREProperty *properties,
+                              PRUint32 propertiesLength,
+                              char *aBuffer, PRUint32 aBufLen)
+ {
++  // append the widget information to be able to have multiple xulrunners
++  // based on different widget toolkits installed
++  static const GREProperty kWidgetProperty =
++    { "widget", MOZ_WIDGET_TOOLKIT };
++
+ #ifdef TARGET_XPCOM_ABI
+-  // append the ABI to the properties to match only binary 
++  // append the ABI to the properties to match only binary
+   // compatible GREs
+-  static const GREProperty kExtraProperty =
+-    { "abi", TARGET_XPCOM_ABI };
++  static const GREProperty kAbiProperty =
++  { "abi", TARGET_XPCOM_ABI };
+ 
++  GREProperty *allProperties = new GREProperty[propertiesLength + 2];
++#else
+   GREProperty *allProperties = new GREProperty[propertiesLength + 1];
++#endif
+   if (!allProperties)
+     return NS_ERROR_OUT_OF_MEMORY;
+ 
+   for (PRUint32 i=0; i<propertiesLength; i++) {
+     allProperties[i].property = properties[i].property;
+     allProperties[i].value    = properties[i].value;
+   }
+-  allProperties[propertiesLength].property = kExtraProperty.property;
+-  allProperties[propertiesLength].value    = kExtraProperty.value;
++  allProperties[propertiesLength].property = kWidgetProperty.property;
++  allProperties[propertiesLength].value    = kWidgetProperty.value;
++#ifdef TARGET_XPCOM_ABI
++  allProperties[propertiesLength+1].property = kAbiProperty.property;
++  allProperties[propertiesLength+1].value    = kAbiProperty.value;
++  PRUint32 allPropertiesLength = propertiesLength + 2;
++#else
+   PRUint32 allPropertiesLength = propertiesLength + 1;
+-#else
+-  const GREProperty *allProperties = properties;
+-  PRUint32 allPropertiesLength = propertiesLength;
+ #endif
+ 
+   // if GRE_HOME is in the environment, use that GRE
+   const char* env = getenv("GRE_HOME");
+   if (env && *env) {
+     char p[MAXPATHLEN];
+     snprintf(p, sizeof(p), "%s" XPCOM_FILE_PATH_SEPARATOR XPCOM_DLL, env);
+     p[sizeof(p) - 1] = '\0';
+diff --git a/xpcom/glue/standalone/Makefile.in b/xpcom/glue/standalone/Makefile.in
+--- a/xpcom/glue/standalone/Makefile.in
++++ b/xpcom/glue/standalone/Makefile.in
+@@ -120,14 +120,15 @@ OS_COMPILE_CFLAGS += -Zl
+ DEFINES += -D_USE_ANSI_CPP
+ endif
+ 
+ export:: $(XPCOM_GLUE_SRC_CSRCS) $(XPCOM_GLUE_SRC_CPPSRCS) $(topsrcdir)/xpcom/glue/nsStringAPI.cpp
+ 	$(INSTALL) $^ .
+ 
+ GARBAGE += nsStringAPI.cpp
+ 
+-DEFINES		+= -DXPCOM_GLUE
++DEFINES		+= -DXPCOM_GLUE \
++                   -DMOZ_WIDGET_TOOLKIT=\"$(MOZ_WIDGET_TOOLKIT)\"
+ 
+ ifdef TARGET_XPCOM_ABI
+ DEFINES += -DTARGET_XPCOM_ABI=\"$(TARGET_XPCOM_ABI)\"
+ endif
+ 
+diff --git a/xulrunner/app/Makefile.in b/xulrunner/app/Makefile.in
+--- a/xulrunner/app/Makefile.in
++++ b/xulrunner/app/Makefile.in
+@@ -59,17 +59,18 @@ PROGRAM = xulrunner$(BIN_SUFFIX)
+ else
+ ifeq ($(OS_ARCH), BeOS)
+ PROGRAM = xulrunner$(BIN_SUFFIX)
+ else
+ PROGRAM = xulrunner-bin$(BIN_SUFFIX)
+ endif
+ endif
+ 
+-DEFINES += -DXULRUNNER_PROGNAME=\"xulrunner\"
++DEFINES += -DXULRUNNER_PROGNAME=\"xulrunner\" \
++           -DMOZ_WIDGET_TOOLKIT=\"$(MOZ_WIDGET_TOOLKIT)\"
+ 
+ ifdef MOZ_JAVAXPCOM
+ DEFINES += -DMOZ_JAVAXPCOM
+ endif
+ 
+ ifdef TARGET_XPCOM_ABI
+ DEFINES += -DTARGET_XPCOM_ABI=\"$(TARGET_XPCOM_ABI)\"
+ endif
+diff --git a/xulrunner/app/nsXULRunnerApp.cpp b/xulrunner/app/nsXULRunnerApp.cpp
+--- a/xulrunner/app/nsXULRunnerApp.cpp
++++ b/xulrunner/app/nsXULRunnerApp.cpp
+@@ -257,17 +257,18 @@ InstallXULApp(nsIFile* aXULRunnerDir,
+ 
+   if (NS_FAILED(rv))
+     return 3;
+ 
+   return 0;
+ }
+ 
+ static const GREProperty kGREProperties[] = {
+-  { "xulrunner", "true" }
++  { "xulrunner", "true" },
++  { "widget", MOZ_WIDGET_TOOLKIT }
+ #ifdef TARGET_XPCOM_ABI
+   , { "abi", TARGET_XPCOM_ABI }
+ #endif
+ #ifdef MOZ_JAVAXPCOM
+   , { "javaxpcom", "1" }
+ #endif
+ };
+ 
+diff --git a/xulrunner/installer/Makefile.in b/xulrunner/installer/Makefile.in
+--- a/xulrunner/installer/Makefile.in
++++ b/xulrunner/installer/Makefile.in
+@@ -63,18 +63,18 @@ endif
+ 
+ include $(topsrcdir)/config/rules.mk
+ 
+ INSTALL_SDK = 1
+ 
+ include $(topsrcdir)/toolkit/mozapps/installer/packager.mk
+ 
+ $(MOZILLA_VERSION).system.conf: $(topsrcdir)/config/milestone.txt Makefile
+-	printf "[%s]\nGRE_PATH=%s\nxulrunner=true\nabi=%s" \
+-	  $(MOZILLA_VERSION) $(installdir) $(TARGET_XPCOM_ABI)> $@
++	printf "[%s]\nGRE_PATH=%s\nxulrunner=true\nwidget=%s\nabi=%s" \
++	  $(MOZILLA_VERSION) $(installdir) $(MOZ_WIDGET_TOOLKIT) $(TARGET_XPCOM_ABI)> $@
+ 
+ ifndef SKIP_GRE_REGISTRATION
+ # to register xulrunner per-user, override this with $HOME/.gre.d
+ regdir = /etc/gre.d
+ 
+ install:: $(MOZILLA_VERSION).system.conf
+ 	$(NSINSTALL) -D $(DESTDIR)$(regdir)
+ 	$(SYSINSTALL) $(IFLAGS1) $^ $(DESTDIR)$(regdir)