From ded0cb6cab9387deb60586425cebba7b7948df09 Mon Sep 17 00:00:00 2001 From: "reed@reedloden.com" Date: Wed, 5 Mar 2008 02:30:30 -0800 Subject: [PATCH] Bug 418131 - "Need a way to detect GTK+ version so we don't break users on major update" [p=ventnor.bugzilla@yahoo.com.au (Michael Ventnor) r=bsmedberg sr=dveditz a=blocking-firefox3+] --- .../mozapps/update/src/nsUpdateService.js.in | 20 +++++++++++++------ xpcom/base/Makefile.in | 4 ++++ xpcom/base/nsSystemInfo.cpp | 14 +++++++++++++ 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/toolkit/mozapps/update/src/nsUpdateService.js.in b/toolkit/mozapps/update/src/nsUpdateService.js.in index 7e995d86afe..2be5b7b4c7d 100644 --- a/toolkit/mozapps/update/src/nsUpdateService.js.in +++ b/toolkit/mozapps/update/src/nsUpdateService.js.in @@ -1022,18 +1022,26 @@ function UpdateService() { LOG("UpdateService", "XPCOM ABI unknown: updates are not possible."); } + var osVersion; + var sysInfo = Components.classes["@mozilla.org/system-info;1"] + .getService(Components.interfaces.nsIPropertyBag2); try { - var sysInfo = - Components.classes["@mozilla.org/system-info;1"] - .getService(Components.interfaces.nsIPropertyBag2); - - gOSVersion = encodeURIComponent(sysInfo.getProperty("name") + " " + - sysInfo.getProperty("version")); + osVersion = sysInfo.getProperty("name") + " " + sysInfo.getProperty("version"); } catch (e) { LOG("UpdateService", "OS Version unknown: updates are not possible."); } + if (osVersion) { + try { + osVersion += " (" + sysInfo.getProperty("secondaryLibrary") + ")"; + } + catch (e) { + // Not all platforms have a secondary widget library, so an error is nothing to worry about. + } + gOSVersion = encodeURIComponent(osVersion); + } + #ifdef XP_MACOSX // Mac universal build should report a different ABI than either macppc // or mactel. diff --git a/xpcom/base/Makefile.in b/xpcom/base/Makefile.in index ea8ef1fc311..c1eacc97adb 100644 --- a/xpcom/base/Makefile.in +++ b/xpcom/base/Makefile.in @@ -146,3 +146,7 @@ include $(topsrcdir)/config/rules.mk DEFINES += -D_IMPL_NS_COM +ifneq (,$(filter gtk2,$(MOZ_WIDGET_TOOLKIT))) +CXXFLAGS += $(MOZ_GTK2_CFLAGS) +endif + diff --git a/xpcom/base/nsSystemInfo.cpp b/xpcom/base/nsSystemInfo.cpp index c93a9310a66..a93da4b4933 100644 --- a/xpcom/base/nsSystemInfo.cpp +++ b/xpcom/base/nsSystemInfo.cpp @@ -39,6 +39,11 @@ #include "nsSystemInfo.h" #include "prsystem.h" #include "nsString.h" +#include "prprf.h" + +#ifdef MOZ_WIDGET_GTK2 +#include +#endif nsSystemInfo::nsSystemInfo() { @@ -74,6 +79,15 @@ nsSystemInfo::Init() else NS_WARNING("PR_GetSystemInfo failed"); } + +#ifdef MOZ_WIDGET_GTK2 + // This must be done here because NSPR can only separate OS's when compiled, not libraries. + char gtkver[15]; + PR_snprintf(gtkver, sizeof(gtkver), "GTK %d.%d.%d", gtk_major_version, gtk_minor_version, gtk_micro_version); + rv = SetPropertyAsACString(NS_ConvertASCIItoUTF16("secondaryLibrary"), + nsDependentCString(gtkver)); + NS_ENSURE_SUCCESS(rv, rv); +#endif return NS_OK; }