From f0ad18da5d6675f010097a019a30b82cf25940cc Mon Sep 17 00:00:00 2001 From: Christopher Aillon Date: Apr 08 2011 03:26:32 +0000 Subject: Link against libnotify https://sourceforge.net/tracker/?func=detail&aid=3280223&group_id=239&atid=100239 --- diff --git a/xchat-2.8.8-libnotifyso4.patch b/xchat-2.8.8-libnotifyso4.patch deleted file mode 100644 index bf3ecde..0000000 --- a/xchat-2.8.8-libnotifyso4.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff -p -U8 xchat-2.8.8/src/fe-gtk/plugin-tray.c.libnotifyso4 xchat-2.8.8/src/fe-gtk/plugin-tray.c ---- xchat-2.8.8/src/fe-gtk/plugin-tray.c.libnotifyso4 2011-04-07 15:08:10.620286679 -0700 -+++ xchat-2.8.8/src/fe-gtk/plugin-tray.c 2011-04-07 15:08:40.830908993 -0700 -@@ -144,17 +144,17 @@ libnotify_cleanup (void) - - static gboolean - libnotify_notify_new (const char *title, const char *text, GtkStatusIcon *icon) - { - void *noti; - - if (!nn_mod) - { -- nn_mod = g_module_open ("libnotify", G_MODULE_BIND_LAZY); -+ nn_mod = g_module_open ("libnotify.so.4", G_MODULE_BIND_LAZY); - if (!nn_mod) - { - nn_mod = g_module_open ("libnotify.so.1", G_MODULE_BIND_LAZY); - if (!nn_mod) - return FALSE; - } - - if (!g_module_symbol (nn_mod, "notify_init", (gpointer)&nn_init)) diff --git a/xchat-2.8.8-link-against-libnotify.patch b/xchat-2.8.8-link-against-libnotify.patch new file mode 100644 index 0000000..31e6c08 --- /dev/null +++ b/xchat-2.8.8-link-against-libnotify.patch @@ -0,0 +1,343 @@ +From: Christopher Aillon +Date: Thu, 7 Apr 2011 19:34:14 -0700 +Subject: [PATCH] Link directly against libnotify + +Dynamically loading the library isn't ideal since the soname +can change silently on us. Additionally, notify-send is +shipped as part of libnotify, so we aren't actually bringing +in a new dependency. Since we'd need to patch the source and +rebuild for new sonames anyway, there's little benefit to +dynamically loading libnotify. + +Plus, this has the benefit of cleaning up the code, as well as +ensuring we'll catch any future soname changes sooner. + +https://bugzilla.redhat.com/show_bug.cgi?id=693362 +https://sourceforge.net/tracker/?func=detail&aid=3280223&group_id=239&atid=100239 +--- + configure.in | 23 +++++++ + src/fe-gtk/plugin-tray.c | 144 ++++++++++------------------------------------- + 2 files changed, 55 insertions(+), 112 deletions(-) + +diff -p -U8 xchat-2.8.8/configure.in.libnotifyso4 xchat-2.8.8/configure.in +--- xchat-2.8.8/configure.in.libnotifyso4 2010-05-29 23:01:16.000000000 -0700 ++++ xchat-2.8.8/configure.in 2011-04-07 19:27:00.448137113 -0700 +@@ -34,16 +34,17 @@ AH_VERBATIM([PREFIX],[#undef PREFIX]) + AH_VERBATIM([XCHATLIBDIR],[#undef XCHATLIBDIR]) + AH_VERBATIM([XCHATSHAREDIR],[#undef XCHATSHAREDIR]) + AH_VERBATIM([SOCKS],[#undef SOCKS]) + AH_VERBATIM([USE_MSPROXY],[#undef USE_MSPROXY]) + dnl AH_VERBATIM([USE_GNOME],[#undef USE_GNOME]) + AH_VERBATIM([USE_SHM],[#undef USE_SHM]) + AH_VERBATIM([USE_GTKSPELL],[#undef USE_GTKSPELL]) + AH_VERBATIM([USE_LIBSEXY],[#undef USE_LIBSEXY]) ++AH_VERBATIM([USE_LIBNOTIFY],[#undef USE_LIBNOTIFY]) + AH_VERBATIM([USE_IPV6],[#undef USE_IPV6]) + AH_VERBATIM([USE_MMX],[#undef USE_MMX]) + AH_VERBATIM([USE_OPENSSL],[#undef USE_OPENSSL]) + AH_VERBATIM([USE_PLUGIN],[#undef USE_PLUGIN]) + AH_VERBATIM([USE_XFT],[#undef USE_XFT]) + AH_VERBATIM([USE_XLIB],[#undef USE_XLIB]) + AH_VERBATIM([USE_SIGACTION],[#undef USE_SIGACTION]) + AH_VERBATIM([USING_FREEBSD],[#undef USING_FREEBSD]) +@@ -126,16 +127,20 @@ AC_ARG_ENABLE(tcl, + AC_ARG_ENABLE(plugin, + [ --disable-plugin disable plugin support], + plugin=$enableval, plugin=yes) + + AC_ARG_ENABLE(dbus, + [ --disable-dbus disable DBUS support], + dbus=$enableval, dbus=yes) + ++AC_ARG_ENABLE(libnotify, ++[ --disable-libnotify disable libnotify support], ++ libnotify=$enableval, libnotify=yes) ++ + AC_ARG_ENABLE(mmx, + [ --disable-mmx disable MMX assembly routines], + mmx=$enableval, mmx=yes) + + AC_ARG_ENABLE(shm, + [ --enable-shm enable use of XShm for fast tinting (default: no)], + shm=$enableval, shm=no) + +@@ -482,16 +487,32 @@ if test "x$dbus" = "xyes" ; then + + DBUS_SERVICES_DIR="$DATADIR/dbus-1/services" + AC_SUBST(DBUS_SERVICES_DIR) + AC_DEFINE_UNQUOTED(DBUS_SERVICES_DIR, "$DBUS_SERVICES_DIR", [Where services dir for DBUS is]) + fi + fi + + dnl ********************************************************************* ++dnl ** LIBNOTIFY ******************************************************** ++dnl ********************************************************************* ++ ++if test "x$libnotify" = "xyes" ; then ++ PKG_CHECK_MODULES(LIBNOTIFY, libnotify >= 0.4, [], [ ++ AC_MSG_RESULT(no) ++ libnotify=no ++ ]) ++ if test "$libnotify" != "no" ; then ++ GUI_LIBS="$GUI_LIBS $LIBNOTIFY_LIBS" ++ GUI_CFLAGS="$GUI_CFLAGS $LIBNOTIFY_CFLAGS" ++ AC_DEFINE(USE_LIBNOTIFY) ++ fi ++fi ++ ++dnl ********************************************************************* + dnl ** SPELL ************************************************************ + dnl ********************************************************************* + + if test "$spell" = "gtkspell" ; then + PKG_CHECK_MODULES(GTKSPELL, gtkspell-2.0 >= 2.0.2, [], [ + AC_MSG_RESULT(no) + spell=no + ]) +@@ -519,16 +540,17 @@ if test "$spell" = "static" ; then + fi + + dnl ********************************************************************* + dnl ** CONDITIONALS ***************************************************** + dnl ********************************************************************* + + AM_CONDITIONAL(USE_OPENSSL, test "x$openssl" = "xyes") + AM_CONDITIONAL(USE_LIBSEXY, test "x$spell" = "xstatic") ++AM_CONDITIONAL(USE_LIBNOTIFY, test "x$libnotify" = "xyes") + AM_CONDITIONAL(DO_TEXT, test "x$textfe" = "xyes") + AM_CONDITIONAL(DO_GTK, test "x$gtkfe" = "xyes") + AM_CONDITIONAL(DO_PERL, test "x$perl" = "xyes") + AM_CONDITIONAL(DO_PYTHON, test "x$python" = "xyes") + AM_CONDITIONAL(DO_TCL, test "x$tcl" = "xyes") + AM_CONDITIONAL(DO_PLUGIN, test "x$plugin" = "xyes") + AM_CONDITIONAL(USE_DBUS, test "x$dbus" = "xyes") + AM_CONDITIONAL(DO_GCONF, test "x$GCONFTOOL" != "xno") +@@ -807,16 +829,17 @@ echo mmx tinting ......... : $mmx\ spell + echo XShm tinting ........ : $shm\ plugin interface ...... : $plugin + if test "$xft" = no; then + echo text backend ........ : pango\ nls/gettext ........... : $USE_NLS + else + echo text backend ........ : xft\ nls/gettext ........... : $USE_NLS + fi + echo openssl support ..... : $openssl\ ipv6 support .......... : $ipv6 + echo dbus support ........ : $dbus\ msproxy ntlm \(ISA\) .... : $have_ntlm ++echo libnotify support ... : $libnotify + echo + echo The binary will be installed in $prefix/bin + echo + + if test "$gtkfe" = no; then + echo Warning: The GTK \(GUI\) frontend will not be built. + echo + fi +diff -p -U8 xchat-2.8.8/src/fe-gtk/plugin-tray.c.libnotifyso4 xchat-2.8.8/src/fe-gtk/plugin-tray.c +--- xchat-2.8.8/src/fe-gtk/plugin-tray.c.libnotifyso4 2011-04-07 17:57:27.524307905 -0700 ++++ xchat-2.8.8/src/fe-gtk/plugin-tray.c 2011-04-07 19:18:33.429475719 -0700 +@@ -10,17 +10,27 @@ + #include "../common/fe.h" + #include "../common/util.h" + #include "fe-gtk.h" + #include "pixmaps.h" + #include "maingui.h" + #include "menu.h" + #include + +-#define LIBNOTIFY ++#ifdef USE_LIBNOTIFY ++#include ++#ifndef NOTIFY_CHECK_VERSION ++#define NOTIFY_CHECK_VERSION(x,y,z) 0 ++#endif ++#if NOTIFY_CHECK_VERSION(0,7,0) ++#define XC_NOTIFY_NEW(a,b,c,d) notify_notification_new(a,b,c) ++#else ++#define XC_NOTIFY_NEW(a,b,c,d) notify_notification_new(a,b,c,d) ++#endif ++#endif + + typedef enum /* current icon status */ + { + TS_NONE, + TS_MESSAGE, + TS_HIGHLIGHT, + TS_FILEOFFER, + TS_CUSTOM /* plugin */ +@@ -112,90 +122,16 @@ tray_count_networks (void) + + void + fe_tray_set_tooltip (const char *text) + { + if (sticon) + gtk_status_icon_set_tooltip (sticon, text); + } + +-#ifdef LIBNOTIFY +- +-/* dynamic access to libnotify.so */ +- +-static void *nn_mod = NULL; +-/* prototypes */ +-static gboolean (*nn_init) (char *); +-static void (*nn_uninit) (void); +-/* recent versions of libnotify don't take the fourth GtkWidget argument, but passing an +- * extra NULL argument will be fine */ +-static void *(*nn_new) (const gchar *summary, const gchar *message, const gchar *icon, gpointer dummy); +-static gboolean (*nn_show) (void *noti, GError **error); +-static void (*nn_set_timeout) (void *noti, gint timeout); +- +-static void +-libnotify_cleanup (void) +-{ +- if (nn_mod) +- { +- nn_uninit (); +- g_module_close (nn_mod); +- nn_mod = NULL; +- } +-} +- +-static gboolean +-libnotify_notify_new (const char *title, const char *text, GtkStatusIcon *icon) +-{ +- void *noti; +- +- if (!nn_mod) +- { +- nn_mod = g_module_open ("libnotify", G_MODULE_BIND_LAZY); +- if (!nn_mod) +- { +- nn_mod = g_module_open ("libnotify.so.1", G_MODULE_BIND_LAZY); +- if (!nn_mod) +- return FALSE; +- } +- +- if (!g_module_symbol (nn_mod, "notify_init", (gpointer)&nn_init)) +- goto bad; +- if (!g_module_symbol (nn_mod, "notify_uninit", (gpointer)&nn_uninit)) +- goto bad; +- if (!g_module_symbol (nn_mod, "notify_notification_new", (gpointer)&nn_new)) +- goto bad; +- if (!g_module_symbol (nn_mod, "notify_notification_show", (gpointer)&nn_show)) +- goto bad; +- if (!g_module_symbol (nn_mod, "notify_notification_set_timeout", (gpointer)&nn_set_timeout)) +- goto bad; +- if (!nn_init (PACKAGE_NAME)) +- goto bad; +- } +- +- text = strip_color (text, -1, STRIP_ALL|STRIP_ESCMARKUP); +- title = strip_color (title, -1, STRIP_ALL); +- noti = nn_new (title, text, XCHATSHAREDIR"/pixmaps/xchat.png", NULL); +- g_free ((char *)title); +- g_free ((char *)text); +- +- nn_set_timeout (noti, prefs.input_balloon_time*1000); +- nn_show (noti, NULL); +- g_object_unref (G_OBJECT (noti)); +- +- return TRUE; +- +-bad: +- g_module_close (nn_mod); +- nn_mod = NULL; +- return FALSE; +-} +- +-#endif +- + void + fe_tray_set_balloon (const char *title, const char *text) + { + #ifndef WIN32 + const char *argv[8]; + const char *path; + char time[16]; + WinStatus ws; +@@ -208,52 +144,36 @@ fe_tray_set_balloon (const char *title, + /* bit 1 of flags means "no balloons unless hidden/iconified" */ + if (ws != WS_HIDDEN && (prefs.gui_tray_flags & 2)) + return; + + /* FIXME: this should close the current balloon */ + if (!text) + return; + +-#ifdef LIBNOTIFY +- /* try it via libnotify.so */ +- if (libnotify_notify_new (title, text, sticon)) +- return; /* success */ +-#endif ++#ifdef USE_LIBNOTIFY ++ NotifyNotification *notification; ++ char *notify_text, *notify_title; + +- /* try it the crude way */ +- path = g_find_program_in_path ("notify-send"); +- if (path) +- { +- sprintf(time, "%d000",prefs.input_balloon_time); +- argv[0] = path; +- argv[1] = "-i"; +- argv[2] = "gtk-dialog-info"; +- if (access (XCHATSHAREDIR"/pixmaps/xchat.png", R_OK) == 0) +- argv[2] = XCHATSHAREDIR"/pixmaps/xchat.png"; +- argv[3] = "-t"; +- argv[4] = time; +- argv[5] = title; +- text = strip_color (text, -1, STRIP_ALL|STRIP_ESCMARKUP); +- argv[6] = text; +- argv[7] = NULL; +- xchat_execv (argv); +- g_free ((char *)path); +- g_free ((char *)text); +- } +- else +- { +- /* show this error only once */ +- static unsigned char said_it = FALSE; +- if (!said_it) +- { +- said_it = TRUE; +- fe_message (_("Cannot find 'notify-send' to open balloon alerts.\nPlease install libnotify."), FE_MSG_ERROR); +- } +- } ++ if (!notify_is_initted()) ++ notify_init(PACKAGE_NAME); ++ ++ notify_text = strip_color (text, -1, STRIP_ALL|STRIP_ESCMARKUP); ++ notify_title = strip_color (title, -1, STRIP_ALL); ++ ++ notification = XC_NOTIFY_NEW (notify_title, notify_text, XCHATSHAREDIR"/pixmaps/xchat.png", NULL); ++ ++ g_free ((char *)notify_title); ++ g_free ((char *)notify_text); ++ ++ notify_notification_set_timeout (notification, prefs.input_balloon_time*1000); ++ notify_notification_show (notification, NULL); ++ ++ g_object_unref (notification); ++#endif + #endif + } + + static void + tray_set_balloonf (const char *text, const char *format, ...) + { + va_list args; + char *buf; +@@ -840,13 +760,13 @@ tray_plugin_init (xchat_plugin *plugin_h + return 1; /* return 1 for success */ + } + + int + tray_plugin_deinit (xchat_plugin *plugin_handle) + { + #ifdef WIN32 + tray_cleanup (); +-#elif defined(LIBNOTIFY) +- libnotify_cleanup (); ++#elif defined(USE_LIBNOTIFY) ++ notify_uninit (); + #endif + return 1; + } diff --git a/xchat.spec b/xchat.spec index da55a1d..e8b3271 100644 --- a/xchat.spec +++ b/xchat.spec @@ -31,8 +31,9 @@ Patch51: xchat-2.8.6-freenode-ports.patch # work with libnotify 0.7 # https://sourceforge.net/tracker/?func=detail&aid=3109838&group_id=239&atid=100239 Patch52: xchat-2.8.8-libnotify07.patch -Patch53: xchat-2.8.8-libnotifyso4.patch - +# link against libnotify +# https://sourceforge.net/tracker/?func=detail&aid=3280223&group_id=239&atid=100239 +Patch53: xchat-2.8.8-link-against-libnotify.patch BuildRequires: perl perl(ExtUtils::Embed) python-devel openssl-devel pkgconfig, tcl-devel BuildRequires: GConf2-devel BuildRequires: dbus-devel >= 0.60, dbus-glib-devel >= 0.60 @@ -42,6 +43,9 @@ BuildRequires: libtool BuildRequires: libntlm-devel BuildRequires: libsexy-devel BuildRequires: desktop-file-utils >= 0.10 +BuildRequires: libnotify-devel +# For xchat-2.8.8-link-against-libnotify.patch +BuildRequires: autoconf # For gconftool-2: Requires(post): GConf2 >= %{gconf_version} Requires(preun): GConf2 >= %{gconf_version} @@ -83,7 +87,7 @@ This package contains the X-Chat plugin providing the Tcl scripting interface. %patch50 -p1 -b .active-channel-switch %patch51 -p1 -b .freenode-ports %patch52 -p1 -b .libnotify07 -%patch53 -p1 -b .libnotifyso4 +%patch53 -p1 -b .link-against-libnotify sed -i -e 's/#define GTK_DISABLE_DEPRECATED//g' src/fe-gtk/*.c @@ -94,6 +98,10 @@ find . -name CVS -type d | xargs rm -rf export CFLAGS="$RPM_OPT_FLAGS $(perl -MExtUtils::Embed -e ccopts)" export LDFLAGS=$(perl -MExtUtils::Embed -e ldopts) +# For xchat-2.8.8-link-against-libnotify.patch +autoconf +autoheader + %configure --disable-textfe \ --enable-gtkfe \ --enable-openssl \ @@ -176,6 +184,9 @@ fi %{_libdir}/xchat/plugins/tcl.so %changelog +* Tue Apr 7 2011 Christopher Aillon - 1:2.8.8-9 +- Link against libnotify (#693362) + * Tue Apr 7 2011 Christopher Aillon - 1:2.8.8-8 - Update the dynamic libnotify check for the newer soname (#693362)