From a8a561abb12e2f1dbdbd4e002e82f68acd14fa16 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Jul 11 2016 03:31:20 +0000 Subject: import thunderbird-45.2-1.el7_2 --- diff --git a/.gitignore b/.gitignore index 480ad2d..b40c994 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ -SOURCES/l10n-lightning-38.8.0.tar.bz2 -SOURCES/thunderbird-38.8.0.source.tar.bz2 -SOURCES/thunderbird-langpacks-38.8.0-20160506.tar.bz2 +SOURCES/Python-2.7.8.tgz +SOURCES/devtoolset-2-binutils-2.23.52.0.1-10.el5.src.rpm +SOURCES/gcc48-4.8.2-16.el5.src.rpm +SOURCES/l10n-lightning-45.2.tar.xz +SOURCES/thunderbird-45.2.source.tar.xz +SOURCES/thunderbird-langpacks-45.2-20160629.tar.xz +SOURCES/yasm-1.2.0-3.el5.src.rpm diff --git a/.thunderbird.metadata b/.thunderbird.metadata index 83039de..0bebac5 100644 --- a/.thunderbird.metadata +++ b/.thunderbird.metadata @@ -1,3 +1,7 @@ -b820f929d39a90f4123da6cf3218d2569ede1558 SOURCES/l10n-lightning-38.8.0.tar.bz2 -013df5e12fca235b1236f1f9369e082d0ce001a0 SOURCES/thunderbird-38.8.0.source.tar.bz2 -d4ba982fece9a838487d81d19666494ad1c14add SOURCES/thunderbird-langpacks-38.8.0-20160506.tar.bz2 +511960dd78451a06c9df76509635aeec05b2051a SOURCES/Python-2.7.8.tgz +467bdb846d67c01aed9e521fe0ef280065a50c3c SOURCES/devtoolset-2-binutils-2.23.52.0.1-10.el5.src.rpm +e5ba84786af5d0e0e23b1a9112c76821ef23306c SOURCES/gcc48-4.8.2-16.el5.src.rpm +5436daa20676de9c88eedeb56d85baafe2a6d037 SOURCES/l10n-lightning-45.2.tar.xz +ac1fb352d68fda3c3be84bd52196bd9d74a3fd22 SOURCES/thunderbird-45.2.source.tar.xz +0bacc87821da6fdaf3d9fa786509388f58391d9b SOURCES/thunderbird-langpacks-45.2-20160629.tar.xz +77fd30f7ebc12a629a31c1e252cec06af55a71fe SOURCES/yasm-1.2.0-3.el5.src.rpm diff --git a/SOURCES/aarch64-fix-skia.patch b/SOURCES/aarch64-fix-skia.patch new file mode 100644 index 0000000..115b1d8 --- /dev/null +++ b/SOURCES/aarch64-fix-skia.patch @@ -0,0 +1,18 @@ +Based on https://github.com/google/skia/commit/b79ff56de23fef680ae7187040f2d6a9516b553d + +Index: mozilla-release/gfx/skia/skia/src/core/SkUtilsArm.h +=================================================================== +--- mozilla-release.orig/gfx/skia/skia/src/core/SkUtilsArm.h ++++ mozilla-release/gfx/skia/skia/src/core/SkUtilsArm.h +@@ -21,9 +21,9 @@ + #define SK_ARM_NEON_MODE_ALWAYS 1 + #define SK_ARM_NEON_MODE_DYNAMIC 2 + +-#if defined(SK_CPU_ARM32) && defined(__ARM_HAVE_OPTIONAL_NEON_SUPPORT) ++#if defined(__ARM_HAVE_OPTIONAL_NEON_SUPPORT) + # define SK_ARM_NEON_MODE SK_ARM_NEON_MODE_DYNAMIC +-#elif defined(SK_CPU_ARM32) && defined(__ARM_HAVE_NEON) || defined(SK_CPU_ARM64) ++#elif defined(__ARM_HAVE_NEON) + # define SK_ARM_NEON_MODE SK_ARM_NEON_MODE_ALWAYS + #else + # define SK_ARM_NEON_MODE SK_ARM_NEON_MODE_NONE diff --git a/SOURCES/build-el5-build-id.patch b/SOURCES/build-el5-build-id.patch new file mode 100644 index 0000000..17b19cf --- /dev/null +++ b/SOURCES/build-el5-build-id.patch @@ -0,0 +1,15 @@ +diff -up mozilla-esr31/tools/profiler/LulElf.cpp.python3 mozilla-esr31/tools/profiler/LulElf.cpp +--- mozilla-esr31/tools/profiler/lul/LulElf.cpp.python3 2014-08-25 15:17:29.000000000 +0200 ++++ mozilla-esr31/tools/profiler/lul/LulElf.cpp 2014-09-05 15:26:14.114681217 +0200 +@@ -69,6 +69,11 @@ + #include "LulElfInt.h" + #include "LulMainInt.h" + ++#ifndef NT_GNU_BUILD_ID ++#define NT_GNU_BUILD_ID 3 ++#endif ++ ++ + + #if defined(LUL_PLAT_arm_android) && !defined(SHT_ARM_EXIDX) + // bionic and older glibsc don't define it diff --git a/SOURCES/build-el5-fontconfig.patch b/SOURCES/build-el5-fontconfig.patch new file mode 100644 index 0000000..3e25c44 --- /dev/null +++ b/SOURCES/build-el5-fontconfig.patch @@ -0,0 +1,100 @@ +diff -up mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.cpp.build-el5-fontconfig mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.cpp +--- mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.cpp.build-el5-fontconfig 2015-12-16 16:47:28.000000000 +0100 ++++ mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.cpp 2016-01-19 14:20:43.676153725 +0100 +@@ -367,7 +367,48 @@ gfxFontconfigFontEntry::gfxFontconfigFon + // "blanks", effectively assuming that, if the font has a blank glyph, + // then the author intends any associated character to be rendered + // blank. +- mFontPattern = FcFreeTypeQueryFace(mFTFace, ToFcChar8Ptr(""), 0, nullptr); ++ // BACKPORT: FcFreeTypeQueryFace is not available in RHEL5's fontconfig ++ // mFontPattern = FcFreeTypeQueryFace(mFTFace, ToFcChar8Ptr(""), 0, nullptr); ++ ++ ++ // FC_CHARSET is vital to determine which characters are supported. ++ nsAutoRef charset(FcFreeTypeCharSet(mFTFace, nullptr)); ++ // If there are no characters then assume we don't know how to read ++ // this font. ++ if (!charset || FcCharSetCount(charset) == 0) ++ return; ++ ++ mFontPattern = FcPatternCreate(); ++ FcPatternAddCharSet(mFontPattern, FC_CHARSET, charset); ++ ++ // FC_PIXEL_SIZE can be important for font selection of fixed-size ++ // fonts. ++ if (!(mFTFace->face_flags & FT_FACE_FLAG_SCALABLE)) { ++ for (FT_Int i = 0; i < mFTFace->num_fixed_sizes; ++i) { ++#if HAVE_FT_BITMAP_SIZE_Y_PPEM ++ double size = FLOAT_FROM_26_6(mFTFace->available_sizes[i].y_ppem); ++#else ++ double size = mFTFace->available_sizes[i].height; ++#endif ++ FcPatternAddDouble (mFontPattern, FC_PIXEL_SIZE, size); ++ } ++ ++ // Not sure whether this is important; ++ // imitating FcFreeTypeQueryFace: ++ FcPatternAddBool (mFontPattern, FC_ANTIALIAS, FcFalse); ++ } ++ ++ // Setting up the FC_LANGSET property is very difficult with the APIs ++ // available prior to FcFreeTypeQueryFace. Having no FC_LANGSET ++ // property seems better than having a property with an empty LangSet. ++ // With no FC_LANGSET property, fontconfig sort functions will ++ // consider this face to have the same priority as (otherwise equal) ++ // faces that have support for the primary requested language, but ++ // will not consider any language to have been satisfied (and so will ++ // continue to look for a face with language support in fallback ++ // fonts). ++ ++ // END BACKPORT + // given that we have a FT_Face, not really sure this is possible... + if (!mFontPattern) { + mFontPattern = FcPatternCreate(); +@@ -1015,9 +1056,12 @@ gfxFcPlatformFontList::gfxFcPlatformFont + , mAlwaysUseFontconfigGenerics(true) + { + // if the rescan interval is set, start the timer +- int rescanInterval = FcConfigGetRescanInterval(nullptr); ++ // BACKPORT - do not implement rescan interval ++ //int rescanInterval = FcConfigGetRescanInterval(nullptr); ++ int rescanInterval = 0; + if (rescanInterval) { +- mLastConfig = FcConfigGetCurrent(); ++ nsAutoRef fc_conf(FcConfigGetCurrent()); ++ mLastConfig = fc_conf.out(); + mCheckFontUpdatesTimer = do_CreateInstance("@mozilla.org/timer;1"); + if (mCheckFontUpdatesTimer) { + mCheckFontUpdatesTimer-> +@@ -1131,7 +1175,8 @@ gfxFcPlatformFontList::AddFontSetFamilie + nsresult + gfxFcPlatformFontList::InitFontList() + { +- mLastConfig = FcConfigGetCurrent(); ++ nsAutoRef fc_conf(FcConfigGetCurrent()); ++ mLastConfig = fc_conf.out(); + + // reset font lists + gfxPlatformFontList::InitFontList(); +diff -up mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.h.build-el5-fontconfig mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.h +--- mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.h.build-el5-fontconfig 2016-01-19 11:45:08.927745469 +0100 ++++ mozilla-aurora/gfx/thebes/gfxFcPlatformFontList.h 2016-01-19 13:49:58.296124911 +0100 +@@ -33,7 +33,8 @@ class nsAutoRefTraits : public + { + public: + static void Release(FcConfig *ptr) { FcConfigDestroy(ptr); } +- static void AddRef(FcConfig *ptr) { FcConfigReference(ptr); } ++ // AddRef is not supported in older font-config ++ // static void AddRef(FcConfig *ptr) { FcConfigReference(ptr); } + }; + + // Helper classes used for clearning out user font data when cairo font +@@ -290,7 +291,7 @@ protected: + nsRefPtrHashtable mFcSubstituteCache; + + nsCOMPtr mCheckFontUpdatesTimer; +- nsCountedRef mLastConfig; ++ nsAutoRef mLastConfig; + + // By default, font prefs under Linux are set to simply lookup + // via fontconfig the appropriate font for serif/sans-serif/monospace. diff --git a/SOURCES/build-el5-gtk2-2.10.patch b/SOURCES/build-el5-gtk2-2.10.patch new file mode 100644 index 0000000..9b1080b --- /dev/null +++ b/SOURCES/build-el5-gtk2-2.10.patch @@ -0,0 +1,2724 @@ +diff -up mozilla-aurora/config/system-headers.build-gtk2 mozilla-aurora/config/system-headers +--- mozilla-aurora/config/system-headers.build-gtk2 2015-12-16 16:47:44.000000000 +0100 ++++ mozilla-aurora/config/system-headers 2016-01-15 17:38:34.974272205 +0100 +@@ -511,7 +511,9 @@ gssapi/gssapi.h + gssapi.h + gtk/gtk.h + gtk/gtkx.h +-gtk/gtkunixprint.h ++gtk/gtkprinter.h ++gtk/gtkprintjob.h ++gtk/gtkprintunixdialog.h + #ifdef ANDROID + gui/BufferQueue.h + gui/ConsumerBase.h +diff -up mozilla-aurora/configure.in.build-gtk2 mozilla-aurora/configure.in +--- mozilla-aurora/configure.in.build-gtk2 2016-01-15 17:38:34.972272207 +0100 ++++ mozilla-aurora/configure.in 2016-01-15 17:38:34.975272203 +0100 +@@ -58,15 +58,15 @@ NSS_VERSION=3 + + dnl Set the minimum version of toolkit libs used by mozilla + dnl ======================================================== +-GLIB_VERSION=2.22 ++GLIB_VERSION=2.12 + # 2_26 is the earliest version we can set GLIB_VERSION_MIN_REQUIRED. + # The macro won't be used when compiling with earlier versions anyway. + GLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_26 + GIO_VERSION=2.22 + PERL_VERSION=5.006 + CAIRO_VERSION=1.10 +-PANGO_VERSION=1.22.0 +-GTK2_VERSION=2.18.0 ++PANGO_VERSION=1.14 ++GTK2_VERSION=2.10 + GTK3_VERSION=3.4.0 + GDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_4 + WINDRES_VERSION=2.14.90 +@@ -4278,7 +4278,7 @@ if test "$COMPILE_ENVIRONMENT"; then + AC_DEFINE_UNQUOTED(GLIB_VERSION_MIN_REQUIRED,$GLIB_VERSION_MIN_REQUIRED) + AC_DEFINE_UNQUOTED(GLIB_VERSION_MAX_ALLOWED,$GLIB_VERSION_MAX_ALLOWED) + +- PKG_CHECK_MODULES(MOZ_GTK2, gtk+-2.0 >= $GTK2_VERSION gtk+-unix-print-2.0 glib-2.0 >= $GLIB_VERSION gobject-2.0 $GDK_PACKAGES) ++ PKG_CHECK_MODULES(MOZ_GTK2, gtk+-2.0 >= $GTK2_VERSION gtk+-unix-print-2.0 glib-2.0 >= $GLIB_VERSION gobject-2.0 $GDK_PACKAGES freetype2 fontconfig) + MOZ_GTK2_CFLAGS="-I${_topsrcdir}/widget/gtk/compat $MOZ_GTK2_CFLAGS" + fi + if test "$MOZ_ENABLE_GTK2"; then +diff -up mozilla-aurora/security/sandbox/linux/Sandbox.cpp.build-gtk2 mozilla-aurora/security/sandbox/linux/Sandbox.cpp +--- mozilla-aurora/security/sandbox/linux/Sandbox.cpp.build-gtk2 2015-12-16 16:47:02.000000000 +0100 ++++ mozilla-aurora/security/sandbox/linux/Sandbox.cpp 2016-01-15 17:38:34.976272202 +0100 +@@ -668,12 +668,13 @@ SetMediaPluginSandbox(const char *aFileP + MOZ_ASSERT(!gMediaPluginFile.mPath); + if (aFilePath) { + gMediaPluginFile.mPath = strdup(aFilePath); +- gMediaPluginFile.mFd = open(aFilePath, O_RDONLY | O_CLOEXEC); ++ gMediaPluginFile.mFd = open(aFilePath, O_RDONLY); + if (gMediaPluginFile.mFd == -1) { + SANDBOX_LOG_ERROR("failed to open plugin file %s: %s", + aFilePath, strerror(errno)); + MOZ_CRASH(); + } ++ fcntl(gMediaPluginFile.mFd, F_SETFD, fcntl(gMediaPluginFile.mFd, F_GETFD, 0) | FD_CLOEXEC); + } else { + gMediaPluginFile.mFd = -1; + } +diff -up mozilla-aurora/widget/gtk/compat/gdk/gdkkeysyms.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gdk/gdkkeysyms.h +--- mozilla-aurora/widget/gtk/compat/gdk/gdkkeysyms.h.build-gtk2 2015-12-16 16:47:23.000000000 +0100 ++++ mozilla-aurora/widget/gtk/compat/gdk/gdkkeysyms.h 2016-01-15 17:38:34.976272202 +0100 +@@ -6,6 +6,7 @@ + #define GDKKEYSYMS_WRAPPER_H + + #include_next ++#include "gdkkeysyms-compat.h" + + #ifndef GDK_ISO_Level5_Shift + #define GDK_ISO_Level5_Shift 0xFE11 +diff -up mozilla-aurora/widget/gtk/compat/gtk/gtkcolorseldialog.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gtk/gtkcolorseldialog.h +--- mozilla-aurora/widget/gtk/compat/gtk/gtkcolorseldialog.h.build-gtk2 2016-01-15 17:38:34.976272202 +0100 ++++ mozilla-aurora/widget/gtk/compat/gtk/gtkcolorseldialog.h 2016-01-15 17:38:34.976272202 +0100 +@@ -0,0 +1,20 @@ ++/* 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 http://mozilla.org/MPL/2.0/. */ ++ ++#ifndef GTKCOLOR_SELECTION_DIALOG_WRAPPER_H ++#define GTKCOLOR_SELECTION_DIALOG_WRAPPER_H ++ ++#define gtk_color_selection_dialog_get_color_selection gtk_color_selection_dialog_get_color_selection_ ++#include_next ++#undef gtk_color_selection_dialog_get_color_selection ++ ++static inline GtkWidget* ++gtk_color_selection_dialog_get_color_selection (GtkColorSelectionDialog *colorsel) ++{ ++ g_return_val_if_fail (GTK_IS_COLOR_SELECTION_DIALOG (colorsel), NULL); ++ ++ return colorsel->colorsel; ++} ++ ++#endif /* GTKCOLOR_SELECTION_DIALOG_WRAPPER_H */ +diff -up mozilla-aurora/widget/gtk/compat/gtk/gtkdialog.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gtk/gtkdialog.h +--- mozilla-aurora/widget/gtk/compat/gtk/gtkdialog.h.build-gtk2 2016-01-15 17:38:34.976272202 +0100 ++++ mozilla-aurora/widget/gtk/compat/gtk/gtkdialog.h 2016-01-15 17:38:34.976272202 +0100 +@@ -0,0 +1,20 @@ ++/* 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 http://mozilla.org/MPL/2.0/. */ ++ ++#ifndef GTKDIALOG_WRAPPER_H ++#define GTKDIALOG_WRAPPER_H ++ ++#define gtk_dialog_get_content_area gtk_dialog_get_content_area_ ++#include_next ++#undef gtk_dialog_get_content_area ++ ++static inline GtkWidget * ++gtk_dialog_get_content_area (GtkDialog *dialog) ++{ ++ g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL); ++ ++ return dialog->vbox; ++} ++ ++#endif /* GTKDIALOG_WRAPPER_H */ +diff -up mozilla-aurora/widget/gtk/compat/gtk/gtkplug.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gtk/gtkplug.h +--- mozilla-aurora/widget/gtk/compat/gtk/gtkplug.h.build-gtk2 2016-01-15 17:38:34.976272202 +0100 ++++ mozilla-aurora/widget/gtk/compat/gtk/gtkplug.h 2016-01-15 17:38:34.976272202 +0100 +@@ -0,0 +1,20 @@ ++/* 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 http://mozilla.org/MPL/2.0/. */ ++ ++#ifndef GTKPLUG_WRAPPER_H ++#define GTKPLUG_WRAPPER_H ++ ++#define gtk_plug_get_socket_window gtk_plug_get_socket_window_ ++#include_next ++#undef gtk_plug_get_socket_window ++ ++static inline GdkWindow * ++gtk_plug_get_socket_window (GtkPlug *plug) ++{ ++ g_return_val_if_fail (GTK_IS_PLUG (plug), NULL); ++ ++ return plug->socket_window; ++} ++ ++#endif /* GTKPLUG_WRAPPER_H */ +diff -up mozilla-aurora/widget/gtk/compat/gtk/gtkselection.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gtk/gtkselection.h +--- mozilla-aurora/widget/gtk/compat/gtk/gtkselection.h.build-gtk2 2016-01-15 17:38:34.977272201 +0100 ++++ mozilla-aurora/widget/gtk/compat/gtk/gtkselection.h 2016-01-15 17:38:34.976272202 +0100 +@@ -0,0 +1,60 @@ ++/* 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 http://mozilla.org/MPL/2.0/. */ ++ ++#ifndef GTKSELECTION_WRAPPER_H ++#define GTKSELECTION_WRAPPER_H ++ ++#define gtk_selection_data_get_length gtk_selection_data_get_length_ ++#define gtk_selection_data_get_data_type gtk_selection_data_get_data_type_ ++#define gtk_selection_data_get_selection gtk_selection_data_get_selection_ ++#define gtk_selection_data_get_target gtk_selection_data_get_target_ ++#define gtk_selection_data_get_data gtk_selection_data_get_data_ ++#include_next ++#undef gtk_selection_data_get_length ++#undef gtk_selection_data_get_data_type ++#undef gtk_selection_data_get_selection ++#undef gtk_selection_data_get_target ++#undef gtk_selection_data_get_data ++ ++static inline GdkAtom ++gtk_selection_data_get_data_type (GtkSelectionData *selection_data) ++{ ++ g_return_val_if_fail (selection_data != NULL, 0); ++ ++ return selection_data->type; ++} ++ ++static inline gint ++gtk_selection_data_get_length (GtkSelectionData *selection_data) ++{ ++ g_return_val_if_fail (selection_data != NULL, -1); ++ ++ return selection_data->length; ++} ++ ++static inline GdkAtom ++gtk_selection_data_get_selection (GtkSelectionData *selection_data) ++{ ++ g_return_val_if_fail (selection_data != NULL, 0); ++ ++ return selection_data->selection; ++} ++ ++static inline GdkAtom ++gtk_selection_data_get_target (GtkSelectionData *selection_data) ++{ ++ g_return_val_if_fail (selection_data != NULL, 0); ++ ++ return selection_data->target; ++} ++ ++static inline const guchar* ++gtk_selection_data_get_data (GtkSelectionData *selection_data) ++{ ++ g_return_val_if_fail (selection_data != NULL, NULL); ++ ++ return selection_data->data; ++} ++ ++#endif /* GTKSELECTION_WRAPPER_H */ +diff -up mozilla-aurora/widget/gtk/compat/gtk/gtkwidget.h.build-gtk2 mozilla-aurora/widget/gtk/compat/gtk/gtkwidget.h +--- mozilla-aurora/widget/gtk/compat/gtk/gtkwidget.h.build-gtk2 2015-12-16 16:47:23.000000000 +0100 ++++ mozilla-aurora/widget/gtk/compat/gtk/gtkwidget.h 2016-01-15 17:38:34.977272201 +0100 +@@ -9,11 +9,34 @@ + #define gtk_widget_get_mapped gtk_widget_get_mapped_ + #define gtk_widget_set_realized gtk_widget_set_realized_ + #define gtk_widget_get_realized gtk_widget_get_realized_ ++#define gtk_widget_get_window gtk_widget_get_window_ ++#define gtk_widget_has_focus gtk_widget_has_focus_ ++#define gtk_widget_get_visible gtk_widget_get_visible_ ++#define gtk_widget_set_window gtk_widget_set_window_ ++#define gtk_widget_set_can_focus gtk_widget_set_can_focus_ ++#define gtk_widget_get_has_window gtk_widget_get_has_window_ ++#define gtk_widget_set_has_window gtk_widget_set_has_window_ ++#define gtk_widget_get_allocation gtk_widget_get_allocation_ ++#define gtk_widget_set_allocation gtk_widget_set_allocation_ ++#define gtk_widget_get_can_focus gtk_widget_get_can_focus_ ++#define gtk_widget_has_grab gtk_widget_has_grab_ ++#define gtk_widget_is_toplevel gtk_widget_is_toplevel_ + #include_next + #undef gtk_widget_set_mapped + #undef gtk_widget_get_mapped + #undef gtk_widget_set_realized + #undef gtk_widget_get_realized ++#undef gtk_widget_get_window ++#undef gtk_widget_has_focus ++#undef gtk_widget_get_visible ++#undef gtk_widget_set_window ++#undef gtk_widget_set_can_focus ++#undef gtk_widget_get_has_window ++#undef gtk_widget_set_has_window ++#undef gtk_widget_get_allocation ++#undef gtk_widget_set_allocation ++#undef gtk_widget_has_grab ++#undef gtk_widget_is_toplevel + + #include + +@@ -47,4 +70,119 @@ gtk_widget_get_realized(GtkWidget *widge + return GTK_WIDGET_REALIZED (widget); + } + ++static inline GdkWindow * ++gtk_widget_get_window(GtkWidget *widget) ++{ ++ return widget->window; ++} ++ ++static inline void ++gtk_widget_set_window(GtkWidget *widget, ++ GdkWindow *window) ++{ ++ g_return_if_fail (GTK_IS_WIDGET (widget)); ++ g_return_if_fail (window == NULL || GDK_IS_WINDOW (window)); ++ ++ if (widget->window != window) ++ { ++ widget->window = window; ++ g_object_notify (G_OBJECT (widget), "window"); ++ } ++} ++ ++ ++static inline gboolean ++gtk_widget_has_focus(GtkWidget *widget) ++{ ++ return GTK_WIDGET_HAS_FOCUS(widget); ++} ++ ++static inline gboolean ++gtk_widget_get_can_focus (GtkWidget *widget) ++{ ++ g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE); ++ ++ return (GTK_OBJECT_FLAGS (widget) & GTK_CAN_FOCUS) != 0; ++} ++ ++static inline void ++gtk_widget_set_can_focus (GtkWidget *widget, ++ gboolean can_focus) ++{ ++ g_return_if_fail (GTK_IS_WIDGET (widget)); ++ ++ if (can_focus != gtk_widget_get_can_focus (widget)) ++ { ++ if (can_focus) ++ GTK_OBJECT_FLAGS (widget) |= GTK_CAN_FOCUS; ++ else ++ GTK_OBJECT_FLAGS (widget) &= ~(GTK_CAN_FOCUS); ++ ++ gtk_widget_queue_resize (widget); ++ g_object_notify (G_OBJECT (widget), "can-focus"); ++ } ++} ++ ++static inline gboolean ++gtk_widget_get_visible(GtkWidget *widget) ++{ ++ return GTK_WIDGET_VISIBLE(widget); ++} ++ ++static inline gboolean ++gtk_widget_get_has_window (GtkWidget *widget) ++{ ++ g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE); ++ ++ return !((GTK_OBJECT_FLAGS (widget) & GTK_NO_WINDOW) != 0); ++} ++ ++static inline void ++gtk_widget_set_has_window (GtkWidget *widget, ++ gboolean has_window) ++{ ++ g_return_if_fail (GTK_IS_WIDGET (widget)); ++ ++ if (has_window) ++ GTK_OBJECT_FLAGS (widget) &= ~(GTK_NO_WINDOW); ++ else ++ GTK_OBJECT_FLAGS (widget) |= GTK_NO_WINDOW; ++} ++ ++static inline void ++gtk_widget_get_allocation (GtkWidget *widget, ++ GtkAllocation *allocation) ++{ ++ g_return_if_fail (GTK_IS_WIDGET (widget)); ++ g_return_if_fail (allocation != NULL); ++ ++ *allocation = widget->allocation; ++} ++ ++static inline void ++gtk_widget_set_allocation (GtkWidget *widget, ++ const GtkAllocation *allocation) ++{ ++ g_return_if_fail (GTK_IS_WIDGET (widget)); ++ g_return_if_fail (allocation != NULL); ++ ++ widget->allocation = *allocation; ++} ++ ++static inline gboolean ++gtk_widget_has_grab (GtkWidget *widget) ++{ ++ g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE); ++ ++ return (GTK_OBJECT_FLAGS (widget) & GTK_HAS_GRAB) != 0; ++} ++ ++static inline gboolean ++gtk_widget_is_toplevel (GtkWidget *widget) ++{ ++ g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE); ++ ++ return (GTK_OBJECT_FLAGS (widget) & GTK_TOPLEVEL) != 0; ++} ++ + #endif /* GTKWIDGET_WRAPPER_H */ +diff -up mozilla-aurora/widget/gtk/gdkkeysyms-compat.h.build-gtk2 mozilla-aurora/widget/gtk/gdkkeysyms-compat.h +--- mozilla-aurora/widget/gtk/gdkkeysyms-compat.h.build-gtk2 2016-01-15 17:38:34.978272200 +0100 ++++ mozilla-aurora/widget/gtk/gdkkeysyms-compat.h 2016-01-15 17:38:34.978272200 +0100 +@@ -0,0 +1,2208 @@ ++/* GDK - The GIMP Drawing Kit ++ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald ++ * Copyright (C) 2005, 2006, 2007, 2009 GNOME Foundation ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library 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 ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, ++ * Boston, MA 02111-1307, USA. ++ */ ++ ++/* ++ * Compatibility version of gdkkeysyms.h. ++ * ++ * In GTK3, keysyms changed to have a KEY_ prefix. This is a compatibility header ++ * your application can include to gain access to the old names as well. Consider ++ * porting to the new names instead. ++ */ ++ ++#ifndef __GDK_KEYSYMS_COMPAT_H__ ++#define __GDK_KEYSYMS_COMPAT_H__ ++ ++#define GDK_VoidSymbol 0xffffff ++#define GDK_BackSpace 0xff08 ++#define GDK_Tab 0xff09 ++#define GDK_Linefeed 0xff0a ++#define GDK_Clear 0xff0b ++#define GDK_Return 0xff0d ++#define GDK_Pause 0xff13 ++#define GDK_Scroll_Lock 0xff14 ++#define GDK_Sys_Req 0xff15 ++#define GDK_Escape 0xff1b ++#define GDK_Delete 0xffff ++#define GDK_Multi_key 0xff20 ++#define GDK_Codeinput 0xff37 ++#define GDK_SingleCandidate 0xff3c ++#define GDK_MultipleCandidate 0xff3d ++#define GDK_PreviousCandidate 0xff3e ++#define GDK_Kanji 0xff21 ++#define GDK_Muhenkan 0xff22 ++#define GDK_Henkan_Mode 0xff23 ++#define GDK_Henkan 0xff23 ++#define GDK_Romaji 0xff24 ++#define GDK_Hiragana 0xff25 ++#define GDK_Katakana 0xff26 ++#define GDK_Hiragana_Katakana 0xff27 ++#define GDK_Zenkaku 0xff28 ++#define GDK_Hankaku 0xff29 ++#define GDK_Zenkaku_Hankaku 0xff2a ++#define GDK_Touroku 0xff2b ++#define GDK_Massyo 0xff2c ++#define GDK_Kana_Lock 0xff2d ++#define GDK_Kana_Shift 0xff2e ++#define GDK_Eisu_Shift 0xff2f ++#define GDK_Eisu_toggle 0xff30 ++#define GDK_Kanji_Bangou 0xff37 ++#define GDK_Zen_Koho 0xff3d ++#define GDK_Mae_Koho 0xff3e ++#define GDK_Home 0xff50 ++#define GDK_Left 0xff51 ++#define GDK_Up 0xff52 ++#define GDK_Right 0xff53 ++#define GDK_Down 0xff54 ++#define GDK_Prior 0xff55 ++#define GDK_Page_Up 0xff55 ++#define GDK_Next 0xff56 ++#define GDK_Page_Down 0xff56 ++#define GDK_End 0xff57 ++#define GDK_Begin 0xff58 ++#define GDK_Select 0xff60 ++#define GDK_Print 0xff61 ++#define GDK_Execute 0xff62 ++#define GDK_Insert 0xff63 ++#define GDK_Undo 0xff65 ++#define GDK_Redo 0xff66 ++#define GDK_Menu 0xff67 ++#define GDK_Find 0xff68 ++#define GDK_Cancel 0xff69 ++#define GDK_Help 0xff6a ++#define GDK_Break 0xff6b ++#define GDK_Mode_switch 0xff7e ++#define GDK_script_switch 0xff7e ++#define GDK_Num_Lock 0xff7f ++#define GDK_KP_Space 0xff80 ++#define GDK_KP_Tab 0xff89 ++#define GDK_KP_Enter 0xff8d ++#define GDK_KP_F1 0xff91 ++#define GDK_KP_F2 0xff92 ++#define GDK_KP_F3 0xff93 ++#define GDK_KP_F4 0xff94 ++#define GDK_KP_Home 0xff95 ++#define GDK_KP_Left 0xff96 ++#define GDK_KP_Up 0xff97 ++#define GDK_KP_Right 0xff98 ++#define GDK_KP_Down 0xff99 ++#define GDK_KP_Prior 0xff9a ++#define GDK_KP_Page_Up 0xff9a ++#define GDK_KP_Next 0xff9b ++#define GDK_KP_Page_Down 0xff9b ++#define GDK_KP_End 0xff9c ++#define GDK_KP_Begin 0xff9d ++#define GDK_KP_Insert 0xff9e ++#define GDK_KP_Delete 0xff9f ++#define GDK_KP_Equal 0xffbd ++#define GDK_KP_Multiply 0xffaa ++#define GDK_KP_Add 0xffab ++#define GDK_KP_Separator 0xffac ++#define GDK_KP_Subtract 0xffad ++#define GDK_KP_Decimal 0xffae ++#define GDK_KP_Divide 0xffaf ++#define GDK_KP_0 0xffb0 ++#define GDK_KP_1 0xffb1 ++#define GDK_KP_2 0xffb2 ++#define GDK_KP_3 0xffb3 ++#define GDK_KP_4 0xffb4 ++#define GDK_KP_5 0xffb5 ++#define GDK_KP_6 0xffb6 ++#define GDK_KP_7 0xffb7 ++#define GDK_KP_8 0xffb8 ++#define GDK_KP_9 0xffb9 ++#define GDK_F1 0xffbe ++#define GDK_F2 0xffbf ++#define GDK_F3 0xffc0 ++#define GDK_F4 0xffc1 ++#define GDK_F5 0xffc2 ++#define GDK_F6 0xffc3 ++#define GDK_F7 0xffc4 ++#define GDK_F8 0xffc5 ++#define GDK_F9 0xffc6 ++#define GDK_F10 0xffc7 ++#define GDK_F11 0xffc8 ++#define GDK_L1 0xffc8 ++#define GDK_F12 0xffc9 ++#define GDK_L2 0xffc9 ++#define GDK_F13 0xffca ++#define GDK_L3 0xffca ++#define GDK_F14 0xffcb ++#define GDK_L4 0xffcb ++#define GDK_F15 0xffcc ++#define GDK_L5 0xffcc ++#define GDK_F16 0xffcd ++#define GDK_L6 0xffcd ++#define GDK_F17 0xffce ++#define GDK_L7 0xffce ++#define GDK_F18 0xffcf ++#define GDK_L8 0xffcf ++#define GDK_F19 0xffd0 ++#define GDK_L9 0xffd0 ++#define GDK_F20 0xffd1 ++#define GDK_L10 0xffd1 ++#define GDK_F21 0xffd2 ++#define GDK_R1 0xffd2 ++#define GDK_F22 0xffd3 ++#define GDK_R2 0xffd3 ++#define GDK_F23 0xffd4 ++#define GDK_R3 0xffd4 ++#define GDK_F24 0xffd5 ++#define GDK_R4 0xffd5 ++#define GDK_F25 0xffd6 ++#define GDK_R5 0xffd6 ++#define GDK_F26 0xffd7 ++#define GDK_R6 0xffd7 ++#define GDK_F27 0xffd8 ++#define GDK_R7 0xffd8 ++#define GDK_F28 0xffd9 ++#define GDK_R8 0xffd9 ++#define GDK_F29 0xffda ++#define GDK_R9 0xffda ++#define GDK_F30 0xffdb ++#define GDK_R10 0xffdb ++#define GDK_F31 0xffdc ++#define GDK_R11 0xffdc ++#define GDK_F32 0xffdd ++#define GDK_R12 0xffdd ++#define GDK_F33 0xffde ++#define GDK_R13 0xffde ++#define GDK_F34 0xffdf ++#define GDK_R14 0xffdf ++#define GDK_F35 0xffe0 ++#define GDK_R15 0xffe0 ++#define GDK_Shift_L 0xffe1 ++#define GDK_Shift_R 0xffe2 ++#define GDK_Control_L 0xffe3 ++#define GDK_Control_R 0xffe4 ++#define GDK_Caps_Lock 0xffe5 ++#define GDK_Shift_Lock 0xffe6 ++#define GDK_Meta_L 0xffe7 ++#define GDK_Meta_R 0xffe8 ++#define GDK_Alt_L 0xffe9 ++#define GDK_Alt_R 0xffea ++#define GDK_Super_L 0xffeb ++#define GDK_Super_R 0xffec ++#define GDK_Hyper_L 0xffed ++#define GDK_Hyper_R 0xffee ++#define GDK_ISO_Lock 0xfe01 ++#define GDK_ISO_Level2_Latch 0xfe02 ++#define GDK_ISO_Level3_Shift 0xfe03 ++#define GDK_ISO_Level3_Latch 0xfe04 ++#define GDK_ISO_Level3_Lock 0xfe05 ++#define GDK_ISO_Level5_Shift 0xfe11 ++#define GDK_ISO_Level5_Latch 0xfe12 ++#define GDK_ISO_Level5_Lock 0xfe13 ++#define GDK_ISO_Group_Shift 0xff7e ++#define GDK_ISO_Group_Latch 0xfe06 ++#define GDK_ISO_Group_Lock 0xfe07 ++#define GDK_ISO_Next_Group 0xfe08 ++#define GDK_ISO_Next_Group_Lock 0xfe09 ++#define GDK_ISO_Prev_Group 0xfe0a ++#define GDK_ISO_Prev_Group_Lock 0xfe0b ++#define GDK_ISO_First_Group 0xfe0c ++#define GDK_ISO_First_Group_Lock 0xfe0d ++#define GDK_ISO_Last_Group 0xfe0e ++#define GDK_ISO_Last_Group_Lock 0xfe0f ++#define GDK_ISO_Left_Tab 0xfe20 ++#define GDK_ISO_Move_Line_Up 0xfe21 ++#define GDK_ISO_Move_Line_Down 0xfe22 ++#define GDK_ISO_Partial_Line_Up 0xfe23 ++#define GDK_ISO_Partial_Line_Down 0xfe24 ++#define GDK_ISO_Partial_Space_Left 0xfe25 ++#define GDK_ISO_Partial_Space_Right 0xfe26 ++#define GDK_ISO_Set_Margin_Left 0xfe27 ++#define GDK_ISO_Set_Margin_Right 0xfe28 ++#define GDK_ISO_Release_Margin_Left 0xfe29 ++#define GDK_ISO_Release_Margin_Right 0xfe2a ++#define GDK_ISO_Release_Both_Margins 0xfe2b ++#define GDK_ISO_Fast_Cursor_Left 0xfe2c ++#define GDK_ISO_Fast_Cursor_Right 0xfe2d ++#define GDK_ISO_Fast_Cursor_Up 0xfe2e ++#define GDK_ISO_Fast_Cursor_Down 0xfe2f ++#define GDK_ISO_Continuous_Underline 0xfe30 ++#define GDK_ISO_Discontinuous_Underline 0xfe31 ++#define GDK_ISO_Emphasize 0xfe32 ++#define GDK_ISO_Center_Object 0xfe33 ++#define GDK_ISO_Enter 0xfe34 ++#define GDK_dead_grave 0xfe50 ++#define GDK_dead_acute 0xfe51 ++#define GDK_dead_circumflex 0xfe52 ++#define GDK_dead_tilde 0xfe53 ++#define GDK_dead_perispomeni 0xfe53 ++#define GDK_dead_macron 0xfe54 ++#define GDK_dead_breve 0xfe55 ++#define GDK_dead_abovedot 0xfe56 ++#define GDK_dead_diaeresis 0xfe57 ++#define GDK_dead_abovering 0xfe58 ++#define GDK_dead_doubleacute 0xfe59 ++#define GDK_dead_caron 0xfe5a ++#define GDK_dead_cedilla 0xfe5b ++#define GDK_dead_ogonek 0xfe5c ++#define GDK_dead_iota 0xfe5d ++#define GDK_dead_voiced_sound 0xfe5e ++#define GDK_dead_semivoiced_sound 0xfe5f ++#define GDK_dead_belowdot 0xfe60 ++#define GDK_dead_hook 0xfe61 ++#define GDK_dead_horn 0xfe62 ++#define GDK_dead_stroke 0xfe63 ++#define GDK_dead_abovecomma 0xfe64 ++#define GDK_dead_psili 0xfe64 ++#define GDK_dead_abovereversedcomma 0xfe65 ++#define GDK_dead_dasia 0xfe65 ++#define GDK_dead_doublegrave 0xfe66 ++#define GDK_dead_belowring 0xfe67 ++#define GDK_dead_belowmacron 0xfe68 ++#define GDK_dead_belowcircumflex 0xfe69 ++#define GDK_dead_belowtilde 0xfe6a ++#define GDK_dead_belowbreve 0xfe6b ++#define GDK_dead_belowdiaeresis 0xfe6c ++#define GDK_dead_invertedbreve 0xfe6d ++#define GDK_dead_belowcomma 0xfe6e ++#define GDK_dead_currency 0xfe6f ++#define GDK_dead_a 0xfe80 ++#define GDK_dead_A 0xfe81 ++#define GDK_dead_e 0xfe82 ++#define GDK_dead_E 0xfe83 ++#define GDK_dead_i 0xfe84 ++#define GDK_dead_I 0xfe85 ++#define GDK_dead_o 0xfe86 ++#define GDK_dead_O 0xfe87 ++#define GDK_dead_u 0xfe88 ++#define GDK_dead_U 0xfe89 ++#define GDK_dead_small_schwa 0xfe8a ++#define GDK_dead_capital_schwa 0xfe8b ++#define GDK_First_Virtual_Screen 0xfed0 ++#define GDK_Prev_Virtual_Screen 0xfed1 ++#define GDK_Next_Virtual_Screen 0xfed2 ++#define GDK_Last_Virtual_Screen 0xfed4 ++#define GDK_Terminate_Server 0xfed5 ++#define GDK_AccessX_Enable 0xfe70 ++#define GDK_AccessX_Feedback_Enable 0xfe71 ++#define GDK_RepeatKeys_Enable 0xfe72 ++#define GDK_SlowKeys_Enable 0xfe73 ++#define GDK_BounceKeys_Enable 0xfe74 ++#define GDK_StickyKeys_Enable 0xfe75 ++#define GDK_MouseKeys_Enable 0xfe76 ++#define GDK_MouseKeys_Accel_Enable 0xfe77 ++#define GDK_Overlay1_Enable 0xfe78 ++#define GDK_Overlay2_Enable 0xfe79 ++#define GDK_AudibleBell_Enable 0xfe7a ++#define GDK_Pointer_Left 0xfee0 ++#define GDK_Pointer_Right 0xfee1 ++#define GDK_Pointer_Up 0xfee2 ++#define GDK_Pointer_Down 0xfee3 ++#define GDK_Pointer_UpLeft 0xfee4 ++#define GDK_Pointer_UpRight 0xfee5 ++#define GDK_Pointer_DownLeft 0xfee6 ++#define GDK_Pointer_DownRight 0xfee7 ++#define GDK_Pointer_Button_Dflt 0xfee8 ++#define GDK_Pointer_Button1 0xfee9 ++#define GDK_Pointer_Button2 0xfeea ++#define GDK_Pointer_Button3 0xfeeb ++#define GDK_Pointer_Button4 0xfeec ++#define GDK_Pointer_Button5 0xfeed ++#define GDK_Pointer_DblClick_Dflt 0xfeee ++#define GDK_Pointer_DblClick1 0xfeef ++#define GDK_Pointer_DblClick2 0xfef0 ++#define GDK_Pointer_DblClick3 0xfef1 ++#define GDK_Pointer_DblClick4 0xfef2 ++#define GDK_Pointer_DblClick5 0xfef3 ++#define GDK_Pointer_Drag_Dflt 0xfef4 ++#define GDK_Pointer_Drag1 0xfef5 ++#define GDK_Pointer_Drag2 0xfef6 ++#define GDK_Pointer_Drag3 0xfef7 ++#define GDK_Pointer_Drag4 0xfef8 ++#define GDK_Pointer_Drag5 0xfefd ++#define GDK_Pointer_EnableKeys 0xfef9 ++#define GDK_Pointer_Accelerate 0xfefa ++#define GDK_Pointer_DfltBtnNext 0xfefb ++#define GDK_Pointer_DfltBtnPrev 0xfefc ++#define GDK_3270_Duplicate 0xfd01 ++#define GDK_3270_FieldMark 0xfd02 ++#define GDK_3270_Right2 0xfd03 ++#define GDK_3270_Left2 0xfd04 ++#define GDK_3270_BackTab 0xfd05 ++#define GDK_3270_EraseEOF 0xfd06 ++#define GDK_3270_EraseInput 0xfd07 ++#define GDK_3270_Reset 0xfd08 ++#define GDK_3270_Quit 0xfd09 ++#define GDK_3270_PA1 0xfd0a ++#define GDK_3270_PA2 0xfd0b ++#define GDK_3270_PA3 0xfd0c ++#define GDK_3270_Test 0xfd0d ++#define GDK_3270_Attn 0xfd0e ++#define GDK_3270_CursorBlink 0xfd0f ++#define GDK_3270_AltCursor 0xfd10 ++#define GDK_3270_KeyClick 0xfd11 ++#define GDK_3270_Jump 0xfd12 ++#define GDK_3270_Ident 0xfd13 ++#define GDK_3270_Rule 0xfd14 ++#define GDK_3270_Copy 0xfd15 ++#define GDK_3270_Play 0xfd16 ++#define GDK_3270_Setup 0xfd17 ++#define GDK_3270_Record 0xfd18 ++#define GDK_3270_ChangeScreen 0xfd19 ++#define GDK_3270_DeleteWord 0xfd1a ++#define GDK_3270_ExSelect 0xfd1b ++#define GDK_3270_CursorSelect 0xfd1c ++#define GDK_3270_PrintScreen 0xfd1d ++#define GDK_3270_Enter 0xfd1e ++#define GDK_space 0x020 ++#define GDK_exclam 0x021 ++#define GDK_quotedbl 0x022 ++#define GDK_numbersign 0x023 ++#define GDK_dollar 0x024 ++#define GDK_percent 0x025 ++#define GDK_ampersand 0x026 ++#define GDK_apostrophe 0x027 ++#define GDK_quoteright 0x027 ++#define GDK_parenleft 0x028 ++#define GDK_parenright 0x029 ++#define GDK_asterisk 0x02a ++#define GDK_plus 0x02b ++#define GDK_comma 0x02c ++#define GDK_minus 0x02d ++#define GDK_period 0x02e ++#define GDK_slash 0x02f ++#define GDK_0 0x030 ++#define GDK_1 0x031 ++#define GDK_2 0x032 ++#define GDK_3 0x033 ++#define GDK_4 0x034 ++#define GDK_5 0x035 ++#define GDK_6 0x036 ++#define GDK_7 0x037 ++#define GDK_8 0x038 ++#define GDK_9 0x039 ++#define GDK_colon 0x03a ++#define GDK_semicolon 0x03b ++#define GDK_less 0x03c ++#define GDK_equal 0x03d ++#define GDK_greater 0x03e ++#define GDK_question 0x03f ++#define GDK_at 0x040 ++#define GDK_A 0x041 ++#define GDK_B 0x042 ++#define GDK_C 0x043 ++#define GDK_D 0x044 ++#define GDK_E 0x045 ++#define GDK_F 0x046 ++#define GDK_G 0x047 ++#define GDK_H 0x048 ++#define GDK_I 0x049 ++#define GDK_J 0x04a ++#define GDK_K 0x04b ++#define GDK_L 0x04c ++#define GDK_M 0x04d ++#define GDK_N 0x04e ++#define GDK_O 0x04f ++#define GDK_P 0x050 ++#define GDK_Q 0x051 ++#define GDK_R 0x052 ++#define GDK_S 0x053 ++#define GDK_T 0x054 ++#define GDK_U 0x055 ++#define GDK_V 0x056 ++#define GDK_W 0x057 ++#define GDK_X 0x058 ++#define GDK_Y 0x059 ++#define GDK_Z 0x05a ++#define GDK_bracketleft 0x05b ++#define GDK_backslash 0x05c ++#define GDK_bracketright 0x05d ++#define GDK_asciicircum 0x05e ++#define GDK_underscore 0x05f ++#define GDK_grave 0x060 ++#define GDK_quoteleft 0x060 ++#define GDK_a 0x061 ++#define GDK_b 0x062 ++#define GDK_c 0x063 ++#define GDK_d 0x064 ++#define GDK_e 0x065 ++#define GDK_f 0x066 ++#define GDK_g 0x067 ++#define GDK_h 0x068 ++#define GDK_i 0x069 ++#define GDK_j 0x06a ++#define GDK_k 0x06b ++#define GDK_l 0x06c ++#define GDK_m 0x06d ++#define GDK_n 0x06e ++#define GDK_o 0x06f ++#define GDK_p 0x070 ++#define GDK_q 0x071 ++#define GDK_r 0x072 ++#define GDK_s 0x073 ++#define GDK_t 0x074 ++#define GDK_u 0x075 ++#define GDK_v 0x076 ++#define GDK_w 0x077 ++#define GDK_x 0x078 ++#define GDK_y 0x079 ++#define GDK_z 0x07a ++#define GDK_braceleft 0x07b ++#define GDK_bar 0x07c ++#define GDK_braceright 0x07d ++#define GDK_asciitilde 0x07e ++#define GDK_nobreakspace 0x0a0 ++#define GDK_exclamdown 0x0a1 ++#define GDK_cent 0x0a2 ++#define GDK_sterling 0x0a3 ++#define GDK_currency 0x0a4 ++#define GDK_yen 0x0a5 ++#define GDK_brokenbar 0x0a6 ++#define GDK_section 0x0a7 ++#define GDK_diaeresis 0x0a8 ++#define GDK_copyright 0x0a9 ++#define GDK_ordfeminine 0x0aa ++#define GDK_guillemotleft 0x0ab ++#define GDK_notsign 0x0ac ++#define GDK_hyphen 0x0ad ++#define GDK_registered 0x0ae ++#define GDK_macron 0x0af ++#define GDK_degree 0x0b0 ++#define GDK_plusminus 0x0b1 ++#define GDK_twosuperior 0x0b2 ++#define GDK_threesuperior 0x0b3 ++#define GDK_acute 0x0b4 ++#define GDK_mu 0x0b5 ++#define GDK_paragraph 0x0b6 ++#define GDK_periodcentered 0x0b7 ++#define GDK_cedilla 0x0b8 ++#define GDK_onesuperior 0x0b9 ++#define GDK_masculine 0x0ba ++#define GDK_guillemotright 0x0bb ++#define GDK_onequarter 0x0bc ++#define GDK_onehalf 0x0bd ++#define GDK_threequarters 0x0be ++#define GDK_questiondown 0x0bf ++#define GDK_Agrave 0x0c0 ++#define GDK_Aacute 0x0c1 ++#define GDK_Acircumflex 0x0c2 ++#define GDK_Atilde 0x0c3 ++#define GDK_Adiaeresis 0x0c4 ++#define GDK_Aring 0x0c5 ++#define GDK_AE 0x0c6 ++#define GDK_Ccedilla 0x0c7 ++#define GDK_Egrave 0x0c8 ++#define GDK_Eacute 0x0c9 ++#define GDK_Ecircumflex 0x0ca ++#define GDK_Ediaeresis 0x0cb ++#define GDK_Igrave 0x0cc ++#define GDK_Iacute 0x0cd ++#define GDK_Icircumflex 0x0ce ++#define GDK_Idiaeresis 0x0cf ++#define GDK_ETH 0x0d0 ++#define GDK_Eth 0x0d0 ++#define GDK_Ntilde 0x0d1 ++#define GDK_Ograve 0x0d2 ++#define GDK_Oacute 0x0d3 ++#define GDK_Ocircumflex 0x0d4 ++#define GDK_Otilde 0x0d5 ++#define GDK_Odiaeresis 0x0d6 ++#define GDK_multiply 0x0d7 ++#define GDK_Oslash 0x0d8 ++#define GDK_Ooblique 0x0d8 ++#define GDK_Ugrave 0x0d9 ++#define GDK_Uacute 0x0da ++#define GDK_Ucircumflex 0x0db ++#define GDK_Udiaeresis 0x0dc ++#define GDK_Yacute 0x0dd ++#define GDK_THORN 0x0de ++#define GDK_Thorn 0x0de ++#define GDK_ssharp 0x0df ++#define GDK_agrave 0x0e0 ++#define GDK_aacute 0x0e1 ++#define GDK_acircumflex 0x0e2 ++#define GDK_atilde 0x0e3 ++#define GDK_adiaeresis 0x0e4 ++#define GDK_aring 0x0e5 ++#define GDK_ae 0x0e6 ++#define GDK_ccedilla 0x0e7 ++#define GDK_egrave 0x0e8 ++#define GDK_eacute 0x0e9 ++#define GDK_ecircumflex 0x0ea ++#define GDK_ediaeresis 0x0eb ++#define GDK_igrave 0x0ec ++#define GDK_iacute 0x0ed ++#define GDK_icircumflex 0x0ee ++#define GDK_idiaeresis 0x0ef ++#define GDK_eth 0x0f0 ++#define GDK_ntilde 0x0f1 ++#define GDK_ograve 0x0f2 ++#define GDK_oacute 0x0f3 ++#define GDK_ocircumflex 0x0f4 ++#define GDK_otilde 0x0f5 ++#define GDK_odiaeresis 0x0f6 ++#define GDK_division 0x0f7 ++#define GDK_oslash 0x0f8 ++#define GDK_ooblique 0x0f8 ++#define GDK_ugrave 0x0f9 ++#define GDK_uacute 0x0fa ++#define GDK_ucircumflex 0x0fb ++#define GDK_udiaeresis 0x0fc ++#define GDK_yacute 0x0fd ++#define GDK_thorn 0x0fe ++#define GDK_ydiaeresis 0x0ff ++#define GDK_Aogonek 0x1a1 ++#define GDK_breve 0x1a2 ++#define GDK_Lstroke 0x1a3 ++#define GDK_Lcaron 0x1a5 ++#define GDK_Sacute 0x1a6 ++#define GDK_Scaron 0x1a9 ++#define GDK_Scedilla 0x1aa ++#define GDK_Tcaron 0x1ab ++#define GDK_Zacute 0x1ac ++#define GDK_Zcaron 0x1ae ++#define GDK_Zabovedot 0x1af ++#define GDK_aogonek 0x1b1 ++#define GDK_ogonek 0x1b2 ++#define GDK_lstroke 0x1b3 ++#define GDK_lcaron 0x1b5 ++#define GDK_sacute 0x1b6 ++#define GDK_caron 0x1b7 ++#define GDK_scaron 0x1b9 ++#define GDK_scedilla 0x1ba ++#define GDK_tcaron 0x1bb ++#define GDK_zacute 0x1bc ++#define GDK_doubleacute 0x1bd ++#define GDK_zcaron 0x1be ++#define GDK_zabovedot 0x1bf ++#define GDK_Racute 0x1c0 ++#define GDK_Abreve 0x1c3 ++#define GDK_Lacute 0x1c5 ++#define GDK_Cacute 0x1c6 ++#define GDK_Ccaron 0x1c8 ++#define GDK_Eogonek 0x1ca ++#define GDK_Ecaron 0x1cc ++#define GDK_Dcaron 0x1cf ++#define GDK_Dstroke 0x1d0 ++#define GDK_Nacute 0x1d1 ++#define GDK_Ncaron 0x1d2 ++#define GDK_Odoubleacute 0x1d5 ++#define GDK_Rcaron 0x1d8 ++#define GDK_Uring 0x1d9 ++#define GDK_Udoubleacute 0x1db ++#define GDK_Tcedilla 0x1de ++#define GDK_racute 0x1e0 ++#define GDK_abreve 0x1e3 ++#define GDK_lacute 0x1e5 ++#define GDK_cacute 0x1e6 ++#define GDK_ccaron 0x1e8 ++#define GDK_eogonek 0x1ea ++#define GDK_ecaron 0x1ec ++#define GDK_dcaron 0x1ef ++#define GDK_dstroke 0x1f0 ++#define GDK_nacute 0x1f1 ++#define GDK_ncaron 0x1f2 ++#define GDK_odoubleacute 0x1f5 ++#define GDK_udoubleacute 0x1fb ++#define GDK_rcaron 0x1f8 ++#define GDK_uring 0x1f9 ++#define GDK_tcedilla 0x1fe ++#define GDK_abovedot 0x1ff ++#define GDK_Hstroke 0x2a1 ++#define GDK_Hcircumflex 0x2a6 ++#define GDK_Iabovedot 0x2a9 ++#define GDK_Gbreve 0x2ab ++#define GDK_Jcircumflex 0x2ac ++#define GDK_hstroke 0x2b1 ++#define GDK_hcircumflex 0x2b6 ++#define GDK_idotless 0x2b9 ++#define GDK_gbreve 0x2bb ++#define GDK_jcircumflex 0x2bc ++#define GDK_Cabovedot 0x2c5 ++#define GDK_Ccircumflex 0x2c6 ++#define GDK_Gabovedot 0x2d5 ++#define GDK_Gcircumflex 0x2d8 ++#define GDK_Ubreve 0x2dd ++#define GDK_Scircumflex 0x2de ++#define GDK_cabovedot 0x2e5 ++#define GDK_ccircumflex 0x2e6 ++#define GDK_gabovedot 0x2f5 ++#define GDK_gcircumflex 0x2f8 ++#define GDK_ubreve 0x2fd ++#define GDK_scircumflex 0x2fe ++#define GDK_kra 0x3a2 ++#define GDK_kappa 0x3a2 ++#define GDK_Rcedilla 0x3a3 ++#define GDK_Itilde 0x3a5 ++#define GDK_Lcedilla 0x3a6 ++#define GDK_Emacron 0x3aa ++#define GDK_Gcedilla 0x3ab ++#define GDK_Tslash 0x3ac ++#define GDK_rcedilla 0x3b3 ++#define GDK_itilde 0x3b5 ++#define GDK_lcedilla 0x3b6 ++#define GDK_emacron 0x3ba ++#define GDK_gcedilla 0x3bb ++#define GDK_tslash 0x3bc ++#define GDK_ENG 0x3bd ++#define GDK_eng 0x3bf ++#define GDK_Amacron 0x3c0 ++#define GDK_Iogonek 0x3c7 ++#define GDK_Eabovedot 0x3cc ++#define GDK_Imacron 0x3cf ++#define GDK_Ncedilla 0x3d1 ++#define GDK_Omacron 0x3d2 ++#define GDK_Kcedilla 0x3d3 ++#define GDK_Uogonek 0x3d9 ++#define GDK_Utilde 0x3dd ++#define GDK_Umacron 0x3de ++#define GDK_amacron 0x3e0 ++#define GDK_iogonek 0x3e7 ++#define GDK_eabovedot 0x3ec ++#define GDK_imacron 0x3ef ++#define GDK_ncedilla 0x3f1 ++#define GDK_omacron 0x3f2 ++#define GDK_kcedilla 0x3f3 ++#define GDK_uogonek 0x3f9 ++#define GDK_utilde 0x3fd ++#define GDK_umacron 0x3fe ++#define GDK_Babovedot 0x1001e02 ++#define GDK_babovedot 0x1001e03 ++#define GDK_Dabovedot 0x1001e0a ++#define GDK_Wgrave 0x1001e80 ++#define GDK_Wacute 0x1001e82 ++#define GDK_dabovedot 0x1001e0b ++#define GDK_Ygrave 0x1001ef2 ++#define GDK_Fabovedot 0x1001e1e ++#define GDK_fabovedot 0x1001e1f ++#define GDK_Mabovedot 0x1001e40 ++#define GDK_mabovedot 0x1001e41 ++#define GDK_Pabovedot 0x1001e56 ++#define GDK_wgrave 0x1001e81 ++#define GDK_pabovedot 0x1001e57 ++#define GDK_wacute 0x1001e83 ++#define GDK_Sabovedot 0x1001e60 ++#define GDK_ygrave 0x1001ef3 ++#define GDK_Wdiaeresis 0x1001e84 ++#define GDK_wdiaeresis 0x1001e85 ++#define GDK_sabovedot 0x1001e61 ++#define GDK_Wcircumflex 0x1000174 ++#define GDK_Tabovedot 0x1001e6a ++#define GDK_Ycircumflex 0x1000176 ++#define GDK_wcircumflex 0x1000175 ++#define GDK_tabovedot 0x1001e6b ++#define GDK_ycircumflex 0x1000177 ++#define GDK_OE 0x13bc ++#define GDK_oe 0x13bd ++#define GDK_Ydiaeresis 0x13be ++#define GDK_overline 0x47e ++#define GDK_kana_fullstop 0x4a1 ++#define GDK_kana_openingbracket 0x4a2 ++#define GDK_kana_closingbracket 0x4a3 ++#define GDK_kana_comma 0x4a4 ++#define GDK_kana_conjunctive 0x4a5 ++#define GDK_kana_middledot 0x4a5 ++#define GDK_kana_WO 0x4a6 ++#define GDK_kana_a 0x4a7 ++#define GDK_kana_i 0x4a8 ++#define GDK_kana_u 0x4a9 ++#define GDK_kana_e 0x4aa ++#define GDK_kana_o 0x4ab ++#define GDK_kana_ya 0x4ac ++#define GDK_kana_yu 0x4ad ++#define GDK_kana_yo 0x4ae ++#define GDK_kana_tsu 0x4af ++#define GDK_kana_tu 0x4af ++#define GDK_prolongedsound 0x4b0 ++#define GDK_kana_A 0x4b1 ++#define GDK_kana_I 0x4b2 ++#define GDK_kana_U 0x4b3 ++#define GDK_kana_E 0x4b4 ++#define GDK_kana_O 0x4b5 ++#define GDK_kana_KA 0x4b6 ++#define GDK_kana_KI 0x4b7 ++#define GDK_kana_KU 0x4b8 ++#define GDK_kana_KE 0x4b9 ++#define GDK_kana_KO 0x4ba ++#define GDK_kana_SA 0x4bb ++#define GDK_kana_SHI 0x4bc ++#define GDK_kana_SU 0x4bd ++#define GDK_kana_SE 0x4be ++#define GDK_kana_SO 0x4bf ++#define GDK_kana_TA 0x4c0 ++#define GDK_kana_CHI 0x4c1 ++#define GDK_kana_TI 0x4c1 ++#define GDK_kana_TSU 0x4c2 ++#define GDK_kana_TU 0x4c2 ++#define GDK_kana_TE 0x4c3 ++#define GDK_kana_TO 0x4c4 ++#define GDK_kana_NA 0x4c5 ++#define GDK_kana_NI 0x4c6 ++#define GDK_kana_NU 0x4c7 ++#define GDK_kana_NE 0x4c8 ++#define GDK_kana_NO 0x4c9 ++#define GDK_kana_HA 0x4ca ++#define GDK_kana_HI 0x4cb ++#define GDK_kana_FU 0x4cc ++#define GDK_kana_HU 0x4cc ++#define GDK_kana_HE 0x4cd ++#define GDK_kana_HO 0x4ce ++#define GDK_kana_MA 0x4cf ++#define GDK_kana_MI 0x4d0 ++#define GDK_kana_MU 0x4d1 ++#define GDK_kana_ME 0x4d2 ++#define GDK_kana_MO 0x4d3 ++#define GDK_kana_YA 0x4d4 ++#define GDK_kana_YU 0x4d5 ++#define GDK_kana_YO 0x4d6 ++#define GDK_kana_RA 0x4d7 ++#define GDK_kana_RI 0x4d8 ++#define GDK_kana_RU 0x4d9 ++#define GDK_kana_RE 0x4da ++#define GDK_kana_RO 0x4db ++#define GDK_kana_WA 0x4dc ++#define GDK_kana_N 0x4dd ++#define GDK_voicedsound 0x4de ++#define GDK_semivoicedsound 0x4df ++#define GDK_kana_switch 0xff7e ++#define GDK_Farsi_0 0x10006f0 ++#define GDK_Farsi_1 0x10006f1 ++#define GDK_Farsi_2 0x10006f2 ++#define GDK_Farsi_3 0x10006f3 ++#define GDK_Farsi_4 0x10006f4 ++#define GDK_Farsi_5 0x10006f5 ++#define GDK_Farsi_6 0x10006f6 ++#define GDK_Farsi_7 0x10006f7 ++#define GDK_Farsi_8 0x10006f8 ++#define GDK_Farsi_9 0x10006f9 ++#define GDK_Arabic_percent 0x100066a ++#define GDK_Arabic_superscript_alef 0x1000670 ++#define GDK_Arabic_tteh 0x1000679 ++#define GDK_Arabic_peh 0x100067e ++#define GDK_Arabic_tcheh 0x1000686 ++#define GDK_Arabic_ddal 0x1000688 ++#define GDK_Arabic_rreh 0x1000691 ++#define GDK_Arabic_comma 0x5ac ++#define GDK_Arabic_fullstop 0x10006d4 ++#define GDK_Arabic_0 0x1000660 ++#define GDK_Arabic_1 0x1000661 ++#define GDK_Arabic_2 0x1000662 ++#define GDK_Arabic_3 0x1000663 ++#define GDK_Arabic_4 0x1000664 ++#define GDK_Arabic_5 0x1000665 ++#define GDK_Arabic_6 0x1000666 ++#define GDK_Arabic_7 0x1000667 ++#define GDK_Arabic_8 0x1000668 ++#define GDK_Arabic_9 0x1000669 ++#define GDK_Arabic_semicolon 0x5bb ++#define GDK_Arabic_question_mark 0x5bf ++#define GDK_Arabic_hamza 0x5c1 ++#define GDK_Arabic_maddaonalef 0x5c2 ++#define GDK_Arabic_hamzaonalef 0x5c3 ++#define GDK_Arabic_hamzaonwaw 0x5c4 ++#define GDK_Arabic_hamzaunderalef 0x5c5 ++#define GDK_Arabic_hamzaonyeh 0x5c6 ++#define GDK_Arabic_alef 0x5c7 ++#define GDK_Arabic_beh 0x5c8 ++#define GDK_Arabic_tehmarbuta 0x5c9 ++#define GDK_Arabic_teh 0x5ca ++#define GDK_Arabic_theh 0x5cb ++#define GDK_Arabic_jeem 0x5cc ++#define GDK_Arabic_hah 0x5cd ++#define GDK_Arabic_khah 0x5ce ++#define GDK_Arabic_dal 0x5cf ++#define GDK_Arabic_thal 0x5d0 ++#define GDK_Arabic_ra 0x5d1 ++#define GDK_Arabic_zain 0x5d2 ++#define GDK_Arabic_seen 0x5d3 ++#define GDK_Arabic_sheen 0x5d4 ++#define GDK_Arabic_sad 0x5d5 ++#define GDK_Arabic_dad 0x5d6 ++#define GDK_Arabic_tah 0x5d7 ++#define GDK_Arabic_zah 0x5d8 ++#define GDK_Arabic_ain 0x5d9 ++#define GDK_Arabic_ghain 0x5da ++#define GDK_Arabic_tatweel 0x5e0 ++#define GDK_Arabic_feh 0x5e1 ++#define GDK_Arabic_qaf 0x5e2 ++#define GDK_Arabic_kaf 0x5e3 ++#define GDK_Arabic_lam 0x5e4 ++#define GDK_Arabic_meem 0x5e5 ++#define GDK_Arabic_noon 0x5e6 ++#define GDK_Arabic_ha 0x5e7 ++#define GDK_Arabic_heh 0x5e7 ++#define GDK_Arabic_waw 0x5e8 ++#define GDK_Arabic_alefmaksura 0x5e9 ++#define GDK_Arabic_yeh 0x5ea ++#define GDK_Arabic_fathatan 0x5eb ++#define GDK_Arabic_dammatan 0x5ec ++#define GDK_Arabic_kasratan 0x5ed ++#define GDK_Arabic_fatha 0x5ee ++#define GDK_Arabic_damma 0x5ef ++#define GDK_Arabic_kasra 0x5f0 ++#define GDK_Arabic_shadda 0x5f1 ++#define GDK_Arabic_sukun 0x5f2 ++#define GDK_Arabic_madda_above 0x1000653 ++#define GDK_Arabic_hamza_above 0x1000654 ++#define GDK_Arabic_hamza_below 0x1000655 ++#define GDK_Arabic_jeh 0x1000698 ++#define GDK_Arabic_veh 0x10006a4 ++#define GDK_Arabic_keheh 0x10006a9 ++#define GDK_Arabic_gaf 0x10006af ++#define GDK_Arabic_noon_ghunna 0x10006ba ++#define GDK_Arabic_heh_doachashmee 0x10006be ++#define GDK_Farsi_yeh 0x10006cc ++#define GDK_Arabic_farsi_yeh 0x10006cc ++#define GDK_Arabic_yeh_baree 0x10006d2 ++#define GDK_Arabic_heh_goal 0x10006c1 ++#define GDK_Arabic_switch 0xff7e ++#define GDK_Cyrillic_GHE_bar 0x1000492 ++#define GDK_Cyrillic_ghe_bar 0x1000493 ++#define GDK_Cyrillic_ZHE_descender 0x1000496 ++#define GDK_Cyrillic_zhe_descender 0x1000497 ++#define GDK_Cyrillic_KA_descender 0x100049a ++#define GDK_Cyrillic_ka_descender 0x100049b ++#define GDK_Cyrillic_KA_vertstroke 0x100049c ++#define GDK_Cyrillic_ka_vertstroke 0x100049d ++#define GDK_Cyrillic_EN_descender 0x10004a2 ++#define GDK_Cyrillic_en_descender 0x10004a3 ++#define GDK_Cyrillic_U_straight 0x10004ae ++#define GDK_Cyrillic_u_straight 0x10004af ++#define GDK_Cyrillic_U_straight_bar 0x10004b0 ++#define GDK_Cyrillic_u_straight_bar 0x10004b1 ++#define GDK_Cyrillic_HA_descender 0x10004b2 ++#define GDK_Cyrillic_ha_descender 0x10004b3 ++#define GDK_Cyrillic_CHE_descender 0x10004b6 ++#define GDK_Cyrillic_che_descender 0x10004b7 ++#define GDK_Cyrillic_CHE_vertstroke 0x10004b8 ++#define GDK_Cyrillic_che_vertstroke 0x10004b9 ++#define GDK_Cyrillic_SHHA 0x10004ba ++#define GDK_Cyrillic_shha 0x10004bb ++#define GDK_Cyrillic_SCHWA 0x10004d8 ++#define GDK_Cyrillic_schwa 0x10004d9 ++#define GDK_Cyrillic_I_macron 0x10004e2 ++#define GDK_Cyrillic_i_macron 0x10004e3 ++#define GDK_Cyrillic_O_bar 0x10004e8 ++#define GDK_Cyrillic_o_bar 0x10004e9 ++#define GDK_Cyrillic_U_macron 0x10004ee ++#define GDK_Cyrillic_u_macron 0x10004ef ++#define GDK_Serbian_dje 0x6a1 ++#define GDK_Macedonia_gje 0x6a2 ++#define GDK_Cyrillic_io 0x6a3 ++#define GDK_Ukrainian_ie 0x6a4 ++#define GDK_Ukranian_je 0x6a4 ++#define GDK_Macedonia_dse 0x6a5 ++#define GDK_Ukrainian_i 0x6a6 ++#define GDK_Ukranian_i 0x6a6 ++#define GDK_Ukrainian_yi 0x6a7 ++#define GDK_Ukranian_yi 0x6a7 ++#define GDK_Cyrillic_je 0x6a8 ++#define GDK_Serbian_je 0x6a8 ++#define GDK_Cyrillic_lje 0x6a9 ++#define GDK_Serbian_lje 0x6a9 ++#define GDK_Cyrillic_nje 0x6aa ++#define GDK_Serbian_nje 0x6aa ++#define GDK_Serbian_tshe 0x6ab ++#define GDK_Macedonia_kje 0x6ac ++#define GDK_Ukrainian_ghe_with_upturn 0x6ad ++#define GDK_Byelorussian_shortu 0x6ae ++#define GDK_Cyrillic_dzhe 0x6af ++#define GDK_Serbian_dze 0x6af ++#define GDK_numerosign 0x6b0 ++#define GDK_Serbian_DJE 0x6b1 ++#define GDK_Macedonia_GJE 0x6b2 ++#define GDK_Cyrillic_IO 0x6b3 ++#define GDK_Ukrainian_IE 0x6b4 ++#define GDK_Ukranian_JE 0x6b4 ++#define GDK_Macedonia_DSE 0x6b5 ++#define GDK_Ukrainian_I 0x6b6 ++#define GDK_Ukranian_I 0x6b6 ++#define GDK_Ukrainian_YI 0x6b7 ++#define GDK_Ukranian_YI 0x6b7 ++#define GDK_Cyrillic_JE 0x6b8 ++#define GDK_Serbian_JE 0x6b8 ++#define GDK_Cyrillic_LJE 0x6b9 ++#define GDK_Serbian_LJE 0x6b9 ++#define GDK_Cyrillic_NJE 0x6ba ++#define GDK_Serbian_NJE 0x6ba ++#define GDK_Serbian_TSHE 0x6bb ++#define GDK_Macedonia_KJE 0x6bc ++#define GDK_Ukrainian_GHE_WITH_UPTURN 0x6bd ++#define GDK_Byelorussian_SHORTU 0x6be ++#define GDK_Cyrillic_DZHE 0x6bf ++#define GDK_Serbian_DZE 0x6bf ++#define GDK_Cyrillic_yu 0x6c0 ++#define GDK_Cyrillic_a 0x6c1 ++#define GDK_Cyrillic_be 0x6c2 ++#define GDK_Cyrillic_tse 0x6c3 ++#define GDK_Cyrillic_de 0x6c4 ++#define GDK_Cyrillic_ie 0x6c5 ++#define GDK_Cyrillic_ef 0x6c6 ++#define GDK_Cyrillic_ghe 0x6c7 ++#define GDK_Cyrillic_ha 0x6c8 ++#define GDK_Cyrillic_i 0x6c9 ++#define GDK_Cyrillic_shorti 0x6ca ++#define GDK_Cyrillic_ka 0x6cb ++#define GDK_Cyrillic_el 0x6cc ++#define GDK_Cyrillic_em 0x6cd ++#define GDK_Cyrillic_en 0x6ce ++#define GDK_Cyrillic_o 0x6cf ++#define GDK_Cyrillic_pe 0x6d0 ++#define GDK_Cyrillic_ya 0x6d1 ++#define GDK_Cyrillic_er 0x6d2 ++#define GDK_Cyrillic_es 0x6d3 ++#define GDK_Cyrillic_te 0x6d4 ++#define GDK_Cyrillic_u 0x6d5 ++#define GDK_Cyrillic_zhe 0x6d6 ++#define GDK_Cyrillic_ve 0x6d7 ++#define GDK_Cyrillic_softsign 0x6d8 ++#define GDK_Cyrillic_yeru 0x6d9 ++#define GDK_Cyrillic_ze 0x6da ++#define GDK_Cyrillic_sha 0x6db ++#define GDK_Cyrillic_e 0x6dc ++#define GDK_Cyrillic_shcha 0x6dd ++#define GDK_Cyrillic_che 0x6de ++#define GDK_Cyrillic_hardsign 0x6df ++#define GDK_Cyrillic_YU 0x6e0 ++#define GDK_Cyrillic_A 0x6e1 ++#define GDK_Cyrillic_BE 0x6e2 ++#define GDK_Cyrillic_TSE 0x6e3 ++#define GDK_Cyrillic_DE 0x6e4 ++#define GDK_Cyrillic_IE 0x6e5 ++#define GDK_Cyrillic_EF 0x6e6 ++#define GDK_Cyrillic_GHE 0x6e7 ++#define GDK_Cyrillic_HA 0x6e8 ++#define GDK_Cyrillic_I 0x6e9 ++#define GDK_Cyrillic_SHORTI 0x6ea ++#define GDK_Cyrillic_KA 0x6eb ++#define GDK_Cyrillic_EL 0x6ec ++#define GDK_Cyrillic_EM 0x6ed ++#define GDK_Cyrillic_EN 0x6ee ++#define GDK_Cyrillic_O 0x6ef ++#define GDK_Cyrillic_PE 0x6f0 ++#define GDK_Cyrillic_YA 0x6f1 ++#define GDK_Cyrillic_ER 0x6f2 ++#define GDK_Cyrillic_ES 0x6f3 ++#define GDK_Cyrillic_TE 0x6f4 ++#define GDK_Cyrillic_U 0x6f5 ++#define GDK_Cyrillic_ZHE 0x6f6 ++#define GDK_Cyrillic_VE 0x6f7 ++#define GDK_Cyrillic_SOFTSIGN 0x6f8 ++#define GDK_Cyrillic_YERU 0x6f9 ++#define GDK_Cyrillic_ZE 0x6fa ++#define GDK_Cyrillic_SHA 0x6fb ++#define GDK_Cyrillic_E 0x6fc ++#define GDK_Cyrillic_SHCHA 0x6fd ++#define GDK_Cyrillic_CHE 0x6fe ++#define GDK_Cyrillic_HARDSIGN 0x6ff ++#define GDK_Greek_ALPHAaccent 0x7a1 ++#define GDK_Greek_EPSILONaccent 0x7a2 ++#define GDK_Greek_ETAaccent 0x7a3 ++#define GDK_Greek_IOTAaccent 0x7a4 ++#define GDK_Greek_IOTAdieresis 0x7a5 ++#define GDK_Greek_IOTAdiaeresis 0x7a5 ++#define GDK_Greek_OMICRONaccent 0x7a7 ++#define GDK_Greek_UPSILONaccent 0x7a8 ++#define GDK_Greek_UPSILONdieresis 0x7a9 ++#define GDK_Greek_OMEGAaccent 0x7ab ++#define GDK_Greek_accentdieresis 0x7ae ++#define GDK_Greek_horizbar 0x7af ++#define GDK_Greek_alphaaccent 0x7b1 ++#define GDK_Greek_epsilonaccent 0x7b2 ++#define GDK_Greek_etaaccent 0x7b3 ++#define GDK_Greek_iotaaccent 0x7b4 ++#define GDK_Greek_iotadieresis 0x7b5 ++#define GDK_Greek_iotaaccentdieresis 0x7b6 ++#define GDK_Greek_omicronaccent 0x7b7 ++#define GDK_Greek_upsilonaccent 0x7b8 ++#define GDK_Greek_upsilondieresis 0x7b9 ++#define GDK_Greek_upsilonaccentdieresis 0x7ba ++#define GDK_Greek_omegaaccent 0x7bb ++#define GDK_Greek_ALPHA 0x7c1 ++#define GDK_Greek_BETA 0x7c2 ++#define GDK_Greek_GAMMA 0x7c3 ++#define GDK_Greek_DELTA 0x7c4 ++#define GDK_Greek_EPSILON 0x7c5 ++#define GDK_Greek_ZETA 0x7c6 ++#define GDK_Greek_ETA 0x7c7 ++#define GDK_Greek_THETA 0x7c8 ++#define GDK_Greek_IOTA 0x7c9 ++#define GDK_Greek_KAPPA 0x7ca ++#define GDK_Greek_LAMDA 0x7cb ++#define GDK_Greek_LAMBDA 0x7cb ++#define GDK_Greek_MU 0x7cc ++#define GDK_Greek_NU 0x7cd ++#define GDK_Greek_XI 0x7ce ++#define GDK_Greek_OMICRON 0x7cf ++#define GDK_Greek_PI 0x7d0 ++#define GDK_Greek_RHO 0x7d1 ++#define GDK_Greek_SIGMA 0x7d2 ++#define GDK_Greek_TAU 0x7d4 ++#define GDK_Greek_UPSILON 0x7d5 ++#define GDK_Greek_PHI 0x7d6 ++#define GDK_Greek_CHI 0x7d7 ++#define GDK_Greek_PSI 0x7d8 ++#define GDK_Greek_OMEGA 0x7d9 ++#define GDK_Greek_alpha 0x7e1 ++#define GDK_Greek_beta 0x7e2 ++#define GDK_Greek_gamma 0x7e3 ++#define GDK_Greek_delta 0x7e4 ++#define GDK_Greek_epsilon 0x7e5 ++#define GDK_Greek_zeta 0x7e6 ++#define GDK_Greek_eta 0x7e7 ++#define GDK_Greek_theta 0x7e8 ++#define GDK_Greek_iota 0x7e9 ++#define GDK_Greek_kappa 0x7ea ++#define GDK_Greek_lamda 0x7eb ++#define GDK_Greek_lambda 0x7eb ++#define GDK_Greek_mu 0x7ec ++#define GDK_Greek_nu 0x7ed ++#define GDK_Greek_xi 0x7ee ++#define GDK_Greek_omicron 0x7ef ++#define GDK_Greek_pi 0x7f0 ++#define GDK_Greek_rho 0x7f1 ++#define GDK_Greek_sigma 0x7f2 ++#define GDK_Greek_finalsmallsigma 0x7f3 ++#define GDK_Greek_tau 0x7f4 ++#define GDK_Greek_upsilon 0x7f5 ++#define GDK_Greek_phi 0x7f6 ++#define GDK_Greek_chi 0x7f7 ++#define GDK_Greek_psi 0x7f8 ++#define GDK_Greek_omega 0x7f9 ++#define GDK_Greek_switch 0xff7e ++#define GDK_leftradical 0x8a1 ++#define GDK_topleftradical 0x8a2 ++#define GDK_horizconnector 0x8a3 ++#define GDK_topintegral 0x8a4 ++#define GDK_botintegral 0x8a5 ++#define GDK_vertconnector 0x8a6 ++#define GDK_topleftsqbracket 0x8a7 ++#define GDK_botleftsqbracket 0x8a8 ++#define GDK_toprightsqbracket 0x8a9 ++#define GDK_botrightsqbracket 0x8aa ++#define GDK_topleftparens 0x8ab ++#define GDK_botleftparens 0x8ac ++#define GDK_toprightparens 0x8ad ++#define GDK_botrightparens 0x8ae ++#define GDK_leftmiddlecurlybrace 0x8af ++#define GDK_rightmiddlecurlybrace 0x8b0 ++#define GDK_topleftsummation 0x8b1 ++#define GDK_botleftsummation 0x8b2 ++#define GDK_topvertsummationconnector 0x8b3 ++#define GDK_botvertsummationconnector 0x8b4 ++#define GDK_toprightsummation 0x8b5 ++#define GDK_botrightsummation 0x8b6 ++#define GDK_rightmiddlesummation 0x8b7 ++#define GDK_lessthanequal 0x8bc ++#define GDK_notequal 0x8bd ++#define GDK_greaterthanequal 0x8be ++#define GDK_integral 0x8bf ++#define GDK_therefore 0x8c0 ++#define GDK_variation 0x8c1 ++#define GDK_infinity 0x8c2 ++#define GDK_nabla 0x8c5 ++#define GDK_approximate 0x8c8 ++#define GDK_similarequal 0x8c9 ++#define GDK_ifonlyif 0x8cd ++#define GDK_implies 0x8ce ++#define GDK_identical 0x8cf ++#define GDK_radical 0x8d6 ++#define GDK_includedin 0x8da ++#define GDK_includes 0x8db ++#define GDK_intersection 0x8dc ++#define GDK_union 0x8dd ++#define GDK_logicaland 0x8de ++#define GDK_logicalor 0x8df ++#define GDK_partialderivative 0x8ef ++#define GDK_function 0x8f6 ++#define GDK_leftarrow 0x8fb ++#define GDK_uparrow 0x8fc ++#define GDK_rightarrow 0x8fd ++#define GDK_downarrow 0x8fe ++#define GDK_blank 0x9df ++#define GDK_soliddiamond 0x9e0 ++#define GDK_checkerboard 0x9e1 ++#define GDK_ht 0x9e2 ++#define GDK_ff 0x9e3 ++#define GDK_cr 0x9e4 ++#define GDK_lf 0x9e5 ++#define GDK_nl 0x9e8 ++#define GDK_vt 0x9e9 ++#define GDK_lowrightcorner 0x9ea ++#define GDK_uprightcorner 0x9eb ++#define GDK_upleftcorner 0x9ec ++#define GDK_lowleftcorner 0x9ed ++#define GDK_crossinglines 0x9ee ++#define GDK_horizlinescan1 0x9ef ++#define GDK_horizlinescan3 0x9f0 ++#define GDK_horizlinescan5 0x9f1 ++#define GDK_horizlinescan7 0x9f2 ++#define GDK_horizlinescan9 0x9f3 ++#define GDK_leftt 0x9f4 ++#define GDK_rightt 0x9f5 ++#define GDK_bott 0x9f6 ++#define GDK_topt 0x9f7 ++#define GDK_vertbar 0x9f8 ++#define GDK_emspace 0xaa1 ++#define GDK_enspace 0xaa2 ++#define GDK_em3space 0xaa3 ++#define GDK_em4space 0xaa4 ++#define GDK_digitspace 0xaa5 ++#define GDK_punctspace 0xaa6 ++#define GDK_thinspace 0xaa7 ++#define GDK_hairspace 0xaa8 ++#define GDK_emdash 0xaa9 ++#define GDK_endash 0xaaa ++#define GDK_signifblank 0xaac ++#define GDK_ellipsis 0xaae ++#define GDK_doubbaselinedot 0xaaf ++#define GDK_onethird 0xab0 ++#define GDK_twothirds 0xab1 ++#define GDK_onefifth 0xab2 ++#define GDK_twofifths 0xab3 ++#define GDK_threefifths 0xab4 ++#define GDK_fourfifths 0xab5 ++#define GDK_onesixth 0xab6 ++#define GDK_fivesixths 0xab7 ++#define GDK_careof 0xab8 ++#define GDK_figdash 0xabb ++#define GDK_leftanglebracket 0xabc ++#define GDK_decimalpoint 0xabd ++#define GDK_rightanglebracket 0xabe ++#define GDK_marker 0xabf ++#define GDK_oneeighth 0xac3 ++#define GDK_threeeighths 0xac4 ++#define GDK_fiveeighths 0xac5 ++#define GDK_seveneighths 0xac6 ++#define GDK_trademark 0xac9 ++#define GDK_signaturemark 0xaca ++#define GDK_trademarkincircle 0xacb ++#define GDK_leftopentriangle 0xacc ++#define GDK_rightopentriangle 0xacd ++#define GDK_emopencircle 0xace ++#define GDK_emopenrectangle 0xacf ++#define GDK_leftsinglequotemark 0xad0 ++#define GDK_rightsinglequotemark 0xad1 ++#define GDK_leftdoublequotemark 0xad2 ++#define GDK_rightdoublequotemark 0xad3 ++#define GDK_prescription 0xad4 ++#define GDK_minutes 0xad6 ++#define GDK_seconds 0xad7 ++#define GDK_latincross 0xad9 ++#define GDK_hexagram 0xada ++#define GDK_filledrectbullet 0xadb ++#define GDK_filledlefttribullet 0xadc ++#define GDK_filledrighttribullet 0xadd ++#define GDK_emfilledcircle 0xade ++#define GDK_emfilledrect 0xadf ++#define GDK_enopencircbullet 0xae0 ++#define GDK_enopensquarebullet 0xae1 ++#define GDK_openrectbullet 0xae2 ++#define GDK_opentribulletup 0xae3 ++#define GDK_opentribulletdown 0xae4 ++#define GDK_openstar 0xae5 ++#define GDK_enfilledcircbullet 0xae6 ++#define GDK_enfilledsqbullet 0xae7 ++#define GDK_filledtribulletup 0xae8 ++#define GDK_filledtribulletdown 0xae9 ++#define GDK_leftpointer 0xaea ++#define GDK_rightpointer 0xaeb ++#define GDK_club 0xaec ++#define GDK_diamond 0xaed ++#define GDK_heart 0xaee ++#define GDK_maltesecross 0xaf0 ++#define GDK_dagger 0xaf1 ++#define GDK_doubledagger 0xaf2 ++#define GDK_checkmark 0xaf3 ++#define GDK_ballotcross 0xaf4 ++#define GDK_musicalsharp 0xaf5 ++#define GDK_musicalflat 0xaf6 ++#define GDK_malesymbol 0xaf7 ++#define GDK_femalesymbol 0xaf8 ++#define GDK_telephone 0xaf9 ++#define GDK_telephonerecorder 0xafa ++#define GDK_phonographcopyright 0xafb ++#define GDK_caret 0xafc ++#define GDK_singlelowquotemark 0xafd ++#define GDK_doublelowquotemark 0xafe ++#define GDK_cursor 0xaff ++#define GDK_leftcaret 0xba3 ++#define GDK_rightcaret 0xba6 ++#define GDK_downcaret 0xba8 ++#define GDK_upcaret 0xba9 ++#define GDK_overbar 0xbc0 ++#define GDK_downtack 0xbc2 ++#define GDK_upshoe 0xbc3 ++#define GDK_downstile 0xbc4 ++#define GDK_underbar 0xbc6 ++#define GDK_jot 0xbca ++#define GDK_quad 0xbcc ++#define GDK_uptack 0xbce ++#define GDK_circle 0xbcf ++#define GDK_upstile 0xbd3 ++#define GDK_downshoe 0xbd6 ++#define GDK_rightshoe 0xbd8 ++#define GDK_leftshoe 0xbda ++#define GDK_lefttack 0xbdc ++#define GDK_righttack 0xbfc ++#define GDK_hebrew_doublelowline 0xcdf ++#define GDK_hebrew_aleph 0xce0 ++#define GDK_hebrew_bet 0xce1 ++#define GDK_hebrew_beth 0xce1 ++#define GDK_hebrew_gimel 0xce2 ++#define GDK_hebrew_gimmel 0xce2 ++#define GDK_hebrew_dalet 0xce3 ++#define GDK_hebrew_daleth 0xce3 ++#define GDK_hebrew_he 0xce4 ++#define GDK_hebrew_waw 0xce5 ++#define GDK_hebrew_zain 0xce6 ++#define GDK_hebrew_zayin 0xce6 ++#define GDK_hebrew_chet 0xce7 ++#define GDK_hebrew_het 0xce7 ++#define GDK_hebrew_tet 0xce8 ++#define GDK_hebrew_teth 0xce8 ++#define GDK_hebrew_yod 0xce9 ++#define GDK_hebrew_finalkaph 0xcea ++#define GDK_hebrew_kaph 0xceb ++#define GDK_hebrew_lamed 0xcec ++#define GDK_hebrew_finalmem 0xced ++#define GDK_hebrew_mem 0xcee ++#define GDK_hebrew_finalnun 0xcef ++#define GDK_hebrew_nun 0xcf0 ++#define GDK_hebrew_samech 0xcf1 ++#define GDK_hebrew_samekh 0xcf1 ++#define GDK_hebrew_ayin 0xcf2 ++#define GDK_hebrew_finalpe 0xcf3 ++#define GDK_hebrew_pe 0xcf4 ++#define GDK_hebrew_finalzade 0xcf5 ++#define GDK_hebrew_finalzadi 0xcf5 ++#define GDK_hebrew_zade 0xcf6 ++#define GDK_hebrew_zadi 0xcf6 ++#define GDK_hebrew_qoph 0xcf7 ++#define GDK_hebrew_kuf 0xcf7 ++#define GDK_hebrew_resh 0xcf8 ++#define GDK_hebrew_shin 0xcf9 ++#define GDK_hebrew_taw 0xcfa ++#define GDK_hebrew_taf 0xcfa ++#define GDK_Hebrew_switch 0xff7e ++#define GDK_Thai_kokai 0xda1 ++#define GDK_Thai_khokhai 0xda2 ++#define GDK_Thai_khokhuat 0xda3 ++#define GDK_Thai_khokhwai 0xda4 ++#define GDK_Thai_khokhon 0xda5 ++#define GDK_Thai_khorakhang 0xda6 ++#define GDK_Thai_ngongu 0xda7 ++#define GDK_Thai_chochan 0xda8 ++#define GDK_Thai_choching 0xda9 ++#define GDK_Thai_chochang 0xdaa ++#define GDK_Thai_soso 0xdab ++#define GDK_Thai_chochoe 0xdac ++#define GDK_Thai_yoying 0xdad ++#define GDK_Thai_dochada 0xdae ++#define GDK_Thai_topatak 0xdaf ++#define GDK_Thai_thothan 0xdb0 ++#define GDK_Thai_thonangmontho 0xdb1 ++#define GDK_Thai_thophuthao 0xdb2 ++#define GDK_Thai_nonen 0xdb3 ++#define GDK_Thai_dodek 0xdb4 ++#define GDK_Thai_totao 0xdb5 ++#define GDK_Thai_thothung 0xdb6 ++#define GDK_Thai_thothahan 0xdb7 ++#define GDK_Thai_thothong 0xdb8 ++#define GDK_Thai_nonu 0xdb9 ++#define GDK_Thai_bobaimai 0xdba ++#define GDK_Thai_popla 0xdbb ++#define GDK_Thai_phophung 0xdbc ++#define GDK_Thai_fofa 0xdbd ++#define GDK_Thai_phophan 0xdbe ++#define GDK_Thai_fofan 0xdbf ++#define GDK_Thai_phosamphao 0xdc0 ++#define GDK_Thai_moma 0xdc1 ++#define GDK_Thai_yoyak 0xdc2 ++#define GDK_Thai_rorua 0xdc3 ++#define GDK_Thai_ru 0xdc4 ++#define GDK_Thai_loling 0xdc5 ++#define GDK_Thai_lu 0xdc6 ++#define GDK_Thai_wowaen 0xdc7 ++#define GDK_Thai_sosala 0xdc8 ++#define GDK_Thai_sorusi 0xdc9 ++#define GDK_Thai_sosua 0xdca ++#define GDK_Thai_hohip 0xdcb ++#define GDK_Thai_lochula 0xdcc ++#define GDK_Thai_oang 0xdcd ++#define GDK_Thai_honokhuk 0xdce ++#define GDK_Thai_paiyannoi 0xdcf ++#define GDK_Thai_saraa 0xdd0 ++#define GDK_Thai_maihanakat 0xdd1 ++#define GDK_Thai_saraaa 0xdd2 ++#define GDK_Thai_saraam 0xdd3 ++#define GDK_Thai_sarai 0xdd4 ++#define GDK_Thai_saraii 0xdd5 ++#define GDK_Thai_saraue 0xdd6 ++#define GDK_Thai_sarauee 0xdd7 ++#define GDK_Thai_sarau 0xdd8 ++#define GDK_Thai_sarauu 0xdd9 ++#define GDK_Thai_phinthu 0xdda ++#define GDK_Thai_maihanakat_maitho 0xdde ++#define GDK_Thai_baht 0xddf ++#define GDK_Thai_sarae 0xde0 ++#define GDK_Thai_saraae 0xde1 ++#define GDK_Thai_sarao 0xde2 ++#define GDK_Thai_saraaimaimuan 0xde3 ++#define GDK_Thai_saraaimaimalai 0xde4 ++#define GDK_Thai_lakkhangyao 0xde5 ++#define GDK_Thai_maiyamok 0xde6 ++#define GDK_Thai_maitaikhu 0xde7 ++#define GDK_Thai_maiek 0xde8 ++#define GDK_Thai_maitho 0xde9 ++#define GDK_Thai_maitri 0xdea ++#define GDK_Thai_maichattawa 0xdeb ++#define GDK_Thai_thanthakhat 0xdec ++#define GDK_Thai_nikhahit 0xded ++#define GDK_Thai_leksun 0xdf0 ++#define GDK_Thai_leknung 0xdf1 ++#define GDK_Thai_leksong 0xdf2 ++#define GDK_Thai_leksam 0xdf3 ++#define GDK_Thai_leksi 0xdf4 ++#define GDK_Thai_lekha 0xdf5 ++#define GDK_Thai_lekhok 0xdf6 ++#define GDK_Thai_lekchet 0xdf7 ++#define GDK_Thai_lekpaet 0xdf8 ++#define GDK_Thai_lekkao 0xdf9 ++#define GDK_Hangul 0xff31 ++#define GDK_Hangul_Start 0xff32 ++#define GDK_Hangul_End 0xff33 ++#define GDK_Hangul_Hanja 0xff34 ++#define GDK_Hangul_Jamo 0xff35 ++#define GDK_Hangul_Romaja 0xff36 ++#define GDK_Hangul_Codeinput 0xff37 ++#define GDK_Hangul_Jeonja 0xff38 ++#define GDK_Hangul_Banja 0xff39 ++#define GDK_Hangul_PreHanja 0xff3a ++#define GDK_Hangul_PostHanja 0xff3b ++#define GDK_Hangul_SingleCandidate 0xff3c ++#define GDK_Hangul_MultipleCandidate 0xff3d ++#define GDK_Hangul_PreviousCandidate 0xff3e ++#define GDK_Hangul_Special 0xff3f ++#define GDK_Hangul_switch 0xff7e ++#define GDK_Hangul_Kiyeog 0xea1 ++#define GDK_Hangul_SsangKiyeog 0xea2 ++#define GDK_Hangul_KiyeogSios 0xea3 ++#define GDK_Hangul_Nieun 0xea4 ++#define GDK_Hangul_NieunJieuj 0xea5 ++#define GDK_Hangul_NieunHieuh 0xea6 ++#define GDK_Hangul_Dikeud 0xea7 ++#define GDK_Hangul_SsangDikeud 0xea8 ++#define GDK_Hangul_Rieul 0xea9 ++#define GDK_Hangul_RieulKiyeog 0xeaa ++#define GDK_Hangul_RieulMieum 0xeab ++#define GDK_Hangul_RieulPieub 0xeac ++#define GDK_Hangul_RieulSios 0xead ++#define GDK_Hangul_RieulTieut 0xeae ++#define GDK_Hangul_RieulPhieuf 0xeaf ++#define GDK_Hangul_RieulHieuh 0xeb0 ++#define GDK_Hangul_Mieum 0xeb1 ++#define GDK_Hangul_Pieub 0xeb2 ++#define GDK_Hangul_SsangPieub 0xeb3 ++#define GDK_Hangul_PieubSios 0xeb4 ++#define GDK_Hangul_Sios 0xeb5 ++#define GDK_Hangul_SsangSios 0xeb6 ++#define GDK_Hangul_Ieung 0xeb7 ++#define GDK_Hangul_Jieuj 0xeb8 ++#define GDK_Hangul_SsangJieuj 0xeb9 ++#define GDK_Hangul_Cieuc 0xeba ++#define GDK_Hangul_Khieuq 0xebb ++#define GDK_Hangul_Tieut 0xebc ++#define GDK_Hangul_Phieuf 0xebd ++#define GDK_Hangul_Hieuh 0xebe ++#define GDK_Hangul_A 0xebf ++#define GDK_Hangul_AE 0xec0 ++#define GDK_Hangul_YA 0xec1 ++#define GDK_Hangul_YAE 0xec2 ++#define GDK_Hangul_EO 0xec3 ++#define GDK_Hangul_E 0xec4 ++#define GDK_Hangul_YEO 0xec5 ++#define GDK_Hangul_YE 0xec6 ++#define GDK_Hangul_O 0xec7 ++#define GDK_Hangul_WA 0xec8 ++#define GDK_Hangul_WAE 0xec9 ++#define GDK_Hangul_OE 0xeca ++#define GDK_Hangul_YO 0xecb ++#define GDK_Hangul_U 0xecc ++#define GDK_Hangul_WEO 0xecd ++#define GDK_Hangul_WE 0xece ++#define GDK_Hangul_WI 0xecf ++#define GDK_Hangul_YU 0xed0 ++#define GDK_Hangul_EU 0xed1 ++#define GDK_Hangul_YI 0xed2 ++#define GDK_Hangul_I 0xed3 ++#define GDK_Hangul_J_Kiyeog 0xed4 ++#define GDK_Hangul_J_SsangKiyeog 0xed5 ++#define GDK_Hangul_J_KiyeogSios 0xed6 ++#define GDK_Hangul_J_Nieun 0xed7 ++#define GDK_Hangul_J_NieunJieuj 0xed8 ++#define GDK_Hangul_J_NieunHieuh 0xed9 ++#define GDK_Hangul_J_Dikeud 0xeda ++#define GDK_Hangul_J_Rieul 0xedb ++#define GDK_Hangul_J_RieulKiyeog 0xedc ++#define GDK_Hangul_J_RieulMieum 0xedd ++#define GDK_Hangul_J_RieulPieub 0xede ++#define GDK_Hangul_J_RieulSios 0xedf ++#define GDK_Hangul_J_RieulTieut 0xee0 ++#define GDK_Hangul_J_RieulPhieuf 0xee1 ++#define GDK_Hangul_J_RieulHieuh 0xee2 ++#define GDK_Hangul_J_Mieum 0xee3 ++#define GDK_Hangul_J_Pieub 0xee4 ++#define GDK_Hangul_J_PieubSios 0xee5 ++#define GDK_Hangul_J_Sios 0xee6 ++#define GDK_Hangul_J_SsangSios 0xee7 ++#define GDK_Hangul_J_Ieung 0xee8 ++#define GDK_Hangul_J_Jieuj 0xee9 ++#define GDK_Hangul_J_Cieuc 0xeea ++#define GDK_Hangul_J_Khieuq 0xeeb ++#define GDK_Hangul_J_Tieut 0xeec ++#define GDK_Hangul_J_Phieuf 0xeed ++#define GDK_Hangul_J_Hieuh 0xeee ++#define GDK_Hangul_RieulYeorinHieuh 0xeef ++#define GDK_Hangul_SunkyeongeumMieum 0xef0 ++#define GDK_Hangul_SunkyeongeumPieub 0xef1 ++#define GDK_Hangul_PanSios 0xef2 ++#define GDK_Hangul_KkogjiDalrinIeung 0xef3 ++#define GDK_Hangul_SunkyeongeumPhieuf 0xef4 ++#define GDK_Hangul_YeorinHieuh 0xef5 ++#define GDK_Hangul_AraeA 0xef6 ++#define GDK_Hangul_AraeAE 0xef7 ++#define GDK_Hangul_J_PanSios 0xef8 ++#define GDK_Hangul_J_KkogjiDalrinIeung 0xef9 ++#define GDK_Hangul_J_YeorinHieuh 0xefa ++#define GDK_Korean_Won 0xeff ++#define GDK_Armenian_ligature_ew 0x1000587 ++#define GDK_Armenian_full_stop 0x1000589 ++#define GDK_Armenian_verjaket 0x1000589 ++#define GDK_Armenian_separation_mark 0x100055d ++#define GDK_Armenian_but 0x100055d ++#define GDK_Armenian_hyphen 0x100058a ++#define GDK_Armenian_yentamna 0x100058a ++#define GDK_Armenian_exclam 0x100055c ++#define GDK_Armenian_amanak 0x100055c ++#define GDK_Armenian_accent 0x100055b ++#define GDK_Armenian_shesht 0x100055b ++#define GDK_Armenian_question 0x100055e ++#define GDK_Armenian_paruyk 0x100055e ++#define GDK_Armenian_AYB 0x1000531 ++#define GDK_Armenian_ayb 0x1000561 ++#define GDK_Armenian_BEN 0x1000532 ++#define GDK_Armenian_ben 0x1000562 ++#define GDK_Armenian_GIM 0x1000533 ++#define GDK_Armenian_gim 0x1000563 ++#define GDK_Armenian_DA 0x1000534 ++#define GDK_Armenian_da 0x1000564 ++#define GDK_Armenian_YECH 0x1000535 ++#define GDK_Armenian_yech 0x1000565 ++#define GDK_Armenian_ZA 0x1000536 ++#define GDK_Armenian_za 0x1000566 ++#define GDK_Armenian_E 0x1000537 ++#define GDK_Armenian_e 0x1000567 ++#define GDK_Armenian_AT 0x1000538 ++#define GDK_Armenian_at 0x1000568 ++#define GDK_Armenian_TO 0x1000539 ++#define GDK_Armenian_to 0x1000569 ++#define GDK_Armenian_ZHE 0x100053a ++#define GDK_Armenian_zhe 0x100056a ++#define GDK_Armenian_INI 0x100053b ++#define GDK_Armenian_ini 0x100056b ++#define GDK_Armenian_LYUN 0x100053c ++#define GDK_Armenian_lyun 0x100056c ++#define GDK_Armenian_KHE 0x100053d ++#define GDK_Armenian_khe 0x100056d ++#define GDK_Armenian_TSA 0x100053e ++#define GDK_Armenian_tsa 0x100056e ++#define GDK_Armenian_KEN 0x100053f ++#define GDK_Armenian_ken 0x100056f ++#define GDK_Armenian_HO 0x1000540 ++#define GDK_Armenian_ho 0x1000570 ++#define GDK_Armenian_DZA 0x1000541 ++#define GDK_Armenian_dza 0x1000571 ++#define GDK_Armenian_GHAT 0x1000542 ++#define GDK_Armenian_ghat 0x1000572 ++#define GDK_Armenian_TCHE 0x1000543 ++#define GDK_Armenian_tche 0x1000573 ++#define GDK_Armenian_MEN 0x1000544 ++#define GDK_Armenian_men 0x1000574 ++#define GDK_Armenian_HI 0x1000545 ++#define GDK_Armenian_hi 0x1000575 ++#define GDK_Armenian_NU 0x1000546 ++#define GDK_Armenian_nu 0x1000576 ++#define GDK_Armenian_SHA 0x1000547 ++#define GDK_Armenian_sha 0x1000577 ++#define GDK_Armenian_VO 0x1000548 ++#define GDK_Armenian_vo 0x1000578 ++#define GDK_Armenian_CHA 0x1000549 ++#define GDK_Armenian_cha 0x1000579 ++#define GDK_Armenian_PE 0x100054a ++#define GDK_Armenian_pe 0x100057a ++#define GDK_Armenian_JE 0x100054b ++#define GDK_Armenian_je 0x100057b ++#define GDK_Armenian_RA 0x100054c ++#define GDK_Armenian_ra 0x100057c ++#define GDK_Armenian_SE 0x100054d ++#define GDK_Armenian_se 0x100057d ++#define GDK_Armenian_VEV 0x100054e ++#define GDK_Armenian_vev 0x100057e ++#define GDK_Armenian_TYUN 0x100054f ++#define GDK_Armenian_tyun 0x100057f ++#define GDK_Armenian_RE 0x1000550 ++#define GDK_Armenian_re 0x1000580 ++#define GDK_Armenian_TSO 0x1000551 ++#define GDK_Armenian_tso 0x1000581 ++#define GDK_Armenian_VYUN 0x1000552 ++#define GDK_Armenian_vyun 0x1000582 ++#define GDK_Armenian_PYUR 0x1000553 ++#define GDK_Armenian_pyur 0x1000583 ++#define GDK_Armenian_KE 0x1000554 ++#define GDK_Armenian_ke 0x1000584 ++#define GDK_Armenian_O 0x1000555 ++#define GDK_Armenian_o 0x1000585 ++#define GDK_Armenian_FE 0x1000556 ++#define GDK_Armenian_fe 0x1000586 ++#define GDK_Armenian_apostrophe 0x100055a ++#define GDK_Georgian_an 0x10010d0 ++#define GDK_Georgian_ban 0x10010d1 ++#define GDK_Georgian_gan 0x10010d2 ++#define GDK_Georgian_don 0x10010d3 ++#define GDK_Georgian_en 0x10010d4 ++#define GDK_Georgian_vin 0x10010d5 ++#define GDK_Georgian_zen 0x10010d6 ++#define GDK_Georgian_tan 0x10010d7 ++#define GDK_Georgian_in 0x10010d8 ++#define GDK_Georgian_kan 0x10010d9 ++#define GDK_Georgian_las 0x10010da ++#define GDK_Georgian_man 0x10010db ++#define GDK_Georgian_nar 0x10010dc ++#define GDK_Georgian_on 0x10010dd ++#define GDK_Georgian_par 0x10010de ++#define GDK_Georgian_zhar 0x10010df ++#define GDK_Georgian_rae 0x10010e0 ++#define GDK_Georgian_san 0x10010e1 ++#define GDK_Georgian_tar 0x10010e2 ++#define GDK_Georgian_un 0x10010e3 ++#define GDK_Georgian_phar 0x10010e4 ++#define GDK_Georgian_khar 0x10010e5 ++#define GDK_Georgian_ghan 0x10010e6 ++#define GDK_Georgian_qar 0x10010e7 ++#define GDK_Georgian_shin 0x10010e8 ++#define GDK_Georgian_chin 0x10010e9 ++#define GDK_Georgian_can 0x10010ea ++#define GDK_Georgian_jil 0x10010eb ++#define GDK_Georgian_cil 0x10010ec ++#define GDK_Georgian_char 0x10010ed ++#define GDK_Georgian_xan 0x10010ee ++#define GDK_Georgian_jhan 0x10010ef ++#define GDK_Georgian_hae 0x10010f0 ++#define GDK_Georgian_he 0x10010f1 ++#define GDK_Georgian_hie 0x10010f2 ++#define GDK_Georgian_we 0x10010f3 ++#define GDK_Georgian_har 0x10010f4 ++#define GDK_Georgian_hoe 0x10010f5 ++#define GDK_Georgian_fi 0x10010f6 ++#define GDK_Xabovedot 0x1001e8a ++#define GDK_Ibreve 0x100012c ++#define GDK_Zstroke 0x10001b5 ++#define GDK_Gcaron 0x10001e6 ++#define GDK_Ocaron 0x10001d1 ++#define GDK_Obarred 0x100019f ++#define GDK_xabovedot 0x1001e8b ++#define GDK_ibreve 0x100012d ++#define GDK_zstroke 0x10001b6 ++#define GDK_gcaron 0x10001e7 ++#define GDK_ocaron 0x10001d2 ++#define GDK_obarred 0x1000275 ++#define GDK_SCHWA 0x100018f ++#define GDK_schwa 0x1000259 ++#define GDK_Lbelowdot 0x1001e36 ++#define GDK_lbelowdot 0x1001e37 ++#define GDK_Abelowdot 0x1001ea0 ++#define GDK_abelowdot 0x1001ea1 ++#define GDK_Ahook 0x1001ea2 ++#define GDK_ahook 0x1001ea3 ++#define GDK_Acircumflexacute 0x1001ea4 ++#define GDK_acircumflexacute 0x1001ea5 ++#define GDK_Acircumflexgrave 0x1001ea6 ++#define GDK_acircumflexgrave 0x1001ea7 ++#define GDK_Acircumflexhook 0x1001ea8 ++#define GDK_acircumflexhook 0x1001ea9 ++#define GDK_Acircumflextilde 0x1001eaa ++#define GDK_acircumflextilde 0x1001eab ++#define GDK_Acircumflexbelowdot 0x1001eac ++#define GDK_acircumflexbelowdot 0x1001ead ++#define GDK_Abreveacute 0x1001eae ++#define GDK_abreveacute 0x1001eaf ++#define GDK_Abrevegrave 0x1001eb0 ++#define GDK_abrevegrave 0x1001eb1 ++#define GDK_Abrevehook 0x1001eb2 ++#define GDK_abrevehook 0x1001eb3 ++#define GDK_Abrevetilde 0x1001eb4 ++#define GDK_abrevetilde 0x1001eb5 ++#define GDK_Abrevebelowdot 0x1001eb6 ++#define GDK_abrevebelowdot 0x1001eb7 ++#define GDK_Ebelowdot 0x1001eb8 ++#define GDK_ebelowdot 0x1001eb9 ++#define GDK_Ehook 0x1001eba ++#define GDK_ehook 0x1001ebb ++#define GDK_Etilde 0x1001ebc ++#define GDK_etilde 0x1001ebd ++#define GDK_Ecircumflexacute 0x1001ebe ++#define GDK_ecircumflexacute 0x1001ebf ++#define GDK_Ecircumflexgrave 0x1001ec0 ++#define GDK_ecircumflexgrave 0x1001ec1 ++#define GDK_Ecircumflexhook 0x1001ec2 ++#define GDK_ecircumflexhook 0x1001ec3 ++#define GDK_Ecircumflextilde 0x1001ec4 ++#define GDK_ecircumflextilde 0x1001ec5 ++#define GDK_Ecircumflexbelowdot 0x1001ec6 ++#define GDK_ecircumflexbelowdot 0x1001ec7 ++#define GDK_Ihook 0x1001ec8 ++#define GDK_ihook 0x1001ec9 ++#define GDK_Ibelowdot 0x1001eca ++#define GDK_ibelowdot 0x1001ecb ++#define GDK_Obelowdot 0x1001ecc ++#define GDK_obelowdot 0x1001ecd ++#define GDK_Ohook 0x1001ece ++#define GDK_ohook 0x1001ecf ++#define GDK_Ocircumflexacute 0x1001ed0 ++#define GDK_ocircumflexacute 0x1001ed1 ++#define GDK_Ocircumflexgrave 0x1001ed2 ++#define GDK_ocircumflexgrave 0x1001ed3 ++#define GDK_Ocircumflexhook 0x1001ed4 ++#define GDK_ocircumflexhook 0x1001ed5 ++#define GDK_Ocircumflextilde 0x1001ed6 ++#define GDK_ocircumflextilde 0x1001ed7 ++#define GDK_Ocircumflexbelowdot 0x1001ed8 ++#define GDK_ocircumflexbelowdot 0x1001ed9 ++#define GDK_Ohornacute 0x1001eda ++#define GDK_ohornacute 0x1001edb ++#define GDK_Ohorngrave 0x1001edc ++#define GDK_ohorngrave 0x1001edd ++#define GDK_Ohornhook 0x1001ede ++#define GDK_ohornhook 0x1001edf ++#define GDK_Ohorntilde 0x1001ee0 ++#define GDK_ohorntilde 0x1001ee1 ++#define GDK_Ohornbelowdot 0x1001ee2 ++#define GDK_ohornbelowdot 0x1001ee3 ++#define GDK_Ubelowdot 0x1001ee4 ++#define GDK_ubelowdot 0x1001ee5 ++#define GDK_Uhook 0x1001ee6 ++#define GDK_uhook 0x1001ee7 ++#define GDK_Uhornacute 0x1001ee8 ++#define GDK_uhornacute 0x1001ee9 ++#define GDK_Uhorngrave 0x1001eea ++#define GDK_uhorngrave 0x1001eeb ++#define GDK_Uhornhook 0x1001eec ++#define GDK_uhornhook 0x1001eed ++#define GDK_Uhorntilde 0x1001eee ++#define GDK_uhorntilde 0x1001eef ++#define GDK_Uhornbelowdot 0x1001ef0 ++#define GDK_uhornbelowdot 0x1001ef1 ++#define GDK_Ybelowdot 0x1001ef4 ++#define GDK_ybelowdot 0x1001ef5 ++#define GDK_Yhook 0x1001ef6 ++#define GDK_yhook 0x1001ef7 ++#define GDK_Ytilde 0x1001ef8 ++#define GDK_ytilde 0x1001ef9 ++#define GDK_Ohorn 0x10001a0 ++#define GDK_ohorn 0x10001a1 ++#define GDK_Uhorn 0x10001af ++#define GDK_uhorn 0x10001b0 ++#define GDK_EcuSign 0x10020a0 ++#define GDK_ColonSign 0x10020a1 ++#define GDK_CruzeiroSign 0x10020a2 ++#define GDK_FFrancSign 0x10020a3 ++#define GDK_LiraSign 0x10020a4 ++#define GDK_MillSign 0x10020a5 ++#define GDK_NairaSign 0x10020a6 ++#define GDK_PesetaSign 0x10020a7 ++#define GDK_RupeeSign 0x10020a8 ++#define GDK_WonSign 0x10020a9 ++#define GDK_NewSheqelSign 0x10020aa ++#define GDK_DongSign 0x10020ab ++#define GDK_EuroSign 0x20ac ++#define GDK_zerosuperior 0x1002070 ++#define GDK_foursuperior 0x1002074 ++#define GDK_fivesuperior 0x1002075 ++#define GDK_sixsuperior 0x1002076 ++#define GDK_sevensuperior 0x1002077 ++#define GDK_eightsuperior 0x1002078 ++#define GDK_ninesuperior 0x1002079 ++#define GDK_zerosubscript 0x1002080 ++#define GDK_onesubscript 0x1002081 ++#define GDK_twosubscript 0x1002082 ++#define GDK_threesubscript 0x1002083 ++#define GDK_foursubscript 0x1002084 ++#define GDK_fivesubscript 0x1002085 ++#define GDK_sixsubscript 0x1002086 ++#define GDK_sevensubscript 0x1002087 ++#define GDK_eightsubscript 0x1002088 ++#define GDK_ninesubscript 0x1002089 ++#define GDK_partdifferential 0x1002202 ++#define GDK_emptyset 0x1002205 ++#define GDK_elementof 0x1002208 ++#define GDK_notelementof 0x1002209 ++#define GDK_containsas 0x100220b ++#define GDK_squareroot 0x100221a ++#define GDK_cuberoot 0x100221b ++#define GDK_fourthroot 0x100221c ++#define GDK_dintegral 0x100222c ++#define GDK_tintegral 0x100222d ++#define GDK_because 0x1002235 ++#define GDK_approxeq 0x1002248 ++#define GDK_notapproxeq 0x1002247 ++#define GDK_notidentical 0x1002262 ++#define GDK_stricteq 0x1002263 ++#define GDK_braille_dot_1 0xfff1 ++#define GDK_braille_dot_2 0xfff2 ++#define GDK_braille_dot_3 0xfff3 ++#define GDK_braille_dot_4 0xfff4 ++#define GDK_braille_dot_5 0xfff5 ++#define GDK_braille_dot_6 0xfff6 ++#define GDK_braille_dot_7 0xfff7 ++#define GDK_braille_dot_8 0xfff8 ++#define GDK_braille_dot_9 0xfff9 ++#define GDK_braille_dot_10 0xfffa ++#define GDK_braille_blank 0x1002800 ++#define GDK_braille_dots_1 0x1002801 ++#define GDK_braille_dots_2 0x1002802 ++#define GDK_braille_dots_12 0x1002803 ++#define GDK_braille_dots_3 0x1002804 ++#define GDK_braille_dots_13 0x1002805 ++#define GDK_braille_dots_23 0x1002806 ++#define GDK_braille_dots_123 0x1002807 ++#define GDK_braille_dots_4 0x1002808 ++#define GDK_braille_dots_14 0x1002809 ++#define GDK_braille_dots_24 0x100280a ++#define GDK_braille_dots_124 0x100280b ++#define GDK_braille_dots_34 0x100280c ++#define GDK_braille_dots_134 0x100280d ++#define GDK_braille_dots_234 0x100280e ++#define GDK_braille_dots_1234 0x100280f ++#define GDK_braille_dots_5 0x1002810 ++#define GDK_braille_dots_15 0x1002811 ++#define GDK_braille_dots_25 0x1002812 ++#define GDK_braille_dots_125 0x1002813 ++#define GDK_braille_dots_35 0x1002814 ++#define GDK_braille_dots_135 0x1002815 ++#define GDK_braille_dots_235 0x1002816 ++#define GDK_braille_dots_1235 0x1002817 ++#define GDK_braille_dots_45 0x1002818 ++#define GDK_braille_dots_145 0x1002819 ++#define GDK_braille_dots_245 0x100281a ++#define GDK_braille_dots_1245 0x100281b ++#define GDK_braille_dots_345 0x100281c ++#define GDK_braille_dots_1345 0x100281d ++#define GDK_braille_dots_2345 0x100281e ++#define GDK_braille_dots_12345 0x100281f ++#define GDK_braille_dots_6 0x1002820 ++#define GDK_braille_dots_16 0x1002821 ++#define GDK_braille_dots_26 0x1002822 ++#define GDK_braille_dots_126 0x1002823 ++#define GDK_braille_dots_36 0x1002824 ++#define GDK_braille_dots_136 0x1002825 ++#define GDK_braille_dots_236 0x1002826 ++#define GDK_braille_dots_1236 0x1002827 ++#define GDK_braille_dots_46 0x1002828 ++#define GDK_braille_dots_146 0x1002829 ++#define GDK_braille_dots_246 0x100282a ++#define GDK_braille_dots_1246 0x100282b ++#define GDK_braille_dots_346 0x100282c ++#define GDK_braille_dots_1346 0x100282d ++#define GDK_braille_dots_2346 0x100282e ++#define GDK_braille_dots_12346 0x100282f ++#define GDK_braille_dots_56 0x1002830 ++#define GDK_braille_dots_156 0x1002831 ++#define GDK_braille_dots_256 0x1002832 ++#define GDK_braille_dots_1256 0x1002833 ++#define GDK_braille_dots_356 0x1002834 ++#define GDK_braille_dots_1356 0x1002835 ++#define GDK_braille_dots_2356 0x1002836 ++#define GDK_braille_dots_12356 0x1002837 ++#define GDK_braille_dots_456 0x1002838 ++#define GDK_braille_dots_1456 0x1002839 ++#define GDK_braille_dots_2456 0x100283a ++#define GDK_braille_dots_12456 0x100283b ++#define GDK_braille_dots_3456 0x100283c ++#define GDK_braille_dots_13456 0x100283d ++#define GDK_braille_dots_23456 0x100283e ++#define GDK_braille_dots_123456 0x100283f ++#define GDK_braille_dots_7 0x1002840 ++#define GDK_braille_dots_17 0x1002841 ++#define GDK_braille_dots_27 0x1002842 ++#define GDK_braille_dots_127 0x1002843 ++#define GDK_braille_dots_37 0x1002844 ++#define GDK_braille_dots_137 0x1002845 ++#define GDK_braille_dots_237 0x1002846 ++#define GDK_braille_dots_1237 0x1002847 ++#define GDK_braille_dots_47 0x1002848 ++#define GDK_braille_dots_147 0x1002849 ++#define GDK_braille_dots_247 0x100284a ++#define GDK_braille_dots_1247 0x100284b ++#define GDK_braille_dots_347 0x100284c ++#define GDK_braille_dots_1347 0x100284d ++#define GDK_braille_dots_2347 0x100284e ++#define GDK_braille_dots_12347 0x100284f ++#define GDK_braille_dots_57 0x1002850 ++#define GDK_braille_dots_157 0x1002851 ++#define GDK_braille_dots_257 0x1002852 ++#define GDK_braille_dots_1257 0x1002853 ++#define GDK_braille_dots_357 0x1002854 ++#define GDK_braille_dots_1357 0x1002855 ++#define GDK_braille_dots_2357 0x1002856 ++#define GDK_braille_dots_12357 0x1002857 ++#define GDK_braille_dots_457 0x1002858 ++#define GDK_braille_dots_1457 0x1002859 ++#define GDK_braille_dots_2457 0x100285a ++#define GDK_braille_dots_12457 0x100285b ++#define GDK_braille_dots_3457 0x100285c ++#define GDK_braille_dots_13457 0x100285d ++#define GDK_braille_dots_23457 0x100285e ++#define GDK_braille_dots_123457 0x100285f ++#define GDK_braille_dots_67 0x1002860 ++#define GDK_braille_dots_167 0x1002861 ++#define GDK_braille_dots_267 0x1002862 ++#define GDK_braille_dots_1267 0x1002863 ++#define GDK_braille_dots_367 0x1002864 ++#define GDK_braille_dots_1367 0x1002865 ++#define GDK_braille_dots_2367 0x1002866 ++#define GDK_braille_dots_12367 0x1002867 ++#define GDK_braille_dots_467 0x1002868 ++#define GDK_braille_dots_1467 0x1002869 ++#define GDK_braille_dots_2467 0x100286a ++#define GDK_braille_dots_12467 0x100286b ++#define GDK_braille_dots_3467 0x100286c ++#define GDK_braille_dots_13467 0x100286d ++#define GDK_braille_dots_23467 0x100286e ++#define GDK_braille_dots_123467 0x100286f ++#define GDK_braille_dots_567 0x1002870 ++#define GDK_braille_dots_1567 0x1002871 ++#define GDK_braille_dots_2567 0x1002872 ++#define GDK_braille_dots_12567 0x1002873 ++#define GDK_braille_dots_3567 0x1002874 ++#define GDK_braille_dots_13567 0x1002875 ++#define GDK_braille_dots_23567 0x1002876 ++#define GDK_braille_dots_123567 0x1002877 ++#define GDK_braille_dots_4567 0x1002878 ++#define GDK_braille_dots_14567 0x1002879 ++#define GDK_braille_dots_24567 0x100287a ++#define GDK_braille_dots_124567 0x100287b ++#define GDK_braille_dots_34567 0x100287c ++#define GDK_braille_dots_134567 0x100287d ++#define GDK_braille_dots_234567 0x100287e ++#define GDK_braille_dots_1234567 0x100287f ++#define GDK_braille_dots_8 0x1002880 ++#define GDK_braille_dots_18 0x1002881 ++#define GDK_braille_dots_28 0x1002882 ++#define GDK_braille_dots_128 0x1002883 ++#define GDK_braille_dots_38 0x1002884 ++#define GDK_braille_dots_138 0x1002885 ++#define GDK_braille_dots_238 0x1002886 ++#define GDK_braille_dots_1238 0x1002887 ++#define GDK_braille_dots_48 0x1002888 ++#define GDK_braille_dots_148 0x1002889 ++#define GDK_braille_dots_248 0x100288a ++#define GDK_braille_dots_1248 0x100288b ++#define GDK_braille_dots_348 0x100288c ++#define GDK_braille_dots_1348 0x100288d ++#define GDK_braille_dots_2348 0x100288e ++#define GDK_braille_dots_12348 0x100288f ++#define GDK_braille_dots_58 0x1002890 ++#define GDK_braille_dots_158 0x1002891 ++#define GDK_braille_dots_258 0x1002892 ++#define GDK_braille_dots_1258 0x1002893 ++#define GDK_braille_dots_358 0x1002894 ++#define GDK_braille_dots_1358 0x1002895 ++#define GDK_braille_dots_2358 0x1002896 ++#define GDK_braille_dots_12358 0x1002897 ++#define GDK_braille_dots_458 0x1002898 ++#define GDK_braille_dots_1458 0x1002899 ++#define GDK_braille_dots_2458 0x100289a ++#define GDK_braille_dots_12458 0x100289b ++#define GDK_braille_dots_3458 0x100289c ++#define GDK_braille_dots_13458 0x100289d ++#define GDK_braille_dots_23458 0x100289e ++#define GDK_braille_dots_123458 0x100289f ++#define GDK_braille_dots_68 0x10028a0 ++#define GDK_braille_dots_168 0x10028a1 ++#define GDK_braille_dots_268 0x10028a2 ++#define GDK_braille_dots_1268 0x10028a3 ++#define GDK_braille_dots_368 0x10028a4 ++#define GDK_braille_dots_1368 0x10028a5 ++#define GDK_braille_dots_2368 0x10028a6 ++#define GDK_braille_dots_12368 0x10028a7 ++#define GDK_braille_dots_468 0x10028a8 ++#define GDK_braille_dots_1468 0x10028a9 ++#define GDK_braille_dots_2468 0x10028aa ++#define GDK_braille_dots_12468 0x10028ab ++#define GDK_braille_dots_3468 0x10028ac ++#define GDK_braille_dots_13468 0x10028ad ++#define GDK_braille_dots_23468 0x10028ae ++#define GDK_braille_dots_123468 0x10028af ++#define GDK_braille_dots_568 0x10028b0 ++#define GDK_braille_dots_1568 0x10028b1 ++#define GDK_braille_dots_2568 0x10028b2 ++#define GDK_braille_dots_12568 0x10028b3 ++#define GDK_braille_dots_3568 0x10028b4 ++#define GDK_braille_dots_13568 0x10028b5 ++#define GDK_braille_dots_23568 0x10028b6 ++#define GDK_braille_dots_123568 0x10028b7 ++#define GDK_braille_dots_4568 0x10028b8 ++#define GDK_braille_dots_14568 0x10028b9 ++#define GDK_braille_dots_24568 0x10028ba ++#define GDK_braille_dots_124568 0x10028bb ++#define GDK_braille_dots_34568 0x10028bc ++#define GDK_braille_dots_134568 0x10028bd ++#define GDK_braille_dots_234568 0x10028be ++#define GDK_braille_dots_1234568 0x10028bf ++#define GDK_braille_dots_78 0x10028c0 ++#define GDK_braille_dots_178 0x10028c1 ++#define GDK_braille_dots_278 0x10028c2 ++#define GDK_braille_dots_1278 0x10028c3 ++#define GDK_braille_dots_378 0x10028c4 ++#define GDK_braille_dots_1378 0x10028c5 ++#define GDK_braille_dots_2378 0x10028c6 ++#define GDK_braille_dots_12378 0x10028c7 ++#define GDK_braille_dots_478 0x10028c8 ++#define GDK_braille_dots_1478 0x10028c9 ++#define GDK_braille_dots_2478 0x10028ca ++#define GDK_braille_dots_12478 0x10028cb ++#define GDK_braille_dots_3478 0x10028cc ++#define GDK_braille_dots_13478 0x10028cd ++#define GDK_braille_dots_23478 0x10028ce ++#define GDK_braille_dots_123478 0x10028cf ++#define GDK_braille_dots_578 0x10028d0 ++#define GDK_braille_dots_1578 0x10028d1 ++#define GDK_braille_dots_2578 0x10028d2 ++#define GDK_braille_dots_12578 0x10028d3 ++#define GDK_braille_dots_3578 0x10028d4 ++#define GDK_braille_dots_13578 0x10028d5 ++#define GDK_braille_dots_23578 0x10028d6 ++#define GDK_braille_dots_123578 0x10028d7 ++#define GDK_braille_dots_4578 0x10028d8 ++#define GDK_braille_dots_14578 0x10028d9 ++#define GDK_braille_dots_24578 0x10028da ++#define GDK_braille_dots_124578 0x10028db ++#define GDK_braille_dots_34578 0x10028dc ++#define GDK_braille_dots_134578 0x10028dd ++#define GDK_braille_dots_234578 0x10028de ++#define GDK_braille_dots_1234578 0x10028df ++#define GDK_braille_dots_678 0x10028e0 ++#define GDK_braille_dots_1678 0x10028e1 ++#define GDK_braille_dots_2678 0x10028e2 ++#define GDK_braille_dots_12678 0x10028e3 ++#define GDK_braille_dots_3678 0x10028e4 ++#define GDK_braille_dots_13678 0x10028e5 ++#define GDK_braille_dots_23678 0x10028e6 ++#define GDK_braille_dots_123678 0x10028e7 ++#define GDK_braille_dots_4678 0x10028e8 ++#define GDK_braille_dots_14678 0x10028e9 ++#define GDK_braille_dots_24678 0x10028ea ++#define GDK_braille_dots_124678 0x10028eb ++#define GDK_braille_dots_34678 0x10028ec ++#define GDK_braille_dots_134678 0x10028ed ++#define GDK_braille_dots_234678 0x10028ee ++#define GDK_braille_dots_1234678 0x10028ef ++#define GDK_braille_dots_5678 0x10028f0 ++#define GDK_braille_dots_15678 0x10028f1 ++#define GDK_braille_dots_25678 0x10028f2 ++#define GDK_braille_dots_125678 0x10028f3 ++#define GDK_braille_dots_35678 0x10028f4 ++#define GDK_braille_dots_135678 0x10028f5 ++#define GDK_braille_dots_235678 0x10028f6 ++#define GDK_braille_dots_1235678 0x10028f7 ++#define GDK_braille_dots_45678 0x10028f8 ++#define GDK_braille_dots_145678 0x10028f9 ++#define GDK_braille_dots_245678 0x10028fa ++#define GDK_braille_dots_1245678 0x10028fb ++#define GDK_braille_dots_345678 0x10028fc ++#define GDK_braille_dots_1345678 0x10028fd ++#define GDK_braille_dots_2345678 0x10028fe ++#define GDK_braille_dots_12345678 0x10028ff ++#define GDK_ModeLock 0x1008ff01 ++#define GDK_MonBrightnessUp 0x1008ff02 ++#define GDK_MonBrightnessDown 0x1008ff03 ++#define GDK_KbdLightOnOff 0x1008ff04 ++#define GDK_KbdBrightnessUp 0x1008ff05 ++#define GDK_KbdBrightnessDown 0x1008ff06 ++#define GDK_Standby 0x1008ff10 ++#define GDK_AudioLowerVolume 0x1008ff11 ++#define GDK_AudioMute 0x1008ff12 ++#define GDK_AudioRaiseVolume 0x1008ff13 ++#define GDK_AudioPlay 0x1008ff14 ++#define GDK_AudioStop 0x1008ff15 ++#define GDK_AudioPrev 0x1008ff16 ++#define GDK_AudioNext 0x1008ff17 ++#define GDK_HomePage 0x1008ff18 ++#define GDK_Mail 0x1008ff19 ++#define GDK_Start 0x1008ff1a ++#define GDK_Search 0x1008ff1b ++#define GDK_AudioRecord 0x1008ff1c ++#define GDK_Calculator 0x1008ff1d ++#define GDK_Memo 0x1008ff1e ++#define GDK_ToDoList 0x1008ff1f ++#define GDK_Calendar 0x1008ff20 ++#define GDK_PowerDown 0x1008ff21 ++#define GDK_ContrastAdjust 0x1008ff22 ++#define GDK_RockerUp 0x1008ff23 ++#define GDK_RockerDown 0x1008ff24 ++#define GDK_RockerEnter 0x1008ff25 ++#define GDK_Back 0x1008ff26 ++#define GDK_Forward 0x1008ff27 ++#define GDK_Stop 0x1008ff28 ++#define GDK_Refresh 0x1008ff29 ++#define GDK_PowerOff 0x1008ff2a ++#define GDK_WakeUp 0x1008ff2b ++#define GDK_Eject 0x1008ff2c ++#define GDK_ScreenSaver 0x1008ff2d ++#define GDK_WWW 0x1008ff2e ++#define GDK_Sleep 0x1008ff2f ++#define GDK_Favorites 0x1008ff30 ++#define GDK_AudioPause 0x1008ff31 ++#define GDK_AudioMedia 0x1008ff32 ++#define GDK_MyComputer 0x1008ff33 ++#define GDK_VendorHome 0x1008ff34 ++#define GDK_LightBulb 0x1008ff35 ++#define GDK_Shop 0x1008ff36 ++#define GDK_History 0x1008ff37 ++#define GDK_OpenURL 0x1008ff38 ++#define GDK_AddFavorite 0x1008ff39 ++#define GDK_HotLinks 0x1008ff3a ++#define GDK_BrightnessAdjust 0x1008ff3b ++#define GDK_Finance 0x1008ff3c ++#define GDK_Community 0x1008ff3d ++#define GDK_AudioRewind 0x1008ff3e ++#define GDK_BackForward 0x1008ff3f ++#define GDK_Launch0 0x1008ff40 ++#define GDK_Launch1 0x1008ff41 ++#define GDK_Launch2 0x1008ff42 ++#define GDK_Launch3 0x1008ff43 ++#define GDK_Launch4 0x1008ff44 ++#define GDK_Launch5 0x1008ff45 ++#define GDK_Launch6 0x1008ff46 ++#define GDK_Launch7 0x1008ff47 ++#define GDK_Launch8 0x1008ff48 ++#define GDK_Launch9 0x1008ff49 ++#define GDK_LaunchA 0x1008ff4a ++#define GDK_LaunchB 0x1008ff4b ++#define GDK_LaunchC 0x1008ff4c ++#define GDK_LaunchD 0x1008ff4d ++#define GDK_LaunchE 0x1008ff4e ++#define GDK_LaunchF 0x1008ff4f ++#define GDK_ApplicationLeft 0x1008ff50 ++#define GDK_ApplicationRight 0x1008ff51 ++#define GDK_Book 0x1008ff52 ++#define GDK_CD 0x1008ff53 ++#define GDK_WindowClear 0x1008ff55 ++#define GDK_Close 0x1008ff56 ++#define GDK_Copy 0x1008ff57 ++#define GDK_Cut 0x1008ff58 ++#define GDK_Display 0x1008ff59 ++#define GDK_DOS 0x1008ff5a ++#define GDK_Documents 0x1008ff5b ++#define GDK_Excel 0x1008ff5c ++#define GDK_Explorer 0x1008ff5d ++#define GDK_Game 0x1008ff5e ++#define GDK_Go 0x1008ff5f ++#define GDK_iTouch 0x1008ff60 ++#define GDK_LogOff 0x1008ff61 ++#define GDK_Market 0x1008ff62 ++#define GDK_Meeting 0x1008ff63 ++#define GDK_MenuKB 0x1008ff65 ++#define GDK_MenuPB 0x1008ff66 ++#define GDK_MySites 0x1008ff67 ++#define GDK_New 0x1008ff68 ++#define GDK_News 0x1008ff69 ++#define GDK_OfficeHome 0x1008ff6a ++#define GDK_Open 0x1008ff6b ++#define GDK_Option 0x1008ff6c ++#define GDK_Paste 0x1008ff6d ++#define GDK_Phone 0x1008ff6e ++#define GDK_Reply 0x1008ff72 ++#define GDK_Reload 0x1008ff73 ++#define GDK_RotateWindows 0x1008ff74 ++#define GDK_RotationPB 0x1008ff75 ++#define GDK_RotationKB 0x1008ff76 ++#define GDK_Save 0x1008ff77 ++#define GDK_ScrollUp 0x1008ff78 ++#define GDK_ScrollDown 0x1008ff79 ++#define GDK_ScrollClick 0x1008ff7a ++#define GDK_Send 0x1008ff7b ++#define GDK_Spell 0x1008ff7c ++#define GDK_SplitScreen 0x1008ff7d ++#define GDK_Support 0x1008ff7e ++#define GDK_TaskPane 0x1008ff7f ++#define GDK_Terminal 0x1008ff80 ++#define GDK_Tools 0x1008ff81 ++#define GDK_Travel 0x1008ff82 ++#define GDK_UserPB 0x1008ff84 ++#define GDK_User1KB 0x1008ff85 ++#define GDK_User2KB 0x1008ff86 ++#define GDK_Video 0x1008ff87 ++#define GDK_WheelButton 0x1008ff88 ++#define GDK_Word 0x1008ff89 ++#define GDK_Xfer 0x1008ff8a ++#define GDK_ZoomIn 0x1008ff8b ++#define GDK_ZoomOut 0x1008ff8c ++#define GDK_Away 0x1008ff8d ++#define GDK_Messenger 0x1008ff8e ++#define GDK_WebCam 0x1008ff8f ++#define GDK_MailForward 0x1008ff90 ++#define GDK_Pictures 0x1008ff91 ++#define GDK_Music 0x1008ff92 ++#define GDK_Battery 0x1008ff93 ++#define GDK_Bluetooth 0x1008ff94 ++#define GDK_WLAN 0x1008ff95 ++#define GDK_UWB 0x1008ff96 ++#define GDK_AudioForward 0x1008ff97 ++#define GDK_AudioRepeat 0x1008ff98 ++#define GDK_AudioRandomPlay 0x1008ff99 ++#define GDK_Subtitle 0x1008ff9a ++#define GDK_AudioCycleTrack 0x1008ff9b ++#define GDK_CycleAngle 0x1008ff9c ++#define GDK_FrameBack 0x1008ff9d ++#define GDK_FrameForward 0x1008ff9e ++#define GDK_Time 0x1008ff9f ++#define GDK_SelectButton 0x1008ffa0 ++#define GDK_View 0x1008ffa1 ++#define GDK_TopMenu 0x1008ffa2 ++#define GDK_Red 0x1008ffa3 ++#define GDK_Green 0x1008ffa4 ++#define GDK_Yellow 0x1008ffa5 ++#define GDK_Blue 0x1008ffa6 ++#define GDK_Suspend 0x1008ffa7 ++#define GDK_Hibernate 0x1008ffa8 ++#define GDK_TouchpadToggle 0x1008ffa9 ++#define GDK_Switch_VT_1 0x1008fe01 ++#define GDK_Switch_VT_2 0x1008fe02 ++#define GDK_Switch_VT_3 0x1008fe03 ++#define GDK_Switch_VT_4 0x1008fe04 ++#define GDK_Switch_VT_5 0x1008fe05 ++#define GDK_Switch_VT_6 0x1008fe06 ++#define GDK_Switch_VT_7 0x1008fe07 ++#define GDK_Switch_VT_8 0x1008fe08 ++#define GDK_Switch_VT_9 0x1008fe09 ++#define GDK_Switch_VT_10 0x1008fe0a ++#define GDK_Switch_VT_11 0x1008fe0b ++#define GDK_Switch_VT_12 0x1008fe0c ++#define GDK_Ungrab 0x1008fe20 ++#define GDK_ClearGrab 0x1008fe21 ++#define GDK_Next_VMode 0x1008fe22 ++#define GDK_Prev_VMode 0x1008fe23 ++ ++#endif /* __GDK_KEYSYMS_COMPAT_H__ */ +diff -up mozilla-aurora/widget/gtk/nsDeviceContextSpecG.h.build-gtk2 mozilla-aurora/widget/gtk/nsDeviceContextSpecG.h +--- mozilla-aurora/widget/gtk/nsDeviceContextSpecG.h.build-gtk2 2015-12-16 16:47:23.000000000 +0100 ++++ mozilla-aurora/widget/gtk/nsDeviceContextSpecG.h 2016-01-15 17:38:34.978272200 +0100 +@@ -16,7 +16,12 @@ + #include "nsCRT.h" /* should be ? */ + + #include ++#if (MOZ_WIDGET_GTK == 2) ++#include ++#include ++#else + #include ++#endif + + #define NS_PORTRAIT 0 + #define NS_LANDSCAPE 1 +diff -up mozilla-aurora/widget/gtk/nsFilePicker.cpp.build-gtk2 mozilla-aurora/widget/gtk/nsFilePicker.cpp +--- mozilla-aurora/widget/gtk/nsFilePicker.cpp.build-gtk2 2015-12-16 16:47:23.000000000 +0100 ++++ mozilla-aurora/widget/gtk/nsFilePicker.cpp 2016-01-15 17:38:34.978272200 +0100 +@@ -125,9 +125,11 @@ UpdateFilePreviewWidget(GtkFileChooser * + return; + } + ++#if GTK_CHECK_VERSION(2,12,0) + GdkPixbuf *preview_pixbuf_temp = preview_pixbuf; + preview_pixbuf = gdk_pixbuf_apply_embedded_orientation(preview_pixbuf_temp); + g_object_unref(preview_pixbuf_temp); ++#endif + + // This is the easiest way to do center alignment without worrying about containers + // Minimum 3px padding each side (hence the 6) just to make things nice +diff -up mozilla-aurora/widget/gtk/nsPrintDialogGTK.cpp.build-gtk2 mozilla-aurora/widget/gtk/nsPrintDialogGTK.cpp +--- mozilla-aurora/widget/gtk/nsPrintDialogGTK.cpp.build-gtk2 2015-12-16 16:47:23.000000000 +0100 ++++ mozilla-aurora/widget/gtk/nsPrintDialogGTK.cpp 2016-01-15 17:38:34.979272199 +0100 +@@ -4,7 +4,13 @@ + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + #include ++#if (MOZ_WIDGET_GTK == 2) ++#include ++#include ++#include ++#else + #include ++#endif + #include + + #include "mozilla/ArrayUtils.h" +diff -up mozilla-aurora/widget/gtk/nsPrintSettingsGTK.h.build-gtk2 mozilla-aurora/widget/gtk/nsPrintSettingsGTK.h +--- mozilla-aurora/widget/gtk/nsPrintSettingsGTK.h.build-gtk2 2015-12-16 16:47:23.000000000 +0100 ++++ mozilla-aurora/widget/gtk/nsPrintSettingsGTK.h 2016-01-15 17:38:34.979272199 +0100 +@@ -11,7 +11,12 @@ + + extern "C" { + #include ++#if (MOZ_WIDGET_GTK == 2) ++#include ++#include ++#else + #include ++#endif + } + + #define NS_PRINTSETTINGSGTK_IID \ +diff -up mozilla-aurora/widget/gtk/nsWindow.cpp.build-gtk2 mozilla-aurora/widget/gtk/nsWindow.cpp +--- mozilla-aurora/widget/gtk/nsWindow.cpp.build-gtk2 2015-12-16 16:47:23.000000000 +0100 ++++ mozilla-aurora/widget/gtk/nsWindow.cpp 2016-01-15 17:38:34.980272198 +0100 +@@ -4895,7 +4895,8 @@ FullscreenTransitionWindow::FullscreenTr + bgColor.red = bgColor.green = bgColor.blue = 0; + gtk_widget_modify_bg(mWindow, GTK_STATE_NORMAL, &bgColor); + +- gtk_window_set_opacity(gtkWin, 0.0); ++ // Opacity not supported in gtk 2.10 ++ // gtk_window_set_opacity(gtkWin, 0.0); + gtk_widget_show(mWindow); + } + +@@ -4935,7 +4936,8 @@ FullscreenTransitionData::TimeoutCallbac + if (data->mStage == nsIWidget::eAfterFullscreenToggle) { + opacity = 1.0 - opacity; + } +- gtk_window_set_opacity(GTK_WINDOW(data->mWindow->mWindow), opacity); ++ // Opacity not supported in gtk 2.10 ++ // gtk_window_set_opacity(GTK_WINDOW(data->mWindow->mWindow), opacity); + + if (data->mStep != data->mTotalSteps) { + return TRUE; +diff -up mozilla-aurora/widget/gtk/nsBidiKeyboard.cpp.build-gtk2 mozilla-aurora/widget/gtk/nsBidiKeyboard.cpp +--- mozilla-aurora/widget/gtk/nsBidiKeyboard.cpp.build-gtk2 2016-01-18 09:41:47.302300030 +0100 ++++ mozilla-aurora/widget/gtk/nsBidiKeyboard.cpp 2016-01-18 09:43:50.663288859 +0100 +@@ -10,6 +10,11 @@ + #include "nsBidiKeyboard.h" + #include + ++#if (MOZ_WIDGET_GTK == 2) ++typedef gboolean (*GdkKeymapHaveBidiLayoutsType)(GdkKeymap *keymap); ++static GdkKeymapHaveBidiLayoutsType GdkKeymapHaveBidiLayouts = nullptr; ++#endif ++ + NS_IMPL_ISUPPORTS(nsBidiKeyboard, nsIBidiKeyboard) + + nsBidiKeyboard::nsBidiKeyboard() +@@ -20,21 +25,32 @@ nsBidiKeyboard::nsBidiKeyboard() + NS_IMETHODIMP + nsBidiKeyboard::Reset() + { +- // NB: The default keymap can be null (e.g. in xpcshell). In that case, +- // simply assume that we don't have bidi keyboards. +- mHaveBidiKeyboards = false; ++#if (MOZ_WIDGET_GTK == 2) ++ PRLibrary *gtklib = nullptr; ++#if defined(MOZ_X11) ++ if (!GdkKeymapHaveBidiLayouts) { ++ GdkKeymapHaveBidiLayouts = (GdkKeymapHaveBidiLayoutsType) ++ PR_FindFunctionSymbolAndLibrary("gdk_keymap_have_bidi_layouts", ++ >klib); ++ if (gtklib) ++ PR_UnloadLibrary(gtklib); ++ } ++#endif + +- GdkDisplay *display = gdk_display_get_default(); +- if (!display) +- return NS_OK; +- +- GdkKeymap *keymap = gdk_keymap_get_for_display(display); +- mHaveBidiKeyboards = keymap && gdk_keymap_have_bidi_layouts(keymap); ++ mHaveBidiKeyboards = false; ++ if (GdkKeymapHaveBidiLayouts) ++ mHaveBidiKeyboards = (*GdkKeymapHaveBidiLayouts)(nullptr); ++#else ++ mHaveBidiKeyboards = gdk_keymap_have_bidi_layouts(gdk_keymap_get_default()); ++#endif + return NS_OK; + } + + nsBidiKeyboard::~nsBidiKeyboard() + { ++#if (MOZ_WIDGET_GTK == 2) ++ GdkKeymapHaveBidiLayouts = nullptr; ++#endif + } + + NS_IMETHODIMP diff --git a/SOURCES/build-el5-nss.patch b/SOURCES/build-el5-nss.patch new file mode 100644 index 0000000..13c6dfd --- /dev/null +++ b/SOURCES/build-el5-nss.patch @@ -0,0 +1,12 @@ +diff -up mozilla-aurora/config/external/nss/Makefile.in.build-el5-nss mozilla-aurora/config/external/nss/Makefile.in +--- mozilla-aurora/config/external/nss/Makefile.in.build-el5-nss 2016-01-26 10:25:01.770613169 +0100 ++++ mozilla-aurora/config/external/nss/Makefile.in 2016-01-26 10:25:12.824599219 +0100 +@@ -298,7 +298,7 @@ NSS_DIRS += \ + endif + + ifneq (,$(filter %--build-id,$(LDFLAGS))) +-DEFAULT_GMAKE_ENV = LDFLAGS=-Wl,--build-id ++#DEFAULT_GMAKE_ENV = LDFLAGS=-Wl,--build-id + endif + + ifdef MOZ_FOLD_LIBS diff --git a/SOURCES/build-el5-rapl.patch b/SOURCES/build-el5-rapl.patch new file mode 100644 index 0000000..ec6f0b1 --- /dev/null +++ b/SOURCES/build-el5-rapl.patch @@ -0,0 +1,12 @@ +diff -up mozilla-aurora/tools/power/moz.build.rapl mozilla-aurora/tools/power/moz.build +--- mozilla-aurora/tools/power/moz.build.rapl 2016-01-18 10:55:59.461937398 +0100 ++++ mozilla-aurora/tools/power/moz.build 2016-01-18 10:56:04.483935330 +0100 +@@ -11,7 +11,7 @@ if CONFIG['OS_ARCH'] == 'Darwin' and CON + + if CONFIG['OS_ARCH'] == 'Linux' and CONFIG['OS_TARGET'] != 'Android' and \ + CONFIG['CPU_ARCH'] in ('x86', 'x86_64'): +- do_rapl = True ++ do_rapl = False + + if do_rapl: + SimplePrograms([ diff --git a/SOURCES/build-el5-rt-tgsigqueueinfo.patch b/SOURCES/build-el5-rt-tgsigqueueinfo.patch new file mode 100644 index 0000000..2ca3218 --- /dev/null +++ b/SOURCES/build-el5-rt-tgsigqueueinfo.patch @@ -0,0 +1,18 @@ +diff -up mozilla-beta/xpcom/threads/ThreadStackHelper.cpp.rt-tgsigqueueinfo mozilla-beta/xpcom/threads/ThreadStackHelper.cpp +--- mozilla-beta/xpcom/threads/ThreadStackHelper.cpp.rt-tgsigqueueinfo 2015-04-16 23:45:29.000000000 +0200 ++++ mozilla-beta/xpcom/threads/ThreadStackHelper.cpp 2015-04-22 09:10:25.291166226 +0200 +@@ -240,10 +240,13 @@ ThreadStackHelper::GetStack(Stack& aStac + uinfo.si_pid = getpid(); + uinfo.si_uid = getuid(); + uinfo.si_value.sival_ptr = this; ++#ifdef SYS_rt_tgsigqueueinfo + if (::syscall(SYS_rt_tgsigqueueinfo, uinfo.si_pid, +- mThreadID, sFillStackSignum, &uinfo)) { ++ mThreadID, sFillStackSignum, &uinfo)) + // rt_tgsigqueueinfo was added in Linux 2.6.31. + // Could have failed because the syscall did not exist. ++#endif ++ { + return; + } + MOZ_ALWAYS_TRUE(!::sem_wait(&mSem)); diff --git a/SOURCES/build-el5-sandbox.patch b/SOURCES/build-el5-sandbox.patch new file mode 100644 index 0000000..170130d --- /dev/null +++ b/SOURCES/build-el5-sandbox.patch @@ -0,0 +1,46 @@ +diff -up mozilla-aurora/security/sandbox/linux/broker/SandboxBroker.cpp.build-sandbox mozilla-aurora/security/sandbox/linux/broker/SandboxBroker.cpp +--- mozilla-aurora/security/sandbox/linux/broker/SandboxBroker.cpp.build-sandbox 2015-12-16 16:47:02.000000000 +0100 ++++ mozilla-aurora/security/sandbox/linux/broker/SandboxBroker.cpp 2016-01-21 15:34:59.168878105 +0100 +@@ -201,7 +201,7 @@ AllowAccess(int aReqFlags, int aPerms) + // on this process. These shouldn't be relevant to the child process + // in any case due to the sandboxing restrictions on it. (See also + // the use of MSG_CMSG_CLOEXEC in SandboxBrokerCommon.cpp). +-static const int kRequiredOpenFlags = O_CLOEXEC | O_NOCTTY; ++static const int kRequiredOpenFlags = O_NOCTTY; + + // Linux originally assigned a flag bit to O_SYNC but implemented the + // semantics standardized as O_DSYNC; later, that bit was renamed and +@@ -212,7 +212,7 @@ static const int kRequiredOpenFlags = O_ + static const int kAllowedOpenFlags = + O_APPEND | O_ASYNC | O_DIRECT | O_DIRECTORY | O_EXCL | O_LARGEFILE + | O_NOATIME | O_NOCTTY | O_NOFOLLOW | O_NONBLOCK | O_NDELAY | O_SYNC_NEW +- | O_TRUNC | O_CLOEXEC | O_CREAT; ++ | O_TRUNC | O_CREAT; + #undef O_SYNC_NEW + + static bool +@@ -358,6 +358,7 @@ SandboxBroker::ThreadMain(void) + // new ones). + openedFd = open(pathBuf, req.mFlags | kRequiredOpenFlags, 0600); + if (openedFd >= 0) { ++ fcntl(openedFd, F_SETFD, fcntl(openedFd, F_GETFD, 0) | FD_CLOEXEC); + resp.mError = 0; + } else { + resp.mError = errno; +diff -up mozilla-aurora/security/sandbox/linux/SandboxBrokerClient.cpp.build-sandbox mozilla-aurora/security/sandbox/linux/SandboxBrokerClient.cpp +--- mozilla-aurora/security/sandbox/linux/SandboxBrokerClient.cpp.build-sandbox 2016-01-21 15:48:55.807532739 +0100 ++++ mozilla-aurora/security/sandbox/linux/SandboxBrokerClient.cpp 2016-01-21 15:49:26.163518779 +0100 +@@ -149,9 +149,10 @@ SandboxBrokerClient::Open(const char* aP + int maybeFd = DoCall(&req, aPath, nullptr, true); + if (maybeFd >= 0) { + // NSPR has opinions about file flags. Fix O_CLOEXEC. +- if ((aFlags & O_CLOEXEC) == 0) { +- fcntl(maybeFd, F_SETFD, 0); +- } ++ // O_CLOEXEC is not available in RHEL5 ++ //if ((aFlags & O_CLOEXEC) == 0) { ++ // fcntl(maybeFd, F_SETFD, 0); ++ //} + } + return maybeFd; + } diff --git a/SOURCES/build-el5-stdint.patch b/SOURCES/build-el5-stdint.patch new file mode 100644 index 0000000..d693e5c --- /dev/null +++ b/SOURCES/build-el5-stdint.patch @@ -0,0 +1,47 @@ +diff -up mozilla-aurora/security/sandbox/linux/LinuxCapabilities.h.build-el5-stdint mozilla-aurora/security/sandbox/linux/LinuxCapabilities.h +--- mozilla-aurora/security/sandbox/linux/LinuxCapabilities.h.build-el5-stdint 2015-12-16 16:47:02.000000000 +0100 ++++ mozilla-aurora/security/sandbox/linux/LinuxCapabilities.h 2016-01-26 15:52:02.557401691 +0100 +@@ -7,7 +7,32 @@ + #ifndef mozilla_LinuxCapabilities_h + #define mozilla_LinuxCapabilities_h + ++#define int64_t int64_t_linux ++#define uint64_t uint64_t_linux ++#define loff_t loff_t_linux ++#define dev_t dev_t_linux ++#define timer_t timer_t_linux ++#define u_int64_t u_int64_t_linux ++#define fd_set fd_set_linux ++#define blkcnt_t blkcnt_t_linux ++#define gid_t gid_t_linux ++#define mode_t mode_t_linux ++#define nlink_t nlink_t_linux ++#define uid_t uid_t_linux + #include ++#undef int64_t ++#undef uint64_t ++#undef loff_t ++#undef dev_t ++#undef timer_t ++#undef u_int64_t ++#undef fd_set ++#undef blkcnt_t ++#undef gid_t ++#undef mode_t ++#undef nlink_t ++#undef uid_t ++ + #include + + #include "mozilla/Assertions.h" +diff -up mozilla-aurora/security/sandbox/linux/SandboxFilterUtil.cpp.build-el5-stdint mozilla-aurora/security/sandbox/linux/SandboxFilterUtil.cpp +--- mozilla-aurora/security/sandbox/linux/SandboxFilterUtil.cpp.build-el5-stdint 2016-01-25 20:56:57.937678560 +0100 ++++ mozilla-aurora/security/sandbox/linux/SandboxFilterUtil.cpp 2016-01-25 20:58:25.574613828 +0100 +@@ -13,6 +13,7 @@ + + #include "mozilla/UniquePtr.h" + #include "sandbox/linux/bpf_dsl/bpf_dsl.h" ++#include + + // Older kernel headers (mostly Android, but also some older desktop + // distributions) are missing some or all of these: diff --git a/SOURCES/build-el5-xlib-header.patch b/SOURCES/build-el5-xlib-header.patch new file mode 100644 index 0000000..247036c --- /dev/null +++ b/SOURCES/build-el5-xlib-header.patch @@ -0,0 +1,27 @@ +diff -up mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.cc.xlib-swap mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.cc +--- mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.cc.xlib-swap 2016-01-15 12:50:55.900989372 +0100 ++++ mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.cc 2016-01-15 12:51:40.592950518 +0100 +@@ -10,8 +10,8 @@ + + #include "webrtc/modules/desktop_capture/mouse_cursor_monitor.h" + +-#include + #include ++#include + #include + + #include "webrtc/base/scoped_ptr.h" +diff -up mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.cc.xlib-swap mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.cc +--- mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.cc.xlib-swap 2016-01-15 12:50:48.652995674 +0100 ++++ mozilla-aurora/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.cc 2016-01-15 12:51:34.005956245 +0100 +@@ -13,9 +13,9 @@ + #include + #include + ++#include + #include + #include +-#include + #include + + #include "webrtc/base/scoped_ptr.h" diff --git a/SOURCES/build-nspr-prbool.patch b/SOURCES/build-nspr-prbool.patch deleted file mode 100644 index a46f472..0000000 --- a/SOURCES/build-nspr-prbool.patch +++ /dev/null @@ -1,66 +0,0 @@ -diff -up mozilla-beta/media/webrtc/trunk/webrtc/base/nssidentity.h.prbool-fix mozilla-beta/media/webrtc/trunk/webrtc/base/nssidentity.h ---- mozilla-beta/media/webrtc/trunk/webrtc/base/nssidentity.h.prbool-fix 2015-04-07 10:29:51.919137851 +0200 -+++ mozilla-beta/media/webrtc/trunk/webrtc/base/nssidentity.h 2015-04-07 10:33:06.886532753 +0200 -@@ -15,6 +15,7 @@ - - #include "cert.h" - #include "nspr.h" -+#include "prtypes.h" - #include "hasht.h" - #include "keythi.h" - -diff -up mozilla-beta/modules/libmar/sign/nss_secutil.h.prbool-fix mozilla-beta/modules/libmar/sign/nss_secutil.h ---- mozilla-beta/modules/libmar/sign/nss_secutil.h.prbool-fix 2015-04-07 10:33:13.079513533 +0200 -+++ mozilla-beta/modules/libmar/sign/nss_secutil.h 2015-04-07 10:33:16.101504154 +0200 -@@ -11,6 +11,7 @@ - #include "nss.h" - #include "pk11pub.h" - #include "cryptohi.h" -+#include "prtypes.h" - #include "hasht.h" - #include "cert.h" - #include "key.h" -diff -up mozilla-beta/security/certverifier/ExtendedValidation.cpp.prbool-fix mozilla-beta/security/certverifier/ExtendedValidation.cpp ---- mozilla-beta/security/certverifier/ExtendedValidation.cpp.prbool-fix 2015-04-07 10:36:42.693902941 +0200 -+++ mozilla-beta/security/certverifier/ExtendedValidation.cpp 2015-04-07 10:36:45.925893606 +0200 -@@ -9,6 +9,7 @@ - #include "cert.h" - #include "certdb.h" - #include "base64.h" -+#include "prtypes.h" - #include "hasht.h" - #include "pkix/stdkeywords.h" - #include "pkix/pkixtypes.h" -diff -up mozilla-beta/security/certverifier/OCSPCache.h.prbool-fix mozilla-beta/security/certverifier/OCSPCache.h ---- mozilla-beta/security/certverifier/OCSPCache.h.prbool-fix 2015-04-07 10:36:34.106927741 +0200 -+++ mozilla-beta/security/certverifier/OCSPCache.h 2015-04-07 10:36:35.940922444 +0200 -@@ -25,6 +25,7 @@ - #ifndef mozilla_psm_OCSPCache_h - #define mozilla_psm_OCSPCache_h - -+#include "prtypes.h" - #include "hasht.h" - #include "mozilla/Mutex.h" - #include "mozilla/Vector.h" -diff -up mozilla-beta/security/manager/ssl/src/nsCryptoHash.h.prbool-fix mozilla-beta/security/manager/ssl/src/nsCryptoHash.h ---- mozilla-beta/security/manager/ssl/src/nsCryptoHash.h.prbool-fix 2015-04-07 10:36:15.887980360 +0200 -+++ mozilla-beta/security/manager/ssl/src/nsCryptoHash.h 2015-04-07 10:36:18.124973899 +0200 -@@ -10,6 +10,7 @@ - #include "nsICryptoHash.h" - #include "nsICryptoHMAC.h" - #include "nsNSSShutDown.h" -+#include "prtypes.h" - #include "hasht.h" - #include "secmodt.h" - -diff -up mozilla-beta/security/manager/ssl/tests/unit/tlsserver/cmd/ClientAuthServer.cpp.prbool-fix mozilla-beta/security/manager/ssl/tests/unit/tlsserver/cmd/ClientAuthServer.cpp ---- mozilla-beta/security/manager/ssl/tests/unit/tlsserver/cmd/ClientAuthServer.cpp.prbool-fix 2015-04-07 10:36:25.065953853 +0200 -+++ mozilla-beta/security/manager/ssl/tests/unit/tlsserver/cmd/ClientAuthServer.cpp 2015-04-07 10:36:27.319947343 +0200 -@@ -15,6 +15,7 @@ - - #include - -+#include "prtypes.h" - #include "hasht.h" - #include "ScopedNSSTypes.h" - #include "ssl.h" diff --git a/SOURCES/build-nss.patch b/SOURCES/build-nss.patch new file mode 100644 index 0000000..36f8f83 --- /dev/null +++ b/SOURCES/build-nss.patch @@ -0,0 +1,21 @@ +diff -up firefox-45.0.1esr/configure.in.nss firefox-45.0.1esr/configure.in +--- firefox-45.0.1esr/configure.in.nss 2016-04-06 10:20:01.000000000 +0200 ++++ firefox-45.0.1esr/configure.in 2016-04-06 10:25:56.998285981 +0200 +@@ -53,7 +53,7 @@ dnl ==================================== + MOZJPEG=62 + MOZPNG=10619 + NSPR_VERSION=4 +-NSPR_MINVER=4.12 ++NSPR_MINVER=4.11 + NSS_VERSION=3 + + dnl Set the minimum version of toolkit libs used by mozilla +@@ -3451,7 +3451,7 @@ MOZ_ARG_WITH_BOOL(system-nss, + _USE_SYSTEM_NSS=1 ) + + if test -n "$_USE_SYSTEM_NSS"; then +- AM_PATH_NSS(3.21.1, [MOZ_NATIVE_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])]) ++ AM_PATH_NSS(3.21.0, [MOZ_NATIVE_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])]) + fi + + if test -n "$MOZ_NATIVE_NSS"; then diff --git a/SOURCES/build-werror.patch b/SOURCES/build-werror.patch deleted file mode 100644 index 262337c..0000000 --- a/SOURCES/build-werror.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff -up firefox-32.0/mozilla-release/media/libstagefright/moz.build.old firefox-32.0/mozilla-release/media/libstagefright/moz.build ---- firefox-32.0/mozilla-release/media/libstagefright/moz.build.old 2014-08-26 05:38:08.000000000 +0200 -+++ firefox-32.0/mozilla-release/media/libstagefright/moz.build 2014-08-27 15:40:12.030299348 +0200 -@@ -120,7 +120,6 @@ elif CONFIG['GNU_CXX']: - '-Wno-sign-compare' - ] - CXXFLAGS += [ -- '-Wno-format', - '-Wno-multichar', - '-Wno-sign-compare', - '-Wno-unused', diff --git a/SOURCES/find-external-requires b/SOURCES/find-external-requires old mode 100644 new mode 100755 diff --git a/SOURCES/firefox-install-dir.patch b/SOURCES/firefox-install-dir.patch new file mode 100644 index 0000000..c962fa5 --- /dev/null +++ b/SOURCES/firefox-install-dir.patch @@ -0,0 +1,12 @@ +diff -up mozilla-aurora/config/baseconfig.mk.orig mozilla-aurora/config/baseconfig.mk +--- mozilla-aurora/config/baseconfig.mk.orig 2014-05-06 13:17:17.000000000 +0200 ++++ mozilla-aurora/config/baseconfig.mk 2014-05-27 17:13:05.215503107 +0200 +@@ -4,7 +4,7 @@ + # whether a normal build is happening or whether the check is running. + includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) + idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) +-installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) ++installdir = $(libdir)/$(MOZ_APP_NAME) + sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) + ifndef TOP_DIST + TOP_DIST = dist diff --git a/SOURCES/firefox-nss-3.19.1.patch b/SOURCES/firefox-nss-3.19.1.patch deleted file mode 100644 index 9fae698..0000000 --- a/SOURCES/firefox-nss-3.19.1.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff -up mozilla-esr38/configure.in.nss-3.19.1 mozilla-esr38/configure.in ---- mozilla-esr38/configure.in.nss-3.19.1 2015-10-29 11:17:50.666423563 +0100 -+++ mozilla-esr38/configure.in 2015-10-29 11:28:06.142004473 +0100 -@@ -52,7 +52,7 @@ dnl ==================================== - MOZJPEG=62 - MOZPNG=10616 - NSPR_VERSION=4 --NSPR_MINVER=4.10.10 -+NSPR_MINVER=4.10.8 - NSS_VERSION=3 - - dnl Set the minimum version of toolkit libs used by mozilla -@@ -3627,7 +3627,7 @@ MOZ_ARG_WITH_BOOL(system-nss, - _USE_SYSTEM_NSS=1 ) - - if test -n "$_USE_SYSTEM_NSS"; then -- AM_PATH_NSS(3.19.2.4, [MOZ_NATIVE_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])]) -+ AM_PATH_NSS(3.19.1, [MOZ_NATIVE_NSS=1], [AC_MSG_ERROR([you don't have NSS installed or your version is too old])]) - fi - - if test -n "$MOZ_NATIVE_NSS"; then diff --git a/SOURCES/firefox-ppc64le.patch b/SOURCES/firefox-ppc64le.patch index 6465eec..45fe1bc 100644 --- a/SOURCES/firefox-ppc64le.patch +++ b/SOURCES/firefox-ppc64le.patch @@ -1,6 +1,6 @@ -diff -up firefox-36.0/mozilla-release/gfx/skia/trunk/include/core/SkPreConfig.h.ppc64le firefox-36.0/mozilla-release/gfx/skia/trunk/include/core/SkPreConfig.h ---- firefox-36.0/mozilla-release/gfx/skia/trunk/include/core/SkPreConfig.h.ppc64le 2015-02-20 03:01:40.000000000 +0100 -+++ firefox-36.0/mozilla-release/gfx/skia/trunk/include/core/SkPreConfig.h 2015-03-06 15:52:58.298050379 +0100 +diff -up firefox-36.0/mozilla-release/gfx/skia/skia/include/core/SkPreConfig.h.ppc64le firefox-36.0/mozilla-release/gfx/skia/skia/include/core/SkPreConfig.h +--- firefox-36.0/mozilla-release/gfx/skia/skia/include/core/SkPreConfig.h.ppc64le 2015-02-20 03:01:40.000000000 +0100 ++++ firefox-36.0/mozilla-release/gfx/skia/skia/include/core/SkPreConfig.h 2015-03-06 15:52:58.298050379 +0100 @@ -90,6 +90,13 @@ #endif diff --git a/SOURCES/lightning-bad-langs.patch b/SOURCES/lightning-bad-langs.patch new file mode 100644 index 0000000..933b400 --- /dev/null +++ b/SOURCES/lightning-bad-langs.patch @@ -0,0 +1,19 @@ +diff -up thunderbird-45.0/calendar/locales/shipped-locales.bad-langs thunderbird-45.0/calendar/locales/shipped-locales +--- thunderbird-45.0/calendar/locales/shipped-locales.bad-langs 2016-04-07 23:14:23.000000000 +0200 ++++ thunderbird-45.0/calendar/locales/shipped-locales 2016-04-14 13:14:16.853967318 +0200 +@@ -15,7 +15,6 @@ fy-NL + ga-IE + gd + hu +-id + is + it + ja linux win32 +@@ -24,7 +23,6 @@ lt + nb-NO + nl + nn-NO +-pa-IN + pl + pt-PT + ru diff --git a/SOURCES/mklangsource.sh b/SOURCES/mklangsource.sh index cadb6af..289cdc0 100755 --- a/SOURCES/mklangsource.sh +++ b/SOURCES/mklangsource.sh @@ -22,13 +22,27 @@ do pushd $lang hg pull hg update $tag + #hg update popd else hg clone -u $tag http://hg.mozilla.org/releases/l10n/mozilla-release/$lang + #hg clone http://hg.mozilla.org/l10n-central/$lang fi done +cd .. +# Need to merge by compare-locale tool +# More info here: https://developer.mozilla.org/en-US/docs/Mozilla/Projects/compare-locales +# how to get compare-locales: sudo easy_install -U compare-locales + +# Make copy to merge with +rm -rf l10n-merged +cp -R l10n l10n-merged +for lang in $(<$locales) +do + compare-locales --merge l10n-merged/$lang $PWD/thunderbird-${tbver}/${branch}/calendar/locales/l10n.ini l10n $lang +done + # Tar up, minus the mercurial files -cd .. -rm -f l10n-${lver}.tar.bz2 -tar cjf l10n-lightning-${tbver}.tar.bz2 --exclude='.hg*' l10n +rm -f l10n-${lver}.tar.xz +tar caf l10n-lightning-${tbver}.tar.xz --exclude='.hg*' l10n-merged diff --git a/SOURCES/mozilla-1005535.patch b/SOURCES/mozilla-1005535.patch index 2f0381b..d84c913 100644 --- a/SOURCES/mozilla-1005535.patch +++ b/SOURCES/mozilla-1005535.patch @@ -3,20 +3,16 @@ # User Steve Singer Bug 1005535 - Get skia GPU building on big endian. -diff --git a/configure.in b/configure.in ---- a/configure.in -+++ b/configure.in -@@ -8231,21 +8231,21 @@ dnl Skia - dnl ======================================================== - if test "$MOZ_ENABLE_SKIA"; then - AC_DEFINE(MOZ_ENABLE_SKIA) - AC_DEFINE(USE_SKIA) - if test "${MOZ_WIDGET_TOOLKIT}" = "android" -o x"$MOZ_WIDGET_TOOLKIT" = x"gonk"; then +diff -up mozilla-aurora/configure.in.mozbz-1005535 mozilla-aurora/configure.in +--- mozilla-aurora/configure.in.mozbz-1005535 2015-12-18 14:55:09.415983194 +0100 ++++ mozilla-aurora/configure.in 2015-12-18 14:58:46.301911086 +0100 +@@ -8279,12 +8279,12 @@ if test "$MOZ_ENABLE_SKIA"; then AC_DEFINE(SK_BUILD_FOR_ANDROID_NDK) fi - if test "${CPU_ARCH}" != "ppc" -a "${CPU_ARCH}" != "ppc64" -a "${CPU_ARCH}" != "sparc" -a -z "$MOZ_DISABLE_SKIA_GPU" ; then +# if test "${CPU_ARCH}" != "ppc" -a "${CPU_ARCH}" != "ppc64" -a "${CPU_ARCH}" != "sparc" -a -z "$MOZ_DISABLE_SKIA_GPU" ; then + SKIA_INCLUDES="$SKIA_INCLUDES /gfx/skia/skia/include/gpu /gfx/skia/skia/include/utils" MOZ_ENABLE_SKIA_GPU=1 AC_DEFINE(USE_SKIA_GPU) AC_SUBST(MOZ_ENABLE_SKIA_GPU) @@ -24,85 +20,12 @@ diff --git a/configure.in b/configure.in +# fi fi AC_SUBST(MOZ_ENABLE_SKIA) - - dnl ======================================================== - dnl disable xul - dnl ======================================================== - MOZ_ARG_DISABLE_BOOL(xul, - [ --disable-xul Disable XUL], -diff --git a/gfx/skia/generate_mozbuild.py b/gfx/skia/generate_mozbuild.py ---- a/gfx/skia/generate_mozbuild.py -+++ b/gfx/skia/generate_mozbuild.py -@@ -236,17 +236,17 @@ def generate_separated_sources(platform_ - return True - - return False - - separated = { - 'common': { - #'trunk/src/effects/gradients/SkGradientTileProc.cpp', - 'trunk/src/gpu/gl/GrGLCreateNativeInterface_none.cpp', -- 'trunk/src/ports/SkDiscardableMemory_none.cpp', -+ #'trunk/src/ports/SkDiscardableMemory_none.cpp', - 'trunk/src/ports/SkImageDecoder_empty.cpp', - 'trunk/src/ports/SkMemory_mozalloc.cpp', - # 'trunk/src/images/SkImages.cpp', - # 'trunk/src/images/SkImageRef.cpp', - # 'trunk/src/images/SkImageRef_GlobalPool.cpp', - # 'trunk/src/images/SkImageRefPool.cpp', - # 'trunk/src/images/SkImageDecoder.cpp', - # 'trunk/src/images/SkImageDecoder_Factory.cpp', -diff --git a/gfx/skia/moz.build b/gfx/skia/moz.build ---- a/gfx/skia/moz.build -+++ b/gfx/skia/moz.build -@@ -847,17 +847,16 @@ else: - 'trunk/src/opts/SkBitmapProcState_opts_none.cpp', - 'trunk/src/opts/SkBlitMask_opts_none.cpp', - 'trunk/src/opts/SkBlitRow_opts_none.cpp', - 'trunk/src/opts/SkBlurImage_opts_none.cpp', - 'trunk/src/opts/SkMorphology_opts_none.cpp', - 'trunk/src/opts/SkTextureCompression_opts_none.cpp', - 'trunk/src/opts/SkUtils_opts_none.cpp', - 'trunk/src/opts/SkXfermode_opts_none.cpp', -- 'trunk/src/ports/SkDiscardableMemory_none.cpp', - ] - - - # can we find a better way of dealing with asm sources? - - # left out of UNIFIED_SOURCES for now; that's not C++ anyway, nothing else to unify it with - if not CONFIG['INTEL_ARCHITECTURE'] and CONFIG['CPU_ARCH'] == 'arm' and CONFIG['GNU_CC']: - SOURCES += [ -diff --git a/gfx/skia/trunk/include/config/SkUserConfig.h b/gfx/skia/trunk/include/config/SkUserConfig.h ---- a/gfx/skia/trunk/include/config/SkUserConfig.h -+++ b/gfx/skia/trunk/include/config/SkUserConfig.h -@@ -192,16 +192,17 @@ - - #if defined(SK_CPU_ARM32) || defined(SK_CPU_ARM64) - # define SK_BARRIERS_PLATFORM_H "skia/SkBarriers_arm.h" - #else - # define SK_BARRIERS_PLATFORM_H "skia/SkBarriers_x86.h" - #endif - - // On all platforms we have this byte order -+ - #define SK_A32_SHIFT 24 - #define SK_R32_SHIFT 16 - #define SK_G32_SHIFT 8 - #define SK_B32_SHIFT 0 - - #define SK_ALLOW_STATIC_GLOBAL_INITIALIZERS 0 - - #define SK_SUPPORT_LEGACY_GETDEVICE -diff --git a/gfx/skia/trunk/include/core/SkColorPriv.h b/gfx/skia/trunk/include/core/SkColorPriv.h ---- a/gfx/skia/trunk/include/core/SkColorPriv.h -+++ b/gfx/skia/trunk/include/core/SkColorPriv.h -@@ -27,37 +27,27 @@ - * For easier compatibility with Skia's GPU backend, we further restrict these - * to either (in memory-byte-order) RGBA or BGRA. Note that this "order" does - * not directly correspond to the same shift-order, since we have to take endianess - * into account. - * + AC_SUBST_LIST(SKIA_INCLUDES) +diff -up mozilla-aurora/gfx/skia/skia/include/config/SkUserConfig.h.mozbz-1005535 mozilla-aurora/gfx/skia/skia/include/config/SkUserConfig.h +diff -up mozilla-aurora/gfx/skia/skia/include/core/SkColorPriv.h.mozbz-1005535 mozilla-aurora/gfx/skia/skia/include/core/SkColorPriv.h +--- mozilla-aurora/gfx/skia/skia/include/core/SkColorPriv.h.mozbz-1005535 2015-12-16 16:47:08.000000000 +0100 ++++ mozilla-aurora/gfx/skia/skia/include/core/SkColorPriv.h 2015-12-18 14:55:09.416983194 +0100 +@@ -32,17 +32,7 @@ * Here we enforce this constraint. */ @@ -120,9 +43,7 @@ diff --git a/gfx/skia/trunk/include/core/SkColorPriv.h b/gfx/skia/trunk/include/ #define SK_RGBA_R32_SHIFT 0 #define SK_RGBA_G32_SHIFT 8 #define SK_RGBA_B32_SHIFT 16 - #define SK_RGBA_A32_SHIFT 24 - - #define SK_BGRA_B32_SHIFT 0 +@@ -52,7 +42,7 @@ #define SK_BGRA_G32_SHIFT 8 #define SK_BGRA_R32_SHIFT 16 #define SK_BGRA_A32_SHIFT 24 @@ -131,20 +52,10 @@ diff --git a/gfx/skia/trunk/include/core/SkColorPriv.h b/gfx/skia/trunk/include/ #if defined(SK_PMCOLOR_IS_RGBA) && defined(SK_PMCOLOR_IS_BGRA) #error "can't define PMCOLOR to be RGBA and BGRA" - #endif - - #define LOCAL_PMCOLOR_SHIFTS_EQUIVALENT_TO_RGBA \ - (SK_A32_SHIFT == SK_RGBA_A32_SHIFT && \ - SK_R32_SHIFT == SK_RGBA_R32_SHIFT && \ -diff --git a/gfx/skia/trunk/include/core/SkImageInfo.h b/gfx/skia/trunk/include/core/SkImageInfo.h ---- a/gfx/skia/trunk/include/core/SkImageInfo.h -+++ b/gfx/skia/trunk/include/core/SkImageInfo.h -@@ -83,19 +83,20 @@ enum SkColorType { - - kLastEnum_SkColorType = kIndex_8_SkColorType, - - #if SK_PMCOLOR_BYTE_ORDER(B,G,R,A) - kN32_SkColorType = kBGRA_8888_SkColorType, +diff -up mozilla-aurora/gfx/skia/skia/include/core/SkImageInfo.h.mozbz-1005535 mozilla-aurora/gfx/skia/skia/include/core/SkImageInfo.h +--- mozilla-aurora/gfx/skia/skia/include/core/SkImageInfo.h.mozbz-1005535 2015-12-16 16:47:08.000000000 +0100 ++++ mozilla-aurora/gfx/skia/skia/include/core/SkImageInfo.h 2015-12-18 14:55:09.416983194 +0100 +@@ -88,9 +88,10 @@ enum SkColorType { #elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A) kN32_SkColorType = kRGBA_8888_SkColorType, #else @@ -156,20 +67,10 @@ diff --git a/gfx/skia/trunk/include/core/SkImageInfo.h b/gfx/skia/trunk/include/ #ifdef SK_SUPPORT_LEGACY_N32_NAME kPMColor_SkColorType = kN32_SkColorType #endif - }; - - static int SkColorTypeBytesPerPixel(SkColorType ct) { - static const uint8_t gSize[] = { - 0, // Unknown -diff --git a/gfx/skia/trunk/include/gpu/GrTypes.h b/gfx/skia/trunk/include/gpu/GrTypes.h ---- a/gfx/skia/trunk/include/gpu/GrTypes.h -+++ b/gfx/skia/trunk/include/gpu/GrTypes.h -@@ -304,25 +304,23 @@ enum GrPixelConfig { - * Byte order is r, g, b, a. This color format is 32 bits per channel - */ - kRGBA_float_GrPixelConfig, - kLast_GrPixelConfig = kRGBA_float_GrPixelConfig - }; +diff -up mozilla-aurora/gfx/skia/skia/include/gpu/GrTypes.h.mozbz-1005535 mozilla-aurora/gfx/skia/skia/include/gpu/GrTypes.h +--- mozilla-aurora/gfx/skia/skia/include/gpu/GrTypes.h.mozbz-1005535 2015-12-16 16:47:08.000000000 +0100 ++++ mozilla-aurora/gfx/skia/skia/include/gpu/GrTypes.h 2015-12-18 14:55:09.416983194 +0100 +@@ -309,15 +309,13 @@ enum GrPixelConfig { static const int kGrPixelConfigCnt = kLast_GrPixelConfig + 1; // Aliases for pixel configs that match skia's byte order. @@ -187,8 +88,3 @@ diff --git a/gfx/skia/trunk/include/gpu/GrTypes.h b/gfx/skia/trunk/include/gpu/G #endif // Returns true if the pixel config is a GPU-specific compressed format - // representation. - static inline bool GrPixelConfigIsCompressed(GrPixelConfig config) { - switch (config) { - case kETC1_GrPixelConfig: - case kLATC_GrPixelConfig: diff --git a/SOURCES/mozilla-1134537-delete-gnomevfs-extension.patch b/SOURCES/mozilla-1134537-delete-gnomevfs-extension.patch new file mode 100644 index 0000000..2803525 --- /dev/null +++ b/SOURCES/mozilla-1134537-delete-gnomevfs-extension.patch @@ -0,0 +1,1150 @@ +diff -up thunderbird-45.0/mozilla/b2g/installer/package-manifest.in.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/b2g/installer/package-manifest.in +--- thunderbird-45.0/mozilla/b2g/installer/package-manifest.in.moz-1134537-gnomevfsservice 2016-04-07 23:33:14.000000000 +0200 ++++ thunderbird-45.0/mozilla/b2g/installer/package-manifest.in 2016-05-09 13:19:52.317048303 +0200 +@@ -912,6 +912,12 @@ bin/libfreebl_32int64_3.so + @RESPATH@/crashreporter-override.ini + #endif + ++; [Extensions] ++; ++#ifdef MOZ_ENABLE_GNOMEVFS ++bin/components/@DLL_PREFIX@nkgnomevfs@DLL_SUFFIX@ ++#endif ++ + [b2g] + #ifndef MOZ_WIDGET_GONK + #ifdef XP_WIN32 +diff -up thunderbird-45.0/mozilla/browser/installer/package-manifest.in.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/browser/installer/package-manifest.in +--- thunderbird-45.0/mozilla/browser/installer/package-manifest.in.moz-1134537-gnomevfsservice 2016-05-09 13:19:52.318048303 +0200 ++++ thunderbird-45.0/mozilla/browser/installer/package-manifest.in 2016-05-09 13:24:23.525852797 +0200 +@@ -495,6 +495,9 @@ + #ifdef XP_MACOSX + @RESPATH@/browser/components/SafariProfileMigrator.js + #endif ++#ifdef MOZ_ENABLE_GNOMEVFS ++@RESPATH@/components/@DLL_PREFIX@nkgnomevfs@DLL_SUFFIX@ ++#endif + @RESPATH@/components/nsINIProcessor.manifest + @RESPATH@/components/nsINIProcessor.js + @RESPATH@/components/nsPrompter.manifest +diff -up thunderbird-45.0/mozilla/config/system-headers.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/config/system-headers +--- thunderbird-45.0/mozilla/config/system-headers.moz-1134537-gnomevfsservice 2016-05-09 13:19:52.298048317 +0200 ++++ thunderbird-45.0/mozilla/config/system-headers 2016-05-09 13:19:52.318048303 +0200 +@@ -630,6 +630,14 @@ libgnome/libgnome.h + libgnomeui/gnome-icon-lookup.h + libgnomeui/gnome-icon-theme.h + libgnomeui/gnome-ui-init.h ++libgnomevfs/gnome-vfs-file-info.h ++libgnomevfs/gnome-vfs.h ++libgnomevfs/gnome-vfs-init.h ++libgnomevfs/gnome-vfs-mime.h ++libgnomevfs/gnome-vfs-mime-handlers.h ++libgnomevfs/gnome-vfs-mime-utils.h ++libgnomevfs/gnome-vfs-ops.h ++libgnomevfs/gnome-vfs-standard-callbacks.h + lib$routines.h + limits + limits.h +diff -up thunderbird-45.0/mozilla/configure.in.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/configure.in +--- thunderbird-45.0/mozilla/configure.in.moz-1134537-gnomevfsservice 2016-05-09 13:19:52.299048316 +0200 ++++ thunderbird-45.0/mozilla/configure.in 2016-05-09 13:21:31.457976836 +0200 +@@ -71,6 +71,7 @@ GTK3_VERSION=3.4.0 + GDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_4 + WINDRES_VERSION=2.14.90 + W32API_VERSION=3.14 ++GNOMEVFS_VERSION=2.0 + GNOMEUI_VERSION=2.2.0 + GCONF_VERSION=1.2.1 + STARTUP_NOTIFICATION_VERSION=0.8 +@@ -4632,7 +4633,7 @@ then + fi + + dnl ======================================================== +-dnl = GIO and GConf support module ++dnl = GnomeVFS, GIO and GConf support module + dnl ======================================================== + + if test "$MOZ_X11" +@@ -4646,6 +4647,31 @@ then + fi + + dnl ======================================================== ++ dnl = GnomeVFS support module ++ dnl ======================================================== ++ MOZ_ARG_ENABLE_BOOL(gnomevfs, ++ [ --enable-gnomevfs Enable GnomeVFS support (default: disabled)], ++ MOZ_ENABLE_GNOMEVFS=force, ++ MOZ_ENABLE_GNOMEVFS=) ++ ++ if test "$MOZ_ENABLE_GNOMEVFS" ++ then ++ PKG_CHECK_MODULES(MOZ_GNOMEVFS, gnome-vfs-2.0 >= $GNOMEVFS_VERSION gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION,[ ++ MOZ_GNOMEVFS_LIBS=`echo $MOZ_GNOMEVFS_LIBS | sed 's/-llinc\>//'` ++ MOZ_ENABLE_GNOMEVFS=1 ++ AC_DEFINE(MOZ_ENABLE_GNOMEVFS) ++ ],[ ++ if test "$MOZ_ENABLE_GNOMEVFS" = "force" ++ then ++ AC_MSG_ERROR([* * * Could not find gnome-vfs-module-2.0 >= $GNOMEVFS_VERSION]) ++ fi ++ MOZ_ENABLE_GNOMEVFS= ++ ]) ++ fi ++ ++ AC_SUBST(MOZ_ENABLE_GNOMEVFS) ++ ++ dnl ======================================================== + dnl = GIO support module + dnl ======================================================== + MOZ_ARG_DISABLE_BOOL(gio, +@@ -6297,6 +6323,19 @@ MOZ_ARG_ENABLE_STRING(extensions, + done], + MOZ_EXTENSIONS="$MOZ_EXTENSIONS_DEFAULT") + ++if test -z "$MOZ_ENABLE_GNOMEVFS" -a `echo "$MOZ_EXTENSIONS" | grep -c gnomevfs` -ne 0; then ++ # Suppress warning on non-X11 platforms ++ if test -n "$MOZ_X11"; then ++ AC_MSG_WARN([Removing gnomevfs from MOZ_EXTENSIONS due to no --enable-gnomevfs.]) ++ fi ++ MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|gnomevfs||'` ++fi ++ ++dnl Do not build gnomevfs with libxul based apps ++if test -n "$LIBXUL_SDK_DIR" -a `echo "$MOZ_EXTENSIONS" | grep -c gnomevfs` -ne 0; then ++ MOZ_EXTENSIONS=`echo $MOZ_EXTENSIONS | sed -e 's|gnomevfs||'` ++fi ++ + if test -z "$MOZ_ENABLE_GIO" -a `echo "$MOZ_EXTENSIONS" | grep -c gio` -ne 0; then + # Suppress warning on non-X11 platforms + if test -n "$MOZ_X11"; then +diff -up thunderbird-45.0/mozilla/extensions/gnomevfs/moz.build.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/extensions/gnomevfs/moz.build +--- thunderbird-45.0/mozilla/extensions/gnomevfs/moz.build.moz-1134537-gnomevfsservice 2016-05-09 13:19:52.321048300 +0200 ++++ thunderbird-45.0/mozilla/extensions/gnomevfs/moz.build 2016-05-09 13:19:52.321048300 +0200 +@@ -0,0 +1,19 @@ ++# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- ++# vim: set filetype=python: ++# 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 http://mozilla.org/MPL/2.0/. ++ ++SOURCES += [ ++ 'nsGnomeVFSProtocolHandler.cpp', ++] ++ ++XPCOMBinaryComponent('nkgnomevfs') ++ ++# make sure this component is never statically linked into the main ++# application. this is necessary since we don't want to force users ++# to install gnome-vfs2 in order to use the rest of mozilla ;-) ++ ++CXXFLAGS += CONFIG['MOZ_GNOMEVFS_CFLAGS'] ++ ++OS_LIBS += CONFIG['MOZ_GNOMEVFS_LIBS'] +diff -up thunderbird-45.0/mozilla/extensions/gnomevfs/nsGnomeVFSProtocolHandler.cpp.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/extensions/gnomevfs/nsGnomeVFSProtocolHandler.cpp +--- thunderbird-45.0/mozilla/extensions/gnomevfs/nsGnomeVFSProtocolHandler.cpp.moz-1134537-gnomevfsservice 2016-05-09 13:19:52.322048300 +0200 ++++ thunderbird-45.0/mozilla/extensions/gnomevfs/nsGnomeVFSProtocolHandler.cpp 2016-05-09 13:19:52.322048300 +0200 +@@ -0,0 +1,988 @@ ++/* vim:set ts=2 sw=2 et cindent: */ ++/* 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 http://mozilla.org/MPL/2.0/. */ ++ ++// GnomeVFS v2.2.2 is missing G_BEGIN_DECLS in gnome-vfs-module-callback.h ++extern "C" { ++#include ++#include ++#include ++} ++ ++#include ++ ++#include "nsServiceManagerUtils.h" ++#include "nsComponentManagerUtils.h" ++#include "mozilla/ModuleUtils.h" ++#include "nsIInterfaceRequestorUtils.h" ++#include "nsIPrefService.h" ++#include "nsIPrefBranch.h" ++#include "nsIObserver.h" ++#include "nsThreadUtils.h" ++#include "nsProxyRelease.h" ++#include "nsIAuthPrompt.h" ++#include "nsIStringBundle.h" ++#include "nsIStandardURL.h" ++#include "nsIURL.h" ++#include "nsMimeTypes.h" ++#include "nsNetUtil.h" ++#include "nsINetUtil.h" ++#include "nsAutoPtr.h" ++#include "nsError.h" ++#include "prlog.h" ++#include "prtime.h" ++#include "prprf.h" ++#include "plstr.h" ++#include "mozilla/Attributes.h" ++ ++#define MOZ_GNOMEVFS_SCHEME "moz-gnomevfs" ++#define MOZ_GNOMEVFS_SUPPORTED_PROTOCOLS "network.gnomevfs.supported-protocols" ++ ++//----------------------------------------------------------------------------- ++ ++// NSPR_LOG_MODULES=gnomevfs:5 ++#ifdef PR_LOGGING ++static PRLogModuleInfo *sGnomeVFSLog; ++#define LOG(args) PR_LOG(sGnomeVFSLog, PR_LOG_DEBUG, args) ++#else ++#define LOG(args) ++#endif ++ ++//----------------------------------------------------------------------------- ++ ++static nsresult ++MapGnomeVFSResult(GnomeVFSResult result) ++{ ++ switch (result) ++ { ++ case GNOME_VFS_OK: return NS_OK; ++ case GNOME_VFS_ERROR_NOT_FOUND: return NS_ERROR_FILE_NOT_FOUND; ++ case GNOME_VFS_ERROR_INTERNAL: return NS_ERROR_UNEXPECTED; ++ case GNOME_VFS_ERROR_BAD_PARAMETERS: return NS_ERROR_INVALID_ARG; ++ case GNOME_VFS_ERROR_NOT_SUPPORTED: return NS_ERROR_NOT_AVAILABLE; ++ case GNOME_VFS_ERROR_CORRUPTED_DATA: return NS_ERROR_FILE_CORRUPTED; ++ case GNOME_VFS_ERROR_TOO_BIG: return NS_ERROR_FILE_TOO_BIG; ++ case GNOME_VFS_ERROR_NO_SPACE: return NS_ERROR_FILE_NO_DEVICE_SPACE; ++ case GNOME_VFS_ERROR_READ_ONLY: ++ case GNOME_VFS_ERROR_READ_ONLY_FILE_SYSTEM: return NS_ERROR_FILE_READ_ONLY; ++ case GNOME_VFS_ERROR_INVALID_URI: ++ case GNOME_VFS_ERROR_INVALID_HOST_NAME: return NS_ERROR_MALFORMED_URI; ++ case GNOME_VFS_ERROR_ACCESS_DENIED: ++ case GNOME_VFS_ERROR_NOT_PERMITTED: ++ case GNOME_VFS_ERROR_LOGIN_FAILED: return NS_ERROR_FILE_ACCESS_DENIED; ++ case GNOME_VFS_ERROR_EOF: return NS_BASE_STREAM_CLOSED; ++ case GNOME_VFS_ERROR_NOT_A_DIRECTORY: return NS_ERROR_FILE_NOT_DIRECTORY; ++ case GNOME_VFS_ERROR_IN_PROGRESS: return NS_ERROR_IN_PROGRESS; ++ case GNOME_VFS_ERROR_FILE_EXISTS: return NS_ERROR_FILE_ALREADY_EXISTS; ++ case GNOME_VFS_ERROR_IS_DIRECTORY: return NS_ERROR_FILE_IS_DIRECTORY; ++ case GNOME_VFS_ERROR_NO_MEMORY: return NS_ERROR_OUT_OF_MEMORY; ++ case GNOME_VFS_ERROR_HOST_NOT_FOUND: ++ case GNOME_VFS_ERROR_HOST_HAS_NO_ADDRESS: return NS_ERROR_UNKNOWN_HOST; ++ case GNOME_VFS_ERROR_CANCELLED: ++ case GNOME_VFS_ERROR_INTERRUPTED: return NS_ERROR_ABORT; ++ case GNOME_VFS_ERROR_DIRECTORY_NOT_EMPTY: return NS_ERROR_FILE_DIR_NOT_EMPTY; ++ case GNOME_VFS_ERROR_NAME_TOO_LONG: return NS_ERROR_FILE_NAME_TOO_LONG; ++ case GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE: return NS_ERROR_UNKNOWN_PROTOCOL; ++ ++ /* No special mapping for these error codes... ++ ++ case GNOME_VFS_ERROR_GENERIC: ++ case GNOME_VFS_ERROR_IO: ++ case GNOME_VFS_ERROR_WRONG_FORMAT: ++ case GNOME_VFS_ERROR_BAD_FILE: ++ case GNOME_VFS_ERROR_NOT_OPEN: ++ case GNOME_VFS_ERROR_INVALID_OPEN_MODE: ++ case GNOME_VFS_ERROR_TOO_MANY_OPEN_FILES: ++ case GNOME_VFS_ERROR_LOOP: ++ case GNOME_VFS_ERROR_DIRECTORY_BUSY: ++ case GNOME_VFS_ERROR_TOO_MANY_LINKS: ++ case GNOME_VFS_ERROR_NOT_SAME_FILE_SYSTEM: ++ case GNOME_VFS_ERROR_SERVICE_OBSOLETE: ++ case GNOME_VFS_ERROR_PROTOCOL_ERROR: ++ case GNOME_VFS_ERROR_NO_MASTER_BROWSER: ++ ++ */ ++ ++ // Make GCC happy ++ default: ++ return NS_ERROR_FAILURE; ++ } ++ ++ return NS_ERROR_FAILURE; ++} ++ ++//----------------------------------------------------------------------------- ++ ++static void ++ProxiedAuthCallback(gconstpointer in, ++ gsize in_size, ++ gpointer out, ++ gsize out_size, ++ gpointer callback_data) ++{ ++ GnomeVFSModuleCallbackAuthenticationIn *authIn = ++ (GnomeVFSModuleCallbackAuthenticationIn *) in; ++ GnomeVFSModuleCallbackAuthenticationOut *authOut = ++ (GnomeVFSModuleCallbackAuthenticationOut *) out; ++ ++ LOG(("gnomevfs: ProxiedAuthCallback [uri=%s]\n", authIn->uri)); ++ ++ // Without a channel, we have no way of getting a prompter. ++ nsIChannel *channel = (nsIChannel *) callback_data; ++ if (!channel) ++ return; ++ ++ nsCOMPtr prompt; ++ NS_QueryNotificationCallbacks(channel, prompt); ++ ++ // If no auth prompt, then give up. We could failover to using the ++ // WindowWatcher service, but that might defeat a consumer's purposeful ++ // attempt to disable authentication (for whatever reason). ++ if (!prompt) ++ return; ++ ++ // Parse out the host and port... ++ nsCOMPtr uri; ++ channel->GetURI(getter_AddRefs(uri)); ++ if (!uri) ++ return; ++ ++#ifdef DEBUG ++ { ++ // ++ // Make sure authIn->uri is consistent with the channel's URI. ++ // ++ // XXX This check is probably not IDN safe, and it might incorrectly ++ // fire as a result of escaping differences. It's unclear what ++ // kind of transforms GnomeVFS might have applied to the URI spec ++ // that we originally gave to it. In spite of the likelihood of ++ // false hits, this check is probably still valuable. ++ // ++ nsAutoCString spec; ++ uri->GetSpec(spec); ++ int uriLen = strlen(authIn->uri); ++ if (!StringHead(spec, uriLen).Equals(nsDependentCString(authIn->uri, uriLen))) ++ { ++ LOG(("gnomevfs: [spec=%s authIn->uri=%s]\n", spec.get(), authIn->uri)); ++ NS_ERROR("URI mismatch"); ++ } ++ } ++#endif ++ ++ nsAutoCString scheme, hostPort; ++ uri->GetScheme(scheme); ++ uri->GetHostPort(hostPort); ++ ++ // It doesn't make sense for either of these strings to be empty. What kind ++ // of funky URI is this? ++ if (scheme.IsEmpty() || hostPort.IsEmpty()) ++ return; ++ ++ // Construct the single signon key. Altering the value of this key will ++ // cause people's remembered passwords to be forgotten. Think carefully ++ // before changing the way this key is constructed. ++ nsAutoString key, realm; ++ ++ NS_ConvertUTF8toUTF16 dispHost(scheme); ++ dispHost.AppendLiteral("://"); ++ dispHost.Append(NS_ConvertUTF8toUTF16(hostPort)); ++ ++ key = dispHost; ++ if (authIn->realm) ++ { ++ // We assume the realm string is ASCII. That might be a bogus assumption, ++ // but we have no idea what encoding GnomeVFS is using, so for now we'll ++ // limit ourselves to ISO-Latin-1. XXX What is a better solution? ++ realm.Append('"'); ++ realm.Append(NS_ConvertASCIItoUTF16(authIn->realm)); ++ realm.Append('"'); ++ key.Append(' '); ++ key.Append(realm); ++ } ++ ++ // Construct the message string... ++ // ++ // We use Necko's string bundle here. This code really should be encapsulated ++ // behind some Necko API, after all this code is based closely on the code in ++ // nsHttpChannel.cpp. ++ ++ nsCOMPtr bundleSvc = ++ do_GetService(NS_STRINGBUNDLE_CONTRACTID); ++ if (!bundleSvc) ++ return; ++ ++ nsCOMPtr bundle; ++ bundleSvc->CreateBundle("chrome://global/locale/commonDialogs.properties", ++ getter_AddRefs(bundle)); ++ if (!bundle) ++ return; ++ ++ nsString message; ++ if (!realm.IsEmpty()) ++ { ++ const char16_t *strings[] = { realm.get(), dispHost.get() }; ++ bundle->FormatStringFromName(MOZ_UTF16("EnterUserPasswordForRealm"), ++ strings, 2, getter_Copies(message)); ++ } ++ else ++ { ++ const char16_t *strings[] = { dispHost.get() }; ++ bundle->FormatStringFromName(MOZ_UTF16("EnterUserPasswordFor"), ++ strings, 1, getter_Copies(message)); ++ } ++ if (message.IsEmpty()) ++ return; ++ ++ // Prompt the user... ++ nsresult rv; ++ bool retval = false; ++ char16_t *user = nullptr, *pass = nullptr; ++ ++ rv = prompt->PromptUsernameAndPassword(nullptr, message.get(), ++ key.get(), ++ nsIAuthPrompt::SAVE_PASSWORD_PERMANENTLY, ++ &user, &pass, &retval); ++ if (NS_FAILED(rv)) ++ return; ++ if (!retval || !user || !pass) ++ return; ++ ++ // XXX We need to convert the UTF-16 username and password from our dialog to ++ // strings that GnomeVFS can understand. It's unclear what encoding GnomeVFS ++ // expects, so for now we assume 7-bit ASCII. Hopefully, we can get a better ++ // solution at some point. ++ ++ // One copy is never enough... ++ authOut->username = g_strdup(NS_LossyConvertUTF16toASCII(user).get()); ++ authOut->password = g_strdup(NS_LossyConvertUTF16toASCII(pass).get()); ++ ++ nsMemory::Free(user); ++ nsMemory::Free(pass); ++} ++ ++struct nsGnomeVFSAuthCallbackEvent : public nsRunnable ++{ ++ gconstpointer in; ++ gsize in_size; ++ gpointer out; ++ gsize out_size; ++ gpointer callback_data; ++ ++ NS_IMETHOD Run() { ++ ProxiedAuthCallback(in, in_size, out, out_size, callback_data); ++ return NS_OK; ++ } ++}; ++ ++static void ++AuthCallback(gconstpointer in, ++ gsize in_size, ++ gpointer out, ++ gsize out_size, ++ gpointer callback_data) ++{ ++ // Need to proxy this callback over to the main thread. Synchronous dispatch ++ // is required in order to provide data to the GnomeVFS callback. ++ ++ nsRefPtr ev = new nsGnomeVFSAuthCallbackEvent(); ++ if (!ev) ++ return; // OOM ++ ++ ev->in = in; ++ ev->in_size = in_size; ++ ev->out = out; ++ ev->out_size = out_size; ++ ev->callback_data = callback_data; ++ ++ NS_DispatchToMainThread(ev, NS_DISPATCH_SYNC); ++} ++ ++//----------------------------------------------------------------------------- ++ ++static gint ++FileInfoComparator(gconstpointer a, gconstpointer b) ++{ ++ const GnomeVFSFileInfo *ia = (const GnomeVFSFileInfo *) a; ++ const GnomeVFSFileInfo *ib = (const GnomeVFSFileInfo *) b; ++ ++ return strcasecmp(ia->name, ib->name); ++} ++ ++//----------------------------------------------------------------------------- ++ ++class nsGnomeVFSInputStream : public nsIInputStream ++{ ++ public: ++ NS_DECL_THREADSAFE_ISUPPORTS ++ NS_DECL_NSIINPUTSTREAM ++ ++ nsGnomeVFSInputStream(const nsCString &uriSpec) ++ : mSpec(uriSpec) ++ , mChannel(nullptr) ++ , mHandle(nullptr) ++ , mBytesRemaining(UINT64_MAX) ++ , mStatus(NS_OK) ++ , mDirList(nullptr) ++ , mDirListPtr(nullptr) ++ , mDirBufCursor(0) ++ , mDirOpen(false) {} ++ ++ ~nsGnomeVFSInputStream() { Close(); } ++ ++ void SetChannel(nsIChannel *channel) ++ { ++ // We need to hold an owning reference to our channel. This is done ++ // so we can access the channel's notification callbacks to acquire ++ // a reference to a nsIAuthPrompt if we need to handle a GnomeVFS ++ // authentication callback. ++ // ++ // However, the channel can only be accessed on the main thread, so ++ // we have to be very careful with ownership. Moreover, it doesn't ++ // support threadsafe addref/release, so proxying is the answer. ++ // ++ // Also, it's important to note that this likely creates a reference ++ // cycle since the channel likely owns this stream. This reference ++ // cycle is broken in our Close method. ++ ++ NS_ADDREF(mChannel = channel); ++ } ++ ++ private: ++ GnomeVFSResult DoOpen(); ++ GnomeVFSResult DoRead(char *aBuf, uint32_t aCount, uint32_t *aCountRead); ++ nsresult SetContentTypeOfChannel(const char *contentType); ++ ++ private: ++ nsCString mSpec; ++ nsIChannel *mChannel; // manually refcounted ++ GnomeVFSHandle *mHandle; ++ uint64_t mBytesRemaining; ++ nsresult mStatus; ++ GList *mDirList; ++ GList *mDirListPtr; ++ nsCString mDirBuf; ++ uint32_t mDirBufCursor; ++ bool mDirOpen; ++}; ++ ++GnomeVFSResult ++nsGnomeVFSInputStream::DoOpen() ++{ ++ GnomeVFSResult rv; ++ ++ NS_ASSERTION(mHandle == nullptr, "already open"); ++ ++ // Push a callback handler on the stack for this thread, so we can intercept ++ // authentication requests from GnomeVFS. We'll use the channel to get a ++ // nsIAuthPrompt instance. ++ ++ gnome_vfs_module_callback_push(GNOME_VFS_MODULE_CALLBACK_AUTHENTICATION, ++ AuthCallback, mChannel, nullptr); ++ ++ // Query the mime type first (this could return nullptr). ++ // ++ // XXX We need to do this up-front in order to determine how to open the URI. ++ // Unfortunately, the error code GNOME_VFS_ERROR_IS_DIRECTORY is not ++ // always returned by gnome_vfs_open when we pass it a URI to a directory! ++ // Otherwise, we could have used that as a way to failover to opening the ++ // URI as a directory. Also, it would have been ideal if ++ // gnome_vfs_get_file_info_from_handle were actually implemented by the ++ // smb:// module, since that would have allowed us to potentially save a ++ // round trip to the server to discover the mime type of the document in ++ // the case where gnome_vfs_open would have been used. (Oh well! /me ++ // throws hands up in the air and moves on...) ++ ++ GnomeVFSFileInfo info = {0}; ++ rv = gnome_vfs_get_file_info(mSpec.get(), &info, GnomeVFSFileInfoOptions( ++ GNOME_VFS_FILE_INFO_DEFAULT | ++ GNOME_VFS_FILE_INFO_FOLLOW_LINKS)); ++ if (rv == GNOME_VFS_OK) ++ { ++ if (info.type == GNOME_VFS_FILE_TYPE_DIRECTORY) ++ { ++ rv = gnome_vfs_directory_list_load(&mDirList, mSpec.get(), ++ GNOME_VFS_FILE_INFO_DEFAULT); ++ ++ LOG(("gnomevfs: gnome_vfs_directory_list_load returned %d (%s) [spec=\"%s\"]\n", ++ rv, gnome_vfs_result_to_string(rv), mSpec.get())); ++ } ++ else ++ { ++ rv = gnome_vfs_open(&mHandle, mSpec.get(), GNOME_VFS_OPEN_READ); ++ ++ LOG(("gnomevfs: gnome_vfs_open returned %d (%s) [spec=\"%s\"]\n", ++ rv, gnome_vfs_result_to_string(rv), mSpec.get())); ++ } ++ } ++ ++ gnome_vfs_module_callback_pop(GNOME_VFS_MODULE_CALLBACK_AUTHENTICATION); ++ ++ if (rv == GNOME_VFS_OK) ++ { ++ if (mHandle) ++ { ++ // Here we set the content type of the channel to the value of the mime ++ // type determined by GnomeVFS. However, if GnomeVFS is telling us that ++ // the document is binary, we'll ignore that and keep the channel's ++ // content type unspecified. That will enable our content type sniffing ++ // algorithms. This should provide more consistent mime type handling. ++ ++ if (info.mime_type && (strcmp(info.mime_type, APPLICATION_OCTET_STREAM) != 0)) ++ SetContentTypeOfChannel(info.mime_type); ++ ++ mBytesRemaining = info.size; ++ ++ // Update the content length attribute on the channel. We do this ++ // synchronously without proxying. This hack is not as bad as it looks! ++ if (mBytesRemaining > INT64_MAX) { ++ mChannel->SetContentLength(-1); ++ } else { ++ mChannel->SetContentLength(mBytesRemaining); ++ } ++ } ++ else ++ { ++ mDirOpen = true; ++ ++ // Sort mDirList ++ mDirList = g_list_sort(mDirList, FileInfoComparator); ++ mDirListPtr = mDirList; ++ ++ // Write base URL (make sure it ends with a '/') ++ mDirBuf.AppendLiteral("300: "); ++ mDirBuf.Append(mSpec); ++ if (mSpec.get()[mSpec.Length() - 1] != '/') ++ mDirBuf.Append('/'); ++ mDirBuf.Append('\n'); ++ ++ // Write column names ++ mDirBuf.AppendLiteral("200: filename content-length last-modified file-type\n"); ++ ++ // Write charset (assume UTF-8) ++ // XXX is this correct? ++ mDirBuf.AppendLiteral("301: UTF-8\n"); ++ ++ SetContentTypeOfChannel(APPLICATION_HTTP_INDEX_FORMAT); ++ } ++ } ++ ++ gnome_vfs_file_info_clear(&info); ++ return rv; ++} ++ ++GnomeVFSResult ++nsGnomeVFSInputStream::DoRead(char *aBuf, uint32_t aCount, uint32_t *aCountRead) ++{ ++ GnomeVFSResult rv; ++ ++ if (mHandle) ++ { ++ GnomeVFSFileSize bytesRead; ++ rv = gnome_vfs_read(mHandle, aBuf, aCount, &bytesRead); ++ if (rv == GNOME_VFS_OK) ++ { ++ // aCount is 32-bit, so aCountRead is under 32-bit value. ++ *aCountRead = (uint32_t) bytesRead; ++ mBytesRemaining -= *aCountRead; ++ } ++ } ++ else if (mDirOpen) ++ { ++ rv = GNOME_VFS_OK; ++ ++ while (aCount && rv != GNOME_VFS_ERROR_EOF) ++ { ++ // Copy data out of our buffer ++ uint32_t bufLen = mDirBuf.Length() - mDirBufCursor; ++ if (bufLen) ++ { ++ uint32_t n = std::min(bufLen, aCount); ++ memcpy(aBuf, mDirBuf.get() + mDirBufCursor, n); ++ *aCountRead += n; ++ aBuf += n; ++ aCount -= n; ++ mDirBufCursor += n; ++ } ++ ++ if (!mDirListPtr) // Are we at the end of the directory list? ++ { ++ rv = GNOME_VFS_ERROR_EOF; ++ } ++ else if (aCount) // Do we need more data? ++ { ++ GnomeVFSFileInfo *info = (GnomeVFSFileInfo *) mDirListPtr->data; ++ ++ // Prune '.' and '..' from directory listing. ++ if (info->name[0] == '.' && ++ (info->name[1] == '\0' || ++ (info->name[1] == '.' && info->name[2] == '\0'))) ++ { ++ mDirListPtr = mDirListPtr->next; ++ continue; ++ } ++ ++ mDirBuf.AssignLiteral("201: "); ++ ++ // The "filename" field ++ nsCString escName; ++ nsCOMPtr nu = do_GetService(NS_NETUTIL_CONTRACTID); ++ if (nu) { ++ nu->EscapeString(nsDependentCString(info->name), ++ nsINetUtil::ESCAPE_URL_PATH, escName); ++ ++ mDirBuf.Append(escName); ++ mDirBuf.Append(' '); ++ } ++ ++ // The "content-length" field ++ // XXX truncates size from 64-bit to 32-bit ++ mDirBuf.AppendInt(int32_t(info->size)); ++ mDirBuf.Append(' '); ++ ++ // The "last-modified" field ++ // ++ // NSPR promises: PRTime is compatible with time_t ++ // we just need to convert from seconds to microseconds ++ PRExplodedTime tm; ++ PRTime pt = ((PRTime) info->mtime) * 1000000; ++ PR_ExplodeTime(pt, PR_GMTParameters, &tm); ++ { ++ char buf[64]; ++ PR_FormatTimeUSEnglish(buf, sizeof(buf), ++ "%a,%%20%d%%20%b%%20%Y%%20%H:%M:%S%%20GMT ", &tm); ++ mDirBuf.Append(buf); ++ } ++ ++ // The "file-type" field ++ switch (info->type) ++ { ++ case GNOME_VFS_FILE_TYPE_REGULAR: ++ mDirBuf.AppendLiteral("FILE "); ++ break; ++ case GNOME_VFS_FILE_TYPE_DIRECTORY: ++ mDirBuf.AppendLiteral("DIRECTORY "); ++ break; ++ case GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK: ++ mDirBuf.AppendLiteral("SYMBOLIC-LINK "); ++ break; ++ default: ++ break; ++ } ++ ++ mDirBuf.Append('\n'); ++ ++ mDirBufCursor = 0; ++ mDirListPtr = mDirListPtr->next; ++ } ++ } ++ } ++ else ++ { ++ NS_NOTREACHED("reading from what?"); ++ rv = GNOME_VFS_ERROR_GENERIC; ++ } ++ ++ return rv; ++} ++ ++// This class is used to implement SetContentTypeOfChannel. ++class nsGnomeVFSSetContentTypeEvent : public nsRunnable ++{ ++ public: ++ nsGnomeVFSSetContentTypeEvent(nsIChannel *channel, const char *contentType) ++ : mChannel(channel), mContentType(contentType) ++ { ++ // stash channel reference in mChannel. no AddRef here! see note ++ // in SetContentTypeOfchannel. ++ } ++ ++ NS_IMETHOD Run() ++ { ++ mChannel->SetContentType(mContentType); ++ return NS_OK; ++ } ++ ++ private: ++ nsIChannel *mChannel; ++ nsCString mContentType; ++}; ++ ++nsresult ++nsGnomeVFSInputStream::SetContentTypeOfChannel(const char *contentType) ++{ ++ // We need to proxy this call over to the main thread. We post an ++ // asynchronous event in this case so that we don't delay reading data, and ++ // we know that this is safe to do since the channel's reference will be ++ // released asynchronously as well. We trust the ordering of the main ++ // thread's event queue to protect us against memory corruption. ++ ++ nsresult rv; ++ nsCOMPtr ev = ++ new nsGnomeVFSSetContentTypeEvent(mChannel, contentType); ++ if (!ev) ++ { ++ rv = NS_ERROR_OUT_OF_MEMORY; ++ } ++ else ++ { ++ rv = NS_DispatchToMainThread(ev); ++ } ++ return rv; ++} ++ ++NS_IMPL_ISUPPORTS(nsGnomeVFSInputStream, nsIInputStream) ++ ++NS_IMETHODIMP ++nsGnomeVFSInputStream::Close() ++{ ++ if (mHandle) ++ { ++ gnome_vfs_close(mHandle); ++ mHandle = nullptr; ++ } ++ ++ if (mDirList) ++ { ++ // Destroy the list of GnomeVFSFileInfo objects... ++ g_list_foreach(mDirList, (GFunc) gnome_vfs_file_info_unref, nullptr); ++ g_list_free(mDirList); ++ mDirList = nullptr; ++ mDirListPtr = nullptr; ++ } ++ ++ if (mChannel) ++ { ++ nsresult rv = NS_OK; ++ ++ nsCOMPtr thread = do_GetMainThread(); ++ if (thread) ++ rv = NS_ProxyRelease(thread, mChannel); ++ ++ NS_ASSERTION(thread && NS_SUCCEEDED(rv), "leaking channel reference"); ++ mChannel = nullptr; ++ } ++ ++ mSpec.Truncate(); // free memory ++ ++ // Prevent future reads from re-opening the handle. ++ if (NS_SUCCEEDED(mStatus)) ++ mStatus = NS_BASE_STREAM_CLOSED; ++ ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSInputStream::Available(uint64_t *aResult) ++{ ++ if (NS_FAILED(mStatus)) ++ return mStatus; ++ ++ *aResult = mBytesRemaining; ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSInputStream::Read(char *aBuf, ++ uint32_t aCount, ++ uint32_t *aCountRead) ++{ ++ *aCountRead = 0; ++ ++ if (mStatus == NS_BASE_STREAM_CLOSED) ++ return NS_OK; ++ if (NS_FAILED(mStatus)) ++ return mStatus; ++ ++ GnomeVFSResult rv = GNOME_VFS_OK; ++ ++ // If this is our first-time through here, then open the URI. ++ if (!mHandle && !mDirOpen) ++ rv = DoOpen(); ++ ++ if (rv == GNOME_VFS_OK) ++ rv = DoRead(aBuf, aCount, aCountRead); ++ ++ if (rv != GNOME_VFS_OK) ++ { ++ // If we reach here, we hit some kind of error. EOF is not an error. ++ mStatus = MapGnomeVFSResult(rv); ++ if (mStatus == NS_BASE_STREAM_CLOSED) ++ return NS_OK; ++ ++ LOG(("gnomevfs: result %d [%s] mapped to 0x%x\n", ++ rv, gnome_vfs_result_to_string(rv), mStatus)); ++ } ++ return mStatus; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSInputStream::ReadSegments(nsWriteSegmentFun aWriter, ++ void *aClosure, ++ uint32_t aCount, ++ uint32_t *aResult) ++{ ++ // There is no way to implement this using GnomeVFS, but fortunately ++ // that doesn't matter. Because we are a blocking input stream, Necko ++ // isn't going to call our ReadSegments method. ++ NS_NOTREACHED("nsGnomeVFSInputStream::ReadSegments"); ++ return NS_ERROR_NOT_IMPLEMENTED; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSInputStream::IsNonBlocking(bool *aResult) ++{ ++ *aResult = false; ++ return NS_OK; ++} ++ ++//----------------------------------------------------------------------------- ++ ++class nsGnomeVFSProtocolHandler : public nsIProtocolHandler ++ , public nsIObserver ++{ ++ public: ++ NS_DECL_ISUPPORTS ++ NS_DECL_NSIPROTOCOLHANDLER ++ NS_DECL_NSIOBSERVER ++ ++ nsresult Init(); ++ ++ private: ++ void InitSupportedProtocolsPref(nsIPrefBranch *prefs); ++ bool IsSupportedProtocol(const nsCString &spec); ++ ++ nsCString mSupportedProtocols; ++}; ++ ++NS_IMPL_ISUPPORTS(nsGnomeVFSProtocolHandler, nsIProtocolHandler, nsIObserver) ++ ++nsresult ++nsGnomeVFSProtocolHandler::Init() ++{ ++#ifdef PR_LOGGING ++ sGnomeVFSLog = PR_NewLogModule("gnomevfs"); ++#endif ++ ++ if (!gnome_vfs_initialized()) ++ { ++ if (!gnome_vfs_init()) ++ { ++ NS_WARNING("gnome_vfs_init failed"); ++ return NS_ERROR_UNEXPECTED; ++ } ++ } ++ ++ nsCOMPtr prefs = do_GetService(NS_PREFSERVICE_CONTRACTID); ++ if (prefs) ++ { ++ InitSupportedProtocolsPref(prefs); ++ prefs->AddObserver(MOZ_GNOMEVFS_SUPPORTED_PROTOCOLS, this, false); ++ } ++ ++ return NS_OK; ++} ++ ++void ++nsGnomeVFSProtocolHandler::InitSupportedProtocolsPref(nsIPrefBranch *prefs) ++{ ++ // read preferences ++ nsresult rv = prefs->GetCharPref(MOZ_GNOMEVFS_SUPPORTED_PROTOCOLS, ++ getter_Copies(mSupportedProtocols)); ++ if (NS_SUCCEEDED(rv)) { ++ mSupportedProtocols.StripWhitespace(); ++ ToLowerCase(mSupportedProtocols); ++ } ++ else ++ mSupportedProtocols.AssignLiteral("smb:,sftp:"); // use defaults ++ ++ LOG(("gnomevfs: supported protocols \"%s\"\n", mSupportedProtocols.get())); ++} ++ ++bool ++nsGnomeVFSProtocolHandler::IsSupportedProtocol(const nsCString &aSpec) ++{ ++ const char *specString = aSpec.get(); ++ const char *colon = strchr(specString, ':'); ++ if (!colon) ++ return false; ++ ++ uint32_t length = colon - specString + 1; ++ ++ // + ':' ++ nsCString scheme(specString, length); ++ ++ char *found = PL_strcasestr(mSupportedProtocols.get(), scheme.get()); ++ if (!found) ++ return false; ++ ++ if (found[length] != ',' && found[length] != '\0') ++ return false; ++ ++ return true; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSProtocolHandler::GetScheme(nsACString &aScheme) ++{ ++ aScheme.Assign(MOZ_GNOMEVFS_SCHEME); ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSProtocolHandler::GetDefaultPort(int32_t *aDefaultPort) ++{ ++ *aDefaultPort = -1; ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSProtocolHandler::GetProtocolFlags(uint32_t *aProtocolFlags) ++{ ++ // Is URI_STD true of all GnomeVFS URI types? ++ *aProtocolFlags = URI_STD | URI_DANGEROUS_TO_LOAD; ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSProtocolHandler::NewURI(const nsACString &aSpec, ++ const char *aOriginCharset, ++ nsIURI *aBaseURI, ++ nsIURI **aResult) ++{ ++ const nsCString flatSpec(aSpec); ++ LOG(("gnomevfs: NewURI [spec=%s]\n", flatSpec.get())); ++ ++ if (!aBaseURI) ++ { ++ // ++ // XXX This check is used to limit the gnome-vfs protocols we support. For ++ // security reasons, it is best that we limit the protocols we support to ++ // those with known characteristics. We might want to lessen this ++ // restriction if it proves to be too heavy handed. A black list of ++ // protocols we don't want to support might be better. For example, we ++ // probably don't want to try to load "start-here:" inside the browser. ++ // There are others that fall into this category, which are best handled ++ // externally by Nautilus (or another app like it). ++ // ++ if (!IsSupportedProtocol(flatSpec)) ++ return NS_ERROR_UNKNOWN_PROTOCOL; ++ ++ // Verify that GnomeVFS supports this URI scheme. ++ GnomeVFSURI *uri = gnome_vfs_uri_new(flatSpec.get()); ++ if (!uri) ++ return NS_ERROR_UNKNOWN_PROTOCOL; ++ } ++ ++ // ++ // XXX Can we really assume that all gnome-vfs URIs can be parsed using ++ // nsStandardURL? We probably really need to implement nsIURI/nsIURL ++ // in terms of the gnome_vfs_uri_XXX methods, but at least this works ++ // correctly for smb:// URLs ;-) ++ // ++ // Also, it might not be possible to fully implement nsIURI/nsIURL in ++ // terms of GnomeVFSURI since some Necko methods have no GnomeVFS ++ // equivalent. ++ // ++ nsresult rv; ++ nsCOMPtr url = ++ do_CreateInstance(NS_STANDARDURL_CONTRACTID, &rv); ++ if (NS_FAILED(rv)) ++ return rv; ++ ++ rv = url->Init(nsIStandardURL::URLTYPE_STANDARD, -1, flatSpec, ++ aOriginCharset, aBaseURI); ++ if (NS_SUCCEEDED(rv)) ++ rv = CallQueryInterface(url, aResult); ++ ++ return rv; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSProtocolHandler::NewChannel2(nsIURI* aURI, ++ nsILoadInfo* aLoadInfo, ++ nsIChannel** aResult) ++{ ++ NS_ENSURE_ARG_POINTER(aURI); ++ nsresult rv; ++ ++ nsAutoCString spec; ++ rv = aURI->GetSpec(spec); ++ if (NS_FAILED(rv)) ++ return rv; ++ ++ nsRefPtr stream = new nsGnomeVFSInputStream(spec); ++ if (!stream) ++ { ++ rv = NS_ERROR_OUT_OF_MEMORY; ++ } ++ else ++ { ++ // start out assuming an unknown content-type. we'll set the content-type ++ // to something better once we open the URI. ++ rv = NS_NewInputStreamChannel(aResult, aURI, stream, ++ NS_LITERAL_CSTRING(UNKNOWN_CONTENT_TYPE)); ++ if (NS_SUCCEEDED(rv)) ++ stream->SetChannel(*aResult); ++ } ++ return rv; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSProtocolHandler::NewChannel(nsIURI *aURI, nsIChannel **aResult) ++{ ++ return NewChannel2(aURI, nullptr, aResult); ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSProtocolHandler::AllowPort(int32_t aPort, ++ const char *aScheme, ++ bool *aResult) ++{ ++ // Don't override anything. ++ *aResult = false; ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSProtocolHandler::Observe(nsISupports *aSubject, ++ const char *aTopic, ++ const char16_t *aData) ++{ ++ if (strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID) == 0) { ++ nsCOMPtr prefs = do_QueryInterface(aSubject); ++ InitSupportedProtocolsPref(prefs); ++ } ++ return NS_OK; ++} ++ ++//----------------------------------------------------------------------------- ++ ++#define NS_GNOMEVFSPROTOCOLHANDLER_CID \ ++{ /* 9b6dc177-a2e4-49e1-9c98-0a8384de7f6c */ \ ++ 0x9b6dc177, \ ++ 0xa2e4, \ ++ 0x49e1, \ ++ {0x9c, 0x98, 0x0a, 0x83, 0x84, 0xde, 0x7f, 0x6c} \ ++} ++ ++NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGnomeVFSProtocolHandler, Init) ++NS_DEFINE_NAMED_CID(NS_GNOMEVFSPROTOCOLHANDLER_CID); ++ ++static const mozilla::Module::CIDEntry kVFSCIDs[] = { ++ { &kNS_GNOMEVFSPROTOCOLHANDLER_CID, false, nullptr, nsGnomeVFSProtocolHandlerConstructor }, ++ { nullptr } ++}; ++ ++static const mozilla::Module::ContractIDEntry kVFSContracts[] = { ++ { NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX MOZ_GNOMEVFS_SCHEME, &kNS_GNOMEVFSPROTOCOLHANDLER_CID }, ++ { nullptr } ++}; ++ ++static const mozilla::Module kVFSModule = { ++ mozilla::Module::kVersion, ++ kVFSCIDs, ++ kVFSContracts ++}; ++ ++NSMODULE_DEFN(nsGnomeVFSModule) = &kVFSModule; +diff -up thunderbird-45.0/mozilla/mobile/android/installer/package-manifest.in.moz-1134537-gnomevfsservice thunderbird-45.0/mozilla/mobile/android/installer/package-manifest.in +--- thunderbird-45.0/mozilla/mobile/android/installer/package-manifest.in.moz-1134537-gnomevfsservice 2016-05-09 13:19:52.322048300 +0200 ++++ thunderbird-45.0/mozilla/mobile/android/installer/package-manifest.in 2016-05-09 13:25:02.680824572 +0200 +@@ -613,6 +613,12 @@ bin/libfreebl_32int64_3.so + @BINPATH@/crashreporter-override.ini + #endif + ++; [Extensions] ++; ++#ifdef MOZ_ENABLE_GNOMEVFS ++bin/components/@DLL_PREFIX@nkgnomevfs@DLL_SUFFIX@ ++#endif ++ + [mobile] + @BINPATH@/chrome/icons/ + @BINPATH@/chrome/chrome@JAREXT@ diff --git a/SOURCES/mozilla-1134537-delete-nsgnomevfsservice.patch b/SOURCES/mozilla-1134537-delete-nsgnomevfsservice.patch new file mode 100644 index 0000000..1fa54f0 --- /dev/null +++ b/SOURCES/mozilla-1134537-delete-nsgnomevfsservice.patch @@ -0,0 +1,413 @@ +diff -up thunderbird-45.0/mozilla/toolkit/system/gnome/moz.build.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/toolkit/system/gnome/moz.build +--- thunderbird-45.0/mozilla/toolkit/system/gnome/moz.build.moz-1134537-delete-nsgnomevfsservice 2016-04-07 23:33:34.000000000 +0200 ++++ thunderbird-45.0/mozilla/toolkit/system/gnome/moz.build 2016-05-11 13:56:15.863034987 +0200 +@@ -15,6 +15,12 @@ if CONFIG['MOZ_ENABLE_GCONF']: + 'nsGConfService.cpp', + ] + ++if CONFIG['MOZ_ENABLE_GNOMEVFS']: ++ SOURCES += [ ++ 'nsGnomeVFSService.cpp', ++ ] ++ ++ + if CONFIG['MOZ_ENABLE_GIO']: + SOURCES += [ + 'nsGIOService.cpp', +@@ -29,6 +35,7 @@ LOCAL_INCLUDES += [ + ] + + CXXFLAGS += CONFIG['MOZ_GCONF_CFLAGS'] ++CXXFLAGS += CONFIG['MOZ_GNOMEVFS_CFLAGS'] + CXXFLAGS += CONFIG['MOZ_GIO_CFLAGS'] + CXXFLAGS += CONFIG['GLIB_CFLAGS'] + CXXFLAGS += CONFIG['MOZ_DBUS_GLIB_CFLAGS'] +@@ -38,3 +45,5 @@ if CONFIG['MOZ_ENABLE_GTK']: + + if CONFIG['GNU_CXX']: + CXXFLAGS += ['-Wshadow'] ++ ++OS_LIBS += CONFIG['MOZ_GNOMEVFS_LIBS'] +\ No newline at end of file +diff -up thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeModule.cpp.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeModule.cpp +--- thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeModule.cpp.moz-1134537-delete-nsgnomevfsservice 2016-04-07 23:33:34.000000000 +0200 ++++ thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeModule.cpp 2016-05-11 13:54:01.306097859 +0200 +@@ -12,6 +12,10 @@ + #include "nsGConfService.h" + NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGConfService, Init) + #endif ++#ifdef MOZ_ENABLE_GNOMEVFS ++#include "nsGnomeVFSService.h" ++NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGnomeVFSService, Init) ++#endif + #ifdef MOZ_ENABLE_GIO + #include "nsGIOService.h" + #include "nsGSettingsService.h" +@@ -26,6 +30,9 @@ NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsSy + #ifdef MOZ_ENABLE_GCONF + NS_DEFINE_NAMED_CID(NS_GCONFSERVICE_CID); + #endif ++#ifdef MOZ_ENABLE_GNOMEVFS ++NS_DEFINE_NAMED_CID(NS_GNOMEVFSSERVICE_CID); ++#endif + #ifdef MOZ_ENABLE_GIO + NS_DEFINE_NAMED_CID(NS_GIOSERVICE_CID); + NS_DEFINE_NAMED_CID(NS_GSETTINGSSERVICE_CID); +@@ -37,6 +44,9 @@ static const mozilla::Module::CIDEntry k + #ifdef MOZ_ENABLE_GCONF + { &kNS_GCONFSERVICE_CID, false, nullptr, nsGConfServiceConstructor }, + #endif ++#ifdef MOZ_ENABLE_GNOMEVFS ++ { &kNS_GNOMEVFSSERVICE_CID, false, nullptr, nsGnomeVFSServiceConstructor }, ++#endif + #ifdef MOZ_ENABLE_GIO + { &kNS_GIOSERVICE_CID, false, nullptr, nsGIOServiceConstructor }, + { &kNS_GSETTINGSSERVICE_CID, false, nullptr, nsGSettingsServiceConstructor }, +@@ -50,6 +60,9 @@ static const mozilla::Module::ContractID + #ifdef MOZ_ENABLE_GCONF + { NS_GCONFSERVICE_CONTRACTID, &kNS_GCONFSERVICE_CID }, + #endif ++#ifdef MOZ_ENABLE_GNOMEVFS ++ { NS_GNOMEVFSSERVICE_CONTRACTID, &kNS_GNOMEVFSSERVICE_CID }, ++#endif + #ifdef MOZ_ENABLE_GIO + { NS_GIOSERVICE_CONTRACTID, &kNS_GIOSERVICE_CID }, + { NS_GSETTINGSSERVICE_CONTRACTID, &kNS_GSETTINGSSERVICE_CID }, +diff -up thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.cpp.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.cpp +--- thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.cpp.moz-1134537-delete-nsgnomevfsservice 2016-05-11 13:54:01.306097859 +0200 ++++ thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.cpp 2016-05-11 13:54:01.306097859 +0200 +@@ -0,0 +1,225 @@ ++/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* 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 http://mozilla.org/MPL/2.0/. */ ++ ++#include "nsGnomeVFSService.h" ++#include "nsStringGlue.h" ++#include "nsIURI.h" ++#include "nsTArray.h" ++#include "nsIStringEnumerator.h" ++#include "nsAutoPtr.h" ++ ++extern "C" { ++#include ++#include ++#include ++} ++ ++class nsGnomeVFSMimeApp : public nsIGnomeVFSMimeApp ++{ ++public: ++ NS_DECL_ISUPPORTS ++ NS_DECL_NSIGNOMEVFSMIMEAPP ++ ++ nsGnomeVFSMimeApp(GnomeVFSMimeApplication* aApp) : mApp(aApp) {} ++ ++private: ++ ~nsGnomeVFSMimeApp() { gnome_vfs_mime_application_free(mApp); } ++ GnomeVFSMimeApplication *mApp; ++}; ++ ++NS_IMPL_ISUPPORTS(nsGnomeVFSMimeApp, nsIGnomeVFSMimeApp) ++ ++NS_IMETHODIMP ++nsGnomeVFSMimeApp::GetId(nsACString& aId) ++{ ++ aId.Assign(mApp->id); ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSMimeApp::GetName(nsACString& aName) ++{ ++ aName.Assign(mApp->name); ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSMimeApp::GetCommand(nsACString& aCommand) ++{ ++ aCommand.Assign(mApp->command); ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSMimeApp::GetCanOpenMultipleFiles(bool* aCanOpen) ++{ ++ *aCanOpen = mApp->can_open_multiple_files; ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSMimeApp::GetExpectsURIs(int32_t* aExpects) ++{ ++ *aExpects = mApp->expects_uris; ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSMimeApp::Launch(const nsACString &aUri) ++{ ++ char *uri = gnome_vfs_make_uri_from_input(PromiseFlatCString(aUri).get()); ++ ++ if (! uri) ++ return NS_ERROR_FAILURE; ++ ++ GList uris = { 0 }; ++ uris.data = uri; ++ ++ GnomeVFSResult result = gnome_vfs_mime_application_launch(mApp, &uris); ++ g_free(uri); ++ ++ if (result != GNOME_VFS_OK) ++ return NS_ERROR_FAILURE; ++ ++ return NS_OK; ++} ++ ++class UTF8StringEnumerator : public nsIUTF8StringEnumerator ++{ ++public: ++ UTF8StringEnumerator() : mIndex(0) { } ++private: ++ ~UTF8StringEnumerator() { } ++ ++ NS_DECL_ISUPPORTS ++ NS_DECL_NSIUTF8STRINGENUMERATOR ++public: ++ nsTArray mStrings; ++ uint32_t mIndex; ++}; ++ ++NS_IMPL_ISUPPORTS(UTF8StringEnumerator, nsIUTF8StringEnumerator) ++ ++NS_IMETHODIMP ++UTF8StringEnumerator::HasMore(bool *aResult) ++{ ++ *aResult = mIndex < mStrings.Length(); ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++UTF8StringEnumerator::GetNext(nsACString& aResult) ++{ ++ if (mIndex >= mStrings.Length()) ++ return NS_ERROR_UNEXPECTED; ++ ++ aResult.Assign(mStrings[mIndex]); ++ ++mIndex; ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSMimeApp::GetSupportedURISchemes(nsIUTF8StringEnumerator** aSchemes) ++{ ++ *aSchemes = nullptr; ++ ++ RefPtr array = new UTF8StringEnumerator(); ++ NS_ENSURE_TRUE(array, NS_ERROR_OUT_OF_MEMORY); ++ ++ for (GList *list = mApp->supported_uri_schemes; list; list = list->next) { ++ if (!array->mStrings.AppendElement((char*) list->data)) { ++ return NS_ERROR_OUT_OF_MEMORY; ++ } ++ } ++ ++ NS_ADDREF(*aSchemes = array); ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSMimeApp::GetRequiresTerminal(bool* aRequires) ++{ ++ *aRequires = mApp->requires_terminal; ++ return NS_OK; ++} ++ ++nsresult ++nsGnomeVFSService::Init() ++{ ++ return gnome_vfs_init() ? NS_OK : NS_ERROR_FAILURE; ++} ++ ++NS_IMPL_ISUPPORTS(nsGnomeVFSService, nsIGnomeVFSService) ++ ++NS_IMETHODIMP ++nsGnomeVFSService::GetMimeTypeFromExtension(const nsACString &aExtension, ++ nsACString& aMimeType) ++{ ++ nsAutoCString fileExtToUse("."); ++ fileExtToUse.Append(aExtension); ++ ++ const char *mimeType = gnome_vfs_mime_type_from_name(fileExtToUse.get()); ++ aMimeType.Assign(mimeType); ++ ++ // |mimeType| points to internal gnome-vfs data, so don't free it. ++ ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSService::GetAppForMimeType(const nsACString &aMimeType, ++ nsIGnomeVFSMimeApp** aApp) ++{ ++ *aApp = nullptr; ++ GnomeVFSMimeApplication *app = ++ gnome_vfs_mime_get_default_application(PromiseFlatCString(aMimeType).get()); ++ ++ if (app) { ++ nsGnomeVFSMimeApp *mozApp = new nsGnomeVFSMimeApp(app); ++ NS_ENSURE_TRUE(mozApp, NS_ERROR_OUT_OF_MEMORY); ++ ++ NS_ADDREF(*aApp = mozApp); ++ } ++ ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSService::GetDescriptionForMimeType(const nsACString &aMimeType, ++ nsACString& aDescription) ++{ ++ const char *desc = ++ gnome_vfs_mime_get_description(PromiseFlatCString(aMimeType).get()); ++ aDescription.Assign(desc); ++ ++ // |desc| points to internal gnome-vfs data, so don't free it. ++ ++ return NS_OK; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSService::ShowURI(nsIURI *aURI) ++{ ++ nsAutoCString spec; ++ aURI->GetSpec(spec); ++ ++ if (gnome_vfs_url_show_with_env(spec.get(), nullptr) == GNOME_VFS_OK) ++ return NS_OK; ++ ++ return NS_ERROR_FAILURE; ++} ++ ++NS_IMETHODIMP ++nsGnomeVFSService::ShowURIForInput(const nsACString &aUri) ++{ ++ char* spec = gnome_vfs_make_uri_from_input(PromiseFlatCString(aUri).get()); ++ nsresult rv = NS_ERROR_FAILURE; ++ ++ if (gnome_vfs_url_show_with_env(spec, nullptr) == GNOME_VFS_OK) ++ rv = NS_OK; ++ ++ g_free(spec); ++ return rv; ++} +diff -up thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.h.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.h +--- thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.h.moz-1134537-delete-nsgnomevfsservice 2016-05-11 13:54:01.307097859 +0200 ++++ thunderbird-45.0/mozilla/toolkit/system/gnome/nsGnomeVFSService.h 2016-05-11 13:54:01.307097859 +0200 +@@ -0,0 +1,26 @@ ++/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* 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 http://mozilla.org/MPL/2.0/. */ ++ ++#ifndef nsGnomeVFSService_h_ ++#define nsGnomeVFSService_h_ ++ ++#include "nsIGnomeVFSService.h" ++#include "mozilla/Attributes.h" ++ ++#define NS_GNOMEVFSSERVICE_CID \ ++{0x5f43022c, 0x6194, 0x4b37, {0xb2, 0x6d, 0xe4, 0x10, 0x24, 0x62, 0x52, 0x64}} ++ ++class nsGnomeVFSService : public nsIGnomeVFSService ++{ ++public: ++ NS_DECL_ISUPPORTS ++ NS_DECL_NSIGNOMEVFSSERVICE ++ ++ nsresult Init(); ++private: ++ ~nsGnomeVFSService() { }; ++}; ++ ++#endif +diff -up thunderbird-45.0/mozilla/xpcom/system/moz.build.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/xpcom/system/moz.build +--- thunderbird-45.0/mozilla/xpcom/system/moz.build.moz-1134537-delete-nsgnomevfsservice 2016-04-07 23:33:35.000000000 +0200 ++++ thunderbird-45.0/mozilla/xpcom/system/moz.build 2016-05-11 13:54:01.307097859 +0200 +@@ -11,6 +11,7 @@ XPIDL_SOURCES += [ + 'nsIGConfService.idl', + 'nsIGeolocationProvider.idl', + 'nsIGIOService.idl', ++ 'nsIGnomeVFSService.idl', + 'nsIGSettingsService.idl', + 'nsIHapticFeedback.idl', + 'nsIPackageKitService.idl', +diff -up thunderbird-45.0/mozilla/xpcom/system/nsIGnomeVFSService.idl.moz-1134537-delete-nsgnomevfsservice thunderbird-45.0/mozilla/xpcom/system/nsIGnomeVFSService.idl +--- thunderbird-45.0/mozilla/xpcom/system/nsIGnomeVFSService.idl.moz-1134537-delete-nsgnomevfsservice 2016-05-11 13:54:01.307097859 +0200 ++++ thunderbird-45.0/mozilla/xpcom/system/nsIGnomeVFSService.idl 2016-05-11 13:54:01.307097859 +0200 +@@ -0,0 +1,64 @@ ++/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ ++/* 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 http://mozilla.org/MPL/2.0/. */ ++ ++#include "nsISupports.idl" ++ ++interface nsIUTF8StringEnumerator; ++interface nsIURI; ++ ++/* nsIGnomeVFSMimeApp holds information about an application that is looked up ++ with nsIGnomeVFSService::GetAppForMimeType. */ ++ ++[scriptable, uuid(66009894-9877-405b-9321-bf30420e34e6)] ++interface nsIGnomeVFSMimeApp : nsISupports ++{ ++ const long EXPECTS_URIS = 0; ++ const long EXPECTS_PATHS = 1; ++ const long EXPECTS_URIS_FOR_NON_FILES = 2; ++ ++ readonly attribute AUTF8String id; ++ readonly attribute AUTF8String name; ++ readonly attribute AUTF8String command; ++ readonly attribute boolean canOpenMultipleFiles; ++ readonly attribute long expectsURIs; // see constants above ++ readonly attribute nsIUTF8StringEnumerator supportedURISchemes; ++ readonly attribute boolean requiresTerminal; ++ ++ void launch(in AUTF8String uri); ++}; ++ ++/* ++ * The VFS service makes use of a registry for information. ++ * ++ * The MIME registry holds information about MIME types, such as which ++ * extensions map to a given MIME type. The MIME registry also stores the ++ * id of the application selected to handle each MIME type. ++ */ ++ ++[scriptable, uuid(d1ac73a6-2ceb-4164-8142-215afe7fe8a6)] ++interface nsIGnomeVFSService : nsISupports ++{ ++ /*** MIME registry methods ***/ ++ ++ /* Obtain the MIME type registered for an extension. The extension ++ should not include a leading dot. */ ++ AUTF8String getMimeTypeFromExtension(in AUTF8String extension); ++ ++ /* Obtain the preferred application for opening a given MIME type */ ++ nsIGnomeVFSMimeApp getAppForMimeType(in AUTF8String mimeType); ++ ++ /* Obtain a description for the given MIME type */ ++ AUTF8String getDescriptionForMimeType(in AUTF8String mimeType); ++ ++ /*** Misc. methods ***/ ++ ++ /* Open the given URI in the default application */ ++ void showURI(in nsIURI uri); ++ [noscript] void showURIForInput(in ACString uri); ++}; ++ ++%{C++ ++#define NS_GNOMEVFSSERVICE_CONTRACTID "@mozilla.org/gnome-vfs-service;1" ++%} diff --git a/SOURCES/mozilla-1134537-only-support-gio-in-nsioservice.patch b/SOURCES/mozilla-1134537-only-support-gio-in-nsioservice.patch new file mode 100644 index 0000000..9cba59b --- /dev/null +++ b/SOURCES/mozilla-1134537-only-support-gio-in-nsioservice.patch @@ -0,0 +1,71 @@ +# HG changeset patch +# User Alex Henrie +# Date 1425704794 25200 +# Fri Mar 06 22:06:34 2015 -0700 +# Node ID 7421abd87f753042bfe4f26c7cff1ebb0d047cef +# Parent 43fb1f92e8d41f1dc086b336532d9fa5720b6475 +Bug 1134537 - Only support GIO in nsIOService. + +diff --git a/netwerk/base/nsIOService.cpp b/netwerk/base/nsIOService.cpp +--- a/netwerk/base/nsIOService.cpp ++++ b/netwerk/base/nsIOService.cpp +@@ -434,17 +434,17 @@ nsIOService::GetProtocolHandler(const ch + ToLowerCase(contractID); + + rv = CallGetService(contractID.get(), result); + if (NS_SUCCEEDED(rv)) { + CacheProtocolHandler(scheme, *result); + return rv; + } + +-#ifdef MOZ_X11 ++#ifdef MOZ_ENABLE_GIO + // check to see whether GVFS can handle this URI scheme. if it can + // create a nsIURI for the "scheme:", then we assume it has support for + // the requested protocol. otherwise, we failover to using the default + // protocol handler. + + rv = CallGetService(NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX"moz-gio", + result); + if (NS_SUCCEEDED(rv)) { +@@ -455,40 +455,16 @@ nsIOService::GetProtocolHandler(const ch + rv = (*result)->NewURI(spec, nullptr, nullptr, &uri); + if (NS_SUCCEEDED(rv)) { + NS_RELEASE(uri); + return rv; + } + + NS_RELEASE(*result); + } +- +- // check to see whether GnomeVFS can handle this URI scheme. if it can +- // create a nsIURI for the "scheme:", then we assume it has support for +- // the requested protocol. otherwise, we failover to using the default +- // protocol handler. +- +- // XXX should this be generalized into something that searches a +- // category? (see bug 234714) +- +- rv = CallGetService(NS_NETWORK_PROTOCOL_CONTRACTID_PREFIX"moz-gnomevfs", +- result); +- if (NS_SUCCEEDED(rv)) { +- nsAutoCString spec(scheme); +- spec.Append(':'); +- +- nsIURI *uri; +- rv = (*result)->NewURI(spec, nullptr, nullptr, &uri); +- if (NS_SUCCEEDED(rv)) { +- NS_RELEASE(uri); +- return rv; +- } +- +- NS_RELEASE(*result); +- } + #endif + } + + // Okay we don't have a protocol handler to handle this url type, so use + // the default protocol handler. This will cause urls to get dispatched + // out to the OS ('cause we can't do anything with them) when we try to + // read from a channel created by the default protocol handler. + diff --git a/SOURCES/mozilla-1152515.patch b/SOURCES/mozilla-1152515.patch new file mode 100644 index 0000000..4be1ca7 --- /dev/null +++ b/SOURCES/mozilla-1152515.patch @@ -0,0 +1,68 @@ +diff --git a/security/pkix/lib/pkixder.cpp b/security/pkix/lib/pkixder.cpp +--- a/security/pkix/lib/pkixder.cpp ++++ b/security/pkix/lib/pkixder.cpp +@@ -466,28 +466,63 @@ TimeChoice(Reader& tagged, uint8_t expec + if (rv != Success) { + return rv; + } + + uint8_t b; + if (input.Read(b) != Success) { + return Result::ERROR_INVALID_DER_TIME; + } +- if (b != 'Z') { ++ ++ unsigned int hourOffset = 0; ++ unsigned int minuteOffset = 0; ++ bool allowOffset = false; ++ bool haveOffset = false; ++ bool offsetIsPositive = false; ++ ++ if (getenv("PKIX_ALLOW_CERT_UTCTIME_OFFSET") != 0) { ++ allowOffset = true; ++ } ++ ++ if (allowOffset && (b == '+' || b == '-')) { ++ haveOffset = true; ++ rv = ReadTwoDigits(input, 0u, 23u, hourOffset); ++ if (rv != Success) { ++ return rv; ++ } ++ rv = ReadTwoDigits(input, 0u, 59u, minuteOffset); ++ if (rv != Success) { ++ return rv; ++ } ++ if (b == '+') { ++ offsetIsPositive = true; ++ } ++ } else if (b != 'Z') { + return Result::ERROR_INVALID_DER_TIME; + } + if (End(input) != Success) { + return Result::ERROR_INVALID_DER_TIME; + } + + uint64_t totalSeconds = (static_cast(days) * 24u * 60u * 60u) + + (static_cast(hours) * 60u * 60u) + + (static_cast(minutes) * 60u) + + seconds; + ++ if (haveOffset) { ++ uint64_t offsetInSeconds = ++ (static_cast(hourOffset) * 60u * 60u) + ++ (static_cast(minuteOffset) * 60u); ++ if (offsetIsPositive) { ++ totalSeconds -= offsetInSeconds; ++ } else { ++ totalSeconds += offsetInSeconds; ++ } ++ } ++ + time = TimeFromElapsedSecondsAD(totalSeconds); + return Success; + } + + Result + IntegralBytes(Reader& input, uint8_t tag, + IntegralValueRestriction valueRestriction, + /*out*/ Input& value, diff --git a/SOURCES/mozilla-1170092-etc-conf.patch b/SOURCES/mozilla-1170092-etc-conf.patch new file mode 100644 index 0000000..2b10f06 --- /dev/null +++ b/SOURCES/mozilla-1170092-etc-conf.patch @@ -0,0 +1,96 @@ +diff -up firefox-45.0.1/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 firefox-45.0.1/extensions/pref/autoconfig/src/nsReadConfig.cpp +--- firefox-45.0.1/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 2016-03-15 23:37:54.000000000 +0100 ++++ firefox-45.0.1/extensions/pref/autoconfig/src/nsReadConfig.cpp 2016-03-21 16:10:42.540417899 +0100 +@@ -245,8 +245,20 @@ nsresult nsReadConfig::openAndEvaluateJS + return rv; + + rv = NS_NewLocalFileInputStream(getter_AddRefs(inStr), jsFile); +- if (NS_FAILED(rv)) +- return rv; ++ if (NS_FAILED(rv)) { ++ // Look for cfg file in /etc//pref ++ rv = NS_GetSpecialDirectory(NS_APP_PREFS_SYSTEM_CONFIG_DIR, ++ getter_AddRefs(jsFile)); ++ NS_ENSURE_SUCCESS(rv, rv); ++ ++ rv = jsFile->AppendNative(NS_LITERAL_CSTRING("pref")); ++ NS_ENSURE_SUCCESS(rv, rv); ++ rv = jsFile->AppendNative(nsDependentCString(aFileName)); ++ NS_ENSURE_SUCCESS(rv, rv); ++ ++ rv = NS_NewLocalFileInputStream(getter_AddRefs(inStr), jsFile); ++ NS_ENSURE_SUCCESS(rv, rv); ++ } + + } else { + nsAutoCString location("resource://gre/defaults/autoconfig/"); +diff -up firefox-45.0.1/modules/libpref/Preferences.cpp.1170092 firefox-45.0.1/modules/libpref/Preferences.cpp +--- firefox-45.0.1/modules/libpref/Preferences.cpp.1170092 2016-03-21 16:10:42.540417899 +0100 ++++ firefox-45.0.1/modules/libpref/Preferences.cpp 2016-03-21 16:13:29.145888710 +0100 +@@ -1214,6 +1214,8 @@ static nsresult pref_InitInitialObjects( + // - jar:$gre/omni.jar!/defaults/preferences/*.js + // Thus, in omni.jar case, we always load app-specific default preferences + // from omni.jar, whether or not $app == $gre. ++ // At very end load configuration from system config location: ++ // - /etc/firefox/pref/*.js + + nsZipFind *findPtr; + nsAutoPtr find; +diff -up firefox-45.0.1/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-45.0.1/toolkit/xre/nsXREDirProvider.cpp +--- firefox-45.0.1/toolkit/xre/nsXREDirProvider.cpp.1170092 2016-03-15 23:37:46.000000000 +0100 ++++ firefox-45.0.1/toolkit/xre/nsXREDirProvider.cpp 2016-03-21 16:12:06.498655156 +0100 +@@ -51,6 +51,7 @@ + #endif + #ifdef XP_UNIX + #include ++#include "nsIXULAppInfo.h" + #endif + #ifdef XP_IOS + #include "UIKitDirProvider.h" +@@ -457,6 +458,20 @@ nsXREDirProvider::GetFile(const char* aP + } + } + } ++#if defined(XP_UNIX) ++ if (!strcmp(aProperty, NS_APP_PREFS_SYSTEM_CONFIG_DIR)) { ++ nsCString sysConfigDir = NS_LITERAL_CSTRING("/etc/"); ++ nsCOMPtr appInfo = do_GetService("@mozilla.org/xre/app-info;1"); ++ if (!appInfo) ++ return NS_ERROR_NOT_AVAILABLE; ++ nsCString appName; ++ appInfo->GetName(appName); ++ ToLowerCase(appName); ++ sysConfigDir.Append(appName); ++ return NS_NewNativeLocalFile(sysConfigDir, false, aFile); ++ } ++#endif ++ + if (NS_FAILED(rv) || !file) + return NS_ERROR_FAILURE; + +@@ -753,6 +768,14 @@ nsXREDirProvider::GetFilesInternal(const + LoadDirIntoArray(mXULAppDir, kAppendPrefDir, directories); + LoadDirsIntoArray(mAppBundleDirectories, + kAppendPrefDir, directories); ++ // Add /etc//pref/ directory if it exists ++ nsCOMPtr systemPrefDir; ++ rv = NS_GetSpecialDirectory(NS_APP_PREFS_SYSTEM_CONFIG_DIR, getter_AddRefs(systemPrefDir)); ++ if (NS_SUCCEEDED(rv)) { ++ rv = systemPrefDir->AppendNative(NS_LITERAL_CSTRING("pref")); ++ if (NS_SUCCEEDED(rv)) ++ directories.AppendObject(systemPrefDir); ++ } + + rv = NS_NewArrayEnumerator(aResult, directories); + } +diff -up firefox-45.0.1/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 firefox-45.0.1/xpcom/io/nsAppDirectoryServiceDefs.h +--- firefox-45.0.1/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 2016-03-15 23:37:47.000000000 +0100 ++++ firefox-45.0.1/xpcom/io/nsAppDirectoryServiceDefs.h 2016-03-21 16:10:42.541417902 +0100 +@@ -67,6 +67,7 @@ + #define NS_APP_PREFS_DEFAULTS_DIR_LIST "PrefDL" + #define NS_EXT_PREFS_DEFAULTS_DIR_LIST "ExtPrefDL" + #define NS_APP_PREFS_OVERRIDE_DIR "PrefDOverride" // Directory for per-profile defaults ++#define NS_APP_PREFS_SYSTEM_CONFIG_DIR "PrefSysConf" // Directory with system-wide configuration + + #define NS_APP_USER_PROFILE_50_DIR "ProfD" + #define NS_APP_USER_PROFILE_LOCAL_50_DIR "ProfLD" diff --git a/SOURCES/mozilla-1253216-disable-ion.patch b/SOURCES/mozilla-1253216-disable-ion.patch new file mode 100644 index 0000000..6de0720 --- /dev/null +++ b/SOURCES/mozilla-1253216-disable-ion.patch @@ -0,0 +1,12 @@ +diff -up firefox-45.0/firefox-45.0/js/src/jit/AtomicOperations.h.old firefox-45.0/firefox-45.0/js/src/jit/AtomicOperations.h +--- firefox-45.0/firefox-45.0/js/src/jit/AtomicOperations.h.old 2016-03-01 09:45:01.000000000 +0100 ++++ firefox-45.0/firefox-45.0/js/src/jit/AtomicOperations.h 2016-03-03 13:13:34.915015391 +0100 +@@ -305,7 +305,7 @@ AtomicOperations::isLockfree(int32_t siz + || defined(__ppc__) || defined(__PPC__) + # include "jit/none/AtomicOperations-ppc.h" + #elif defined(JS_CODEGEN_NONE) +-# include "jit/none/AtomicOperations-none.h" ++# include "jit/none/AtomicOperations-ppc.h" + #elif defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64) + # include "jit/x86-shared/AtomicOperations-x86-shared.h" + #else diff --git a/SOURCES/mozilla-694870-backout.patch b/SOURCES/mozilla-694870-backout.patch new file mode 100644 index 0000000..d5dc410 --- /dev/null +++ b/SOURCES/mozilla-694870-backout.patch @@ -0,0 +1,334 @@ +diff -up thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsGNOMERegistry.cpp.moz-694870-backout thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsGNOMERegistry.cpp +--- thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsGNOMERegistry.cpp.moz-694870-backout 2016-04-07 23:33:34.000000000 +0200 ++++ thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsGNOMERegistry.cpp 2016-05-10 15:17:28.973860591 +0200 +@@ -6,50 +6,95 @@ + #include "nsGNOMERegistry.h" + #include "nsString.h" + #include "nsIComponentManager.h" ++#include "nsIFile.h" + #include "nsMIMEInfoUnix.h" + #include "nsAutoPtr.h" ++#include "nsIGConfService.h" ++#include "nsIGnomeVFSService.h" + #include "nsIGIOService.h" + ++#ifdef MOZ_WIDGET_GTK ++#include ++#include ++#endif ++ + /* static */ bool + nsGNOMERegistry::HandlerExists(const char *aProtocolScheme) + { + nsCOMPtr giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID); +- if (!giovfs) { +- return false; +- } ++ nsCOMPtr gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID); ++ if (giovfs) { ++ nsCOMPtr app; ++ if (NS_FAILED(giovfs->GetAppForURIScheme(nsDependentCString(aProtocolScheme), ++ getter_AddRefs(app)))) ++ return false; ++ else ++ return true; ++ } else if (gconf) { ++ bool isEnabled; ++ nsAutoCString handler; ++ if (NS_FAILED(gconf->GetAppForProtocol(nsDependentCString(aProtocolScheme), &isEnabled, handler))) ++ return false; + +- nsCOMPtr app; +- return NS_SUCCEEDED(giovfs->GetAppForURIScheme(nsDependentCString(aProtocolScheme), +- getter_AddRefs(app))); ++ return isEnabled; ++ } ++ return false; + } + + // XXX Check HandlerExists() before calling LoadURL. ++// ++// If there is not a registered handler for the protocol, gnome_url_show() ++// falls back to using gnomevfs modules. See bug 389632. We don't want ++// this fallback to happen as we are not sure of the safety of all gnomevfs ++// modules and MIME-default applications. (gnomevfs should be handled in ++// nsGnomeVFSProtocolHandler.) + + /* static */ nsresult + nsGNOMERegistry::LoadURL(nsIURI *aURL) + { + nsCOMPtr giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID); +- if (!giovfs) { +- return NS_ERROR_FAILURE; +- } ++ if (giovfs) ++ return giovfs->ShowURI(aURL); ++ nsCOMPtr gnomevfs = do_GetService(NS_GNOMEVFSSERVICE_CONTRACTID); ++ if (gnomevfs) ++ return gnomevfs->ShowURI(aURL); + +- return giovfs->ShowURI(aURL); ++ return NS_ERROR_FAILURE; + } + + /* static */ void + nsGNOMERegistry::GetAppDescForScheme(const nsACString& aScheme, + nsAString& aDesc) + { ++ nsCOMPtr gconf = do_GetService(NS_GCONFSERVICE_CONTRACTID); + nsCOMPtr giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID); +- if (!giovfs) ++ if (!gconf && !giovfs) + return; + + nsAutoCString name; +- nsCOMPtr app; +- if (NS_FAILED(giovfs->GetAppForURIScheme(aScheme, getter_AddRefs(app)))) +- return; +- +- app->GetName(name); ++ if (giovfs) { ++ nsCOMPtr app; ++ if (NS_FAILED(giovfs->GetAppForURIScheme(aScheme, getter_AddRefs(app)))) ++ return; ++ ++ app->GetName(name); ++ } else { ++ bool isEnabled; ++ if (NS_FAILED(gconf->GetAppForProtocol(aScheme, &isEnabled, name))) ++ return; ++ ++ if (!name.IsEmpty()) { ++ // Try to only provide the executable name, as it is much simpler than with the path and arguments ++ int32_t firstSpace = name.FindChar(' '); ++ if (firstSpace != kNotFound) { ++ name.Truncate(firstSpace); ++ int32_t lastSlash = name.RFindChar('/'); ++ if (lastSlash != kNotFound) { ++ name.Cut(0, lastSlash + 1); ++ } ++ } ++ } ++ } + + CopyUTF8toUTF16(name, aDesc); + } +@@ -60,15 +105,22 @@ nsGNOMERegistry::GetFromExtension(const + { + nsAutoCString mimeType; + nsCOMPtr giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID); +- if (!giovfs) { +- return nullptr; +- } +- +- // Get the MIME type from the extension, then call GetFromType to +- // fill in the MIMEInfo. +- if (NS_FAILED(giovfs->GetMimeTypeFromExtension(aFileExt, mimeType)) || +- mimeType.EqualsLiteral("application/octet-stream")) { +- return nullptr; ++ if (giovfs) { ++ // Get the MIME type from the extension, then call GetFromType to ++ // fill in the MIMEInfo. ++ if (NS_FAILED(giovfs->GetMimeTypeFromExtension(aFileExt, mimeType)) || ++ mimeType.EqualsLiteral("application/octet-stream")) { ++ return nullptr; ++ } ++ } else { ++ /* Fallback to GnomeVFS */ ++ nsCOMPtr gnomevfs = do_GetService(NS_GNOMEVFSSERVICE_CONTRACTID); ++ if (!gnomevfs) ++ return nullptr; ++ ++ if (NS_FAILED(gnomevfs->GetMimeTypeFromExtension(aFileExt, mimeType)) || ++ mimeType.EqualsLiteral("application/octet-stream")) ++ return nullptr; + } + + RefPtr mi = GetFromType(mimeType); +@@ -89,17 +141,28 @@ nsGNOMERegistry::GetFromType(const nsACS + nsAutoCString description; + + nsCOMPtr giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID); +- if (!giovfs) { +- return nullptr; +- } +- +- nsCOMPtr gioHandlerApp; +- if (NS_FAILED(giovfs->GetAppForMimeType(aMIMEType, getter_AddRefs(gioHandlerApp))) || +- !gioHandlerApp) { +- return nullptr; ++ if (giovfs) { ++ nsCOMPtr gioHandlerApp; ++ if (NS_FAILED(giovfs->GetAppForMimeType(aMIMEType, getter_AddRefs(gioHandlerApp))) || ++ !gioHandlerApp) { ++ return nullptr; ++ } ++ gioHandlerApp->GetName(name); ++ giovfs->GetDescriptionForMimeType(aMIMEType, description); ++ } else { ++ /* Fallback to GnomeVFS*/ ++ nsCOMPtr gnomevfs = do_GetService(NS_GNOMEVFSSERVICE_CONTRACTID); ++ if (!gnomevfs) ++ return nullptr; ++ ++ nsCOMPtr gnomeHandlerApp; ++ if (NS_FAILED(gnomevfs->GetAppForMimeType(aMIMEType, getter_AddRefs(gnomeHandlerApp))) || ++ !gnomeHandlerApp) { ++ return nullptr; ++ } ++ gnomeHandlerApp->GetName(name); ++ gnomevfs->GetDescriptionForMimeType(aMIMEType, description); + } +- gioHandlerApp->GetName(name); +- giovfs->GetDescriptionForMimeType(aMIMEType, description); + + mimeInfo->SetDefaultDescription(NS_ConvertUTF8toUTF16(name)); + mimeInfo->SetPreferredAction(nsIMIMEInfo::useSystemDefault); +diff -up thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp.moz-694870-backout thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp +--- thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp.moz-694870-backout 2016-04-07 23:33:34.000000000 +0200 ++++ thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp 2016-05-11 08:24:13.869018683 +0200 +@@ -16,6 +16,7 @@ + #include "nsIGIOService.h" + #include "nsNetCID.h" + #include "nsIIOService.h" ++#include "nsIGnomeVFSService.h" + #include "nsAutoPtr.h" + #ifdef MOZ_ENABLE_DBUS + #include "nsDBusHandlerApp.h" +@@ -103,26 +104,51 @@ nsMIMEInfoUnix::LaunchDefaultWithFile(ns + #endif + + nsCOMPtr giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID); +- if (!giovfs) { +- return NS_ERROR_FAILURE; +- } +- +- // nsGIOMimeApp->Launch wants a URI string instead of local file +- nsresult rv; +- nsCOMPtr ioservice = do_GetService(NS_IOSERVICE_CONTRACTID, &rv); +- NS_ENSURE_SUCCESS(rv, rv); +- nsCOMPtr uri; +- rv = ioservice->NewFileURI(aFile, getter_AddRefs(uri)); +- NS_ENSURE_SUCCESS(rv, rv); + nsAutoCString uriSpec; +- uri->GetSpec(uriSpec); ++ if (giovfs) { ++ // nsGIOMimeApp->Launch wants a URI string instead of local file ++ nsresult rv; ++ nsCOMPtr ioservice = do_GetService(NS_IOSERVICE_CONTRACTID, &rv); ++ NS_ENSURE_SUCCESS(rv, rv); ++ nsCOMPtr uri; ++ rv = ioservice->NewFileURI(aFile, getter_AddRefs(uri)); ++ NS_ENSURE_SUCCESS(rv, rv); ++ uri->GetSpec(uriSpec); ++ } ++ ++ nsCOMPtr gnomevfs = do_GetService(NS_GNOMEVFSSERVICE_CONTRACTID); ++ if (giovfs) { ++ nsCOMPtr app; ++ if (NS_SUCCEEDED(giovfs->GetAppForMimeType(mSchemeOrType, getter_AddRefs(app))) && app) ++ return app->Launch(uriSpec); ++ } else if (gnomevfs) { ++ /* Fallback to GnomeVFS */ ++ nsCOMPtr app; ++ if (NS_SUCCEEDED(gnomevfs->GetAppForMimeType(mSchemeOrType, getter_AddRefs(app))) && app) ++ return app->Launch(nativePath); ++ } ++ ++ // If we haven't got an app we try to get a valid one by searching for the ++ // extension mapped type ++ RefPtr mimeInfo = nsGNOMERegistry::GetFromExtension(nativePath); ++ if (mimeInfo) { ++ nsAutoCString type; ++ mimeInfo->GetType(type); ++ if (giovfs) { ++ nsCOMPtr app; ++ if (NS_SUCCEEDED(giovfs->GetAppForMimeType(type, getter_AddRefs(app))) && app) ++ return app->Launch(uriSpec); ++ } else if (gnomevfs) { ++ nsCOMPtr app; ++ if (NS_SUCCEEDED(gnomevfs->GetAppForMimeType(type, getter_AddRefs(app))) && app) ++ return app->Launch(nativePath); ++ } ++ } + +- nsCOMPtr app; +- if (NS_FAILED(giovfs->GetAppForMimeType(mSchemeOrType, getter_AddRefs(app))) || !app) { ++ if (!mDefaultApplication) + return NS_ERROR_FILE_NOT_FOUND; +- } + +- return app->Launch(uriSpec); ++ return LaunchWithIProcess(mDefaultApplication, nativePath); + } + + #if defined(MOZ_ENABLE_CONTENTACTION) +diff -up thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsOSHelperAppService.cpp.moz-694870-backout thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsOSHelperAppService.cpp +--- thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsOSHelperAppService.cpp.moz-694870-backout 2016-04-07 23:33:34.000000000 +0200 ++++ thunderbird-45.0/mozilla/uriloader/exthandler/unix/nsOSHelperAppService.cpp 2016-05-10 15:17:28.974860591 +0200 +@@ -1150,7 +1150,7 @@ nsresult nsOSHelperAppService::OSProtoco + #endif + + #ifdef MOZ_WIDGET_GTK +- // Check the GNOME registry for a protocol handler ++ // Check the GConf registry for a protocol handler + *aHandlerExists = nsGNOMERegistry::HandlerExists(aProtocolScheme); + #endif + +@@ -1369,6 +1369,22 @@ nsOSHelperAppService::GetFromType(const + NS_LossyConvertUTF16toASCII(handler).get(), + NS_LossyConvertUTF16toASCII(mailcap_description).get())); + ++#ifdef MOZ_WIDGET_GTK ++ RefPtr gnomeInfo; ++ if (handler.IsEmpty()) { ++ // No useful data yet. Check the GNOME registry. Unfortunately, newer ++ // GNOME versions no longer have type-to-extension mappings, so we might ++ // get back a MIMEInfo without any extensions set. In that case we'll have ++ // to look in our mime.types files for the extensions. ++ LOG(("Looking in GNOME registry\n")); ++ gnomeInfo = nsGNOMERegistry::GetFromType(aMIMEType); ++ if (gnomeInfo && gnomeInfo->HasExtensions()) { ++ LOG(("Got MIMEInfo from GNOME registry, and it has extensions set\n")); ++ return gnomeInfo.forget(); ++ } ++ } ++#endif ++ + // Now look up our extensions + nsAutoString extensions, mime_types_description; + LookUpExtensionsAndDescription(majorType, +@@ -1377,16 +1393,13 @@ nsOSHelperAppService::GetFromType(const + mime_types_description); + + #ifdef MOZ_WIDGET_GTK +- if (handler.IsEmpty()) { +- RefPtr gnomeInfo = nsGNOMERegistry::GetFromType(aMIMEType); +- if (gnomeInfo) { +- LOG(("Got MIMEInfo from GNOME registry without extensions; setting them " +- "to %s\n", NS_LossyConvertUTF16toASCII(extensions).get())); +- +- NS_ASSERTION(!gnomeInfo->HasExtensions(), "How'd that happen?"); +- gnomeInfo->SetFileExtensions(NS_ConvertUTF16toUTF8(extensions)); +- return gnomeInfo.forget(); +- } ++ if (gnomeInfo) { ++ LOG(("Got MIMEInfo from GNOME registry without extensions; setting them " ++ "to %s\n", NS_LossyConvertUTF16toASCII(extensions).get())); ++ ++ NS_ASSERTION(!gnomeInfo->HasExtensions(), "How'd that happen?"); ++ gnomeInfo->SetFileExtensions(NS_ConvertUTF16toUTF8(extensions)); ++ return gnomeInfo.forget(); + } + #endif + +@@ -1513,6 +1526,9 @@ nsOSHelperAppService::GetProtocolHandler + { + NS_ASSERTION(!aScheme.IsEmpty(), "No scheme was specified!"); + ++ // We must check that a registered handler exists so that gnome_url_show ++ // doesn't fallback to gnomevfs. ++ // See nsGNOMERegistry::LoadURL and bug 389632. + nsresult rv = OSProtocolHandlerExists(nsPromiseFlatCString(aScheme).get(), + found); + if (NS_FAILED(rv)) diff --git a/SOURCES/mozilla-build-arm.patch b/SOURCES/mozilla-build-arm.patch deleted file mode 100644 index f98cbe3..0000000 --- a/SOURCES/mozilla-build-arm.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up firefox-29.0/mozilla-release/gfx/ycbcr/moz.build.arm firefox-29.0/mozilla-release/gfx/ycbcr/moz.build ---- firefox-29.0/mozilla-release/gfx/ycbcr/moz.build.arm 2014-04-22 07:27:47.000000000 +0200 -+++ firefox-29.0/mozilla-release/gfx/ycbcr/moz.build 2014-04-22 16:40:34.862849368 +0200 -@@ -61,7 +61,7 @@ else: - 'yuv_row_other.cpp', - ] - --if CONFIG['CPU_ARCH'] == 'arm' and CONFIG['HAVE_ARM_NEON']: -+if CONFIG['HAVE_ARM_NEON']: - SOURCES += [ - 'yuv_row_arm.s', - ] diff --git a/SOURCES/ppc64le-build.patch b/SOURCES/ppc64le-build.patch deleted file mode 100644 index 2afc328..0000000 --- a/SOURCES/ppc64le-build.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff -up comm-esr38/mozilla/build/autoconf/config.guess.build-guess comm-esr38/mozilla/build/autoconf/config.guess ---- comm-esr38/mozilla/build/autoconf/config.guess.build-guess 2015-08-03 09:58:23.639750942 +0200 -+++ comm-esr38/mozilla/build/autoconf/config.guess 2015-08-03 09:58:27.581743695 +0200 -@@ -30,6 +30,7 @@ timestamp='2014-02-12' - # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD - # - # Please send patches with a ChangeLog entry to config-patches@gnu.org. -+set -x - - me=`echo "$0" | sed -e 's,.*/,,'` - diff --git a/SOURCES/rhbz-1014858.patch b/SOURCES/rhbz-1014858.patch deleted file mode 100644 index c953b33..0000000 --- a/SOURCES/rhbz-1014858.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff -up mozilla-release/toolkit/xre/nsAppRunner.cpp.old mozilla-release/toolkit/xre/nsAppRunner.cpp ---- mozilla-release/toolkit/xre/nsAppRunner.cpp.old 2014-11-26 03:17:40.000000000 +0100 -+++ mozilla-release/toolkit/xre/nsAppRunner.cpp 2015-01-05 14:23:05.977933308 +0100 -@@ -4168,10 +4168,8 @@ XREMain::XRE_main(int argc, char* argv[] - - #if defined(MOZ_WIDGET_GTK) - #if defined(MOZ_MEMORY) || defined(__FreeBSD__) || defined(__NetBSD__) -- // Disable the slice allocator, since jemalloc already uses similar layout -- // algorithms, and using a sub-allocator tends to increase fragmentation. -- // This must be done before g_thread_init() is called. -- g_slice_set_config(G_SLICE_CONFIG_ALWAYS_MALLOC, 1); -+ // rhbz#1014858 - enable slice allocator for child processes -+ unsetenv("G_SLICE"); - #endif - g_thread_init(nullptr); - #endif diff --git a/SOURCES/rhbz-1150082.patch b/SOURCES/rhbz-1150082.patch new file mode 100644 index 0000000..4091cdb --- /dev/null +++ b/SOURCES/rhbz-1150082.patch @@ -0,0 +1,13 @@ +diff -up mozilla-esr31/media/webrtc/trunk/Makefile.old mozilla-esr31/media/webrtc/trunk/Makefile +diff -up mozilla-esr31/toolkit/components/osfile/modules/osfile_unix_front.jsm.old mozilla-esr31/toolkit/components/osfile/modules/osfile_unix_front.jsm +--- mozilla-esr31/toolkit/components/osfile/modules/osfile_unix_front.jsm.old 2014-10-11 17:00:02.000000000 +0200 ++++ mozilla-esr31/toolkit/components/osfile/modules/osfile_unix_front.jsm 2014-11-10 13:28:58.474001916 +0100 +@@ -574,7 +574,7 @@ + }; + + // Fortunately, under Linux, that pumping function can be optimized. +- if (UnixFile.splice) { ++ if (0) { + const BUFSIZE = 1 << 17; + + // An implementation of |pump| using |splice| (for Linux/Android) diff --git a/SOURCES/rhbz-1173156.patch b/SOURCES/rhbz-1173156.patch new file mode 100644 index 0000000..9855710 --- /dev/null +++ b/SOURCES/rhbz-1173156.patch @@ -0,0 +1,12 @@ +diff -up firefox-31.3.0/mozilla-esr31/extensions/auth/nsAuthSambaNTLM.cpp.old firefox-31.3.0/mozilla-esr31/extensions/auth/nsAuthSambaNTLM.cpp +--- firefox-31.3.0/mozilla-esr31/extensions/auth/nsAuthSambaNTLM.cpp.old 2014-11-25 12:23:22.000000000 +0100 ++++ firefox-31.3.0/mozilla-esr31/extensions/auth/nsAuthSambaNTLM.cpp 2014-12-23 15:26:36.606674625 +0100 +@@ -174,7 +174,7 @@ nsAuthSambaNTLM::SpawnNTLMAuthHelper() + return NS_ERROR_FAILURE; + + const char* const args[] = { +- "ntlm_auth", ++ "/usr/bin/ntlm_auth", + "--helper-protocol", "ntlmssp-client-1", + "--use-cached-creds", + "--username", username, diff --git a/SOURCES/rhbz-1219542-s390-build.patch b/SOURCES/rhbz-1219542-s390-build.patch deleted file mode 100644 index 4f38200..0000000 --- a/SOURCES/rhbz-1219542-s390-build.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff -up mozilla-release/js/src/configure.in.opt mozilla-release/js/src/configure.in ---- mozilla-release/js/src/configure.in.opt 2015-05-04 02:43:23.000000000 +0200 -+++ mozilla-release/js/src/configure.in 2015-05-07 14:21:07.685405039 +0200 -@@ -1492,7 +1492,7 @@ case "$host" in - *-linux*|*-kfreebsd*-gnu|*-gnu*) - HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX" - HOST_NSPR_MDCPUCFG='\"md/_linux.cfg\"' -- HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O3}" -+ HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O1}" - ;; - - *) -@@ -1674,8 +1674,8 @@ ia64*-hpux*) - # while; Intel recommends against using it. - MOZ_OPTIMIZE_FLAGS="-O2" - elif test "$GNU_CC" -o "$GNU_CXX"; then -- MOZ_PGO_OPTIMIZE_FLAGS="-O3" -- MOZ_OPTIMIZE_FLAGS="-O3" -+ MOZ_PGO_OPTIMIZE_FLAGS="-O1" -+ MOZ_OPTIMIZE_FLAGS="-O1" - if test -z "$CLANG_CC"; then - MOZ_OPTIMIZE_FLAGS="-freorder-blocks $MOZ_OPTIMIZE_FLAGS" - fi diff --git a/SOURCES/rhbz-966424.patch b/SOURCES/rhbz-966424.patch index cfd6ca8..c4c332e 100644 --- a/SOURCES/rhbz-966424.patch +++ b/SOURCES/rhbz-966424.patch @@ -1,4 +1,3 @@ -diff --git a/toolkit/module/CertUtils.jsm b/toolkit/toolkit/modules/CertUtils.jsm --- a/toolkit/modules/CertUtils.jsm +++ b/toolkit/modules/CertUtils.jsm @@ -170,17 +170,19 @@ this.checkCert = diff --git a/SOURCES/thunderbird-centos-default-prefs.js b/SOURCES/thunderbird-centos-default-prefs.js deleted file mode 100644 index 013aa21..0000000 --- a/SOURCES/thunderbird-centos-default-prefs.js +++ /dev/null @@ -1,28 +0,0 @@ -pref("app.update.enabled", false); -pref("app.update.autoInstallEnabled", false); -# Allow users to set custom colors -# pref("browser.display.use_system_colors", true); -pref("general.useragent.vendor", "CentOS"); -pref("general.useragent.vendorSub", "THUNDERBIRD_RPM_VR"); -pref("intl.locale.matchOS", true); -pref("mail.shell.checkDefaultClient", false); -pref("toolkit.networkmanager.disable", false); -pref("offline.autoDetect", true); - -# Disable global indexing by default -pref("mailnews.database.global.indexer.enabled", false); - -# Do not switch to Smart Folders after upgrade to 3.0b4 -pref("mail.folder.views.version", "1") -pref("extensions.shownSelectionUI", true); -pref("extensions.autoDisableScope", 0); - -# For rhbz#1024232 -pref("ui.SpellCheckerUnderlineStyle", 1); - -/* Workaround for rhbz#1134876 */ -pref("javascript.options.baselinejit", false); -/* Workaround for rhbz#1110291 */ -pref("network.negotiate-auth.allow-insecure-ntlm-v1", true); -/* Workaround for mozbz#1063315 */ -pref("security.use_mozillapkix_verification", false); diff --git a/SOURCES/thunderbird-install-dir.patch b/SOURCES/thunderbird-install-dir.patch deleted file mode 100644 index 1d99761..0000000 --- a/SOURCES/thunderbird-install-dir.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up comm-esr38/mozilla/config/baseconfig.mk.dir comm-esr38/mozilla/config/baseconfig.mk ---- comm-esr38/mozilla/config/baseconfig.mk.dir 2015-06-08 19:49:23.000000000 +0200 -+++ comm-esr38/mozilla/config/baseconfig.mk 2015-06-16 14:45:16.048913473 +0200 -@@ -4,7 +4,7 @@ - # whether a normal build is happening or whether the check is running. - includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) - idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) --installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) -+installdir = $(libdir)/$(MOZ_APP_NAME) - sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) - ifndef TOP_DIST - TOP_DIST = dist diff --git a/SOURCES/thunderbird-mozconfig b/SOURCES/thunderbird-mozconfig index 4a02d99..b5fc95d 100644 --- a/SOURCES/thunderbird-mozconfig +++ b/SOURCES/thunderbird-mozconfig @@ -2,40 +2,40 @@ mk_add_options MOZ_CO_PROJECT=mail ac_add_options --enable-application=mail mk_add_options AUTOCONF=autoconf-2.13 -#ac_add_options --with-system-png - -ac_add_options --prefix="$PREFIX" -ac_add_options --libdir="$LIBDIR" -ac_add_options --with-system-jpeg -ac_add_options --with-system-zlib -ac_add_options --with-pthreads -ac_add_options --disable-tests +ac_add_options --disable-cpp-exceptions +ac_add_options --disable-crashreporter +ac_add_options --disable-exact-rooting ac_add_options --disable-installer -ac_add_options --enable-xinerama -ac_add_options --enable-default-toolkit=cairo-gtk2 -ac_add_options --disable-xprint -ac_add_options --disable-strip -ac_add_options --disable-install-strip -ac_add_options --enable-pango -# temporary disable system cairo, because compilation fails -#ac_add_options --enable-system-cairo -ac_add_options --enable-svg -ac_add_options --enable-canvas -ac_add_options --enable-system-hunspell +ac_add_options --disable-javaxpcom +ac_add_options --disable-libjpeg-turbo +ac_add_options --disable-mochitest ac_add_options --disable-necko-wifi +ac_add_options --disable-strip +ac_add_options --disable-tests ac_add_options --disable-updater -ac_add_options --enable-startup-notification -ac_add_options --enable-gio -ac_add_options --disable-gnomevfs -ac_add_options --disable-gstreamer -ac_add_options --enable-system-ffi - -# lightning related +ac_add_options --disable-xprint ac_add_options --enable-calendar -ac_add_options --with-l10n-base=../../l10n - +ac_add_options --enable-canvas +ac_add_options --enable-default-toolkit=cairo-gtk2 +ac_add_options --enable-libnotify +ac_add_options --enable-pango +ac_add_options --enable-release +ac_add_options --enable-safe-browsing +ac_add_options --enable-skia +ac_add_options --enable-startup-notification +ac_add_options --enable-svg +ac_add_options --enable-xinerama +ac_add_options --libdir="$LIBDIR" +ac_add_options --prefix="$PREFIX" +ac_add_options --with-l10n-base=../../l10n-merged +ac_add_options --without-system-libvpx +ac_add_options --with-pthreads +ac_add_options --with-system-zlib export BUILD_OFFICIAL=1 +export CFLAGS="$CFLAGS -gdwarf-2" +export CXXFLAGS="$CXXFLAGS -gdwarf-2" export MOZILLA_OFFICIAL=1 + mk_add_options BUILD_OFFICIAL=1 mk_add_options MOZILLA_OFFICIAL=1 diff --git a/SOURCES/thunderbird-open-browser.sh b/SOURCES/thunderbird-open-browser.sh new file mode 100644 index 0000000..c9cefb4 --- /dev/null +++ b/SOURCES/thunderbird-open-browser.sh @@ -0,0 +1,76 @@ +#!/bin/bash +## Copyright (C) 2004 Warren Togami +## Contributors: David Hill +# +# 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; version 2 of the License. +# +# 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. + +# +# open-browser.sh for MozillaThunderbird +# Release 5 +# +# This script is called by MozillaThunderbird in order to launch the web +# browser specified in gconf key /desktop/gnome/url-handlers/http/command +# + +# Exit with Error Message +function error_exit() { + echo "$1" + if [ -a /usr/bin/zenity ]; then + /usr/bin/zenity --error --text="$1" + else + xmessage "$1" & + fi + exit 1 +} + +# No URL specified so set to blank +url=$1 +if [ -z $url ]; then + url=about:blank +fi + +# Use xdg-open if it exists (Gnome 2.6+ only) +if [ -f /usr/bin/xdg-open ]; then + OUTPUT="$(/usr/bin/xdg-open "$url" 2>&1)" + if [ $? -ne 0 ]; then + error_exit "$OUTPUT" + fi + exit 0 +fi + +# Pull key from gconf, remove %s or "%s", trim leading & trailing spaces +GCONF=$(gconftool-2 -g /desktop/gnome/url-handlers/http/command 2>/dev/null | sed -e 's/%s//; s/\"\"//; s/^\ *//; s/\ *$//') +NEEDTERM=$(gconftool-2 -g /desktop/gnome/url-handlers/http/need-terminal 2>/dev/null | sed -e 's/^\ *//; s/\ *$//') + +# Check if browser really exists +which $GCONF 2> /dev/null > /dev/null +if [ $? -ne 0 ]; then + error_exit "ERROR: The browser $GCONF specified in Preferences -> Preferred Applications does not exist." +fi + +# Check if text-mode browser +if [ "$NEEDTERM" == "true" ]; then + PREFTERM=$(gconftool-2 -g /desktop/gnome/applications/terminal/exec 2>/dev/null | sed -e 's/^\ *//; s/\ *$//') + TERMARGS=$(gconftool-2 -g /desktop/gnome/applications/terminal/exec_arg 2>/dev/null | sed -e 's/^\ *//; s/\ *$//') + # Check if terminal exists + which $PREFTERM 2> /dev/null > /dev/null + if [ $? -ne 0 ]; then + error_exit "ERROR: The terminal $GCONF specified in Preferences -> Preferred Applications does not exist." + fi + # Execute + exec $PREFTERM $TERMARGS $GCONF "$url" +fi + +exec $GCONF "$url" + diff --git a/SOURCES/thunderbird-redhat-default-prefs.js.rhel5 b/SOURCES/thunderbird-redhat-default-prefs.js.rhel5 new file mode 100644 index 0000000..e51970c --- /dev/null +++ b/SOURCES/thunderbird-redhat-default-prefs.js.rhel5 @@ -0,0 +1,27 @@ +pref("app.update.enabled", false); +pref("app.update.autoInstallEnabled", false); +# Allow users to set custom colors +# pref("browser.display.use_system_colors", true); +pref("general.useragent.vendor", "Red Hat"); +pref("general.useragent.vendorSub", "THUNDERBIRD_RPM_VR"); +pref("intl.locale.matchOS", true); +pref("mail.shell.checkDefaultClient", false); +pref("toolkit.networkmanager.disable", false); + +# Make hyperlinks work +pref("network.protocol-handler.app.http", "COMMAND"); +pref("network.protocol-handler.app.https", "COMMAND"); +pref("network.protocol-handler.app.ftp", "COMMAND"); + +# Disable global indexing by default +pref("mailnews.database.global.indexer.enabled", false); + +# Do not switch to Smart Folders after upgrade to 3.0b4 +pref("mail.folder.views.version", "1") + +/* Workaround for rhbz#1134876 */ +pref("javascript.options.baselinejit", false); +/* Workaround for rhbz#1110291 */ +pref("network.negotiate-auth.allow-insecure-ntlm-v1", true); +/* Workaround for mozbz#1063315 */ +pref("security.use_mozillapkix_verification", false); diff --git a/SOURCES/thunderbird-redhat-default-prefs.js.rhel6 b/SOURCES/thunderbird-redhat-default-prefs.js.rhel6 new file mode 100644 index 0000000..af23193 --- /dev/null +++ b/SOURCES/thunderbird-redhat-default-prefs.js.rhel6 @@ -0,0 +1,28 @@ +pref("app.update.enabled", false); +pref("app.update.autoInstallEnabled", false); +# Allow users to set custom colors +# pref("browser.display.use_system_colors", true); +pref("general.useragent.vendor", "Red Hat"); +pref("general.useragent.vendorSub", "THUNDERBIRD_RPM_VR"); +pref("intl.locale.matchOS", true); +pref("mail.shell.checkDefaultClient", false); +pref("toolkit.networkmanager.disable", false); +pref("offline.autoDetect", true); + +# Disable global indexing by default +pref("mailnews.database.global.indexer.enabled", false); + +# Do not switch to Smart Folders after upgrade to 3.0b4 +pref("mail.folder.views.version", "1") +pref("extensions.shownSelectionUI", true); +pref("extensions.autoDisableScope", 0); + +# For rhbz#1024232 +pref("ui.SpellCheckerUnderlineStyle", 1); + +/* Workaround for rhbz#1134876 */ +pref("javascript.options.baselinejit", false); +/* Workaround for rhbz#1110291 */ +pref("network.negotiate-auth.allow-insecure-ntlm-v1", true); +/* Workaround for mozbz#1063315 */ +pref("security.use_mozillapkix_verification", false); diff --git a/SOURCES/thunderbird-redhat-default-prefs.js.rhel7 b/SOURCES/thunderbird-redhat-default-prefs.js.rhel7 new file mode 100644 index 0000000..af23193 --- /dev/null +++ b/SOURCES/thunderbird-redhat-default-prefs.js.rhel7 @@ -0,0 +1,28 @@ +pref("app.update.enabled", false); +pref("app.update.autoInstallEnabled", false); +# Allow users to set custom colors +# pref("browser.display.use_system_colors", true); +pref("general.useragent.vendor", "Red Hat"); +pref("general.useragent.vendorSub", "THUNDERBIRD_RPM_VR"); +pref("intl.locale.matchOS", true); +pref("mail.shell.checkDefaultClient", false); +pref("toolkit.networkmanager.disable", false); +pref("offline.autoDetect", true); + +# Disable global indexing by default +pref("mailnews.database.global.indexer.enabled", false); + +# Do not switch to Smart Folders after upgrade to 3.0b4 +pref("mail.folder.views.version", "1") +pref("extensions.shownSelectionUI", true); +pref("extensions.autoDisableScope", 0); + +# For rhbz#1024232 +pref("ui.SpellCheckerUnderlineStyle", 1); + +/* Workaround for rhbz#1134876 */ +pref("javascript.options.baselinejit", false); +/* Workaround for rhbz#1110291 */ +pref("network.negotiate-auth.allow-insecure-ntlm-v1", true); +/* Workaround for mozbz#1063315 */ +pref("security.use_mozillapkix_verification", false); diff --git a/SOURCES/thunderbird.sh.in.rhel5 b/SOURCES/thunderbird.sh.in.rhel5 new file mode 100644 index 0000000..940b3aa --- /dev/null +++ b/SOURCES/thunderbird.sh.in.rhel5 @@ -0,0 +1,148 @@ +#!/bin/sh +# +# The contents of this file are subject to the Netscape Public +# License Version 1.1 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.mozilla.org/NPL/ +# +# Software distributed under the License is distributed on an "AS +# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or +# implied. See the License for the specific language governing +# rights and limitations under the License. +# +# The Original Code is mozilla.org code. +# +# The Initial Developer of the Original Code is Netscape +# Communications Corporation. Portions created by Netscape are +# Copyright (C) 1998 Netscape Communications Corporation. All +# Rights Reserved. +# +# Contributor(s): +# + +## +## Usage: +## +## $ thunderbird +## +## This script is meant to run a mozilla program from the mozilla +## rpm installation. +## +## The script will setup all the environment voodoo needed to make +## mozilla work. + +cmdname=`basename $0` + +# BEAST fix +NSS_SSL_CBC_RANDOM_IV=${NSS_SSL_CBC_RANDOM_IV-1} +export NSS_SSL_CBC_RANDOM_IV + +## +## Variables +## +MOZ_ARCH=$(uname -m) +case $MOZ_ARCH in + x86_64 | s390x | sparc64) + MOZ_LIB_DIR="/usr/lib64" + SECONDARY_LIB_DIR="/usr/lib" + ;; + * ) + MOZ_LIB_DIR="/usr/lib" + SECONDARY_LIB_DIR="/usr/lib64" + ;; +esac + +if [ ! -x $MOZ_LIB_DIR/thunderbird/thunderbird ]; then + if [ ! -x $SECONDARY_LIB_DIR/thunderbird/thunderbird ]; then + echo "Error: $MOZ_LIB_DIR/thunderbird/thunderbird not found" + if [ -d $SECONDARY_LIB_DIR ]; then + echo " $SECONDARY_LIB_DIR/thunderbird/thunderbird not found" + fi + exit 1 + fi + MOZ_LIB_DIR="$SECONDARY_LIB_DIR" +fi + +MOZ_DIST_BIN="$MOZ_LIB_DIR/thunderbird" +MOZ_PROGRAM="$MOZ_DIST_BIN/thunderbird" +MOZ_LANGPACKS_DIR="$MOZ_DIST_BIN/langpacks" +MOZ_EXTENSIONS_PROFILE_DIR="$HOME/.mozilla/extensions/{3550f703-e582-4d05-9a08-453d09bdfdc6}" + +## +## Set MOZ_ENABLE_PANGO is no longer used because Pango is enabled by default +## you may use MOZ_DISABLE_PANGO=1 to force disabling of pango +## +#MOZ_DISABLE_PANGO=1 +#export MOZ_DISABLE_PANGO + +## +## Set MOZ_APP_LAUNCHER for gnome-session +## +export MOZ_APP_LAUNCHER="/usr/bin/thunderbird" + +## +## Disable the GNOME crash dialog, Moz has it's own +## +GNOME_DISABLE_CRASH_DIALOG=1 +export GNOME_DISABLE_CRASH_DIALOG + +## +## To disable the use of Firefox localization, set MOZ_DISABLE_LANGPACKS=1 +## in your environment before launching Firefox. +## +# +# MOZ_DISABLE_LANGPACKS=1 +# export MOZ_DISABLE_LANGPACKS +# + +## +## Automatically installed langpacks are tracked by .fedora-langpack-install +## config file. +## +FEDORA_LANGPACK_CONFIG="$MOZ_EXTENSIONS_PROFILE_DIR/.fedora-langpack-install" + +# MOZ_DISABLE_LANGPACKS disables language packs completely +MOZILLA_DOWN=0 +if ! [ $MOZ_DISABLE_LANGPACKS ] || [ $MOZ_DISABLE_LANGPACKS -eq 0 ]; then + pidof thunderbird > /dev/null 2>&1 + MOZILLA_DOWN=$? +fi + +# Modify language pack configuration only when thunderbird is not running +# and language packs are not disabled +if [ $MOZILLA_DOWN -ne 0 ]; then + + # Clear already installed langpacks + mkdir -p $MOZ_EXTENSIONS_PROFILE_DIR + if [ -f $FEDORA_LANGPACK_CONFIG ]; then + rm `cat $FEDORA_LANGPACK_CONFIG` > /dev/null 2>&1 + rm $FEDORA_LANGPACK_CONFIG > /dev/null 2>&1 + fi + + # Get locale from system + CURRENT_LOCALE=$LC_ALL + CURRENT_LOCALE=${CURRENT_LOCALE:-$LC_MESSAGES} + CURRENT_LOCALE=${CURRENT_LOCALE:-$LANG} + + # Try without a local variant first, then with a local variant + # So that pt-BR doesn't try to use pt for example + SHORTMOZLOCALE=`echo $CURRENT_LOCALE | sed "s|_\([^.]*\).*||g"` + MOZLOCALE=`echo $CURRENT_LOCALE | sed "s|_\([^.]*\).*|-\1|g"` + + function create_langpack_link() { + local language=$* + local langpack=langpack-${language}@thunderbird.mozilla.org.xpi + if [ -f $MOZ_LANGPACKS_DIR/$langpack ]; then + rm -rf $MOZ_EXTENSIONS_PROFILE_DIR/$langpack + ln -s $MOZ_LANGPACKS_DIR/$langpack \ + $MOZ_EXTENSIONS_PROFILE_DIR/$langpack + echo $MOZ_EXTENSIONS_PROFILE_DIR/$langpack > $FEDORA_LANGPACK_CONFIG + return 0 + fi + return 1 + } + + create_langpack_link $SHORTMOZLOCALE || create_langpack_link $MOZLOCALE || true +fi + +exec $MOZ_PROGRAM "$@" diff --git a/SOURCES/thunderbird.sh.in.rhel6 b/SOURCES/thunderbird.sh.in.rhel6 new file mode 100644 index 0000000..55728e2 --- /dev/null +++ b/SOURCES/thunderbird.sh.in.rhel6 @@ -0,0 +1,156 @@ +#!/bin/bash +# +# Startup script for the fedora.us Thunderbird RPM +# (based on the Mozilla RPM launch script) +# + +## +## Variables +## +MOZ_ARCH=$(uname -m) +case $MOZ_ARCH in + x86_64 | s390x | sparc64 ) + MOZ_LIB_DIR="/usr/lib64" + SECONDARY_LIB_DIR="/usr/lib" + ;; + * ) + MOZ_LIB_DIR="/usr/lib" + SECONDARY_LIB_DIR="/usr/lib64" + ;; +esac + +if [ ! -x $MOZ_LIB_DIR/thunderbird/thunderbird ]; then + if [ ! -x $SECONDARY_LIB_DIR/thunderbird/thunderbird ]; then + echo "Error: $MOZ_LIB_DIR/thunderbird/thunderbird not found" + if [ -d $SECONDARY_LIB_DIR ]; then + echo " $SECONDARY_LIB_DIR/thunderbird/thunderbird not found" + fi + exit 1 + fi + MOZ_LIB_DIR="$SECONDARY_LIB_DIR" +fi + +MOZ_DIST_BIN="$MOZ_LIB_DIR/thunderbird" +MOZ_PROGRAM="$MOZ_DIST_BIN/thunderbird" +MOZ_LANGPACKS_DIR="$MOZ_DIST_BIN/langpacks" +MOZ_EXTENSIONS_PROFILE_DIR="$HOME/.mozilla/extensions/{3550f703-e582-4d05-9a08-453d09bdfdc6}" +MOZ_LAUNCHER="$MOZ_DIST_BIN/run-mozilla.sh" + +## +## Set MOZ_ENABLE_PANGO is no longer used because Pango is enabled by default +## you may use MOZ_DISABLE_PANGO=1 to force disabling of pango +## +#MOZ_DISABLE_PANGO=1 +#export MOZ_DISABLE_PANGO + +## +## Set MOZ_APP_LAUNCHER for gnome-session +## +export MOZ_APP_LAUNCHER="/usr/bin/thunderbird" + +## +## Disable the GNOME crash dialog, Moz has it's own +## +GNOME_DISABLE_CRASH_DIALOG=1 +export GNOME_DISABLE_CRASH_DIALOG + +## +## Disable the SLICE allocator (rhbz#1014858) +## +export G_SLICE=always-malloc + +## +## To disable the use of Firefox localization, set MOZ_DISABLE_LANGPACKS=1 +## in your environment before launching Firefox. +## +# +# MOZ_DISABLE_LANGPACKS=1 +# export MOZ_DISABLE_LANGPACKS +# + +## +## Automatically installed langpacks are tracked by .fedora-langpack-install +## config file. +## +FEDORA_LANGPACK_CONFIG="$MOZ_EXTENSIONS_PROFILE_DIR/.fedora-langpack-install" + +# MOZ_DISABLE_LANGPACKS disables language packs completelly +MOZILLA_DOWN=0 +if ! [ $MOZ_DISABLE_LANGPACKS ] || [ $MOZ_DISABLE_LANGPACKS -eq 0 ]; then + pidof thunderbird > /dev/null 2>&1 + MOZILLA_DOWN=$? +fi + +# Modify language pack configuration only when thunderbird is not running +# and language packs are not disabled +if [ $MOZILLA_DOWN -ne 0 ]; then + + # Clear already installed langpacks + mkdir -p $MOZ_EXTENSIONS_PROFILE_DIR + if [ -f $FEDORA_LANGPACK_CONFIG ]; then + rm `cat $FEDORA_LANGPACK_CONFIG` > /dev/null 2>&1 + rm $FEDORA_LANGPACK_CONFIG > /dev/null 2>&1 + # remove all empty langpacks dirs while they block installation of langpacks + rmdir $MOZ_EXTENSIONS_PROFILE_DIR/lang* > /dev/null 2>&1 + fi + + # Get locale from system + CURRENT_LOCALE=$LC_ALL + CURRENT_LOCALE=${CURRENT_LOCALE:-$LC_MESSAGES} + CURRENT_LOCALE=${CURRENT_LOCALE:-$LANG} + + # Try without a local variant first, then with a local variant + # So that pt-BR doesn't try to use pt for example + SHORTMOZLOCALE=`echo $CURRENT_LOCALE | sed "s|_\([^.]*\).*||g"` + MOZLOCALE=`echo $CURRENT_LOCALE | sed "s|_\([^.]*\).*|-\1|g"` + + function create_langpack_link() { + local language=$* + local langpack=langpack-${language}@thunderbird.mozilla.org.xpi + if [ -f $MOZ_LANGPACKS_DIR/$langpack ]; then + rm -rf $MOZ_EXTENSIONS_PROFILE_DIR/$langpack + ln -s $MOZ_LANGPACKS_DIR/$langpack \ + $MOZ_EXTENSIONS_PROFILE_DIR/$langpack + echo $MOZ_EXTENSIONS_PROFILE_DIR/$langpack > $FEDORA_LANGPACK_CONFIG + return 0 + fi + return 1 + } + + create_langpack_link $SHORTMOZLOCALE || create_langpack_link $MOZLOCALE || true +fi + +# BEAST fix (rhbz#1005611) +NSS_SSL_CBC_RANDOM_IV=${NSS_SSL_CBC_RANDOM_IV-1} +export NSS_SSL_CBC_RANDOM_IV + +# Prepare command line arguments +script_args="" +pass_arg_count=0 +while [ $# -gt $pass_arg_count ] +do + case "$1" in + -g | --debug) + script_args="$script_args -g" + debugging=1 + shift + ;; + -d | --debugger) + if [ $# -gt 1 ]; then + script_args="$script_args -d $2" + shift 2 + else + shift + fi + ;; + *) + # Move the unrecognized argument to the end of the list. + arg="$1" + shift + set -- "$@" "$arg" + pass_arg_count=`expr $pass_arg_count + 1` + ;; + esac +done + +exec $MOZ_LAUNCHER $script_args $MOZ_PROGRAM "$@" diff --git a/SOURCES/thunderbird.sh.in.rhel7 b/SOURCES/thunderbird.sh.in.rhel7 new file mode 100644 index 0000000..55728e2 --- /dev/null +++ b/SOURCES/thunderbird.sh.in.rhel7 @@ -0,0 +1,156 @@ +#!/bin/bash +# +# Startup script for the fedora.us Thunderbird RPM +# (based on the Mozilla RPM launch script) +# + +## +## Variables +## +MOZ_ARCH=$(uname -m) +case $MOZ_ARCH in + x86_64 | s390x | sparc64 ) + MOZ_LIB_DIR="/usr/lib64" + SECONDARY_LIB_DIR="/usr/lib" + ;; + * ) + MOZ_LIB_DIR="/usr/lib" + SECONDARY_LIB_DIR="/usr/lib64" + ;; +esac + +if [ ! -x $MOZ_LIB_DIR/thunderbird/thunderbird ]; then + if [ ! -x $SECONDARY_LIB_DIR/thunderbird/thunderbird ]; then + echo "Error: $MOZ_LIB_DIR/thunderbird/thunderbird not found" + if [ -d $SECONDARY_LIB_DIR ]; then + echo " $SECONDARY_LIB_DIR/thunderbird/thunderbird not found" + fi + exit 1 + fi + MOZ_LIB_DIR="$SECONDARY_LIB_DIR" +fi + +MOZ_DIST_BIN="$MOZ_LIB_DIR/thunderbird" +MOZ_PROGRAM="$MOZ_DIST_BIN/thunderbird" +MOZ_LANGPACKS_DIR="$MOZ_DIST_BIN/langpacks" +MOZ_EXTENSIONS_PROFILE_DIR="$HOME/.mozilla/extensions/{3550f703-e582-4d05-9a08-453d09bdfdc6}" +MOZ_LAUNCHER="$MOZ_DIST_BIN/run-mozilla.sh" + +## +## Set MOZ_ENABLE_PANGO is no longer used because Pango is enabled by default +## you may use MOZ_DISABLE_PANGO=1 to force disabling of pango +## +#MOZ_DISABLE_PANGO=1 +#export MOZ_DISABLE_PANGO + +## +## Set MOZ_APP_LAUNCHER for gnome-session +## +export MOZ_APP_LAUNCHER="/usr/bin/thunderbird" + +## +## Disable the GNOME crash dialog, Moz has it's own +## +GNOME_DISABLE_CRASH_DIALOG=1 +export GNOME_DISABLE_CRASH_DIALOG + +## +## Disable the SLICE allocator (rhbz#1014858) +## +export G_SLICE=always-malloc + +## +## To disable the use of Firefox localization, set MOZ_DISABLE_LANGPACKS=1 +## in your environment before launching Firefox. +## +# +# MOZ_DISABLE_LANGPACKS=1 +# export MOZ_DISABLE_LANGPACKS +# + +## +## Automatically installed langpacks are tracked by .fedora-langpack-install +## config file. +## +FEDORA_LANGPACK_CONFIG="$MOZ_EXTENSIONS_PROFILE_DIR/.fedora-langpack-install" + +# MOZ_DISABLE_LANGPACKS disables language packs completelly +MOZILLA_DOWN=0 +if ! [ $MOZ_DISABLE_LANGPACKS ] || [ $MOZ_DISABLE_LANGPACKS -eq 0 ]; then + pidof thunderbird > /dev/null 2>&1 + MOZILLA_DOWN=$? +fi + +# Modify language pack configuration only when thunderbird is not running +# and language packs are not disabled +if [ $MOZILLA_DOWN -ne 0 ]; then + + # Clear already installed langpacks + mkdir -p $MOZ_EXTENSIONS_PROFILE_DIR + if [ -f $FEDORA_LANGPACK_CONFIG ]; then + rm `cat $FEDORA_LANGPACK_CONFIG` > /dev/null 2>&1 + rm $FEDORA_LANGPACK_CONFIG > /dev/null 2>&1 + # remove all empty langpacks dirs while they block installation of langpacks + rmdir $MOZ_EXTENSIONS_PROFILE_DIR/lang* > /dev/null 2>&1 + fi + + # Get locale from system + CURRENT_LOCALE=$LC_ALL + CURRENT_LOCALE=${CURRENT_LOCALE:-$LC_MESSAGES} + CURRENT_LOCALE=${CURRENT_LOCALE:-$LANG} + + # Try without a local variant first, then with a local variant + # So that pt-BR doesn't try to use pt for example + SHORTMOZLOCALE=`echo $CURRENT_LOCALE | sed "s|_\([^.]*\).*||g"` + MOZLOCALE=`echo $CURRENT_LOCALE | sed "s|_\([^.]*\).*|-\1|g"` + + function create_langpack_link() { + local language=$* + local langpack=langpack-${language}@thunderbird.mozilla.org.xpi + if [ -f $MOZ_LANGPACKS_DIR/$langpack ]; then + rm -rf $MOZ_EXTENSIONS_PROFILE_DIR/$langpack + ln -s $MOZ_LANGPACKS_DIR/$langpack \ + $MOZ_EXTENSIONS_PROFILE_DIR/$langpack + echo $MOZ_EXTENSIONS_PROFILE_DIR/$langpack > $FEDORA_LANGPACK_CONFIG + return 0 + fi + return 1 + } + + create_langpack_link $SHORTMOZLOCALE || create_langpack_link $MOZLOCALE || true +fi + +# BEAST fix (rhbz#1005611) +NSS_SSL_CBC_RANDOM_IV=${NSS_SSL_CBC_RANDOM_IV-1} +export NSS_SSL_CBC_RANDOM_IV + +# Prepare command line arguments +script_args="" +pass_arg_count=0 +while [ $# -gt $pass_arg_count ] +do + case "$1" in + -g | --debug) + script_args="$script_args -g" + debugging=1 + shift + ;; + -d | --debugger) + if [ $# -gt 1 ]; then + script_args="$script_args -d $2" + shift 2 + else + shift + fi + ;; + *) + # Move the unrecognized argument to the end of the list. + arg="$1" + shift + set -- "$@" "$arg" + pass_arg_count=`expr $pass_arg_count + 1` + ;; + esac +done + +exec $MOZ_LAUNCHER $script_args $MOZ_PROGRAM "$@" diff --git a/SPECS/thunderbird.spec b/SPECS/thunderbird.spec index 4f76d22..2a7d247 100644 --- a/SPECS/thunderbird.spec +++ b/SPECS/thunderbird.spec @@ -1,403 +1,723 @@ -# Use system nspr/nss? -%define system_nss 1 -# Enable webm -%define enable_webm 1 -%define system_libvpx 1 -%define with_gdata 0 - -# Build as a debug package? -%define debug_build 0 - -%if 0%{?fedora} < 20 -%define system_sqlite 0 -%define system_ffi 0 -%else -%define system_sqlite 1 -%define system_ffi 1 + +# FIXME: HAVE TO USE SYSTEM NSS IN FINAL RELEASE!!! +%define system_nss 1 +%global nspr_version 4.11.0 +%global nss_version 3.21.0 +%define system_sqlite 0 +%define sqlite_version 3.8.4.2 +%define system_ffi 1 +%define ffi_version 3.0.9 +%define use_bundled_yasm 1 +%define use_bundled_python 0 +%define python_version 2.7.8 +%define use_bundled_gcc 0 +%define gcc_version 4.8.2-16 +%define enable_gstreamer 0 +%define system_cairo 0 +%define cairo_version 1.10.2 +%define freetype_version 2.1.9 +%define system_jpeg 1 +%define system_gio 1 +%define system_hunspell 1 +%define system_libatomic 0 +%define use_baselinejit 1 +%define official_branding 1 +%define libnotify_version 0.4 +%define debug_build 0 +# This is for local builds or builds in mock with --no-clean +# It skips building of gcc, binutils and yasm rpms when they exists, it just installs +# them and doesn't delete them to allow recycling them in next build. +# SHOULD ALWAYS BE 0 WHEN BUILDING IN BREW +%define do_not_clean_rpms 0 + + +# Configure and override build options for various platforms and RHEL versions +# ============================================================================ + +# RHEL7 +%if 0%{?rhel} == 7 +%ifarch s390x +%define use_bundled_gcc 1 +%endif %endif -%define build_langpacks 1 +# RHEL6 +%if 0%{?rhel} == 6 +%define use_bundled_python 1 +%define use_bundled_gcc 1 +%define use_bundled_yasm 1 +%define system_ffi 0 +%define enable_gstreamer 0 +%define use_bundled_binutils 1 +%endif -%if %{?system_nss} -%global nspr_version 4.10.8-2 -%global nss_version 3.19.1-7 +# RHEL5 +%if 0%{?rhel} == 5 +%define use_bundled_python 1 +%define use_bundled_gcc 1 +%define use_bundled_yasm 1 +%define system_ffi 0 +%define enable_gstreamer 0 +%define use_bundled_binutils 1 +%define system_jpeg 0 +%define system_gio 0 +%define system_hunspell 0 +%define enable_gnomevfs 1 +# ppc and ia64 no longer supported (rhbz#1214863, rhbz#1214865) +ExcludeArch: ppc ia64 +%define system_libatomic 1 +%endif + +# Require libatomic for ppc +%ifarch ppc +%define system_libatomic 1 %endif -%define cairo_version 1.8.8 -%define freetype_version 2.1.9 +# ============================================================================ +# Avoid patch failures +%define _default_patch_fuzz 2 + +%define thunderbird_app_id \{3550f703-e582-4d05-9a08-453d09bdfdc6\} +%define build_langpacks 1 + +%define langpackdir %{mozappdir}/langpacks %if %{?system_sqlite} -%define sqlite_version 3.8.4.2 # The actual sqlite version (see #480989): %global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536) %endif -%define libnotify_version 0.4 -%global libvpx_version 1.3.0 -%define _default_patch_fuzz 2 - -%define thunderbird_app_id \{3550f703-e582-4d05-9a08-453d09bdfdc6\} -# Bump one with each minor lightning release -%if %{?with_gdata} -%define gdata_version 1.9 -%global gdata_extname %{_libdir}/mozilla/extensions/{3550f703-e582-4d05-9a08-453d09bdfdc6}/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc} -%endif -# The tarball is pretty inconsistent with directory structure. -# Sometimes there is a top level directory. That goes here. -# -# IMPORTANT: If there is no top level directory, this should be -# set to the cwd, ie: '.' -%define tarballdir comm-esr38 -%define objdir objdir %define mozappdir %{_libdir}/%{name} -%define official_branding 1 -# enable crash reporter only for iX86 -%ifarch %{ix86} x86_64 -%define enable_mozilla_crashreporter 0 -%else -%define enable_mozilla_crashreporter 0 -%endif - Summary: Mozilla Thunderbird mail/newsgroup client Name: thunderbird -Version: 38.8.0 +Version: 45.2 Release: 1%{?dist} URL: http://www.mozilla.org/projects/thunderbird/ License: MPLv1.1 or GPLv2+ or LGPLv2+ Group: Applications/Internet -Source0: ftp://ftp.mozilla.org/pub/thunderbird/releases/%{version}%{?pre_version}/source/thunderbird-%{version}%{?pre_version}.source.tar.bz2 +%if 0%{?rhel} == 5 +ExcludeArch: ppc ppc64 ia64 s390 s390x +%endif + +%define tarballdir thunderbird-45.2 +%define objdir objdir + +# From ftp://archive.mozilla.org/pub/thunderbird/releases/%{version}%{?ext_version}/source +Source0: https://archive.mozilla.org/pub/thunderbird/releases/%{version}%{?pre_version}/source/thunderbird-%{version}%{?pre_version}.source.tar.xz %if %{build_langpacks} -Source1: thunderbird-langpacks-%{version}-20160506.tar.bz2 +Source1: thunderbird-langpacks-%{version}%{?ext_version}-20160629.tar.xz %endif # Locales for lightning -Source2: l10n-lightning-%{version}.tar.bz2 +Source2: l10n-lightning-%{version}.tar.xz Source3: mklangsource.sh Source10: thunderbird-mozconfig Source11: thunderbird-mozconfig-branded -Source12: thunderbird-centos-default-prefs.js Source20: thunderbird.desktop Source21: thunderbird.sh.in +Source30: thunderbird-open-browser.sh Source100: find-external-requires +Source200: https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz +Source300: gcc48-%{gcc_version}.el5.src.rpm +Source301: yasm-1.2.0-3.el5.src.rpm +Source302: devtoolset-2-binutils-2.23.52.0.1-10.el5.src.rpm +Source500: thunderbird.sh.in.rhel5 +Source501: thunderbird-redhat-default-prefs.js.rhel5 +Source600: thunderbird.sh.in.rhel6 +Source601: thunderbird-redhat-default-prefs.js.rhel6 +Source700: thunderbird.sh.in.rhel7 +Source701: thunderbird-redhat-default-prefs.js.rhel7 # Mozilla (XULRunner) patches -Patch0: thunderbird-install-dir.patch -Patch9: mozilla-build-arm.patch +Patch0: firefox-install-dir.patch # Build patches -Patch100: thunderbird-objdir.patch -Patch101: build-nspr-prbool.patch -Patch102: build-werror.patch -Patch103: rhbz-1219542-s390-build.patch -Patch104: firefox-nss-3.19.1.patch -Patch105: mozilla-1005535.patch -Patch106: webrtc-arch-cpu.patch -# Linux specific -Patch200: thunderbird-enable-addons.patch - -# PPC fixes -Patch300: xulrunner-24.0-jemalloc-ppc.patch -Patch301: ppc64le-build.patch - -# Fedora specific patches -Patch400: rhbz-966424.patch -Patch402: rhbz-1014858.patch - -# Arch patches -Patch600: firefox-ppc64le.patch -%if %{official_branding} -# Required by Mozilla Corporation - -%else -# Not yet approved by Mozillla Corporation +Patch5: xulrunner-24.0-jemalloc-ppc.patch +Patch6: webrtc-arch-cpu.patch +Patch8: firefox-ppc64le.patch +Patch16: mozilla-1253216-disable-ion.patch +Patch17: build-nss.patch + +# RHEL patches +Patch103: rhbz-966424.patch +Patch109: aarch64-fix-skia.patch +Patch110: mozilla-1170092-etc-conf.patch +Patch111: rhbz-1173156.patch +Patch112: rhbz-1150082.patch + +# Upstream patches +Patch201: mozilla-1005535.patch +# Kaie's patch, we'll most likely need this one +Patch202: mozilla-1152515.patch + +# RHEL5 patches +Patch500: build-el5-build-id.patch +Patch501: build-el5-sandbox.patch +Patch502: build-el5-gtk2-2.10.patch +Patch503: build-el5-xlib-header.patch +Patch504: build-el5-rt-tgsigqueueinfo.patch +Patch505: build-el5-rapl.patch +Patch506: build-el5-fontconfig.patch +Patch507: build-el5-stdint.patch +Patch508: build-el5-nss.patch +Patch509: mozilla-694870-backout.patch +Patch510: mozilla-1134537-delete-nsgnomevfsservice.patch +Patch511: mozilla-1134537-only-support-gio-in-nsioservice.patch +Patch512: mozilla-1134537-delete-gnomevfs-extension.patch + +# Thunderbird patches +Patch1000: thunderbird-objdir.patch +Patch1001: lightning-bad-langs.patch +Patch1002: thunderbird-enable-addons.patch + +# --------------------------------------------------- +BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) -%endif - -%if %{?system_nss} -BuildRequires: nss-static >= %{nss_version} -BuildRequires: nspr-devel >= %{nspr_version} -BuildRequires: nss-devel >= %{nss_version} -Requires: nspr >= %{nspr_version} -Requires: nss >= %{nss_version} -%endif -BuildRequires: cairo-devel >= %{cairo_version} +BuildRequires: desktop-file-utils +BuildRequires: mesa-libGL-devel BuildRequires: libnotify-devel >= %{libnotify_version} -BuildRequires: libpng-devel -BuildRequires: libjpeg-devel BuildRequires: zip BuildRequires: bzip2-devel BuildRequires: zlib-devel BuildRequires: libIDL-devel BuildRequires: gtk2-devel +BuildRequires: gnome-vfs2-devel +BuildRequires: libgnome-devel +BuildRequires: libgnomeui-devel BuildRequires: krb5-devel BuildRequires: pango-devel BuildRequires: freetype-devel >= %{freetype_version} BuildRequires: libXt-devel BuildRequires: libXrender-devel -BuildRequires: hunspell-devel +BuildRequires: startup-notification-devel +BuildRequires: alsa-lib-devel +BuildRequires: libnotify-devel +BuildRequires: autoconf213 +BuildRequires: mesa-libGL-devel +BuildRequires: autoconf213 +BuildRequires: xz +%if ! %{use_bundled_yasm}0 +BuildRequires: yasm +%endif +%if %{?system_sqlite} +BuildRequires: sqlite-devel >= %{sqlite_version} +Requires: sqlite >= %{sqlite_build_version} +%endif +%if %{?system_nss} +BuildRequires: nspr-devel >= %{nspr_version} +BuildRequires: nss-devel >= %{nss_version} +Requires: nspr >= %{nspr_version} +Requires: nss >= %{nss_version} +%endif +%if %{?system_cairo} +BuildRequires: cairo-devel >= %{cairo_version} +%endif %if %{?system_sqlite} BuildRequires: sqlite-devel >= %{sqlite_version} Requires: sqlite >= %{sqlite_build_version} %endif %if %{?system_ffi} -BuildRequires: libffi-devel +BuildRequires: libffi-devel >= %{ffi_version} +Requires: libffi >= %{ffi_version} %endif -BuildRequires: startup-notification-devel -BuildRequires: alsa-lib-devel -BuildRequires: autoconf213 -BuildRequires: desktop-file-utils -BuildRequires: libcurl-devel -BuildRequires: mesa-libGL-devel -%if 0%{?system_libvpx} -BuildRequires: libvpx-devel >= %{libvpx_version} -Requires: libvpx >= %{libvpx_version} +%if %{?enable_gstreamer} +BuildRequires: gstreamer1-devel +BuildRequires: gstreamer1-plugins-base-devel +%endif +BuildRequires: libpng-devel +%if %{?system_jpeg} +BuildRequires: libjpeg-devel %endif +%if %{?system_hunspell} +BuildRequires: hunspell-devel +%endif +%if %{system_libatomic} +BuildRequires: libatomic +Requires: libatomic +%endif + +# RHEL7 requires +%if 0%{?rhel} == 7 BuildRequires: pulseaudio-libs-devel -BuildRequires: libicu-devel Requires: mozilla-filesystem -BuildRequires: libffi-devel +Requires: liberation-fonts-common +Requires: liberation-sans-fonts +%endif + +# RHEL6 requires +%if 0%{?rhel} == 6 +BuildRequires: desktop-file-utils +Requires: mozilla-filesystem +Requires: gtk2 >= 2.24 +BuildRequires: pulseaudio-libs-devel +Requires: liberation-fonts-common +Requires: liberation-sans-fonts +%endif + +# RHEL5 requires +%if 0%{?rhel} == 5 +BuildRequires: libXcomposite-devel +BuildRequires: libXdamage-devel +BuildRequires: xorg-x11-proto-devel +%endif + Obsoletes: thunderbird-lightning Obsoletes: thunderbird-lightning-gdata +%if %{use_bundled_python} +BuildRequires: openssl-devel +%endif +# GCC 4.8 BuildRequires +# ================================================================================== +%if %{use_bundled_gcc} + +%ifarch s390x +%global multilib_32_arch s390 +%endif +%ifarch sparc64 +%global multilib_32_arch sparcv9 +%endif +%ifarch ppc64 +%global multilib_32_arch ppc +%endif +%ifarch x86_64 +%if 0%{?rhel} >= 6 +%global multilib_32_arch i686 +%else +%global multilib_32_arch i386 +%endif +%endif + +%global multilib_64_archs sparc64 ppc64 s390x x86_64 + +%if 0%{?rhel} >= 6 +# Need binutils which support --build-id >= 2.17.50.0.17-3 +# Need binutils which support %gnu_unique_object >= 2.19.51.0.14 +# Need binutils which support .cfi_sections >= 2.19.51.0.14-33 +BuildRequires: binutils >= 2.19.51.0.14-33 +# While gcc doesn't include statically linked binaries, during testing +# -static is used several times. +BuildRequires: glibc-static +%else +# Don't have binutils which support --build-id >= 2.17.50.0.17-3 +# Don't have binutils which support %gnu_unique_object >= 2.19.51.0.14 +# Don't have binutils which support .cfi_sections >= 2.19.51.0.14-33 +BuildRequires: binutils >= 2.17.50.0.2-8 +%endif +BuildRequires: zlib-devel, gettext, dejagnu, bison, flex, texinfo, sharutils +BuildRequires: /usr/bin/pod2man +%if 0%{?rhel} >= 7 +BuildRequires: texinfo-tex +%endif +#BuildRequires: systemtap-sdt-devel >= 1.3 +# For VTA guality testing +BuildRequires: gdb +# Make sure pthread.h doesn't contain __thread tokens +# Make sure glibc supports stack protector +# Make sure glibc supports DT_GNU_HASH +BuildRequires: glibc-devel >= 2.4.90-13 +%if 0%{?rhel} >= 6 +BuildRequires: elfutils-devel >= 0.147 +BuildRequires: elfutils-libelf-devel >= 0.147 +%else +BuildRequires: elfutils-devel >= 0.72 +%endif +%ifarch ppc ppc64 s390 s390x sparc sparcv9 alpha +# Make sure glibc supports TFmode long double +BuildRequires: glibc >= 2.3.90-35 +%endif +%ifarch %{multilib_64_archs} sparcv9 ppc +# Ensure glibc{,-devel} is installed for both multilib arches +BuildRequires: /lib/libc.so.6 /usr/lib/libc.so /lib64/libc.so.6 /usr/lib64/libc.so +%endif +%ifarch ia64 +BuildRequires: libunwind >= 0.98 +%endif +# Need .eh_frame ld optimizations +# Need proper visibility support +# Need -pie support +# Need --as-needed/--no-as-needed support +# On ppc64, need omit dot symbols support and --non-overlapping-opd +# Need binutils that owns /usr/bin/c++filt +# Need binutils that support .weakref +# Need binutils that supports --hash-style=gnu +# Need binutils that support mffgpr/mftgpr +#%if 0%{?rhel} >= 6 +## Need binutils which support --build-id >= 2.17.50.0.17-3 +## Need binutils which support %gnu_unique_object >= 2.19.51.0.14 +## Need binutils which support .cfi_sections >= 2.19.51.0.14-33 +#Requires: binutils >= 2.19.51.0.14-33 +#%else +## Don't have binutils which support --build-id >= 2.17.50.0.17-3 +## Don't have binutils which support %gnu_unique_object >= 2.19.51.0.14 +## Don't have binutils which support .cfi_sections >= 2.19.51.0.14-33 +#Requires: binutils >= 2.17.50.0.2-8 +#%endif +## Make sure gdb will understand DW_FORM_strp +#Conflicts: gdb < 5.1-2 +#Requires: glibc-devel >= 2.2.90-12 +#%ifarch ppc ppc64 s390 s390x sparc sparcv9 alpha +## Make sure glibc supports TFmode long double +#Requires: glibc >= 2.3.90-35 +#%endif +#Requires: libgcc >= 4.1.2-43 +#Requires: libgomp >= 4.4.4-13 +#%if 0%{?rhel} == 6 +#Requires: libstdc++ >= 4.4.4-13 +#%else +#Requires: libstdc++ = 4.1.2 +#%endif +##FIXME gcc version +#Requires: libstdc++-devel = %{version}-%{release} +BuildRequires: gmp-devel >= 4.1.2-8 +%if 0%{?rhel} >= 6 +BuildRequires: mpfr-devel >= 2.2.1 +%endif +%if 0%{?rhel} >= 7 +BuildRequires: libmpc-devel >= 0.8.1 +%endif +%endif # bundled gcc BuildRequires +# ================================================================================== +# Override internal dependency generator to avoid showing libraries provided by this package +# in dependencies: +AutoProv: 0 %define _use_internal_dependency_generator 0 %define __find_requires %{SOURCE100} %description Mozilla Thunderbird is a standalone mail and newsgroup client. -%if %{enable_mozilla_crashreporter} -%global moz_debug_prefix %{_prefix}/lib/debug -%global moz_debug_dir %{moz_debug_prefix}%{mozappdir} -%global uname_m %(uname -m) -%global symbols_file_name %{name}-%{version}.en-US.%{_os}-%{uname_m}.crashreporter-symbols.zip -%global symbols_file_path %{moz_debug_dir}/%{symbols_file_name} -%global _find_debuginfo_opts -p %{symbols_file_path} -o debugcrashreporter.list -%global crashreporter_pkg_name mozilla-crashreporter-%{name}-debuginfo -%package -n %{crashreporter_pkg_name} -Summary: Debugging symbols used by Mozilla's crash reporter servers -Group: Development/Debug -%description -n %{crashreporter_pkg_name} -This package provides debug information for XULRunner, for use by -Mozilla's crash reporter servers. If you are trying to locally -debug %{name}, you want to install %{name}-debuginfo instead. -%files -n %{crashreporter_pkg_name} -f debugcrashreporter.list -%defattr(-,root,root) -%endif - -%global tb_version %{version} - -%if %{?with_gdata} -%package lightning-gdata -Summary: Lightning data provider for Google Calendar -Version: %{gdata_version} -Requires: %{name}%{?_isa} = %{tb_version}-%{release} - -%description lightning-gdata -This extension allows Lightning to read and write events to a Google Calendar. - -Please read http://wiki.mozilla.org/Calendar:GDATA_Provider for more details -and before filing a bug. Also, be sure to visit the dicussion forums, maybe -your bug already has a solution! -%endif %prep %setup -q -c cd %{tarballdir} -%patch0 -p1 -b .dir -%patch100 -p2 -b .objdir - # Mozilla (XULRunner) patches cd mozilla -%patch9 -p2 -b .arm -%patch300 -p2 -b .852698 -%patch106 -p1 -b .webrtc-arch-cpu -%patch105 -p1 -b .moz-1005535 -%patch104 -p1 -b .nss-3.19.1 -%patch102 -p2 -b .build-werror -%patch101 -p1 -b .nspr-prbool -%ifarch s390 -%patch103 -p1 -b .rhbz-1219542-s390-build +# Build patches +# We have to keep original patch backup extension to go thru configure without problems with tests +%patch0 -p1 -b .orig +%patch5 -p2 -b .jemalloc-ppc.patch +%patch6 -p1 -b .webrtc-arch-cpu +%patch8 -p2 -b .ppc64le +%patch16 -p2 -b .moz-1253216-disable-ion +%patch17 -p1 -b .build-nss + +# RPM specific patches +%patch103 -p1 -b .rhbz-966424 +%patch109 -p1 -b .aarch64 +%patch110 -p1 -b .moz-1170092-etc-conf +%patch111 -p2 -b .rhbz-1173156 +%patch112 -p1 -b .rhbz-1150082 + +# Upstream patches +%patch201 -p1 -b .mozbz-1005535 +# FIXME: will require this?: by kai +%patch202 -p1 -b .mozbz-1152515 + + +# RHEL5 only patches +%if 0%{?rhel} == 5 +%patch500 -p1 -b .gnu-build-id +%patch501 -p1 -b .build-sandbox +%patch502 -p1 -b .build-gtk2 +%patch503 -p1 -b .build-xlib-swap +%patch504 -p1 -b .build-rt-tgsigqueueinfo +%patch505 -p1 -b .build-el5-rapl +%patch506 -p1 -b .build-el5-fontconfig +%patch507 -p1 -b .build-el5-stdint +%patch508 -p1 -b .build-el5-nss +%patch509 -p2 -b .moz-694870-backout +%patch510 -p2 -b .moz-1134537-delete-nsgnomevfsservice +%patch511 -p1 -R -b .moz-1134537-only-support-gio-in-nsioservice +%patch512 -p2 -b .moz-1134537-gnomevfsservice %endif -%patch400 -p1 -b .966424 -%patch402 -p1 -b .rhbz-1014858 -%patch600 -p2 -b .ppc64le cd .. -%patch200 -p1 -b .addons -%patch301 -p1 -b .ppc64le-build +%patch1000 -p2 -b .objdir +%patch1001 -p1 -b .badlangs +%patch1002 -p1 -b .addons +#%patch301 -p1 -b .ppc64le-build # fixme? -%if %{official_branding} -# Required by Mozilla Corporation - -%else -# Not yet approved by Mozilla Corporation - -%endif %{__rm} -f .mozconfig %{__cp} %{SOURCE10} .mozconfig +function add_to_mozconfig() { + mozconfig_entry=$1 + echo "ac_add_options --$1" >> .mozconfig +} + +# Modify mozconfig file %if %{official_branding} -%{__cat} %{SOURCE11} >> .mozconfig + add_to_mozconfig "enable-official-branding" %endif -%if %{?system_nss} -echo "ac_add_options --with-system-nspr" >> .mozconfig -echo "ac_add_options --with-system-nss" >> .mozconfig +%if %{?system_sqlite} + add_to_mozconfig "enable-system-sqlite" %else -echo "ac_add_options --without-system-nspr" >> .mozconfig -echo "ac_add_options --without-system-nss" >> .mozconfig -%endif - -# s390(x) fails to start with jemalloc enabled -%ifarch s390 s390x -echo "ac_add_options --disable-jemalloc" >> .mozconfig + add_to_mozconfig "disable-system-sqlite" %endif -%if %{?system_sqlite} -echo "ac_add_options --enable-system-sqlite" >> .mozconfig +%if %{?system_cairo} + add_to_mozconfig "enable-system-cairo" %else -echo "ac_add_options --disable-system-sqlite" >> .mozconfig + add_to_mozconfig "disable-system-cairo" %endif %if %{?system_ffi} -echo "ac_add_options --enable-system-ffi" >> .mozconfig + add_to_mozconfig "enable-system-ffi" %endif -%if %{?debug_build} -echo "ac_add_options --enable-debug" >> .mozconfig -echo "ac_add_options --disable-optimize" >> .mozconfig +%if %{?system_nss} + add_to_mozconfig "with-system-nspr" + add_to_mozconfig "with-system-nss" %else -echo "ac_add_options --disable-debug" >> .mozconfig -echo "ac_add_options --enable-optimize" >> .mozconfig + add_to_mozconfig "without-system-nspr" + add_to_mozconfig "without-system-nss" %endif -%ifarch %{arm} -echo "ac_add_options --disable-elf-hack" >> .mozconfig +%if %{?enable_gstreamer} + add_to_mozconfig "enable-gstreamer=1.0" +%else + add_to_mozconfig "disable-gstreamer" %endif -%ifnarch %{ix86} x86_64 -echo "ac_add_options --disable-webrtc" >> .mozconfig +%if %{?system_jpeg} + add_to_mozconfig "with-system-jpeg" +%else + add_to_mozconfig "without-system-jpeg" +%endif +%if %{?system_hunspell} + add_to_mozconfig "enable-system-hunspell" %endif -%ifarch armv7hl -echo "ac_add_options --with-arch=armv7-a" >> .mozconfig -echo "ac_add_options --with-float-abi=hard" >> .mozconfig -echo "ac_add_options --with-fpu=vfpv3-d16" >> .mozconfig -echo "ac_add_options --disable-elf-hack" >> .mozconfig +# RHEL 7 mozconfig changes: +%if 0%{?rhel} >= 6 + add_to_mozconfig "enable-libnotify" + add_to_mozconfig "enable-startup-notification" + add_to_mozconfig "enable-jemalloc" %endif -%ifarch armv7hnl -echo "ac_add_options --with-arch=armv7-a" >> .mozconfig -echo "ac_add_options --with-float-abi=hard" >> .mozconfig -echo "ac_add_options --with-fpu=neon" >> .mozconfig -echo "ac_add_options --disable-elf-hack" >> .mozconfig -echo "ac_add_options --disable-ion" >> .mozconfig -echo "ac_add_options --disable-yarr-jit" >> .mozconfig + +# RHEL 6 +%if 0%{?rhel} == 6 + # Disable dbus, because we're unable to build with its support in brew + add_to_mozconfig "disable-dbus" %endif -%ifarch armv5tel -echo "ac_add_options --with-arch=armv5te" >> .mozconfig -echo "ac_add_options --with-float-abi=soft" >> .mozconfig -echo "ac_add_options --disable-elf-hack" >> .mozconfig -echo "ac_add_options --disable-ion" >> .mozconfig -echo "ac_add_options --disable-yarr-jit" >> .mozconfig + +%if 0%{?rhel} == 5 + add_to_mozconfig "disable-pulseaudio" %endif -%if %{?enable_webm} -echo "ac_add_options --enable-webm" >> .mozconfig -echo "ac_add_options --enable-webrtc" >> .mozconfig -echo "ac_add_options --enable-ogg" >> .mozconfig -%else -echo "ac_add_options --without-system-libvpx" >> .mozconfig -echo "ac_add_options --disable-webm" >> .mozconfig -echo "ac_add_options --disable-webrtc" >> .mozconfig -echo "ac_add_options --disable-ogg" >> .mozconfig -echo "ac_add_options --disable-opus" >> .mozconfig -%endif -%if 0%{?system_libvpx} -echo "ac_add_options --with-system-libvpx" >> .mozconfig -%else -echo "ac_add_options --without-system-libvpx" >> .mozconfig +%ifarch aarch64 + add_to_mozconfig "disable-ion" +%endif +%if %{system_gio} + add_to_mozconfig "enable-gio" + add_to_mozconfig "disable-gnomevfs" +%else + add_to_mozconfig "disable-gio" + add_to_mozconfig "enable-gnomevfs" %endif -%if %{enable_mozilla_crashreporter} -echo "ac_add_options --enable-crashreporter" >> .mozconfig +# Debug build flags +%if %{?debug_build} + add_to_mozconfig "enable-debug" + add_to_mozconfig "disable-optimize" %else -echo "ac_add_options --disable-crashreporter" >> .mozconfig + add_to_mozconfig "disable-debug" + add_to_mozconfig "enable-optimize" +%endif + +#FIXME RTTI?? RHEL5/6 +# ac_add_options --enable-cpp-rtti +# RHEL7: ac_add_options --with-system-bz2 +# RHEL5: never been there, but is it usable --enable-gnomeui ???? + +%if %{use_bundled_python} + # Prepare Python 2.7 sources + tar xf %{SOURCE200} %endif # install lightning langpacks cd .. -%{__tar} xf %{SOURCE2} +%{__xz} -dc %{SOURCE2} | %{__tar} xf - cd - #=============================================================================== %build + +function build_bundled_package() { + PACKAGE_RPM=$1 + PACKAGE_FILES=$2 + PACKAGE_SOURCE=$3 + PACKAGE_DIR="%{_topdir}/RPMS" + + PACKAGE_ALREADY_BUILD=0 + %if %{do_not_clean_rpms} + if ls $PACKAGE_DIR/$PACKAGE_RPM; then + PACKAGE_ALREADY_BUILD=1 + fi + if ls $PACKAGE_DIR/%{_arch}/$PACKAGE_RPM; then + PACKAGE_ALREADY_BUILD=1 + fi + %endif + if [ $PACKAGE_ALREADY_BUILD == 0 ]; then + echo "Rebuilding $PACKAGE_RPM from $PACKAGE_SOURCE"; echo "===============================" + rpmbuild --nodeps --rebuild $PACKAGE_SOURCE + fi + + if [ ! -f $PACKAGE_DIR/$PACKAGE_RPM ]; then + # Hack for tps tests + ARCH_STR=%{_arch} + %ifarch i386 i686 + ARCH_STR="i?86" + %endif + PACKAGE_DIR="$PACKAGE_DIR/$ARCH_STR" + fi + pushd $PACKAGE_DIR + echo "Installing $PACKAGE_DIR/$PACKAGE_RPM"; echo "===============================" + rpm2cpio $PACKAGE_DIR/$PACKAGE_RPM | cpio -iduv + # Clean rpms to avoid including them to package + %if ! %{do_not_clean_rpms}0 + rm -f $PACKAGE_FILES + %endif + + PATH=$PACKAGE_DIR/usr/bin:$PATH + export PATH + LD_LIBRARY_PATH=$PACKAGE_DIR/usr/%{_lib} + export LD_LIBRARY_PATH + popd +} + +# Build and install local yasm if needed +# ====================================== +%if %{use_bundled_yasm} + build_bundled_package 'yasm-1*.rpm' 'yasm-*.rpm' '%{SOURCE301}' +%endif + +# Install local binutils if needed +# ====================================== +%if 0%{?use_bundled_binutils} + build_bundled_package 'binutils-2*.rpm' 'binutils*.rpm' '%{SOURCE302}' +%endif + +# Install local GCC if needed +# ====================================== +%if %{use_bundled_gcc} + %if %{rhel} == 5 + %ifarch ppc64 + export STRIP="/bin/true" + %endif + %endif + build_bundled_package 'gcc48-%{gcc_version}*.rpm' 'gcc48-*.rpm' '%{SOURCE300}' + %if %{rhel} == 5 + %ifarch ppc64 + unset STRIP + %endif + %endif + export CXX=g++ +%endif + + +# Install local Python if needed +# ====================================== +%if %{use_bundled_python} + echo "Rebuilding Python"; echo "===============================" + pushd %{tarballdir} + + # Build Python 2.7 and set environment + BUILD_DIR=`pwd`/python_build + cd Python-%{python_version} + ./configure --prefix=$BUILD_DIR --exec-prefix=$BUILD_DIR + make + make install + cd - + + PATH=$BUILD_DIR/bin:$PATH + export PATH + popd +%endif # bundled Python + %if %{?system_sqlite} -# Do not proceed with build if the sqlite require would be broken: -# make sure the minimum requirement is non-empty, ... -sqlite_version=$(expr "%{sqlite_version}" : '\([0-9]*\.\)[0-9]*\.') || exit 1 -# ... and that major number of the computed build-time version matches: -case "%{sqlite_build_version}" in - "$sqlite_version"*) ;; - *) exit 1 ;; -esac + # Do not proceed with build if the sqlite require would be broken: + # make sure the minimum requirement is non-empty, ... + sqlite_version=$(expr "%{sqlite_version}" : '\([0-9]*\.\)[0-9]*\.') || exit 1 + # ... and that major number of the computed build-time version matches: + case "%{sqlite_build_version}" in + "$sqlite_version"*) ;; + *) exit 1 ;; + esac %endif +echo "Building Thunderbird"; echo "===============================" cd %{tarballdir} +# 1. Mozilla builds with -Wall with exception of a few warnings which show up +# everywhere in the code; so, don't override that. +# 2. -Werror=format-security causes build failures when -Wno-format is explicitly given +# for some sources +MOZ_OPT_FLAGS=$(echo "$RPM_OPT_FLAGS -fpermissive -Wformat-security -Wformat -Werror=format-security" | %{__sed} -e 's/-Wall//') + +# TODO check if necessery # Update the various config.guess to upstream release for aarch64 support #find ./ -name config.guess -exec cp /usr/lib/rpm/config.guess {} ';' -find ./ -name config.guess -exec cp ./mozilla/build/autoconf/config.guess {} ';' - -# -fpermissive is needed to build with gcc 4.6+ which has become stricter -# -# Mozilla builds with -Wall with exception of a few warnings which show up -# everywhere in the code; so, don't override that. -# -# Disable C++ exceptions since Mozilla code is not exception-safe -# -MOZ_OPT_FLAGS=$(echo "$RPM_OPT_FLAGS -fpermissive" | \ - %{__sed} -e 's/-Wall//') -#rhbz#1037353 -MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -Wformat-security -Wformat -Werror=format-security" -%if %{?debug_build} -MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-O2//') -%endif +# FIXME required? find ./ -name config.guess -exec cp ./mozilla/build/autoconf/config.guess {} ';' + %ifarch s390 MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-g/-g1/') -# If MOZ_DEBUG_FLAGS is empty, firefox's build will default it to "-g" which -# overrides the -g1 from line above and breaks building on s390 -# (OOM when linking, rhbz#1238225) -export MOZ_DEBUG_FLAGS=" " %endif -%ifarch s390 %{arm} ppc aarch64 i686 -MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--reduce-memory-overheads" + +# Avoid failing builds because OOM killer on some arches +%ifarch s390 %{arm} ppc +MOZ_LINK_FLAGS="$MOZ_LINK_FLAGS -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" +%endif + +%if 0%{?rhel} == 6 + %if %{system_libatomic} + MOZ_LINK_FLAGS="$MOZ_LINK_FLAGS -l:libatomic.so.1" + %endif +%endif + +%if 0%{?rhel} == 5 + %if %{system_libatomic} + # Force to use ld.bfd linker instead of ld.gold + MOZ_LINK_FLAGS="$MOZ_LINK_FLAGS -fuse-ld=bfd -l:libatomic.so.1" + %endif + %ifarch i386 i686 + MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-march=i386/-march=i586/') + %endif +%endif + +%if %{?debug_build} + MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-O2//') %endif -export CFLAGS=`echo $MOZ_OPT_FLAGS |sed -e 's/-fpermissive//g'` -export CXXFLAGS="$MOZ_OPT_FLAGS -fno-strict-aliasing" -export LDFLAGS=$MOZ_LINK_FLAGS +export CFLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-fpermissive//') +export CXXFLAGS=$MOZ_OPT_FLAGS +export LDFLAGS="-Wl,--verbose $MOZ_LINK_FLAGS" export PREFIX='%{_prefix}' export LIBDIR='%{_libdir}' +# Hack for missing shell when building in brew on RHEL6 and RHEL5 +%if 0%{?rhel} <= 6 +export SHELL=/bin/sh +%endif + MOZ_SMP_FLAGS=-j1 -# On x86 architectures, Mozilla can build up to 4 jobs at once in parallel, -# however builds tend to fail on other arches when building in parallel. -%ifarch %{ix86} x86_64 ppc ppc64 ppc64le aarch64 [ -z "$RPM_BUILD_NCPUS" ] && \ RPM_BUILD_NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`" [ "$RPM_BUILD_NCPUS" -ge 2 ] && MOZ_SMP_FLAGS=-j2 [ "$RPM_BUILD_NCPUS" -ge 4 ] && MOZ_SMP_FLAGS=-j4 [ "$RPM_BUILD_NCPUS" -ge 8 ] && MOZ_SMP_FLAGS=-j8 -%endif -echo "test config.guess" -./mozilla/build/autoconf/config.guess -echo "test LDAP config.guess" -sh -x ./ldap/sdks/c-sdk/config/autoconf/config.guess +#FIXME echo "test config.guess" +#./mozilla/build/autoconf/config.guess +#echo "test LDAP config.guess" +#sh -x ./ldap/sdks/c-sdk/config/autoconf/config.guess + make -f client.mk build STRIP="/bin/true" MOZ_MAKE_FLAGS="$MOZ_SMP_FLAGS" # Package l10n files @@ -410,45 +730,63 @@ done make tools cd - -# create debuginfo for crash-stats.mozilla.com -%if %{enable_mozilla_crashreporter} -make -C %{objdir} buildsymbols -%endif - #=============================================================================== %install -cd %{tarballdir}/%{objdir} - -DESTDIR=$RPM_BUILD_ROOT make install - -cd .. - -# install icons -for s in 16 22 24 32 48 256; do - %{__mkdir_p} $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/${s}x${s}/apps - %{__cp} -p other-licenses/branding/%{name}/mailicon${s}.png \ - $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/${s}x${s}/apps/thunderbird.png -done +cd %{tarballdir} +%{__rm} -rf $RPM_BUILD_ROOT +DESTDIR=$RPM_BUILD_ROOT make -C objdir install +%if 0%{?rhel} == 5 desktop-file-install --vendor mozilla \ --dir $RPM_BUILD_ROOT%{_datadir}/applications \ + --add-category Network \ + --add-category Email \ %{SOURCE20} +%else +desktop-file-install \ + --dir $RPM_BUILD_ROOT%{_datadir}/applications \ + %{SOURCE20} +%endif +# Set up the thunderbird start script, unfortunatelly it is different for each RHEL +rm -rf $RPM_BUILD_ROOT%{_bindir}/thunderbird +THUNDERBIRD_SH_SOURCE=%{SOURCE700} +THUNDERBIRD_PREF_SOURCE=%{SOURCE701} +%if 0%{?rhel} == 5 + THUNDERBIRD_SH_SOURCE=%{SOURCE500} + THUNDERBIRD_PREF_SOURCE=%{SOURCE501} +%endif +%if 0%{?rhel} == 6 + THUNDERBIRD_SH_SOURCE=%{SOURCE600} + THUNDERBIRD_PREF_SOURCE=%{SOURCE601} +%endif +cp $THUNDERBIRD_SH_SOURCE $RPM_BUILD_ROOT%{_bindir}/thunderbird +%{__chmod} 755 $RPM_BUILD_ROOT%{_bindir}/thunderbird -# set up the thunderbird start script -rm -f $RPM_BUILD_ROOT/%{_bindir}/thunderbird -%{__cat} %{SOURCE21} > $RPM_BUILD_ROOT%{_bindir}/thunderbird -%{__chmod} 755 $RPM_BUILD_ROOT/%{_bindir}/thunderbird - -# set up our default preferences -%{__cat} %{SOURCE12} | %{__sed} -e 's,THUNDERBIRD_RPM_VR,%{tb_version}-%{release},g' > \ +# Fill in THUNDERBIRD_RPM_VR and COMMAND into our rh-default-prefs +%{__cat} $THUNDERBIRD_PREF_SOURCE | %{__sed} -e 's,THUNDERBIRD_RPM_VR,%{version}-%{release},g' \ + -e 's,COMMAND,%{mozappdir}/open-browser.sh,g' > \ $RPM_BUILD_ROOT/rh-default-prefs %{__install} -D $RPM_BUILD_ROOT/rh-default-prefs $RPM_BUILD_ROOT/%{mozappdir}/greprefs/all-redhat.js %{__install} -D $RPM_BUILD_ROOT/rh-default-prefs $RPM_BUILD_ROOT/%{mozappdir}/defaults/pref/all-redhat.js %{__rm} $RPM_BUILD_ROOT/rh-default-prefs +# Hyperlink opening script for rhel5 +%if 0%{?rhel} == 5 + install -Dm755 %{SOURCE30} $RPM_BUILD_ROOT/%{mozappdir}/open-browser.sh + %{__sed} -i -e 's|LIBDIR|%{_libdir}|g' $RPM_BUILD_ROOT/%{mozappdir}/open-browser.sh +%endif + + +# install icons +for s in 16 22 24 32 48 256; do + %{__mkdir_p} $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/${s}x${s}/apps + %{__cp} -p other-licenses/branding/%{name}/mailicon${s}.png \ + $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/${s}x${s}/apps/thunderbird.png +done + %{__rm} -f $RPM_BUILD_ROOT%{_bindir}/thunderbird-config # own mozilla plugin dir (#135050) @@ -459,80 +797,111 @@ rm -f $RPM_BUILD_ROOT/%{_bindir}/thunderbird %{__mkdir_p} $RPM_BUILD_ROOT%{_libdir}/mozilla/extensions/%{thunderbird_app_id} # Install langpacks -%{__rm} -f %{name}.lang # Delete for --short-circuit option -touch %{name}.lang +echo > ../%{name}.lang %if %{build_langpacks} -%{__mkdir_p} $RPM_BUILD_ROOT%{mozappdir}/langpacks -%{__tar} xf %{SOURCE1} +# Extract langpacks, make any mods needed, repack the langpack, and install it. +%{__mkdir_p} $RPM_BUILD_ROOT%{langpackdir} +%{__xz} -dc %{SOURCE1} | %{__tar} xf - for langpack in `ls thunderbird-langpacks/*.xpi`; do language=`basename $langpack .xpi` extensionID=langpack-$language@thunderbird.mozilla.org + %{__mkdir_p} $extensionID + unzip $langpack -d $extensionID + find $extensionID -type f | xargs chmod 644 + + cd $extensionID + zip -r9mX ../${extensionID}.xpi * + cd - + %{__install} -m 644 ${extensionID}.xpi $RPM_BUILD_ROOT%{langpackdir} language=`echo $language | sed -e 's/-/_/g'` - %{__install} -m 644 ${langpack} $RPM_BUILD_ROOT%{mozappdir}/langpacks/${extensionID}.xpi - echo "%%lang($language) %{mozappdir}/langpacks/${extensionID}.xpi" >> %{name}.lang + echo "%%lang($language) %{langpackdir}/${extensionID}.xpi" >> ../%{name}.lang done %{__rm} -rf thunderbird-langpacks + +# Install langpack workaround (see #707100, #821169) +function create_default_langpack() { + language_long=$1 + language_short=$2 + cd $RPM_BUILD_ROOT%{langpackdir} + ln -s langpack-$language_long@thunderbird.mozilla.org.xpi langpack-$language_short@thunderbird.mozilla.org.xpi + cd - + echo "%%lang($language_short) %{langpackdir}/langpack-$language_short@thunderbird.mozilla.org.xpi" >> ../%{name}.lang +} + +# Table of fallbacks for each language +# please file a bug at bugzilla.redhat.com if the assignment is incorrect +# Because of bug 1341629 we can't do this: +#create_default_langpack "bn-BD" "bn" +#create_default_langpack "es-AR" "es" +#create_default_langpack "fy-NL" "fy" +#create_default_langpack "ga-IE" "ga" +#create_default_langpack "hy-AM" "hy" +#create_default_langpack "nb-NO" "nb" +#create_default_langpack "nn-NO" "nn" +#create_default_langpack "pa-IN" "pa" +#create_default_langpack "pt-PT" "pt" +#create_default_langpack "sv-SE" "sv" +#create_default_langpack "zh-TW" "zh" %endif # build_langpacks # Get rid of devel package and its debugsymbols -%{__rm} -rf $RPM_BUILD_ROOT%{_libdir}/%{name}-devel-%{tb_version} +%{__rm} -rf $RPM_BUILD_ROOT%{_libdir}/%{name}-devel-%{version} # Copy over the LICENSE cd mozilla install -c -m 644 LICENSE $RPM_BUILD_ROOT%{mozappdir} cd - -# Use the system hunspell dictionaries -%{__rm} -rf $RPM_BUILD_ROOT/%{mozappdir}/dictionaries -ln -s %{_datadir}/myspell $RPM_BUILD_ROOT%{mozappdir}/dictionaries +# Use the system dictionaries for system hunspell +%if %{system_hunspell} + %{__rm} -rf ${RPM_BUILD_ROOT}%{mozappdir}/dictionaries + ln -s %{_datadir}/myspell ${RPM_BUILD_ROOT}%{mozappdir}/dictionaries +%endif # ghost files %{__mkdir_p} $RPM_BUILD_ROOT%{mozappdir}/components touch $RPM_BUILD_ROOT%{mozappdir}/components/compreg.dat touch $RPM_BUILD_ROOT%{mozappdir}/components/xpti.dat -# Add debuginfo for crash-stats.mozilla.com -%if %{enable_mozilla_crashreporter} -%{__mkdir_p} $RPM_BUILD_ROOT/%{moz_debug_dir} -%{__cp} %{objdir}/dist/%{symbols_file_name} $RPM_BUILD_ROOT/%{moz_debug_dir} -%endif +# Clean thunderbird-devel debuginfo +rm -rf %{_prefix}/lib/debug/lib/%{name}-devel-* +rm -rf %{_prefix}/lib/debug/lib64/%{name}-devel-* -# lightning-gdata -%if %{?with_gdata} -mkdir -p $RPM_BUILD_ROOT%{gdata_extname} -touch $RPM_BUILD_ROOT%{gdata_extname}/chrome.manifest +#--------------------------------------------------------------------- -unzip -qod $RPM_BUILD_ROOT%{gdata_extname} %{objdir}/dist/xpi-stage/gdata-provider-%{gdata_version}.en-US.linux-*.xpi -%endif +%clean +%{__rm} -rf $RPM_BUILD_ROOT -#=============================================================================== +#--------------------------------------------------------------------- %post update-desktop-database &> /dev/null || : touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : +if [ -x %{_bindir}/gtk-update-icon-cache ]; then + %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || : +fi %postun -update-desktop-database &> /dev/null || : if [ $1 -eq 0 ] ; then touch --no-create %{_datadir}/icons/hicolor &>/dev/null gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : fi +update-desktop-database &> /dev/null || : + %posttrans gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : -# lightning-gdata files========================================================= -%if %{?with_gdata} -%files lightning-gdata -%doc %{tarballdir}/mozilla/LEGAL %{tarballdir}/mozilla/LICENSE %{tarballdir}/mozilla/README.txt -%{gdata_extname} -%endif #=============================================================================== -%files -f %{tarballdir}/%{name}.lang +%files -f %{name}.lang %defattr(-,root,root,-) %attr(755,root,root) %{_bindir}/thunderbird +%if 0%{?rhel} == 5 %attr(644,root,root) %{_datadir}/applications/mozilla-thunderbird.desktop +%else +%attr(644,root,root) %{_datadir}/applications/thunderbird.desktop +%endif %dir %{_datadir}/mozilla/extensions/%{thunderbird_app_id} %dir %{_libdir}/mozilla/extensions/%{thunderbird_app_id} %dir %{mozappdir} @@ -541,15 +910,12 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %dir %{mozappdir}/components %ghost %{mozappdir}/components/compreg.dat %ghost %{mozappdir}/components/xpti.dat -%{mozappdir}/components/components.manifest -%{mozappdir}/components/libdbusservice.so -%{mozappdir}/components/libmozgnome.so %{mozappdir}/omni.ja %{mozappdir}/plugin-container %{mozappdir}/defaults %{mozappdir}/dictionaries %dir %{mozappdir}/extensions -%{mozappdir}/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd} +%{mozappdir}/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}.xpi %dir %{mozappdir}/langpacks %{mozappdir}/greprefs %{mozappdir}/isp @@ -567,41 +933,34 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %{_datadir}/icons/hicolor/256x256/apps/thunderbird.png %{_datadir}/icons/hicolor/32x32/apps/thunderbird.png %{_datadir}/icons/hicolor/48x48/apps/thunderbird.png -%if %{enable_mozilla_crashreporter} -%{mozappdir}/crashreporter -%{mozappdir}/crashreporter.ini -%{mozappdir}/Throbber-small.gif -%endif %if !%{?system_nss} %{mozappdir}/*.chk %endif -%exclude %{_datadir}/idl/%{name}-%{tb_version} -%exclude %{_includedir}/%{name}-%{tb_version} -%{mozappdir}/chrome.manifest -%{mozappdir}/searchplugins +%exclude %{_datadir}/idl/%{name}-%{version} +%exclude %{_includedir}/%{name}-%{version} %{mozappdir}/dependentlibs.list %{mozappdir}/distribution +%if 0%{?rhel} < 6 +%{mozappdir}/open-browser.sh +%endif #=============================================================================== %changelog -* Thu May 12 2016 CentOS Sources - 38.8.0-1.el7.centos -- rebrand default prefs - -* Fri May 6 2016 Jan Horak - 38.8.0-1 -- Update to 38.8.0 +* Wed Jun 29 2016 Jan Horak - 45.2-1 +- Update to 45.2 -* Fri Mar 11 2016 Jan Horak - 38.7.0-1 -- Update to 38.7.0 +* Mon Jun 6 2016 Jan Horak - 45.1.1-1 +- Update to 45.1.1 -* Mon Feb 15 2016 Jan Horak - 38.6.0-1 -- Update to 38.6.0 +* Mon Jun 06 2016 Jan Horak - 45.1.0-5 +- Do not add symlinks to some langpacks -* Tue Dec 22 2015 Jan Horak - 38.5.0-1 -- Update to 38.5.0 +* Tue May 17 2016 Jan Horak - 45.1.0-4 +- Update to 45.1.0 -* Sun Nov 22 2015 Jan Horak - 38.4.0-1 -- Update to 38.4.0 +* Tue Apr 26 2016 Jan Horak - 45.0-5 +- Update to 45.0 * Tue Sep 29 2015 Jan Horak - 38.3.0-1 - Update to 38.3.0