changeset 15897:36bcca5e40e9

merge of 'a023355644afe1706072f39dcd9311b6bbef8156' and 'bc6e8deb70e39cb5478ca121eb205ba723dffd15'
author Mark Doliner <mark@kingant.net>
date Sat, 24 Mar 2007 22:55:24 +0000
parents abb7875904b2 (current diff) 342ce259b899 (diff)
children fd6e3382e734
files gaim.spec.in libpurple/gaim-client-example.c libpurple/gaim-client.c libpurple/gaim-notifications-example libpurple/gaim-remote libpurple/gaim-send libpurple/gaim-send-async libpurple/gaim-url-handler libpurple/plugins/mono/api/GaimPlugin.cs libpurple/plugins/perl/libgaimperl.c
diffstat 96 files changed, 1689 insertions(+), 1606 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -11,10 +11,11 @@
 		README.dbus \
 		README.mingw \
 		gaim.pc.in \
-		gaim.spec.in \
+		gaim-uninstalled.pc.in \
 		gaim.apspec.in \
+		gaim.service.in \
+		pidgin.spec.in \
 		pidgin.desktop.in \
-		gaim.service.in \
 		intltool-extract.in \
 		intltool-merge.in \
 		intltool-update.in \
@@ -23,19 +24,16 @@
 
 noinst_HEADERS = config.h
 
-pkgconfigdir = $(libdir)/pkgconfig
-pkgconfig_DATA = gaim.pc
-
 if ENABLE_DBUS
 dbus_servicedir=$(DBUS_SERVICES_DIR)
 dbus_service_DATA=gaim.service
 endif
 
-dist-hook: gaim.spec
-	cp gaim.spec $(distdir)
+dist-hook: pidgin.spec
+	cp pidgin.spec $(distdir)
 	rm $(distdir)/config.h
 
-distcheck-hook: libpurple/plugins/perl/common/Gaim.pm gtk/plugins/perl/common/GtkUI.pm
+distcheck-hook: libpurple/plugins/perl/common/Purple.pm pidgin/plugins/perl/common/GtkUI.pm
 #	cp libpurple/plugins/perl/common/Gaim.pm $(distdir)/libpurple/plugins/perl/common
 
 appsdir = $(datadir)/applications
@@ -66,7 +64,7 @@
 # breaks "make distcheck" unless we ignore perl things
 
 distuninstallcheck_listfiles = \
-	find . -type f -print | grep -v perl | grep -v Gaim.3pm
+	find . -type f -print | grep -v perl | grep -v Purple.3pm
 
 DISTCLEANFILES= pidgin.desktop libpurple/gconf/gaim.schemas intltool-extract \
 			intltool-merge intltool-update
--- a/configure.ac	Fri Mar 23 14:45:11 2007 +0000
+++ b/configure.ac	Sat Mar 24 22:55:24 2007 +0000
@@ -1,5 +1,5 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT([pidgin], [2.0.0beta7devel], [gaim-devel@lists.sourceforge.net])
+AC_INIT([pidgin], [2.0.0beta7devel], [devel@pidgin.im])
 AC_CANONICAL_SYSTEM
 AM_CONFIG_HEADER(config.h)
 AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
@@ -700,14 +700,14 @@
 extern_init=
 load_proto=
 for i in $STATIC_PRPLS ; do
-	dnl Ugly special case for "libsilcgaim.a":
+	dnl Ugly special case for "libsilcpurple.a":
 	if test "x$i" = "xsilc"; then
-		STATIC_LINK_LIBS="$STATIC_LINK_LIBS protocols/$i/lib${i}gaim.a"
+		STATIC_LINK_LIBS="$STATIC_LINK_LIBS protocols/$i/lib${i}purple.a"
 	else
 		STATIC_LINK_LIBS="$STATIC_LINK_LIBS protocols/$i/lib$i.a"
 	fi
-	extern_init="$extern_init extern gboolean gaim_init_${i}_plugin();"
-	load_proto="$load_proto gaim_init_${i}_plugin();"
+	extern_init="$extern_init extern gboolean purple_init_${i}_plugin();"
+	load_proto="$load_proto purple_init_${i}_plugin();"
 	case $i in
 		bonjour)	static_bonjour=yes ;;
 		gg)			static_gg=yes ;;
@@ -935,7 +935,7 @@
 dnl it is now accessible through D-Bus.
 
 dnl Python is only required if --enable-dbus is used, and only for
-dnl the build process to generate the code, not for running gaim.
+dnl the build process to generate the code, not for running pidgin.
 dnl This autogenerated code is system-independent, so in principle we
 dnl can generate all of it before shipping.  But I thought adding
 dnl auto-generated stuff to the repository is inelegant.
@@ -1145,7 +1145,7 @@
 
 		AC_ARG_WITH(perl-lib,
 		[AC_HELP_STRING([--with-perl-lib=[site|vendor|DIR]],
-			[specify where to install the Perl libraries for gaim. Default is site.])],
+			[specify where to install the Perl libraries for pidgin. Default is site.])],
 		[
 			if test "x$withval" = xsite; then
 				PERL_MM_PARAMS=""
@@ -1890,7 +1890,7 @@
 AC_ARG_ENABLE(fatal-asserts, [AC_HELP_STRING([--enable-fatal-asserts],
 	[make assertions fatal (useful for debugging)])], , enable_fatal_asserts=no)
 if test "x$enable_fatal_asserts" = "xyes" ; then
-	AC_DEFINE(GAIM_FATAL_ASSERTS, 1, [Define to make assertions fatal (useful for debugging).])
+	AC_DEFINE(PURPLE_FATAL_ASSERTS, 1, [Define to make assertions fatal (useful for debugging).])
 fi
 
 AC_OUTPUT([Makefile
@@ -1903,12 +1903,13 @@
 		   m4macros/Makefile
 		   pidgin/Makefile
 		   pidgin/pidgin.pc
+		   pidgin/pidgin-uninstalled.pc
 		   pidgin/pixmaps/Makefile
 		   pidgin/pixmaps/animations/Makefile
 		   pidgin/pixmaps/animations/16/Makefile
 		   pidgin/pixmaps/buddy_icons/Makefile
 		   pidgin/pixmaps/buddy_icons/qq/Makefile
- 		   pidgin/pixmaps/dialogs/Makefile
+		   pidgin/pixmaps/dialogs/Makefile
 		   pidgin/pixmaps/dialogs/16/Makefile
 		   pidgin/pixmaps/dialogs/16/scalable/Makefile
 		   pidgin/pixmaps/dialogs/64/Makefile
@@ -1919,7 +1920,7 @@
 		   pidgin/pixmaps/emotes/Makefile
 		   pidgin/pixmaps/emotes/default/Makefile
 		   pidgin/pixmaps/emotes/default/22/Makefile
-		   pidgin/pixmaps/emotes/default/22/scalable/Makefile	
+		   pidgin/pixmaps/emotes/default/22/scalable/Makefile
 		   pidgin/pixmaps/emotes/none/Makefile
 		   pidgin/pixmaps/protocols/Makefile
 		   pidgin/pixmaps/protocols/16/Makefile
@@ -1958,6 +1959,7 @@
 		   libpurple/example/Makefile
 		   libpurple/gconf/Makefile
 		   libpurple/purple.pc
+		   libpurple/purple-uninstalled.pc
 		   libpurple/plugins/Makefile
 		   libpurple/plugins/mono/Makefile
 		   libpurple/plugins/mono/api/Makefile
@@ -1989,9 +1991,7 @@
 		   finch/libgnt/wms/Makefile
 		   finch/plugins/Makefile
 		   po/Makefile.in
-		   gaim.pc
-		   gaim-uninstalled.pc
-		   gaim.spec
+		   pidgin.spec
 		  ])
 
 echo
@@ -2030,7 +2030,7 @@
 echo Print debugging messages...... : $enable_debug
 echo Assertions are fatal.......... : $enable_fatal_asserts
 echo
-eval eval echo Gaim will be installed in $bindir.
+eval eval echo Pidgin will be installed in $bindir.
 if test "x$gaimpath" != "x" ; then
 	echo Warning: You have an old copy of gaim at $gaimpath.
 fi
--- a/finch/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/finch/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -43,7 +43,7 @@
 	gntstatus.h \
 	gntui.h
 
-finchincludedir=$(includedir)/gaim/gnt
+finchincludedir=$(includedir)/finch
 finchinclude_HEADERS = \
 	$(finch_headers)
 
@@ -63,7 +63,7 @@
 	-DSTANDALONE \
 	-DBR_PTHREADS=0 \
 	-DDATADIR=\"$(datadir)\" \
-	-DLIBDIR=\"$(libdir)/gaim/\" \
+	-DLIBDIR=\"$(libdir)/finch/\" \
 	-DLOCALEDIR=\"$(datadir)/locale\" \
 	-DSYSCONFDIR=\"$(sysconfdir)\" \
 	-I$(top_srcdir)/libpurple/ \
--- a/finch/libgnt/wms/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/finch/libgnt/wms/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -3,7 +3,7 @@
 plugin_LTLIBRARIES = \
 	s.la
 
-plugindir = $(libdir)/gaim
+plugindir = $(libdir)/finch
 
 s_la_SOURCES = s.c
 s_la_LIBADD =  \
--- a/finch/plugins/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/finch/plugins/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -1,3 +1,4 @@
+gntclipboard_la_LDFLAGS = -module -avoid-version
 gntgf_la_LDFLAGS      = -module -avoid-version
 gnthistory_la_LDFLAGS = -module -avoid-version
 gntlastlog_la_LDFLAGS    = -module -avoid-version
@@ -5,18 +6,21 @@
 if PLUGINS
 
 plugin_LTLIBRARIES = \
+	gntclipboard.la \
 	gntgf.la \
 	gnthistory.la \
 	gntlastlog.la
 
-plugindir = $(libdir)/gaim
+plugindir = $(libdir)/finch
 
+gntclipboard_la_SOURCES = gntclipboard.c
 gntgf_la_SOURCES      = gntgf.c
 gnthistory_la_SOURCES = gnthistory.c
 gntlastlog_la_SOURCES = lastlog.c
 
 gntgf_la_CFLAGS = $(X11_CFLAGS)
 
+gntclipboard_la_LIBADD = $(GLIB_LIBS)
 gntgf_la_LIBADD       = $(GLIB_LIBS) $(X11_LIBS) $(top_builddir)/finch/libgnt/libgnt.la
 gnthistory_la_LIBADD  = $(GLIB_LIBS)
 gntlastlog_la_LIBADD  = $(GLIB_LIBS)
--- a/finch/plugins/gntclipboard.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/finch/plugins/gntclipboard.c	Sat Mar 24 22:55:24 2007 +0000
@@ -110,10 +110,12 @@
 static gboolean
 plugin_load(PurplePlugin *plugin)
 {
+#ifdef HAVE_X11
 	if (!XOpenDisplay(NULL)) {
 		purple_debug_warning("gntclipboard", "Couldn't find X display\n");
 		return FALSE;
 	}
+#endif
 	if (!getenv("WINDOWID")) {
 		purple_debug_warning("gntclipboard", "Couldn't find window\n");
 		return FALSE;
--- a/gaim.pc.in	Fri Mar 23 14:45:11 2007 +0000
+++ b/gaim.pc.in	Sat Mar 24 22:55:24 2007 +0000
@@ -5,10 +5,10 @@
 datarootdir=@datarootdir@
 datadir=@datadir@
 sysconfdir=@sysconfdir@
- 
+
 Name: Gaim
 Description: Gaim is a GTK2-based instant messenger application.
 Version: @VERSION@
 Requires: glib-2.0
-Cflags: -I${includedir}/gaim
-Libs: -L${libdir} -lgaim
+Cflags: -I${includedir}/libpurple
+Libs: -L${libdir} -lpurple
--- a/gaim.spec.in	Fri Mar 23 14:45:11 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,492 +0,0 @@
-# Older RPM doesn't define these by default
-%{!?perl_vendorlib: %define perl_vendorlib %(eval "`%{__perl} -V:installvendorlib`"; echo $installvendorlib)}
-%{!?perl_vendorarch: %define perl_vendorarch %(eval "`%{__perl} -V:installvendorarch`"; echo $installvendorarch)}
-%{!?perl_archlib: %define perl_archlib %(eval "`%{__perl} -V:installarchlib`"; echo $installarchlib)}
-
-# When not doing betas comment this out
-# NOTE: %defines in spec files are evaluated in comments so the correct
-#       way to comment it out is to replace the % with #
-#define beta 7
-
-%if 0%{?beta}
-%define gaimver %(echo "@VERSION@"|sed -e 's/dev//; s/beta.*//')
-%else
-%define gaimver @VERSION@
-%endif
-
-Summary:    A GTK+ based multiprotocol instant messaging client
-Name:       @PACKAGE@
-Version:    %gaimver
-Release:    0%{?beta:.beta%{beta}}
-Epoch:      1
-License:    GPL
-Group:      Applications/Internet
-URL:        http://gaim.sourceforge.net/
-Packager:   %{packager}
-Source:     %{name}-@VERSION@.tar.bz2
-BuildRoot:  %{_tmppath}/%{name}-%{version}-root
-
-# Generic build requirements
-BuildRequires: libtool, pkgconfig, intltool, gettext, libxml2-devel
-%{?_with_avahi:BuildRequires: avahi-compat-howl-devel}
-%{!?_without_gtkspell:BuildRequires: gtkspell-devel}
-%{?_with_howl:BuildRequires: howl-devel}
-%{?_with_meanwhile:BuildRequires: meanwhile-devel}
-%{?_with_mono:BuildRequires: mono-devel}
-%{?_with_sasl:BuildRequires: cyrus-sasl-devel >= 2}
-%{?_with_silc:BuildRequires: /usr/include/silc/silcclient.h}
-%{?_with_tcl:BuildRequires: tcl, tk, /usr/include/tcl.h}
-%{!?_without_text:BuildRequires: ncurses-devel}
-
-%if "%{_vendor}" == "suse"
-# For SuSE:
-BuildRequires: gnutls-devel
-%{?_with_dbus:BuildRequires: dbus-1-devel >= 0.35}
-%{!?_without_gstreamer:BuildRequires: gstreamer010-devel >= 0.10}
-%else
-%{?_with_dbus:BuildRequires: dbus-devel >= 0.35}
-%{!?_without_gstreamer:BuildRequires: gstreamer-devel >= 0.10}
-%endif
-
-# Mandrake 10.1 and lower || Mandrake 10.2 (and higher?)
-%if "%{_vendor}" == "MandrakeSoft" || "%{_vendor}" == "Mandrakesoft" || "%{_vendor}" == "Mandriva"
-# For Mandrake/Mandriva:
-BuildRequires: libgtk+2.0_0-devel, libnss3-devel, perl-devel
-Obsoletes:  libgaim-remote0
-%else
-# For SuSE, Red Hat, Fedora and others:
-BuildRequires: gtk2-devel
-%if "%{_vendor}" != "suse"
-# For Red Hat, Fedora and others:
-# let's assume RH & FC1 are the only brain-dead distros missing the
-# perl-XML-Parser dependency on intltool and that other RH/FC releases
-# don't care if we specify it here
-BuildRequires: perl-XML-Parser
-BuildRequires: mozilla-nss-devel
-%endif
-%endif
-
-# For some reason perl isn't always automatically detected as a requirement :(
-Requires: perl
-# Gadu-Gadu support was split out temporarily
-Provides: gaim-gadugadu = %{epoch}:%{version}-%{release}
-
-%package devel
-Summary:    Development headers, documentation, and libraries for Gaim.
-Group:      Applications/Internet
-Requires:   pkgconfig, gaim = %{epoch}:%{version}
-
-%if 0%{?_with_howl:1} || 0%{?_with_avahi:1}
-%package bonjour
-Summary:    Bonjour plugin for Gaim
-Group:      Applications/Internet
-Requires:   gaim = %{epoch}:%{version}
-%endif
-
-%if 0%{?_with_meanwhile:1}
-%package meanwhile
-Summary:    Lotus Sametime plugin for Gaim using the Meanwhile library
-Group:      Applications/Internet
-Requires:   gaim = %{epoch}:%{version}
-%endif
-
-%if 0%{?_with_mono:1}
-%package mono
-Summary:    Mono .NET plugin support for Gaim
-Group:      Applications/Internet
-Requires:   gaim = %{epoch}:%{version}
-%endif
-
-%if 0%{?_with_silc:1}
-%package silc
-Summary:    SILC (Secure Internet Live Conferencing) plugin for Gaim
-Group:      Applications/Internet
-Requires:   gaim = %{epoch}:%{version}
-%endif
-
-%if 0%{?_with_tcl:1}
-%package tcl
-Summary:    Tcl scripting support for Gaim
-Group:      Applications/Internet
-Requires:   gaim = %{epoch}:%{version}
-%endif
-
-%if 0%{!?_without_text:1}
-%package text
-Summary:    A text-based user interface for Gaim
-Group:      Applications/Internet
-Requires:   gaim = %{epoch}:%{version}
-%endif
-
-%description
-Gaim allows you to talk to anyone using a variety of messaging
-protocols including AIM, MSN, Yahoo!, Jabber, Bonjour, Gadu-Gadu,
-ICQ, IRC, Novell Groupwise, QQ, Lotus Sametime, SILC, Simple and
-Zephyr.  These protocols are implemented using a modular, easy to
-use design.  To use a protocol, just add an account using the
-account editor.
-
-Gaim supports many common features of other clients, as well as many
-unique features, such as perl scripting, TCL scripting and C plugins.
-
-Gaim is not affiliated with or endorsed by America Online, Inc.,
-Microsoft Corporation, Yahoo! Inc., or ICQ Inc.
-
-%description devel
-The gaim-devel package contains the header files, developer
-documentation, and libraries required for development of Gaim scripts
-and plugins.
-
-%if 0%{?_with_howl:1} || 0%{?_with_avahi:1}
-%description bonjour
-Bonjour plugin for Gaim.
-%endif
-
-%if 0%{?_with_meanwhile:1}
-%description meanwhile
-Lotus Sametime plugin for Gaim using the Meanwhile library.
-%endif
-
-%if 0%{?_with_mono:1}
-%description mono
-Mono plugin loader for Gaim.  This package will allow you to write or
-use Gaim plugins written in the .NET programming language.
-%endif
-
-%if 0%{?_with_silc:1}
-%description silc
-SILC (Secure Internet Live Conferencing) plugin for Gaim.
-%endif
-
-%if 0%{!?without_text:1}
-%description text
-A text-based user interface for Gaim.  This can be run from a
-standard text console or from a terminal within X Windows.  It
-uses ncurses and our homegrown gnt library for drawing windows
-and text.
-%endif
-
-%if 0%{?_with_tcl:1}
-%description tcl
-Tcl plugin loader for Gaim.  This package will allow you to write or
-use Gaim plugins written in the Tcl programming language.
-%endif
-
-%prep
-%setup -q -n %{name}-@VERSION@
-
-%build
-CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{_prefix} \
-                                    --bindir=%{_bindir} \
-                                    --datadir=%{_datadir} \
-                                    --includedir=%{_includedir} \
-                                    --libdir=%{_libdir} \
-                                    --mandir=%{_mandir} \
-                                    --sysconfdir=%{_sysconfdir} \
-                                    --disable-schemas-install \
-                                    %{!?_with_dbus:--disable-dbus} \
-                                    %{?_without_gstreamer:--disable-gstreamer} \
-                                    %{?_without_gtkspell:--disable-gtkspell} \
-                                    %{?_with_mono:--enable-mono} \
-                                    %{?_with_perlmakehack:--with-perl-lib=%{buildroot}%{_prefix}} \
-                                    %{!?_with_perlmakehack:--with-perl-lib=%{_prefix}} \
-                                    %{?_with_sasl:--enable-cyrus-sasl} \
-                                    %{?_with_silc:--with-silc-includes=%{_includedir}/silc} \
-                                    %{?_with_silc:--with-silc-libs=%{_libdir}/silc} \
-                                    %{!?_with_tcl:--disable-tcl} \
-                                    %{?_without_text:--disable-consoleui}
-
-make %{?_smp_mflags}
-
-%install
-rm -rf %{buildroot}
-%if 0%{?_with_perlmakehack:1}
-make prefix=%{buildroot}%{_prefix} bindir=%{buildroot}%{_bindir} \
-     datadir=%{buildroot}%{_datadir} includedir=%{buildroot}%{_includedir} \
-     libdir=%{buildroot}%{_libdir} mandir=%{buildroot}%{_mandir} \
-     sysconfdir=%{buildroot}%{_sysconfdir} \
-     install
-%else
-make DESTDIR=$RPM_BUILD_ROOT install
-%endif
-
-# Delete files that we don't want to put in any of the RPMs
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/*.la
-rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
-rm -f $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod
-find $RPM_BUILD_ROOT -type f -name .packlist -exec rm -f {} ';'
-find $RPM_BUILD_ROOT -type f -name '*.bs' -empty -exec rm -f {} ';'
-
-%if 0%{!?_with_howl:1} && 0%{!?_with_avahi:1}
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/libbonjour.so
-%endif
-
-%if 0%{!?_with_meanwhile:1}
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/libsametime.so
-%endif
-
-%if 0%{!?_with_mono:1}
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/mono.so
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/*.dll
-%endif
-
-%if 0%{!?_with_silc:1}
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/libsilcgaim.so
-%endif
-
-%if 0%{!?_with_tcl:1}
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/tcl.so
-%endif
-
-%if 0%{?_without_text:1}
-rm -f $RPM_BUILD_ROOT%{_mandir}/man1/gaim-text.*
-rm -f $RPM_BUILD_ROOT%{_bindir}/gaim-text
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/gntgf.so
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/gnthistory.so
-rm -f $RPM_BUILD_ROOT%{_libdir}/gaim/s.so
-rm -f $RPM_BUILD_ROOT%{_libdir}/libgnt.so.*
-%endif
-
-%find_lang %{name}
-
-find $RPM_BUILD_ROOT%{_libdir}/gaim -xtype f -print | \
-        sed "s@^$RPM_BUILD_ROOT@@g" | \
-        grep -v /gntgf.so | \
-        grep -v /gnthistory.so | \
-        grep -v /libbonjour.so | \
-        grep -v /libsilcgaim.so | \
-        grep -v /libsametime.so | \
-        grep -v /mono.so | \
-        grep -v /s.so | \
-        grep -v /tcl.so | \
-        grep -v ".dll$" | \
-        grep -v ".tcl$" > %{name}-%{version}-coreplugins
-
-# files -f file can only take one filename :(
-cat %{name}.lang >> %{name}-%{version}-coreplugins
-
-%clean
-rm -rf %{buildroot}
-
-%pre
-if [ "$1" -gt 1 -a -n "`which gconftool-2 2>/dev/null`" ]; then
-    export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
-    gconftool-2 --makefile-uninstall-rule \
-        %{_sysconfdir}/gconf/schemas/gaim.schemas >/dev/null || :
-    killall -HUP gconfd-2 || :
-fi
-
-%post
-if [ -n "`which gconftool-2 2>/dev/null`" ]; then
-    export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
-    gconftool-2 --makefile-install-rule \
-        %{_sysconfdir}/gconf/schemas/gaim.schemas > /dev/null || :
-    killall -HUP gconfd-2 || :
-fi
-/sbin/ldconfig
-
-%preun
-if [ "$1" -eq 0 -a -n "`which gconftool-2 2>/dev/null`" ]; then
-    export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
-    gconftool-2 --makefile-uninstall-rule \
-      %{_sysconfdir}/gconf/schemas/gaim.schemas > /dev/null || :
-    killall -HUP gconfd-2 || :
-fi
-
-%postun -p /sbin/ldconfig
-
-%files -f %{name}-%{version}-coreplugins
-%defattr(-, root, root)
-
-%doc AUTHORS
-%doc COPYING
-%doc COPYRIGHT
-%doc ChangeLog
-%doc NEWS
-%doc README
-%doc README.SVN
-%doc doc/FAQ
-%doc doc/the_penguin.txt
-%doc %{_mandir}/man1/gaim.*
-%doc %{_mandir}/man3*/*
-
-%dir %{_libdir}/gaim
-%attr(755, root, root) %{perl_vendorarch}/Gaim*
-%attr(755, root, root) %{perl_vendorarch}/auto/Gaim
-
-%{_bindir}/gaim
-%{_datadir}/pixmaps/*
-%dir %{_datadir}/sounds/gaim
-%{_datadir}/sounds/gaim/*
-%{_datadir}/applications/*
-%{_libdir}/libgaim.so.*
-%{_sysconfdir}/gconf/schemas/gaim.schemas
-
-%if 0%{?_with_dbus:1}
-%{_bindir}/gaim-client-example
-%{_bindir}/gaim-remote
-%{_bindir}/gaim-send
-%{_bindir}/gaim-send-async
-%{_bindir}/gaim-url-handler
-%{_libdir}/libgaim-client.so.*
-%{_datadir}/dbus-1/services/gaim.service
-%doc README.dbus
-%doc libgaim/gaim-notifications-example
-%endif
-
-%files devel
-%defattr(-, root, root)
-
-%doc ChangeLog.API
-%doc HACKING
-%doc PLUGIN_HOWTO
-%doc PROGRAMMING_NOTES
-
-%dir %{_includedir}/gaim
-%{_includedir}/gaim/*.h
-%dir %{_includedir}/gaim/gnt
-%{_includedir}/gaim/gnt/*.h
-%dir %{_includedir}/gnt
-%{_includedir}/gnt/*.h
-%{_libdir}/libgaim.so
-%{_libdir}/libgnt.so
-%{_libdir}/pkgconfig/gaim.pc
-%{_libdir}/pkgconfig/gnt.pc
-%{_datadir}/aclocal/gaim.m4
-%if 0%{?_with_dbus:1}
-%{_libdir}/libgaim-client.so
-%endif
-
-%if 0%{?_with_howl:1} || 0%{?_with_avahi:1}
-%files bonjour
-%defattr(-, root, root)
-
-%{_libdir}/gaim/libbonjour.*
-%endif
-
-%if 0%{?_with_meanwhile:1}
-%files meanwhile
-%defattr(-, root, root)
-
-%{_libdir}/gaim/libsametime.*
-%endif
-
-%if 0%{?_with_mono:1}
-%files mono
-%defattr(-, root, root)
-
-%{_libdir}/gaim/mono.so
-%{_libdir}/gaim/*.dll
-%endif
-
-%if 0%{?_with_silc:1}
-%files silc
-%defattr(-, root, root)
-
-%{_libdir}/gaim/libsilcgaim.*
-%endif
-
-%if 0%{?_with_tcl:1}
-%files tcl
-%defattr(-, root, root)
-
-%{_libdir}/gaim/tcl.so
-%endif
-
-%if 0%{!?_without_text:1}
-%files text
-%defattr(-, root, root)
-
-%doc %{_mandir}/man1/gaim-text.*
-%{_bindir}/gaim-text
-%{_libdir}/gaim/gntgf.so
-%{_libdir}/gaim/gnthistory.so
-%{_libdir}/gaim/s.so
-%{_libdir}/libgnt.so.*
-%endif
-
-%changelog
-* Sun Oct  1 2006 Stu Tomlinson <stu@nosnilmot.com>
-- We can build with internal gadu gadu again, so bring it back into the
-  main package
-- Deal with gconf schame uninstallation on package upgrade and removal
-
-* Sun Aug 20 2006 Stu Tomlinson <stu@nosnilmot.com>
-- Make the gstreamer-devel dependency overridable with '--without-gstreamer'
-  to allow building on older distributions without suitable gstreamer
-
-* Tue Aug 15 2006 Mark Doliner <thekingant@users.sourceforge.net>
-- Add a BuildRequire for gstreamer-devel
-- Remove the BuildRequires for audiofile-devel and libao-devel
-
-* Mon May 8 2006 Mark Doliner <thekingant@users.sourceforge.net>
-- Add --with avahi option to compile the gaim-bonjour package against
-  Avahi's Howl compatibility layer
-
-* Wed Mar 29 2006 Stu Tomlinson <stu@nosnilmot.com>
-- Source RPM uses tar.bz2 now to save space
-- Update BuildRequires for new intltool dependencies
-- Add a --with perlmakehack option to allow builds to succeed on RH9
-- Add a --with gadugadu to build (separate) gaim-gadugadu package
-
-* Sat Dec 17 2005 Stu Tomlinson <stu@nosnilmot.com>
-- Add support for beta versions so the subsequent releases are seen as newer
-  by RPM
-- Split of sametime support to gaim-meanwhile
-- Use make DESTDIR=... instead of overloading prefix etc. when installing
-- Default build to include cyrus-sasl support in Jabber
-- Add --with dbus to build with DBUS support
-
-* Sun Dec 04 2005 Christopher O'Brien <siege@preoccupied.net>
-- Added obsoletes gaim-meanwhile
-
-* Sun Oct 30 2005 Stu Tomlinson <stu@nosnilmot.com>
-- Add separate gaim-bonjour package if built with --with-howl
-- Add separate gaim-mono package if built with --with-mono
-- Exclude some unwanted perl files
-
-* Sat Aug 20 2005 Stu Tomlinson <stu@nosnilmot.com>
-- Include libgaimperl.so
-- Include gaim.m4 in gaim-devel
-
-* Thu Apr 28 2005 Stu Tomlinson <stu@nosnilmot.com>
-- Use perl_vendorlib & perl_archlib for better 64bit compat (Jeff Mahoney)
-- Clean up Requires, most should be auto-detected
-- Restore gtkspell-devel build requirement (and add --without gtkspell option)
-- Fix Tcl build requirements to work across more distros
-- Fix SILC build requirements to work across more distros
-
-* Mon Oct 11 2004 John Jolly <john.jolly@gmail.com>
-- Added if "%{_vendor}" == "suse" to handle GnuTLS libraries for SuSE
-
-* Sat Oct  2 2004 Stu Tomlinson <stu@nosnilmot.com>
-- If --with tcl or silc are not specified, make sure the plugins don't
-  exist to prevent RPM complaining about unpackaged files
-
-* Tue Jun 29 2004 Ethan Blanton <eblanton@cs.ohiou.edu>
-- Change Tcl to use --with tcl, the same as SILC, and build a gaim-tcl
-  package if specified.
-
-* Thu Jun 24 2004 Mark Doliner <thekingant@users.sourceforge.net>
-- Add --with silc rebuild option for compiling a separate gaim-silc
-  RPM containing the silc protocol plugin (Stu Tomlinson).
-
-* Wed Jun 23 2004 Ethan Blanton <eblanton@cs.ohiou.edu>
-- Moved gaim headers and a pkgconfig configuration file into the
-  gaim-devel RPM (Stu Tomlinson).
-
-* Thu Jan 15 2004 Ethan Blanton <eblanton@cs.ohiou.edu>
-- Removed the manual strip command, as it seems to be unwarranted if
-  the necessary programs are properly installed.  (For me, this was
-  elfutils.)
-
-* Sun Jul 20 2003 Bjoern Voigt <bjoern@cs.tu-berlin.de>
-- Added pkgconfig build dependency.
-- if "%{_vendor}" != "MandrakeSoft" now also works with rpm 3.x.
-- Added Gaim-specific directories to list of Gaim's files.
-
-* Wed Jul 16 2003 Ethan Blanton <eblanton@cs.ohiou.edu>
-- Complete spec file rewrite to take advantage of "new" RPM features
-  and make things prettier.
-- Use system-supplied %%{_prefix}, %%{_datadir}, etc. rather than
-  attempt to define our own.
--- a/libpurple/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -1,12 +1,13 @@
 EXTRA_DIST = \
 		dbus-analyze-functions.py \
 		dbus-analyze-types.py \
-		gaim-notifications-example \
-		gaim-remote \
-		gaim-send \
-		gaim-send-async \
-		gaim-url-handler \
+		purple-notifications-example \
+		purple-remote \
+		purple-send \
+		purple-send-async \
+		purple-url-handler \
 		purple.pc.in \
+		purple-uninstalled.pc.in \
 		Makefile.mingw \
 		win32/global.mak \
 		win32/libc_interface.c \
@@ -15,7 +16,7 @@
 		win32/libpurplerc.rc.in \
 		win32/rules.mak \
 		win32/targets.mak \
-		win32/wgaimerror.h \
+		win32/wpurpleerror.h \
 		win32/win32dep.c \
 		win32/giowin32.c \
 		win32/win32dep.h
@@ -29,7 +30,7 @@
 
 SUBDIRS = $(GCONF_DIR) plugins protocols tests . example
 
-gaim_coresources = \
+purple_coresources = \
 	account.c \
 	accountopt.c \
 	blist.c \
@@ -77,7 +78,7 @@
 	xmlnode.c \
 	whiteboard.c
 
-gaim_coreheaders = \
+purple_coreheaders = \
 	account.h \
 	accountopt.h \
 	blist.h \
@@ -137,9 +138,9 @@
 	dbus-types.h \
 	purple-client-bindings.c \
 	purple-client-bindings.h \
-	gaim.service
+	purple.service
 
-# gaim dbus server
+# purple dbus server
 
 dbus_sources  = dbus-server.c dbus-useful.c
 dbus_headers  = dbus-bindings.h dbus-purple.h dbus-server.h dbus-useful.h dbus-define-api.h
@@ -148,64 +149,64 @@
                 connection.h conversation.h core.h log.h prefs.h roomlist.h \
                 savedstatuses.h status.h server.h xmlnode.h
 
-gaim_build_coreheaders = $(addprefix $(srcdir)/, $(gaim_coreheaders))
+purple_build_coreheaders = $(addprefix $(srcdir)/, $(purple_coreheaders))
 dbus_build_exported = $(addprefix $(srcdir)/, $(dbus_exported))
 
-dbus-types.c: dbus-analyze-types.py $(gaim_coreheaders)
-	cat $(gaim_build_coreheaders) | $(PYTHON) $(srcdir)/dbus-analyze-types.py --pattern=PURPLE_DBUS_DEFINE_TYPE\(%s\) > $@
+dbus-types.c: dbus-analyze-types.py $(purple_coreheaders)
+	cat $(purple_build_coreheaders) | $(PYTHON) $(srcdir)/dbus-analyze-types.py --pattern=PURPLE_DBUS_DEFINE_TYPE\(%s\) > $@
 
 dbus-types.h: dbus-analyze-types.py $(dbus_coreheaders)
-	cat $(gaim_build_coreheaders) | $(PYTHON) $(srcdir)/dbus-analyze-types.py --pattern=PURPLE_DBUS_DECLARE_TYPE\(%s\) > $@
+	cat $(purple_build_coreheaders) | $(PYTHON) $(srcdir)/dbus-analyze-types.py --pattern=PURPLE_DBUS_DECLARE_TYPE\(%s\) > $@
 
 dbus-bindings.c: dbus-analyze-functions.py $(dbus_exported)
 	cat $(dbus_build_exported) | $(PYTHON) $(srcdir)/dbus-analyze-functions.py > $@
 
 dbus-server.$(OBJEXT): dbus-bindings.c dbus-types.c dbus-types.h
 dbus-server.lo: dbus-bindings.c dbus-types.c dbus-types.h
-$(libgaim_la_OBJECTS): dbus-types.h
+$(libpurple_la_OBJECTS): dbus-types.h
 
-# libgaim-client
+# libpurple-client
 
-libgaim_client_lib = libgaim-client.la
+libpurple_client_lib = libpurple-client.la
 
-libgaim_client_la_SOURCES = gaim-client.c gaim-client.h
+libpurple_client_la_SOURCES = purple-client.c purple-client.h
 
-libgaim_client_la_LIBADD = $(DBUS_LIBS)
+libpurple_client_la_LIBADD = $(DBUS_LIBS)
 
 purple-client-bindings.c: dbus-analyze-functions.py $(dbus_exported)
 	cat $(dbus_build_exported) | $(PYTHON) $(srcdir)/dbus-analyze-functions.py --client > $@
 
-purple-client-bindings.h: dbus-analyze-types.py dbus-analyze-functions.py $(gaim_coreheaders) $(dbus_exported)
-	cat $(gaim_build_coreheaders) | $(PYTHON) $(srcdir)/dbus-analyze-types.py --keyword=enum --verbatim > $@
+purple-client-bindings.h: dbus-analyze-types.py dbus-analyze-functions.py $(purple_coreheaders) $(dbus_exported)
+	cat $(purple_build_coreheaders) | $(PYTHON) $(srcdir)/dbus-analyze-types.py --keyword=enum --verbatim > $@
 	cat $(dbus_build_exported) | $(PYTHON) $(srcdir)/dbus-analyze-functions.py --client --headers >> $@
 
-$(libgaim_client_la_OBJECTS): purple-client-bindings.h purple-client-bindings.c
+$(libpurple_client_la_OBJECTS): purple-client-bindings.h purple-client-bindings.c
 
-# gaim-client-example
+# purple-client-example
 
-gaim_client_example_SOURCES = gaim-client-example.c
+purple_client_example_SOURCES = purple-client-example.c
 
-gaim_client_example_DEPENDENCIES = libgaim-client.la
+purple_client_example_DEPENDENCIES = libpurple-client.la
 
-gaim_client_example_LDADD = \
-	libgaim-client.la \
+purple_client_example_LDADD = \
+	libpurple-client.la \
 	$(GLIB_LIBS) \
 	$(DBUS_LIBS)
 
-bin_PROGRAMS = gaim-client-example
+bin_PROGRAMS = purple-client-example
 
-gaim-client-example.$(OBJEXT): purple-client-bindings.h
+purple-client-example.$(OBJEXT): purple-client-bindings.h
 
 # scripts
 
-bin_SCRIPTS = gaim-remote gaim-send gaim-send-async gaim-url-handler
+bin_SCRIPTS = purple-remote purple-send purple-send-async purple-url-handler
 
 endif
 
-lib_LTLIBRARIES = libpurple.la $(libgaim_client_lib)
+lib_LTLIBRARIES = libpurple.la $(libpurple_client_lib)
 
 libpurple_la_SOURCES = \
-	$(gaim_coresources) \
+	$(purple_coresources) \
 	$(dbus_sources)
 
 noinst_HEADERS= \
@@ -214,7 +215,7 @@
 
 libpurpleincludedir=$(includedir)/libpurple
 libpurpleinclude_HEADERS = \
-	$(gaim_coreheaders) \
+	$(purple_coreheaders) \
 	$(dbus_headers)
 
 libpurple_la_DEPENDENCIES = $(STATIC_LINK_LIBS)
--- a/libpurple/example/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/example/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -1,7 +1,7 @@
 bin_PROGRAMS = nullclient
 
-nullclient_SOURCES = nullclient.c
-nullclient_DEPENDENCIES = 
+nullclient_SOURCES = defines.h nullclient.c
+nullclient_DEPENDENCIES =
 nullclient_LDFLAGS = -export-dynamic
 nullclient_LDADD = \
 	$(DBUS_LIBS) \
--- a/libpurple/gaim-client-example.c	Fri Mar 23 14:45:11 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-#define DBUS_API_SUBJECT_TO_CHANGE
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "purple-client.h"
-
-/*
-   This example demonstrates how to use libpurple-client to communicate
-   with purple.  The names and signatures of functions provided by
-   libpurple-client are the same as those in purple.  However, all
-   structures (such as PurpleAccount) are opaque, that is, you can only
-   use pointer to them.  In fact, these pointers DO NOT actually point
-   to anything, they are just integer identifiers of assigned to these
-   structures by purple.  So NEVER try to dereference these pointers.
-   Integer ids as disguised as pointers to provide type checking and
-   prevent mistakes such as passing an id of PurpleAccount when an id of
-   PurpleBuddy is expected.  According to glib manual, this technique is
-   portable.
-*/
-
-int main (int argc, char **argv)
-{
-	GList *alist, *node;
-
-	purple_init();
-
-	alist = purple_accounts_get_all();
-	for (node = alist; node != NULL; node = node->next)
-	{
-		PurpleAccount *account = (PurpleAccount*) node->data;
-		char *name = purple_account_get_username(account);
-		g_print("Name: %s\n", name);
-		g_free(name);
-	}
-	g_list_free(alist);
-
-	return 0;
-}
--- a/libpurple/gaim-client.c	Fri Mar 23 14:45:11 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-#define DBUS_API_SUBJECT_TO_CHANGE
-
-#include <dbus/dbus-glib.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "dbus-purple.h"
-#include "purple-client-bindings.h"
-
-static DBusGConnection *bus;
-static DBusGProxy *purple_proxy;
-
-static GList *garray_int_to_glist(GArray *array)
-{
-	GList *list = NULL;
-	int i;
-
-	for (i = 0; i < array->len; i++)
-		list = g_list_append(list, GINT_TO_POINTER(g_array_index(array,gint,i)));
-
-	g_array_free(array, TRUE);
-	return list;
-}
-
-static GSList *garray_int_to_gslist(GArray *array)
-{
-	GSList *list = NULL;
-	int i;
-
-	for (i = 0; i < array->len; i++)
-		list = g_slist_append(list, GINT_TO_POINTER(g_array_index(array,gint,i)));
-
-	g_array_free(array, TRUE);
-	return list;
-}
-
-#include "purple-client-bindings.c"
-
-static void lose(const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF (1, 2);
-static void lose_gerror(const char *prefix, GError *error) G_GNUC_NORETURN;
-
-static void
-lose(const char *str, ...)
-{
-	va_list args;
-
-	va_start(args, str);
-
-	vfprintf(stderr, str, args);
-	fputc('\n', stderr);
-
-	va_end(args);
-
-	exit(1);
-}
-
-static void
-lose_gerror(const char *prefix, GError *error)
-{
-	lose("%s: %s", prefix, error->message);
-}
-
-void purple_init(void)
-{
-	GError *error = NULL;
-
-	g_type_init ();
-
-	bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
-	if (!bus)
-		lose_gerror ("Couldn't connect to session bus", error);
-
-	purple_proxy = dbus_g_proxy_new_for_name (bus,
-					DBUS_SERVICE_PURPLE,
-					DBUS_PATH_PURPLE,
-					DBUS_INTERFACE_PURPLE);
-
-	if (!purple_proxy)
-		lose_gerror ("Couldn't connect to the Purple Service", error);
-}
-
--- a/libpurple/gaim-notifications-example	Fri Mar 23 14:45:11 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-#!/usr/bin/env python
-
-# This is a simple gaim notification server.
-# It shows notifications when your buddy signs on or you get an IM message.
-#
-# This script requires Python 2.4 and PyGTK bindings
-#
-# Note that all function names are resolved dynamically, no
-# gaim-specific library is needed.
-
-import dbus
-import dbus.glib
-import dbus.decorators
-import gobject
-import os
-
-def ensureimconversation(conversation, account, name):
-    if conversation != 0:
-        return conversation
-    else:
-        # 1 = GAIM_CONV_IM 
-        return gaim.GaimConversationNew(1, account, name)
-
-def receivedimmsg(account, name, message, conversation, flags):
-    buddy = gaim.GaimFindBuddy(account, name)
-    if buddy != 0:
-        alias = gaim.GaimBuddyGetAlias(buddy)
-    else:
-        alias = name
-
-    text = "%s says %s" % (alias, message)
-    code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons",
-                      "'So what?','Show me',Close,Abuse", text)
-
-    if code == 101:                     # so what?
-        pass
-    else:
-        conversation = ensureimconversation(conversation, account, name)
-
-    if code == 102:                     # show me
-        window = gaim.GaimConversationGetWindow(conversation)
-        gaim.GaimConvWindowRaise(window)
-
-    if code == 103:                     # close 
-        gaim.GaimConversationDestroy(conversation)
-
-    if code == 104:                     # abuse
-        im = gaim.GaimConversationGetImData(conversation)
-        gaim.GaimConvImSend(im, "Go away you f...")
-                                 
-        
-def buddysignedon(buddyid):
-    alias = gaim.GaimBuddyGetAlias(buddyid)
-    text = "%s is online" % alias
-
-    code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons",
-                      "'So what?','Let's talk'", text)
-
-    if code == 101:                     # so what?
-        pass
-
-    if code == 102:                     # talk
-        name = gaim.GaimBuddyGetName(buddyid)
-        account = gaim.GaimBuddyGetAccount(buddyid)
-        gaim.GaimConversationNew(1, account, name)
-    
-
-bus = dbus.SessionBus()
-obj = bus.get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject")
-gaim = dbus.Interface(obj, "net.sf.gaim.GaimInterface")
-
-bus.add_signal_receiver(receivedimmsg,
-                        dbus_interface = "net.sf.gaim.GaimInterface",
-                        signal_name = "ReceivedImMsg")
-
-bus.add_signal_receiver(buddysignedon,
-                        dbus_interface = "net.sf.gaim.GaimInterface",
-                        signal_name = "BuddySignedOn")
-
-print "This is a simple gaim notification server."
-print "It shows notifications when your buddy signs on or you get an IM message."
-
-loop = gobject.MainLoop()
-loop.run()
-
-
--- a/libpurple/gaim-remote	Fri Mar 23 14:45:11 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,215 +0,0 @@
-#!/usr/bin/python
-
-import dbus
-import re
-import urllib
-import sys
-
-import xml.dom.minidom 
-
-xml.dom.minidom.Element.all   = xml.dom.minidom.Element.getElementsByTagName
-
-obj = dbus.SessionBus().get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject")
-gaim = dbus.Interface(obj, "net.sf.gaim.GaimInterface")
-
-class CheckedObject:
-    def __init__(self, obj):
-        self.obj = obj
-
-    def __getattr__(self, attr):
-        return CheckedAttribute(self, attr)
-
-class CheckedAttribute:
-    def __init__(self, cobj, attr):
-        self.cobj = cobj
-        self.attr = attr
-        
-    def __call__(self, *args):
-        result = self.cobj.obj.__getattr__(self.attr)(*args)
-        if result == 0:
-            raise "Error: " + self.attr + " " + str(args) + " returned " + str(result)
-        return result
-            
-def show_help():
-    print """This program uses DBus to communicate with gaim.
-
-Usage:
-
-    %s "command1" "command2" ...
-
-Each command is of one of the three types:
-
-    [protocol:]commandname?param1=value1&param2=value2&...
-    FunctionName?param1=value1&param2=value2&...
-    FunctionName(value1,value2,...)
-
-The second and third form are provided for completeness but their use
-is not recommended; use gaim-send or gaim-send-async instead.  The
-second form uses introspection to find out the parameter names and
-their types, therefore it is rather slow.
-
-Examples of commands:
-
-    jabber:goim?screenname=testone@localhost&message=hi
-    jabber:gochat?room=TestRoom&server=conference.localhost
-    jabber:getinfo?screenname=testone@localhost
-    jabber:addbuddy?screenname=my friend
-
-    setstatus?status=away&message=don't disturb
-    quit
-
-    GaimAccountsFindConnected?name=&protocol=prpl-jabber
-    GaimAccountFindConnected(,prpl-jabber)
-""" % sys.argv[0]
-
-cgaim = CheckedObject(gaim)
-
-urlregexp = r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?"
-
-def extendlist(list, length, fill):
-    if len(list) < length:
-        return list + [fill] * (length - len(list))
-    else:
-        return list
-
-def convert(value):
-    try:
-        return int(value)
-    except:
-        return value
-
-def findaccount(accountname, protocolname):
-    try:
-        # prefer connected accounts
-        account = cgaim.GaimAccountsFindConnected(accountname, protocolname)
-        return account
-    except:
-        # try to get any account and connect it
-        account = cgaim.GaimAccountsFindAny(accountname, protocolname)
-        gaim.GaimAccountSetStatusVargs(account, "online", 1)
-        gaim.GaimAccountConnect(account)
-        return account
-    
-
-def execute(uri):
-    match = re.match(urlregexp, uri)
-    protocol = match.group(2)
-    if protocol == "aim" or protocol == "icq":
-        protocol = "oscar"
-    if protocol is not None:
-        protocol = "prpl-" + protocol
-    command = match.group(5)
-    paramstring = match.group(7)
-    params = {}
-    if paramstring is not None:
-        for param in paramstring.split("&"):
-            key, value = extendlist(param.split("=",1), 2, "")
-            params[key] = urllib.unquote(value)
-
-    accountname = params.get("account", "")
-
-    if command == "goim":
-        account = findaccount(accountname, protocol)
-        conversation = cgaim.GaimConversationNew(1, account, params["screenname"])
-        if "message" in params:
-            im = cgaim.GaimConversationGetImData(conversation)
-            gaim.GaimConvImSend(im, params["message"])
-        return None
-
-    elif command == "gochat":
-        account = findaccount(accountname, protocol)
-        connection = cgaim.GaimAccountGetConnection(account)
-        return gaim.ServJoinChat(connection, params)
-
-    elif command == "addbuddy":
-        account = findaccount(accountname, protocol)
-        return cgaim.GaimBlistRequestAddBuddy(account, params["screenname"],
-                                              params.get("group", ""), "")
-
-    elif command == "setstatus":
-        current = gaim.GaimSavedstatusGetCurrent()
-
-        if "status" in params:
-            status_id = params["status"]
-            status_type = gaim.GaimPrimitiveGetTypeFromId(status_id)
-        else:
-            status_type = gaim.GaimSavedstatusGetType(current)
-            status_id = gaim.GaimPrimitiveGetIdFromType(status_type)
-
-        if "message" in params:
-            message = params["message"];
-        else:
-            message = gaim.GaimSavedstatusGetMessage(current)
-
-        if "account" in params:
-            accounts = [cgaim.GaimAccountsFindAny(accountname, protocol)]
-
-            for account in accounts:
-                status = gaim.GaimAccountGetStatus(account, status_id)
-                type = gaim.GaimStatusGetType(status)
-                gaim.GaimSavedstatusSetSubstatus(current, account, type, message)
-                gaim.GaimSavedstatusActivateForAccount(current, account)
-        else:
-            accounts = gaim.GaimAccountsGetAllActive()
-            saved = gaim.GaimSavedstatusNew("", status_type)
-            gaim.GaimSavedstatusSetMessage(saved, message)
-            gaim.GaimSavedstatusActivate(saved)
-
-        return None
-
-    elif command == "getinfo":
-        account = findaccount(accountname, protocol)
-        connection = cgaim.GaimAccountGetConnection(account)
-        return gaim.ServGetInfo(connection, params["screenname"])
-
-    elif command == "quit":
-        return gaim.GaimCoreQuit()
-
-    elif command == "uri":
-        return None
-
-    else:
-        match = re.match(r"(\w+)\s*\(([^)]*)\)", command)
-        if match is not None:
-            name = match.group(1)
-            argstr = match.group(2)
-            if argstr == "":
-                args = []
-            else:
-                args = argstr.split(",")
-            fargs = []
-            for arg in args:
-                fargs.append(convert(arg.strip()))
-            return gaim.__getattr__(name)(*fargs)
-        else:
-            # introspect the object to get parameter names and types
-            # this is slow because the entire introspection info must be downloaded
-            data = dbus.Interface(obj, "org.freedesktop.DBus.Introspectable").\
-                   Introspect()
-            introspect = xml.dom.minidom.parseString(data).documentElement
-            for method in introspect.all("method"):
-                if command == method.getAttribute("name"):
-                    methodparams = []
-                    for arg in method.all("arg"):
-                        if arg.getAttribute("direction") == "in":
-                            value = params[arg.getAttribute("name")]
-                            type = arg.getAttribute("type")
-                            if type == "s":
-                                methodparams.append(value)
-                            elif type == "i":
-                                methodparams.append(int(value))
-                            else:
-                                raise "Don't know how to handle type \"%s\"" % type
-                    return gaim.__getattr__(command)(*methodparams)
-            show_help()
-            raise "Unknown command: %s" % command
-
-if len(sys.argv) == 1:
-    show_help()
-
-for arg in sys.argv[1:]:
-    output = execute(arg)
-
-    if (output != None):
-        print output
-
--- a/libpurple/gaim-send	Fri Mar 23 14:45:11 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-#!/bin/bash
-
-METHOD_NAME=$1
-
-if test -z "$METHOD_NAME" 
-then
-    cat <<EOF 
-This program calls gaim API functions using DBus and prints the return value.
-If you are not interested in the return value, use gaim-send-async.
-
-Usage:
-
-   $0 method-name type1:parameter1 type2:parameter2 ...
-
-This shell script just invokes dbus-send, see man dbus-send for how 
-to specify the parameters.  
-
-Examples:
-
-   $0 GaimAccountsFindConnected string: string:prpl-jabber
-   $0 GaimAccountsGetAll
-   $0 GaimCoreQuit
-
-Use dbus-viewer to get the list of supported functions and their parameters.
-EOF
-    exit 1
-fi
-
-shift
-dbus-send --dest=net.sf.gaim.GaimService --print-reply --type=method_call /net/sf/gaim/GaimObject net.sf.gaim.GaimInterface.$METHOD_NAME "$@"
-
-echo 
--- a/libpurple/gaim-send-async	Fri Mar 23 14:45:11 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-#!/bin/bash
-
-METHOD_NAME=$1
-
-if test -z "$METHOD_NAME" 
-then
-    cat <<EOF 
-This program calls gaim API functions using DBus.  As opposed to gaim-send, 
-it does not print the return value.
-
-Usage:
-
-   $0 method-name type1:parameter1 type2:parameter2 ...
-
-This shell script just invokes dbus-send, see man dbus-send for how 
-to specify the parameters.  
-
-Examples:
-
-   $0 GaimCoreQuit
-
-Use dbus-viewer to get the list of supported functions and their parameters.
-EOF
-    exit 1
-fi
-
-shift
-dbus-send --dest=net.sf.gaim.GaimService --type=method_call /net/sf/gaim/GaimObject net.sf.gaim.GaimInterface.$METHOD_NAME "$@"
-
-echo 
--- a/libpurple/gaim-url-handler	Fri Mar 23 14:45:11 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,285 +0,0 @@
-#!/usr/bin/python
-
-import dbus
-import re
-import sys
-import time
-import urllib
-
-obj = dbus.SessionBus().get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject")
-gaim = dbus.Interface(obj, "net.sf.gaim.GaimInterface")
-
-class CheckedObject:
-    def __init__(self, obj):
-        self.obj = obj
-
-    def __getattr__(self, attr):
-        return CheckedAttribute(self, attr)
-
-class CheckedAttribute:
-    def __init__(self, cobj, attr):
-        self.cobj = cobj
-        self.attr = attr
-
-    def __call__(self, *args):
-        result = self.cobj.obj.__getattr__(self.attr)(*args)
-        if result == 0:
-            raise "Error: " + self.attr + " " + str(args) + " returned " + str(result)
-        return result
-
-cgaim = CheckedObject(gaim)
-
-def extendlist(list, length, fill):
-    if len(list) < length:
-        return list + [fill] * (length - len(list))
-    else:
-        return list
-
-def convert(value):
-    try:
-        return int(value)
-    except:
-        return value
-
-def findaccount(protocolname, accountname=""):
-    try:
-        # prefer connected accounts
-        account = cgaim.GaimAccountsFindConnected(accountname, protocolname)
-        return account
-    except:
-        # try to get any account and connect it
-        account = cgaim.GaimAccountsFindAny(accountname, protocolname)
-        gaim.GaimAccountSetStatusVargs(account, "online", 1)
-        gaim.GaimAccountConnect(account)
-        return account
-
-def goim(account, screenname, message=None):
-    # XXX: 1 == GAIM_CONV_TYPE_IM
-    conversation = cgaim.GaimConversationNew(1, account, screenname)
-    if message:
-        gaim.GaimConvSendConfirm(conversation, message)
-
-def gochat(account, params, message=None):
-    connection = cgaim.GaimAccountGetConnection(account)
-    gaim.ServJoinChat(connection, params)
-
-    if message != None:
-    	for i in range(20):
-            # XXX: 2 == GAIM_CONV_TYPE_CHAT
-            conversation = gaim.GaimFindConversationWithAccount(2, params.get("channel", params.get("room")), account)
-            if conversation:
-                gaim.GaimConvSendConfirm(conversation, message)
-                break
-            else:
-                time.sleep(0.5)
-
-def addbuddy(account, screenname, group="", alias=""):
-    cgaim.GaimBlistRequestAddBuddy(account, screenname, group, alias)
-
-
-def aim(uri):
-    protocol = "prpl-oscar"
-    match = re.match(r"^(aim|icq):([^?]*)(\?(.*))", uri)
-    if not match:
-        print "Invalid aim URI: %s" % uri
-        return
-
-    command = urllib.unquote_plus(match.group(2))
-    paramstring = match.group(4)
-    params = {}
-    if paramstring:
-        for param in paramstring.split("&"):
-            key, value = extendlist(param.split("=", 1), 2, "")
-            params[key] = urllib.unquote_plus(value)
-    accountname = params.get("account", "")
-    screenname = params.get("screenname", "")
-
-    account = findaccount(protocol, accountname)
-
-    if command.lower() == "goim":
-        goim(account, screenname, params.get("message"))
-    elif command.lower() == "gochat":
-        gochat(account, params)
-    elif command.lower() == "addbuddy":
-        addbuddy(account, screenname, params.get("group", ""))
-
-def gg(uri):
-    protocol = "prpl-gg"
-    match = re.match(r"^gg:(.*)", uri)
-    if not match:
-        print "Invalid gg URI: %s" % uri
-        return
-
-    screenname = urllib.unquote_plus(match.group(1))
-    account = findaccount(protocol)
-    goim(account, screenname)
-
-def icq(uri):
-    aim(uri)
-
-def irc(uri):
-    protocol = "prpl-irc"
-    match = re.match(r"^irc:(//([^/]*)/)?([^?]*)(\?(.*))?", uri)
-    if not match:
-        print "Invalid irc URI: %s" % uri
-        return
-
-    server = urllib.unquote_plus(match.group(2)) or ""
-    target = match.group(3) or ""
-    query = match.group(5) or ""
-
-    modifiers = {}
-    if target:
-        for modifier in target.split(",")[1:]:
-            modifiers[modifier] = True
-
-    isnick = modifiers.has_key("isnick")
-
-    paramstring = match.group(5)
-    params = {}
-    if paramstring:
-        for param in paramstring.split("&"):
-            key, value = extendlist(param.split("=", 1), 2, "")
-            params[key] = urllib.unquote_plus(value)
-
-    account = findaccount(protocol)
-
-    if (target != ""):
-        if (isnick):
-            goim(account, urllib.unquote_plus(target.split(",")[0]), params.get("msg"))
-	else:
-            channel = urllib.unquote_plus(target.split(",")[0])
-            if channel[0] != "#":
-                channel = "#" + channel
-            gochat(account, {"server": server, "channel": channel, "password": params.get("key", "")}, params.get("msg"))
-
-def msnim(uri):
-    protocol = "prpl-msn"
-    match = re.match(r"^msnim:([^?]*)(\?(.*))", uri)
-    if not match:
-        print "Invalid msnim URI: %s" % uri
-        return
-
-    command = urllib.unquote_plus(match.group(1))
-    paramstring = match.group(3)
-    params = {}
-    if paramstring:
-        for param in paramstring.split("&"):
-            key, value = extendlist(param.split("=", 1), 2, "")
-            params[key] = urllib.unquote_plus(value)
-    screenname = params.get("contact", "")
-
-    account = findaccount(protocol)
-
-    if command.lower() == "chat":
-        goim(account, screenname)
-    elif command.lower() == "add":
-        addbuddy(account, screenname)
-
-def sip(uri):
-    protocol = "prpl-simple"
-    match = re.match(r"^sip:(.*)", uri)
-    if not match:
-        print "Invalid sip URI: %s" % uri
-        return
-
-    screenname = urllib.unquote_plus(match.group(1))
-    account = findaccount(protocol)
-    goim(account, screenname)
-
-def xmpp(uri):
-    protocol = "prpl-jabber"
-    match = re.match(r"^xmpp:((//)?([^/?#]*))?(/?([^?#]*))(\?([^;#]*)(;([^#]*))?)?(#(.*))?", uri)
-    if not match:
-        print "Invalid xmpp URI: %s" % uri
-        return
-
-    tmp = match.group(3)
-    if (tmp):
-        accountname = urllib.unquote_plus(tmp)
-    else:
-        accountname = ""
-
-    screenname = urllib.unquote_plus(match.group(5))
-
-    tmp = match.group(7)
-    if (tmp):
-        command = urllib.unquote_plus(tmp)
-    else:
-        command = ""
-
-    paramstring = match.group(9)
-    params = {}
-    if paramstring:
-        for param in paramstring.split(";"):
-            key, value = extendlist(param.split("=", 1), 2, "")
-            params[key] = urllib.unquote_plus(value)
-
-    account = findaccount(protocol, accountname)
-
-    if command.lower() == "message":
-        goim(account, screenname, params.get("body"))
-    elif command.lower() == "join":
-        room, server = screenname.split("@")
-        gochat(account, {"room": room, "server": server})
-    elif command.lower() == "roster":
-        addbuddy(account, screenname, params.get("group", ""), params.get("name", ""))
-    else:
-        goim(account, screenname)
-
-def ymsgr(uri):
-    protocol = "prpl-yahoo"
-    match = re.match(r"^ymsgr:([^?]*)(\?([^&]*)(&(.*))?)", uri)
-    if not match:
-        print "Invalid ymsgr URI: %s" % uri
-        return
-
-    command = urllib.unquote_plus(match.group(1))
-    screenname = urllib.unquote_plus(match.group(3))
-    paramstring = match.group(5)
-    params = {}
-    if paramstring:
-        for param in paramstring.split("&"):
-            key, value = extendlist(param.split("=", 1), 2, "")
-            params[key] = urllib.unquote_plus(value)
-
-    account = findaccount(protocol)
-
-    if command.lower() == "sendim":
-        goim(account, screenname, params.get("m"))
-    elif command.lower() == "chat":
-        gochat(account, {"room": screenname})
-    elif command.lower() == "addfriend":
-        addbuddy(account, screenname)
-
-
-def main(argv=sys.argv):
-    if len(argv) != 2:
-        print "Usage: %s URI" % argv[0]
-        print "Example: %s \"xmpp:romeo@montague.net?message\"" % argv[0]
-        return
-
-    uri = argv[1]
-    type = uri.split(":")[0]
-
-    if type == "aim":
-        aim(uri)
-    elif type == "gg":
-        gg(uri)
-    elif type == "icq":
-        icq(uri)
-    elif type == "irc":
-        irc(uri)
-    elif type == "msnim":
-        msnim(uri)
-    elif type == "sip":
-        sip(uri)
-    elif type == "xmpp":
-        xmpp(uri)
-    elif type == "ymsgr":
-        ymsgr(uri)
-    else:
-        print "Unkown protocol: %s" % type
-
-if __name__ == "__main__":
-    main()
--- a/libpurple/gconf/gaim.schemas.in	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/gconf/gaim.schemas.in	Sat Mar 24 22:55:24 2007 +0000
@@ -17,7 +17,7 @@
       <applyto>/desktop/gnome/url-handlers/aim/command</applyto>
       <owner>gaim</owner>
       <type>string</type>
-      <default>gaim-url-handler "%s"</default>
+      <default>pidgin-url-handler "%s"</default>
       <locale name="C">
         <short>The handler for "aim" URLs</short>
         <long>The command used to handle "aim" URLs, if enabled.</long>
@@ -51,7 +51,7 @@
       <applyto>/desktop/gnome/url-handlers/gg/command</applyto>
       <owner>gaim</owner>
       <type>string</type>
-      <default>gaim-url-handler "%s"</default>
+      <default>pidgin-url-handler "%s"</default>
       <locale name="C">
         <short>The handler for "gg" URLs</short>
         <long>The command used to handle "gg" URLs, if enabled.</long>
@@ -85,7 +85,7 @@
       <applyto>/desktop/gnome/url-handlers/icq/command</applyto>
       <owner>gaim</owner>
       <type>string</type>
-      <default>gaim-url-handler "%s"</default>
+      <default>pidgin-url-handler "%s"</default>
       <locale name="C">
         <short>The handler for "icq" URLs</short>
         <long>The command used to handle "icq" URLs, if enabled.</long>
@@ -119,7 +119,7 @@
       <applyto>/desktop/gnome/url-handlers/irc/command</applyto>
       <owner>gaim</owner>
       <type>string</type>
-      <default>gaim-url-handler "%s"</default>
+      <default>pidgin-url-handler "%s"</default>
       <locale name="C">
         <short>The handler for "irc" URLs</short>
         <long>The command used to handle "irc" URLs, if enabled.</long>
@@ -153,7 +153,7 @@
       <applyto>/desktop/gnome/url-handlers/msnim/command</applyto>
       <owner>gaim</owner>
       <type>string</type>
-      <default>gaim-url-handler "%s"</default>
+      <default>pidgin-url-handler "%s"</default>
       <locale name="C">
         <short>The handler for "msnim" URLs</short>
         <long>The command used to handle "msnim" URLs, if enabled.</long>
@@ -187,7 +187,7 @@
       <applyto>/desktop/gnome/url-handlers/sip/command</applyto>
       <owner>gaim</owner>
       <type>string</type>
-      <default>gaim-url-handler "%s"</default>
+      <default>pidgin-url-handler "%s"</default>
       <locale name="C">
         <short>The handler for "sip" URLs</short>
         <long>The command used to handle "sip" URLs, if enabled.</long>
@@ -221,7 +221,7 @@
       <applyto>/desktop/gnome/url-handlers/xmpp/command</applyto>
       <owner>gaim</owner>
       <type>string</type>
-      <default>gaim-url-handler "%s"</default>
+      <default>pidgin-url-handler "%s"</default>
       <locale name="C">
         <short>The handler for "xmpp" URLs</short>
         <long>The command used to handle "xmpp" URLs, if enabled.</long>
@@ -255,7 +255,7 @@
       <applyto>/desktop/gnome/url-handlers/ymsgr/command</applyto>
       <owner>gaim</owner>
       <type>string</type>
-      <default>gaim-url-handler "%s"</default>
+      <default>pidgin-url-handler "%s"</default>
       <locale name="C">
         <short>The handler for "ymsgr" URLs</short>
         <long>The command used to handle "ymsgr" URLs, if enabled.</long>
--- a/libpurple/network.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/network.c	Sat Mar 24 22:55:24 2007 +0000
@@ -250,6 +250,7 @@
 	purple_network_listen_cancel(listen_data);
 }
 
+#ifdef ENABLE_NAT_PMP
 static gboolean
 purple_network_finish_pmp_map_cb(gpointer data)
 {
@@ -264,6 +265,7 @@
 
 	return FALSE;
 }
+#endif
 
 static PurpleNetworkListenData *
 purple_network_do_listen(unsigned short port, int socket_type, PurpleNetworkListenCallback cb, gpointer cb_data)
--- a/libpurple/plugin.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugin.c	Sat Mar 24 22:55:24 2007 +0000
@@ -369,6 +369,20 @@
 		return plugin;
 	}
 
+	/* 
+ 	 * Check to make sure a plugin has defined an id.
+ 	 * Not having this check caused purple_plugin_unload to
+ 	 * enter an infinite loop in certain situations by passing
+ 	 * purple_find_plugin_by_id a NULL value. -- ecoffey
+ 	 */
+	if (!plugin->info->id || !strcmp(plugin->info->id, ""))
+	{
+		plugin->error = g_strdup_printf(_("This plugin has not defined an ID."));
+		purple_debug_error("plugins", "%s is not loadable: info->id is not defined.\n", plugin->path);
+		plugin->unloadable = TRUE;
+		return plugin;
+	}
+
 	/* Really old plugins. */
 	if (plugin->info->magic != PURPLE_PLUGIN_MAGIC)
 	{
--- a/libpurple/plugins/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -100,6 +100,7 @@
 
 EXTRA_DIST = \
 	Makefile.mingw \
+	ciphertest.c \
 	dbus-buddyicons-example.py \
 	filectl.c \
 	fortuneprofile.pl \
--- a/libpurple/plugins/mono/BooPlugin.boo	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/BooPlugin.boo	Sat Mar 24 22:55:24 2007 +0000
@@ -1,6 +1,6 @@
-import Gaim
+import Purple
 
-class BooPlugin(GaimPlugin):
+class BooPlugin(PurplePlugin):
 
 	def handle(*args as (object)):
 		b as Buddy
@@ -18,5 +18,5 @@
 		Debug.debug(Debug.INFO, "booplugin", "destroying...\n")
 		
 	override def Info():
-		return GaimPluginInfo("Boo Plugin", "0.1", "Test Boo Plugin", "Longer Description", "Eoin Coffey", "urled")
+		return PurplePluginInfo("mono-boo", "Boo Plugin", "0.1", "Test Boo Plugin", "Longer Description", "Eoin Coffey", "urled")
 		
--- a/libpurple/plugins/mono/GetBuddyBack.cs	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/GetBuddyBack.cs	Sat Mar 24 22:55:24 2007 +0000
@@ -1,8 +1,8 @@
-using Gaim;
+using Purple;
 
 public class GetBuddyBack : Plugin
 {
-	private static PluginInfo info = new PluginInfo("C# Get Buddy Back", "0.1", "Prints when a Buddy returns", "Longer Description", "Eoin Coffey", "urled");
+	private static PluginInfo info = new PluginInfo("mono-buddyback", "C# Get Buddy Back", "0.1", "Prints when a Buddy returns", "Longer Description", "Eoin Coffey", "urled");
 
 	public GetBuddyBack()
 		: base (info)
@@ -21,7 +21,7 @@
 		Debug.debug(Debug.INFO, "buddyback", "loading...\n");
 		
 		/*Signal.connect(BuddyList.GetHandle(), this, "buddy-back", new Signal.Handler(HandleSig));*/
-		/*BuddyList.OnBuddyBack.connect(this, new Signal.Handler(HandleSig));*/
+		BuddyList.OnBuddyStatusChanged.connect(this, new Signal.Handler(HandleSig));
 	}
 	
 	public override void Unload()
--- a/libpurple/plugins/mono/MPlugin.cs	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/MPlugin.cs	Sat Mar 24 22:55:24 2007 +0000
@@ -1,8 +1,8 @@
-using Gaim;
+using Purple;
 
 public class MPlugin : Plugin
 {
-	private static PluginInfo info = new PluginInfo("C# Plugin", "0.1", "Test C# Plugin", "Longer Description", "Eoin Coffey", "urled");
+	private static PluginInfo info = new PluginInfo("mono-mplugin", "C# Plugin", "0.1", "Test C# Plugin", "Longer Description", "Eoin Coffey", "urled");
 
 	public MPlugin()
 		: base(info)
--- a/libpurple/plugins/mono/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -12,8 +12,8 @@
 all: $(mono_SCRIPTS)
 
 SUFFIXES = .cs .dll
-.cs.dll: api/GaimAPI.dll $(mono_build_sources)
-	mcs -t:library -lib:./api -out:$@ -r:GaimAPI.dll $<
+.cs.dll: api/PurpleAPI.dll $(mono_build_sources)
+	mcs -t:library -lib:./api -out:$@ -r:PurpleAPI.dll $<
 
 clean-local:
 	rm -f $(mono_SCRIPTS)
--- a/libpurple/plugins/mono/api/BlistNode.cs	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/api/BlistNode.cs	Sat Mar 24 22:55:24 2007 +0000
@@ -1,4 +1,4 @@
-namespace Gaim {
+namespace Purple {
 	public abstract class BlistNode {
 	}
 }
--- a/libpurple/plugins/mono/api/Buddy.cs	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/api/Buddy.cs	Sat Mar 24 22:55:24 2007 +0000
@@ -1,4 +1,4 @@
-namespace Gaim {
+namespace Purple {
 	public class Buddy : BlistNode {
 		private string name;
 		private string alias;
--- a/libpurple/plugins/mono/api/BuddyList.cs	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/api/BuddyList.cs	Sat Mar 24 22:55:24 2007 +0000
@@ -1,4 +1,4 @@
-namespace Gaim {
+namespace Purple {
 	using System;
 	using System.Runtime.CompilerServices;
 
--- a/libpurple/plugins/mono/api/Contact.cs	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/api/Contact.cs	Sat Mar 24 22:55:24 2007 +0000
@@ -1,4 +1,4 @@
-namespace Gaim {
+namespace Purple {
 	public class Contact : BlistNode {
 	}
 }
--- a/libpurple/plugins/mono/api/Debug.cs	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/api/Debug.cs	Sat Mar 24 22:55:24 2007 +0000
@@ -1,7 +1,7 @@
 using System;
 using System.Runtime.CompilerServices;
 
-namespace Gaim
+namespace Purple
 {
 	public class Debug
 	{
--- a/libpurple/plugins/mono/api/Event.cs	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/api/Event.cs	Sat Mar 24 22:55:24 2007 +0000
@@ -1,6 +1,6 @@
 using System;
 
-namespace Gaim
+namespace Purple
 {
 	public class Event
 	{
--- a/libpurple/plugins/mono/api/GaimPlugin.cs	Fri Mar 23 14:45:11 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-namespace Gaim {
-	public class PluginInfo {
-		private string name;
-		private string version;
-		private string summary;
-		private string description;
-		private string author;
-		private string homepage;
-		
-		public PluginInfo(string name, string version, string summary,
-						  string description, string author, string homepage)
-		{
-			this.name = name;
-			this.version = version;
-			this.summary = summary;
-			this.description = description;
-			this.author = author;
-			this.homepage = homepage;	
-		}
-
-		public string Name {
-			get { return name; }
-		}
-
-		public string Version {
-			get { return version; }
-		}
-
-		public string Summary {
-			get { return summary; }
-		}
-
-		public string Description {
-			get { return description; }
-		}
-
-		public string Author {
-			get { return author; }
-		}
-
-		public string Homepage {
-			get { return homepage; }
-		}
-	}
-	
-	abstract public class Plugin {
-		private PluginInfo info;
-
-		public Plugin(PluginInfo info) {
-			this.info = info;
-		}
-
-		public abstract void Load();
-		public abstract void Unload();
-		public abstract void Destroy();
-
-		public PluginInfo Info {
-			get { return info; }
-		}
-	}
-}
--- a/libpurple/plugins/mono/api/Group.cs	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/api/Group.cs	Sat Mar 24 22:55:24 2007 +0000
@@ -1,4 +1,4 @@
-namespace Gaim {
+namespace Purple {
 	public class Group : BlistNode {
 	}
 }
--- a/libpurple/plugins/mono/api/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/api/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -1,4 +1,5 @@
-monodir=$(libdir)/gaim
+monodir=$(libdir)/purple
+
 mono_sources = \
 	BlistNode.cs \
 	BuddyList.cs \
@@ -6,14 +7,14 @@
 	Contact.cs \
 	Debug.cs \
 	Event.cs \
-	GaimPlugin.cs \
+	PurplePlugin.cs \
 	Group.cs \
 	Signal.cs \
 	Status.cs
 
 EXTRA_DIST = $(mono_sources)
 
-mono_SCRIPTS = GaimAPI.dll
+mono_SCRIPTS = PurpleAPI.dll
 
 mono_build_sources = $(addprefix $(srcdir)/, $(mono_sources))
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/plugins/mono/api/PurplePlugin.cs	Sat Mar 24 22:55:24 2007 +0000
@@ -0,0 +1,67 @@
+namespace Purple {
+	public class PluginInfo {
+		private string id;
+		private string name;
+		private string version;
+		private string summary;
+		private string description;
+		private string author;
+		private string homepage;
+		
+		public PluginInfo(string id, string name, string version, string summary,
+						  string description, string author, string homepage)
+		{
+			this.id = id;
+			this.name = name;
+			this.version = version;
+			this.summary = summary;
+			this.description = description;
+			this.author = author;
+			this.homepage = homepage;	
+		}
+
+		public string Id {
+			get { return id; }
+		}
+
+		public string Name {
+			get { return name; }
+		}
+
+		public string Version {
+			get { return version; }
+		}
+
+		public string Summary {
+			get { return summary; }
+		}
+
+		public string Description {
+			get { return description; }
+		}
+
+		public string Author {
+			get { return author; }
+		}
+
+		public string Homepage {
+			get { return homepage; }
+		}
+	}
+	
+	abstract public class Plugin {
+		private PluginInfo info;
+
+		public Plugin(PluginInfo info) {
+			this.info = info;
+		}
+
+		public abstract void Load();
+		public abstract void Unload();
+		public abstract void Destroy();
+
+		public PluginInfo Info {
+			get { return info; }
+		}
+	}
+}
--- a/libpurple/plugins/mono/api/Signal.cs	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/api/Signal.cs	Sat Mar 24 22:55:24 2007 +0000
@@ -1,7 +1,7 @@
 using System;
 using System.Runtime.CompilerServices;
 
-namespace Gaim
+namespace Purple
 {
 	public class Signal
 	{
--- a/libpurple/plugins/mono/api/Status.cs	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/api/Status.cs	Sat Mar 24 22:55:24 2007 +0000
@@ -1,4 +1,4 @@
-namespace Gaim
+namespace Purple
 {
 	public class Status
 	{
--- a/libpurple/plugins/mono/loader/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/loader/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -1,4 +1,4 @@
-plugindir = $(libdir)/gaim
+plugindir = $(libdir)/purple
 
 plugin_LTLIBRARIES = mono.la
 
@@ -19,7 +19,7 @@
 AM_CPPFLAGS = \
 	-DVERSION=\"$(VERSION)\" \
 	-I$(top_srcdir) \
-	-I$(top_srcdir)/libgaim \
+	-I$(top_srcdir)/libpurple \
 	$(DEBUG_CFLAGS) \
 	$(PLUGIN_CFLAGS) \
 	$(MONO_CFLAGS)
--- a/libpurple/plugins/mono/loader/mono-helper.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/loader/mono-helper.c	Sat Mar 24 22:55:24 2007 +0000
@@ -84,10 +84,13 @@
 	total = mono_image_get_table_rows (image, MONO_TABLE_TYPEDEF);
 	for (i = 1; i <= total; ++i) {
 		klass = mono_class_get (image, MONO_TOKEN_TYPE_DEF | i);
+		
 		pklass = mono_class_get_parent(klass);
-		if (pklass) 
-			if (strcmp("PurplePlugin", mono_class_get_name(pklass)) == 0)
+		if (pklass) {
+		
+			if (strcmp("Plugin", mono_class_get_name(pklass)) == 0)
 				return klass;
+		}
 	}
 	
 	return NULL;
@@ -126,6 +129,18 @@
 	return mono_string_to_utf8(str);
 }
 
+MonoObject* ml_get_info_prop(MonoObject *obj)
+{
+	MonoClass *klass;
+	MonoProperty *prop;
+	
+	klass = mono_class_get_parent(mono_object_get_class(obj));
+	
+	prop = mono_class_get_property_from_name(klass, "Info");
+	
+	return mono_property_get_value(prop, obj, NULL, NULL);
+}
+
 gboolean ml_is_api_dll(MonoImage *image)
 {	
 	MonoClass *klass;
--- a/libpurple/plugins/mono/loader/mono-helper.h	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/loader/mono-helper.h	Sat Mar 24 22:55:24 2007 +0000
@@ -40,6 +40,8 @@
 
 void ml_set_prop_string(MonoObject *obj, char *field, char *data);
 
+MonoObject* ml_get_info_prop(MonoObject *obj);
+
 gboolean ml_is_api_dll(MonoImage *image);
 
 MonoDomain* ml_get_domain(void);
--- a/libpurple/plugins/mono/loader/mono.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/mono/loader/mono.c	Sat Mar 24 22:55:24 2007 +0000
@@ -26,9 +26,8 @@
 {
 	MonoAssembly *assm;
 	MonoMethod *m = NULL;
-	MonoMethod *info_method = NULL;
 	MonoObject *plugin_info;
-	gboolean found_load = FALSE, found_unload = FALSE, found_destroy = FALSE, found_info = FALSE;
+	gboolean found_load = FALSE, found_unload = FALSE, found_destroy = FALSE;
 	gpointer iter = NULL;
 
 	PurplePluginInfo *info;
@@ -71,6 +70,7 @@
 	mono_runtime_object_init(mplug->obj);
 
 	while ((m = mono_class_get_methods(mplug->klass, &iter))) {
+		purple_debug_info("mono", "plugin method: %s\n", mono_method_get_name(m));
 		if (strcmp(mono_method_get_name(m), "Load") == 0) {
 			mplug->load = m;
 			found_load = TRUE;
@@ -80,22 +80,20 @@
 		} else if (strcmp(mono_method_get_name(m), "Destroy") == 0) {
 			mplug->destroy = m;
 			found_destroy = TRUE;
-		} else if (strcmp(mono_method_get_name(m), "Info") == 0) {
-			info_method = m;
-			found_info = TRUE;
 		}
 	}
 
-	if (!(found_load && found_unload && found_destroy && found_info)) {
+	if (!(found_load && found_unload && found_destroy)) {
 		purple_debug(PURPLE_DEBUG_ERROR, "mono", "did not find the required methods\n");
 		return FALSE;
 	}
-
-	plugin_info = ml_invoke(info_method, mplug->obj, NULL);
+	
+	plugin_info = ml_get_info_prop(mplug->obj);
 
 	/* now that the methods are filled out we can populate
 	   the info struct with all the needed info */
 
+	info->id = ml_get_prop_string(plugin_info, "Id");
 	info->name = ml_get_prop_string(plugin_info, "Name");
 	info->version = ml_get_prop_string(plugin_info, "Version");
 	info->summary = ml_get_prop_string(plugin_info, "Summary");
--- a/libpurple/plugins/perl/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/perl/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -4,10 +4,10 @@
 perl_dirs = common
 
 plugin_LTLIBRARIES = perl.la
-hack_LTLIBRARIES = libgaimperl.la
+hack_LTLIBRARIES = libpurpleperl.la
 
 perl_la_LDFLAGS = -module -avoid-version
-perl_la_LIBADD = $(GLIB_LIBS) $(PERL_LIBS) libgaimperl.la
+perl_la_LIBADD = $(GLIB_LIBS) $(PERL_LIBS) libpurpleperl.la
 perl_la_SOURCES = \
 	perl.c \
 	perl-common.c \
@@ -18,11 +18,11 @@
 perl_la_DEPENDENCIES = \
 	.libs/libperl_orig.a \
 	.libs/DynaLoader.a \
-	libgaimperl.la
+	libpurpleperl.la
 
-libgaimperl_la_LDFLAGS = -module -avoid-version
-libgaimperl_la_LIBADD = $(GLIB_LIBS)
-libgaimperl_la_SOURCES = libgaimperl.c
+libpurpleperl_la_LDFLAGS = -module -avoid-version
+libpurpleperl_la_LIBADD = $(GLIB_LIBS)
+libpurpleperl_la_SOURCES = libpurpleperl.c
 
 .libs/libperl_orig.a:
 	@mkdir -p .libs
@@ -55,8 +55,6 @@
         common/Conversation.xs \
         common/Debug.xs \
         common/FT.xs \
-        common/Purple.pm \
-        common/Purple.xs \
         common/ImgStore.xs \
         common/Log.xs \
         common/Makefile.PL.in \
@@ -69,6 +67,7 @@
         common/Privacy.xs \
         common/Proxy.xs \
         common/Prpl.xs \
+        common/Purple.pm \
         common/Request.xs \
         common/Roomlist.xs \
         common/SSLConn.xs \
@@ -90,7 +89,7 @@
 	Makefile.mingw \
 	common/Makefile.mingw \
 	$(common_sources) \
-	libgaimperl.c
+	libpurpleperl.c
 
 common/Makefile: common/Makefile.PL
 	@if test "x${top_srcdir}" != "x${top_builddir}"; then \
--- a/libpurple/plugins/perl/libgaimperl.c	Fri Mar 23 14:45:11 2007 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-#include <gmodule.h>
-
-#ifdef  __SUNPRO_C
-#pragma init (my_init)
-void my_init(void);
-
-void my_init() {
-#else
-void __attribute__ ((constructor)) my_init(void);
-
-void __attribute__ ((constructor)) my_init() {
-#endif
-
-	/* Very evil hack...puts perl.so's symbols in the global table
-	 * but does not create a circular dependancy because g_module_open
-	 * will only open the library once. */
-	g_module_open("perl.so", 0);
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/plugins/perl/libpurpleperl.c	Sat Mar 24 22:55:24 2007 +0000
@@ -0,0 +1,18 @@
+#include <gmodule.h>
+
+#ifdef  __SUNPRO_C
+#pragma init (my_init)
+void my_init(void);
+
+void my_init() {
+#else
+void __attribute__ ((constructor)) my_init(void);
+
+void __attribute__ ((constructor)) my_init() {
+#endif
+
+	/* Very evil hack...puts perl.so's symbols in the global table
+	 * but does not create a circular dependancy because g_module_open
+	 * will only open the library once. */
+	g_module_open("perl.so", 0);
+}
--- a/libpurple/plugins/ssl/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/plugins/ssl/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -26,7 +26,7 @@
 
 AM_CPPFLAGS = \
 	-DDATADIR=\"$(datadir)\" \
-	-DLIBDIR=\"$(libdir)/gaim/\" \
+	-DLIBDIR=\"$(libdir)/libpurple\" \
 	-I$(top_srcdir)/libpurple \
 	$(DEBUG_CFLAGS) \
 	$(GLIB_CFLAGS) \
--- a/libpurple/protocols/bonjour/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/bonjour/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -19,7 +19,7 @@
 
 if STATIC_BONJOUR
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES     = libbonjour.a
 libbonjour_a_SOURCES = $(BONJOURSOURCES)
 libbonjour_a_CFLAGS  = $(AM_CFLAGS)
--- a/libpurple/protocols/gg/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/gg/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -51,7 +51,7 @@
 
 if STATIC_GG
 
-st = -DGAIM_STATIC_PRPL $(GADU_CFLAGS)
+st = -DPURPLE_STATIC_PRPL $(GADU_CFLAGS)
 noinst_LIBRARIES = libgg.a
 pkg_LTLIBRARIES =
 
--- a/libpurple/protocols/irc/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/irc/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -10,7 +10,7 @@
 
 if STATIC_IRC
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES = libirc.a
 pkg_LTLIBRARIES =
 
--- a/libpurple/protocols/jabber/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/jabber/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -42,7 +42,7 @@
 
 if STATIC_JABBER
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES = libjabber.a
 pkg_LTLIBRARIES =
 
--- a/libpurple/protocols/jabber/auth.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/jabber/auth.c	Sat Mar 24 22:55:24 2007 +0000
@@ -20,18 +20,20 @@
  */
 #include "internal.h"
 
+#include "account.h"
+#include "debug.h"
+#include "cipher.h"
+#include "conversation.h"
+#include "request.h"
+#include "sslconn.h"
+#include "util.h"
+#include "xmlnode.h"
+
 #include "jutil.h"
 #include "auth.h"
-#include "xmlnode.h"
 #include "jabber.h"
 #include "iq.h"
 
-#include "debug.h"
-#include "util.h"
-#include "cipher.h"
-#include "sslconn.h"
-#include "request.h"
-
 static void auth_old_result_cb(JabberStream *js, xmlnode *packet,
 		gpointer data);
 
--- a/libpurple/protocols/jabber/jabber.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Sat Mar 24 22:55:24 2007 +0000
@@ -25,6 +25,7 @@
 #include "blist.h"
 #include "cmds.h"
 #include "connection.h"
+#include "conversation.h"
 #include "debug.h"
 #include "dnssrv.h"
 #include "message.h"
@@ -36,6 +37,7 @@
 #include "server.h"
 #include "util.h"
 #include "version.h"
+#include "xmlnode.h"
 
 #include "auth.h"
 #include "buddy.h"
--- a/libpurple/protocols/jabber/jutil.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/jabber/jutil.c	Sat Mar 24 22:55:24 2007 +0000
@@ -19,8 +19,11 @@
  *
  */
 #include "internal.h"
+#include "account.h"
+#include "conversation.h"
 #include "server.h"
 #include "util.h"
+#include "xmlnode.h"
 
 #include "chat.h"
 #include "presence.h"
--- a/libpurple/protocols/jabber/jutil.h	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/jabber/jutil.h	Sat Mar 24 22:55:24 2007 +0000
@@ -22,11 +22,6 @@
 #ifndef _PURPLE_JABBER_JUTIL_H_
 #define _PURPLE_JABBER_JUTIL_H_
 
-#include "account.h"
-#include "conversation.h"
-#include "xmlnode.h"
-
-
 typedef struct _JabberID {
 	char *node;
 	char *domain;
--- a/libpurple/protocols/jabber/presence.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/jabber/presence.c	Sat Mar 24 22:55:24 2007 +0000
@@ -20,20 +20,22 @@
  */
 #include "internal.h"
 
+#include "account.h"
 #include "cipher.h"
+#include "conversation.h"
 #include "debug.h"
 #include "notify.h"
 #include "request.h"
 #include "server.h"
 #include "status.h"
 #include "util.h"
+#include "xmlnode.h"
 
 #include "buddy.h"
 #include "chat.h"
 #include "presence.h"
 #include "iq.h"
 #include "jutil.h"
-#include "xmlnode.h"
 
 
 static void chats_send_presence_foreach(gpointer key, gpointer val,
--- a/libpurple/protocols/msn/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/msn/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -69,7 +69,7 @@
 
 if STATIC_MSN
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES = libmsn.a
 libmsn_a_SOURCES = $(MSNSOURCES)
 libmsn_a_CFLAGS  = $(AM_CFLAGS)
--- a/libpurple/protocols/novell/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/novell/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -32,7 +32,7 @@
 
 if STATIC_NOVELL
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES = libnovell.a
 pkg_LTLIBRARIES =
 
--- a/libpurple/protocols/oscar/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/oscar/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -51,7 +51,7 @@
 libicq_la_LDFLAGS = -module -avoid-version
 if STATIC_OSCAR
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES   = liboscar.a libaim.a libicq.a
 liboscar_a_SOURCES = $(OSCARSOURCES)
 liboscar_a_CFLAGS  = $(AM_CFLAGS)
--- a/libpurple/protocols/qq/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/qq/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -77,7 +77,7 @@
 
 if STATIC_QQ
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES = libqq.a
 libqq_a_SOURCES  = $(QQSOURCES)
 libqq_a_CFLAGS   = $(AM_CFLAGS)
@@ -94,7 +94,6 @@
 AM_CPPFLAGS = \
 	-I$(top_srcdir)/libpurple \
 	-DVERSION=\"$(VERSION)\" \
-	-DQQ_BUDDY_ICON_DIR=\"$(datadir)/pixmaps/gaim/buddy_icons/qq\" \
+	-DQQ_BUDDY_ICON_DIR=\"$(datadir)/pixmaps/purple/buddy_icons/qq\" \
 	$(DEBUG_CFLAGS) \
-	$(GLIB_CFLAGS) \
-	$(GAIM_CFLAGS)
+	$(GLIB_CFLAGS)
--- a/libpurple/protocols/sametime/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/sametime/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -12,7 +12,7 @@
 
 if STATIC_SAMETIME
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES   = libsametime.a
 libsametime_a_SOURCES = $(SAMETIMESOURCES)
 libsametime_a_CFLAGS  = $(AM_CFLAGS)
--- a/libpurple/protocols/silc/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/silc/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -6,26 +6,26 @@
 
 AM_CFLAGS = $(st)
 
-libsilcgaim_la_LDFLAGS = -module -avoid-version
+libsilcpurple_la_LDFLAGS = -module -avoid-version
 
 if STATIC_SILC
 
-st = -DGAIM_STATIC_PRPL $(SILC_CFLAGS)
-noinst_LIBRARIES = libsilcgaim.a
+st = -DPURPLE_STATIC_PRPL $(SILC_CFLAGS)
+noinst_LIBRARIES = libsilcpurple.a
 pkg_LTLIBRARIES =
 
-libsilcgaim_a_SOURCES = $(SILCSOURCES)
-libsilcgaim_a_CFLAGS  = $(AM_CFLAGS)
-libsilcgaim_a_LIBADD  = $(SILC_LIBS)
+libsilcpurple_a_SOURCES = $(SILCSOURCES)
+libsilcpurple_a_CFLAGS  = $(AM_CFLAGS)
+libsilcpurple_a_LIBADD  = $(SILC_LIBS)
 
 else
 
 st = $(SILC_CFLAGS)
-pkg_LTLIBRARIES = libsilcgaim.la
+pkg_LTLIBRARIES = libsilcpurple.la
 noinst_LIBRARIES =
 
-libsilcgaim_la_SOURCES = $(SILCSOURCES)
-libsilcgaim_la_LIBADD  = $(GLIB_LIBS) $(SILC_LIBS)
+libsilcpurple_la_SOURCES = $(SILCSOURCES)
+libsilcpurple_la_LIBADD  = $(GLIB_LIBS) $(SILC_LIBS)
 
 endif
 
--- a/libpurple/protocols/simple/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/simple/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -15,7 +15,7 @@
 
 if STATIC_MSN
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES = libsimple.a
 libsimple_a_SOURCES = $(SIMPLESOURCES)
 libsimple_a_CFLAGS  = $(AM_CFLAGS)
--- a/libpurple/protocols/toc/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/toc/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -12,7 +12,7 @@
 
 if STATIC_TOC
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES = libtoc.a
 libtoc_a_SOURCES = $(TOCSOURCES)
 libtoc_a_CFLAGS  = $(AM_CFLAGS)
--- a/libpurple/protocols/yahoo/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/yahoo/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -33,7 +33,7 @@
 
 if STATIC_YAHOO
 
-st = -DGAIM_STATIC_PRPL
+st = -DPURPLE_STATIC_PRPL
 noinst_LIBRARIES   = libyahoo.a
 libyahoo_a_SOURCES = $(YAHOOSOURCES)
 libyahoo_a_CFLAGS  = $(AM_CFLAGS)
--- a/libpurple/protocols/zephyr/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/protocols/zephyr/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -77,7 +77,7 @@
 
 if STATIC_ZEPHYR
 
-st = -DGAIM_STATIC_PRPL -Dlint
+st = -DPURPLE_STATIC_PRPL -Dlint
 noinst_LIBRARIES = libzephyr.a
 libzephyr_a_SOURCES = $(ZEPHYRSOURCES)
 libzephyr_a_CFLAGS  = $(AM_CFLAGS)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-client-example.c	Sat Mar 24 22:55:24 2007 +0000
@@ -0,0 +1,39 @@
+#define DBUS_API_SUBJECT_TO_CHANGE
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "purple-client.h"
+
+/*
+   This example demonstrates how to use libpurple-client to communicate
+   with purple.  The names and signatures of functions provided by
+   libpurple-client are the same as those in purple.  However, all
+   structures (such as PurpleAccount) are opaque, that is, you can only
+   use pointer to them.  In fact, these pointers DO NOT actually point
+   to anything, they are just integer identifiers of assigned to these
+   structures by purple.  So NEVER try to dereference these pointers.
+   Integer ids as disguised as pointers to provide type checking and
+   prevent mistakes such as passing an id of PurpleAccount when an id of
+   PurpleBuddy is expected.  According to glib manual, this technique is
+   portable.
+*/
+
+int main (int argc, char **argv)
+{
+	GList *alist, *node;
+
+	purple_init();
+
+	alist = purple_accounts_get_all();
+	for (node = alist; node != NULL; node = node->next)
+	{
+		PurpleAccount *account = (PurpleAccount*) node->data;
+		char *name = purple_account_get_username(account);
+		g_print("Name: %s\n", name);
+		g_free(name);
+	}
+	g_list_free(alist);
+
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-client.c	Sat Mar 24 22:55:24 2007 +0000
@@ -0,0 +1,81 @@
+#define DBUS_API_SUBJECT_TO_CHANGE
+
+#include <dbus/dbus-glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "dbus-purple.h"
+#include "purple-client-bindings.h"
+
+static DBusGConnection *bus;
+static DBusGProxy *purple_proxy;
+
+static GList *garray_int_to_glist(GArray *array)
+{
+	GList *list = NULL;
+	int i;
+
+	for (i = 0; i < array->len; i++)
+		list = g_list_append(list, GINT_TO_POINTER(g_array_index(array,gint,i)));
+
+	g_array_free(array, TRUE);
+	return list;
+}
+
+static GSList *garray_int_to_gslist(GArray *array)
+{
+	GSList *list = NULL;
+	int i;
+
+	for (i = 0; i < array->len; i++)
+		list = g_slist_append(list, GINT_TO_POINTER(g_array_index(array,gint,i)));
+
+	g_array_free(array, TRUE);
+	return list;
+}
+
+#include "purple-client-bindings.c"
+
+static void lose(const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF (1, 2);
+static void lose_gerror(const char *prefix, GError *error) G_GNUC_NORETURN;
+
+static void
+lose(const char *str, ...)
+{
+	va_list args;
+
+	va_start(args, str);
+
+	vfprintf(stderr, str, args);
+	fputc('\n', stderr);
+
+	va_end(args);
+
+	exit(1);
+}
+
+static void
+lose_gerror(const char *prefix, GError *error)
+{
+	lose("%s: %s", prefix, error->message);
+}
+
+void purple_init(void)
+{
+	GError *error = NULL;
+
+	g_type_init ();
+
+	bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+	if (!bus)
+		lose_gerror ("Couldn't connect to session bus", error);
+
+	purple_proxy = dbus_g_proxy_new_for_name (bus,
+					DBUS_SERVICE_PURPLE,
+					DBUS_PATH_PURPLE,
+					DBUS_INTERFACE_PURPLE);
+
+	if (!purple_proxy)
+		lose_gerror ("Couldn't connect to the Purple Service", error);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-notifications-example	Sat Mar 24 22:55:24 2007 +0000
@@ -0,0 +1,86 @@
+#!/usr/bin/env python
+
+# This is a simple gaim notification server.
+# It shows notifications when your buddy signs on or you get an IM message.
+#
+# This script requires Python 2.4 and PyGTK bindings
+#
+# Note that all function names are resolved dynamically, no
+# gaim-specific library is needed.
+
+import dbus
+import dbus.glib
+import dbus.decorators
+import gobject
+import os
+
+def ensureimconversation(conversation, account, name):
+    if conversation != 0:
+        return conversation
+    else:
+        # 1 = GAIM_CONV_IM 
+        return gaim.GaimConversationNew(1, account, name)
+
+def receivedimmsg(account, name, message, conversation, flags):
+    buddy = gaim.GaimFindBuddy(account, name)
+    if buddy != 0:
+        alias = gaim.GaimBuddyGetAlias(buddy)
+    else:
+        alias = name
+
+    text = "%s says %s" % (alias, message)
+    code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons",
+                      "'So what?','Show me',Close,Abuse", text)
+
+    if code == 101:                     # so what?
+        pass
+    else:
+        conversation = ensureimconversation(conversation, account, name)
+
+    if code == 102:                     # show me
+        window = gaim.GaimConversationGetWindow(conversation)
+        gaim.GaimConvWindowRaise(window)
+
+    if code == 103:                     # close 
+        gaim.GaimConversationDestroy(conversation)
+
+    if code == 104:                     # abuse
+        im = gaim.GaimConversationGetImData(conversation)
+        gaim.GaimConvImSend(im, "Go away you f...")
+                                 
+        
+def buddysignedon(buddyid):
+    alias = gaim.GaimBuddyGetAlias(buddyid)
+    text = "%s is online" % alias
+
+    code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons",
+                      "'So what?','Let's talk'", text)
+
+    if code == 101:                     # so what?
+        pass
+
+    if code == 102:                     # talk
+        name = gaim.GaimBuddyGetName(buddyid)
+        account = gaim.GaimBuddyGetAccount(buddyid)
+        gaim.GaimConversationNew(1, account, name)
+    
+
+bus = dbus.SessionBus()
+obj = bus.get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject")
+gaim = dbus.Interface(obj, "net.sf.gaim.GaimInterface")
+
+bus.add_signal_receiver(receivedimmsg,
+                        dbus_interface = "net.sf.gaim.GaimInterface",
+                        signal_name = "ReceivedImMsg")
+
+bus.add_signal_receiver(buddysignedon,
+                        dbus_interface = "net.sf.gaim.GaimInterface",
+                        signal_name = "BuddySignedOn")
+
+print "This is a simple gaim notification server."
+print "It shows notifications when your buddy signs on or you get an IM message."
+
+loop = gobject.MainLoop()
+loop.run()
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-remote	Sat Mar 24 22:55:24 2007 +0000
@@ -0,0 +1,215 @@
+#!/usr/bin/python
+
+import dbus
+import re
+import urllib
+import sys
+
+import xml.dom.minidom 
+
+xml.dom.minidom.Element.all   = xml.dom.minidom.Element.getElementsByTagName
+
+obj = dbus.SessionBus().get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject")
+gaim = dbus.Interface(obj, "net.sf.gaim.GaimInterface")
+
+class CheckedObject:
+    def __init__(self, obj):
+        self.obj = obj
+
+    def __getattr__(self, attr):
+        return CheckedAttribute(self, attr)
+
+class CheckedAttribute:
+    def __init__(self, cobj, attr):
+        self.cobj = cobj
+        self.attr = attr
+        
+    def __call__(self, *args):
+        result = self.cobj.obj.__getattr__(self.attr)(*args)
+        if result == 0:
+            raise "Error: " + self.attr + " " + str(args) + " returned " + str(result)
+        return result
+            
+def show_help():
+    print """This program uses DBus to communicate with gaim.
+
+Usage:
+
+    %s "command1" "command2" ...
+
+Each command is of one of the three types:
+
+    [protocol:]commandname?param1=value1&param2=value2&...
+    FunctionName?param1=value1&param2=value2&...
+    FunctionName(value1,value2,...)
+
+The second and third form are provided for completeness but their use
+is not recommended; use gaim-send or gaim-send-async instead.  The
+second form uses introspection to find out the parameter names and
+their types, therefore it is rather slow.
+
+Examples of commands:
+
+    jabber:goim?screenname=testone@localhost&message=hi
+    jabber:gochat?room=TestRoom&server=conference.localhost
+    jabber:getinfo?screenname=testone@localhost
+    jabber:addbuddy?screenname=my friend
+
+    setstatus?status=away&message=don't disturb
+    quit
+
+    GaimAccountsFindConnected?name=&protocol=prpl-jabber
+    GaimAccountFindConnected(,prpl-jabber)
+""" % sys.argv[0]
+
+cgaim = CheckedObject(gaim)
+
+urlregexp = r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?"
+
+def extendlist(list, length, fill):
+    if len(list) < length:
+        return list + [fill] * (length - len(list))
+    else:
+        return list
+
+def convert(value):
+    try:
+        return int(value)
+    except:
+        return value
+
+def findaccount(accountname, protocolname):
+    try:
+        # prefer connected accounts
+        account = cgaim.GaimAccountsFindConnected(accountname, protocolname)
+        return account
+    except:
+        # try to get any account and connect it
+        account = cgaim.GaimAccountsFindAny(accountname, protocolname)
+        gaim.GaimAccountSetStatusVargs(account, "online", 1)
+        gaim.GaimAccountConnect(account)
+        return account
+    
+
+def execute(uri):
+    match = re.match(urlregexp, uri)
+    protocol = match.group(2)
+    if protocol == "aim" or protocol == "icq":
+        protocol = "oscar"
+    if protocol is not None:
+        protocol = "prpl-" + protocol
+    command = match.group(5)
+    paramstring = match.group(7)
+    params = {}
+    if paramstring is not None:
+        for param in paramstring.split("&"):
+            key, value = extendlist(param.split("=",1), 2, "")
+            params[key] = urllib.unquote(value)
+
+    accountname = params.get("account", "")
+
+    if command == "goim":
+        account = findaccount(accountname, protocol)
+        conversation = cgaim.GaimConversationNew(1, account, params["screenname"])
+        if "message" in params:
+            im = cgaim.GaimConversationGetImData(conversation)
+            gaim.GaimConvImSend(im, params["message"])
+        return None
+
+    elif command == "gochat":
+        account = findaccount(accountname, protocol)
+        connection = cgaim.GaimAccountGetConnection(account)
+        return gaim.ServJoinChat(connection, params)
+
+    elif command == "addbuddy":
+        account = findaccount(accountname, protocol)
+        return cgaim.GaimBlistRequestAddBuddy(account, params["screenname"],
+                                              params.get("group", ""), "")
+
+    elif command == "setstatus":
+        current = gaim.GaimSavedstatusGetCurrent()
+
+        if "status" in params:
+            status_id = params["status"]
+            status_type = gaim.GaimPrimitiveGetTypeFromId(status_id)
+        else:
+            status_type = gaim.GaimSavedstatusGetType(current)
+            status_id = gaim.GaimPrimitiveGetIdFromType(status_type)
+
+        if "message" in params:
+            message = params["message"];
+        else:
+            message = gaim.GaimSavedstatusGetMessage(current)
+
+        if "account" in params:
+            accounts = [cgaim.GaimAccountsFindAny(accountname, protocol)]
+
+            for account in accounts:
+                status = gaim.GaimAccountGetStatus(account, status_id)
+                type = gaim.GaimStatusGetType(status)
+                gaim.GaimSavedstatusSetSubstatus(current, account, type, message)
+                gaim.GaimSavedstatusActivateForAccount(current, account)
+        else:
+            accounts = gaim.GaimAccountsGetAllActive()
+            saved = gaim.GaimSavedstatusNew("", status_type)
+            gaim.GaimSavedstatusSetMessage(saved, message)
+            gaim.GaimSavedstatusActivate(saved)
+
+        return None
+
+    elif command == "getinfo":
+        account = findaccount(accountname, protocol)
+        connection = cgaim.GaimAccountGetConnection(account)
+        return gaim.ServGetInfo(connection, params["screenname"])
+
+    elif command == "quit":
+        return gaim.GaimCoreQuit()
+
+    elif command == "uri":
+        return None
+
+    else:
+        match = re.match(r"(\w+)\s*\(([^)]*)\)", command)
+        if match is not None:
+            name = match.group(1)
+            argstr = match.group(2)
+            if argstr == "":
+                args = []
+            else:
+                args = argstr.split(",")
+            fargs = []
+            for arg in args:
+                fargs.append(convert(arg.strip()))
+            return gaim.__getattr__(name)(*fargs)
+        else:
+            # introspect the object to get parameter names and types
+            # this is slow because the entire introspection info must be downloaded
+            data = dbus.Interface(obj, "org.freedesktop.DBus.Introspectable").\
+                   Introspect()
+            introspect = xml.dom.minidom.parseString(data).documentElement
+            for method in introspect.all("method"):
+                if command == method.getAttribute("name"):
+                    methodparams = []
+                    for arg in method.all("arg"):
+                        if arg.getAttribute("direction") == "in":
+                            value = params[arg.getAttribute("name")]
+                            type = arg.getAttribute("type")
+                            if type == "s":
+                                methodparams.append(value)
+                            elif type == "i":
+                                methodparams.append(int(value))
+                            else:
+                                raise "Don't know how to handle type \"%s\"" % type
+                    return gaim.__getattr__(command)(*methodparams)
+            show_help()
+            raise "Unknown command: %s" % command
+
+if len(sys.argv) == 1:
+    show_help()
+
+for arg in sys.argv[1:]:
+    output = execute(arg)
+
+    if (output != None):
+        print output
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-send	Sat Mar 24 22:55:24 2007 +0000
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+METHOD_NAME=$1
+
+if test -z "$METHOD_NAME" 
+then
+    cat <<EOF 
+This program calls gaim API functions using DBus and prints the return value.
+If you are not interested in the return value, use gaim-send-async.
+
+Usage:
+
+   $0 method-name type1:parameter1 type2:parameter2 ...
+
+This shell script just invokes dbus-send, see man dbus-send for how 
+to specify the parameters.  
+
+Examples:
+
+   $0 GaimAccountsFindConnected string: string:prpl-jabber
+   $0 GaimAccountsGetAll
+   $0 GaimCoreQuit
+
+Use dbus-viewer to get the list of supported functions and their parameters.
+EOF
+    exit 1
+fi
+
+shift
+dbus-send --dest=net.sf.gaim.GaimService --print-reply --type=method_call /net/sf/gaim/GaimObject net.sf.gaim.GaimInterface.$METHOD_NAME "$@"
+
+echo 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-send-async	Sat Mar 24 22:55:24 2007 +0000
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+METHOD_NAME=$1
+
+if test -z "$METHOD_NAME" 
+then
+    cat <<EOF 
+This program calls gaim API functions using DBus.  As opposed to gaim-send, 
+it does not print the return value.
+
+Usage:
+
+   $0 method-name type1:parameter1 type2:parameter2 ...
+
+This shell script just invokes dbus-send, see man dbus-send for how 
+to specify the parameters.  
+
+Examples:
+
+   $0 GaimCoreQuit
+
+Use dbus-viewer to get the list of supported functions and their parameters.
+EOF
+    exit 1
+fi
+
+shift
+dbus-send --dest=net.sf.gaim.GaimService --type=method_call /net/sf/gaim/GaimObject net.sf.gaim.GaimInterface.$METHOD_NAME "$@"
+
+echo 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-uninstalled.pc.in	Sat Mar 24 22:55:24 2007 +0000
@@ -0,0 +1,13 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+datadir=@datadir@
+sysconfdir=@sysconfdir@
+
+Name: libpurple
+Description: libpurple is a GLib-based instant messenger library.
+Version: @VERSION@
+Requires: glib-2.0
+Cflags: -I${pc_top_builddir}/${pcfiledir}
+Libs: ${pc_top_builddir}/${pcfiledir}/libpurple.la
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/purple-url-handler	Sat Mar 24 22:55:24 2007 +0000
@@ -0,0 +1,285 @@
+#!/usr/bin/python
+
+import dbus
+import re
+import sys
+import time
+import urllib
+
+obj = dbus.SessionBus().get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject")
+gaim = dbus.Interface(obj, "net.sf.gaim.GaimInterface")
+
+class CheckedObject:
+    def __init__(self, obj):
+        self.obj = obj
+
+    def __getattr__(self, attr):
+        return CheckedAttribute(self, attr)
+
+class CheckedAttribute:
+    def __init__(self, cobj, attr):
+        self.cobj = cobj
+        self.attr = attr
+
+    def __call__(self, *args):
+        result = self.cobj.obj.__getattr__(self.attr)(*args)
+        if result == 0:
+            raise "Error: " + self.attr + " " + str(args) + " returned " + str(result)
+        return result
+
+cgaim = CheckedObject(gaim)
+
+def extendlist(list, length, fill):
+    if len(list) < length:
+        return list + [fill] * (length - len(list))
+    else:
+        return list
+
+def convert(value):
+    try:
+        return int(value)
+    except:
+        return value
+
+def findaccount(protocolname, accountname=""):
+    try:
+        # prefer connected accounts
+        account = cgaim.GaimAccountsFindConnected(accountname, protocolname)
+        return account
+    except:
+        # try to get any account and connect it
+        account = cgaim.GaimAccountsFindAny(accountname, protocolname)
+        gaim.GaimAccountSetStatusVargs(account, "online", 1)
+        gaim.GaimAccountConnect(account)
+        return account
+
+def goim(account, screenname, message=None):
+    # XXX: 1 == GAIM_CONV_TYPE_IM
+    conversation = cgaim.GaimConversationNew(1, account, screenname)
+    if message:
+        gaim.GaimConvSendConfirm(conversation, message)
+
+def gochat(account, params, message=None):
+    connection = cgaim.GaimAccountGetConnection(account)
+    gaim.ServJoinChat(connection, params)
+
+    if message != None:
+    	for i in range(20):
+            # XXX: 2 == GAIM_CONV_TYPE_CHAT
+            conversation = gaim.GaimFindConversationWithAccount(2, params.get("channel", params.get("room")), account)
+            if conversation:
+                gaim.GaimConvSendConfirm(conversation, message)
+                break
+            else:
+                time.sleep(0.5)
+
+def addbuddy(account, screenname, group="", alias=""):
+    cgaim.GaimBlistRequestAddBuddy(account, screenname, group, alias)
+
+
+def aim(uri):
+    protocol = "prpl-oscar"
+    match = re.match(r"^(aim|icq):([^?]*)(\?(.*))", uri)
+    if not match:
+        print "Invalid aim URI: %s" % uri
+        return
+
+    command = urllib.unquote_plus(match.group(2))
+    paramstring = match.group(4)
+    params = {}
+    if paramstring:
+        for param in paramstring.split("&"):
+            key, value = extendlist(param.split("=", 1), 2, "")
+            params[key] = urllib.unquote_plus(value)
+    accountname = params.get("account", "")
+    screenname = params.get("screenname", "")
+
+    account = findaccount(protocol, accountname)
+
+    if command.lower() == "goim":
+        goim(account, screenname, params.get("message"))
+    elif command.lower() == "gochat":
+        gochat(account, params)
+    elif command.lower() == "addbuddy":
+        addbuddy(account, screenname, params.get("group", ""))
+
+def gg(uri):
+    protocol = "prpl-gg"
+    match = re.match(r"^gg:(.*)", uri)
+    if not match:
+        print "Invalid gg URI: %s" % uri
+        return
+
+    screenname = urllib.unquote_plus(match.group(1))
+    account = findaccount(protocol)
+    goim(account, screenname)
+
+def icq(uri):
+    aim(uri)
+
+def irc(uri):
+    protocol = "prpl-irc"
+    match = re.match(r"^irc:(//([^/]*)/)?([^?]*)(\?(.*))?", uri)
+    if not match:
+        print "Invalid irc URI: %s" % uri
+        return
+
+    server = urllib.unquote_plus(match.group(2)) or ""
+    target = match.group(3) or ""
+    query = match.group(5) or ""
+
+    modifiers = {}
+    if target:
+        for modifier in target.split(",")[1:]:
+            modifiers[modifier] = True
+
+    isnick = modifiers.has_key("isnick")
+
+    paramstring = match.group(5)
+    params = {}
+    if paramstring:
+        for param in paramstring.split("&"):
+            key, value = extendlist(param.split("=", 1), 2, "")
+            params[key] = urllib.unquote_plus(value)
+
+    account = findaccount(protocol)
+
+    if (target != ""):
+        if (isnick):
+            goim(account, urllib.unquote_plus(target.split(",")[0]), params.get("msg"))
+	else:
+            channel = urllib.unquote_plus(target.split(",")[0])
+            if channel[0] != "#":
+                channel = "#" + channel
+            gochat(account, {"server": server, "channel": channel, "password": params.get("key", "")}, params.get("msg"))
+
+def msnim(uri):
+    protocol = "prpl-msn"
+    match = re.match(r"^msnim:([^?]*)(\?(.*))", uri)
+    if not match:
+        print "Invalid msnim URI: %s" % uri
+        return
+
+    command = urllib.unquote_plus(match.group(1))
+    paramstring = match.group(3)
+    params = {}
+    if paramstring:
+        for param in paramstring.split("&"):
+            key, value = extendlist(param.split("=", 1), 2, "")
+            params[key] = urllib.unquote_plus(value)
+    screenname = params.get("contact", "")
+
+    account = findaccount(protocol)
+
+    if command.lower() == "chat":
+        goim(account, screenname)
+    elif command.lower() == "add":
+        addbuddy(account, screenname)
+
+def sip(uri):
+    protocol = "prpl-simple"
+    match = re.match(r"^sip:(.*)", uri)
+    if not match:
+        print "Invalid sip URI: %s" % uri
+        return
+
+    screenname = urllib.unquote_plus(match.group(1))
+    account = findaccount(protocol)
+    goim(account, screenname)
+
+def xmpp(uri):
+    protocol = "prpl-jabber"
+    match = re.match(r"^xmpp:((//)?([^/?#]*))?(/?([^?#]*))(\?([^;#]*)(;([^#]*))?)?(#(.*))?", uri)
+    if not match:
+        print "Invalid xmpp URI: %s" % uri
+        return
+
+    tmp = match.group(3)
+    if (tmp):
+        accountname = urllib.unquote_plus(tmp)
+    else:
+        accountname = ""
+
+    screenname = urllib.unquote_plus(match.group(5))
+
+    tmp = match.group(7)
+    if (tmp):
+        command = urllib.unquote_plus(tmp)
+    else:
+        command = ""
+
+    paramstring = match.group(9)
+    params = {}
+    if paramstring:
+        for param in paramstring.split(";"):
+            key, value = extendlist(param.split("=", 1), 2, "")
+            params[key] = urllib.unquote_plus(value)
+
+    account = findaccount(protocol, accountname)
+
+    if command.lower() == "message":
+        goim(account, screenname, params.get("body"))
+    elif command.lower() == "join":
+        room, server = screenname.split("@")
+        gochat(account, {"room": room, "server": server})
+    elif command.lower() == "roster":
+        addbuddy(account, screenname, params.get("group", ""), params.get("name", ""))
+    else:
+        goim(account, screenname)
+
+def ymsgr(uri):
+    protocol = "prpl-yahoo"
+    match = re.match(r"^ymsgr:([^?]*)(\?([^&]*)(&(.*))?)", uri)
+    if not match:
+        print "Invalid ymsgr URI: %s" % uri
+        return
+
+    command = urllib.unquote_plus(match.group(1))
+    screenname = urllib.unquote_plus(match.group(3))
+    paramstring = match.group(5)
+    params = {}
+    if paramstring:
+        for param in paramstring.split("&"):
+            key, value = extendlist(param.split("=", 1), 2, "")
+            params[key] = urllib.unquote_plus(value)
+
+    account = findaccount(protocol)
+
+    if command.lower() == "sendim":
+        goim(account, screenname, params.get("m"))
+    elif command.lower() == "chat":
+        gochat(account, {"room": screenname})
+    elif command.lower() == "addfriend":
+        addbuddy(account, screenname)
+
+
+def main(argv=sys.argv):
+    if len(argv) != 2:
+        print "Usage: %s URI" % argv[0]
+        print "Example: %s \"xmpp:romeo@montague.net?message\"" % argv[0]
+        return
+
+    uri = argv[1]
+    type = uri.split(":")[0]
+
+    if type == "aim":
+        aim(uri)
+    elif type == "gg":
+        gg(uri)
+    elif type == "icq":
+        icq(uri)
+    elif type == "irc":
+        irc(uri)
+    elif type == "msnim":
+        msnim(uri)
+    elif type == "sip":
+        sip(uri)
+    elif type == "xmpp":
+        xmpp(uri)
+    elif type == "ymsgr":
+        ymsgr(uri)
+    else:
+        print "Unkown protocol: %s" % type
+
+if __name__ == "__main__":
+    main()
--- a/libpurple/tests/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/tests/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -14,6 +14,7 @@
 check_libpurple_CFLAGS=\
         @CHECK_CFLAGS@ \
 		$(GLIB_CFLAGS) \
+		$(DEBUG_CFLAGS) \
 		-I.. \
 		-DBUILDDIR=\"$(top_builddir)\"
 
--- a/libpurple/tests/check_libpurple.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/tests/check_libpurple.c	Sat Mar 24 22:55:24 2007 +0000
@@ -3,6 +3,7 @@
 
 #include "../core.h"
 #include "../eventloop.h"
+#include "../util.h"
 
 #include "tests.h"
 
@@ -22,6 +23,7 @@
 	(guint (*)(guint))g_source_remove,
 	purple_check_input_add,
 	(guint (*)(guint))g_source_remove,
+	NULL
 };
 
 static void
--- a/libpurple/tests/test_cipher.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/tests/test_cipher.c	Sat Mar 24 22:55:24 2007 +0000
@@ -5,6 +5,8 @@
 
 #undef HAVE_DBUS
 
+#include "tests.h"
+
 #include "../cipher.h"
 #include "../signal.h"
 
@@ -15,7 +17,6 @@
 	PurpleCipher *cipher = NULL; \
 	PurpleCipherContext *context = NULL; \
 	gchar cdigest[33]; \
-	gchar *sdigest = NULL; \
 	gboolean ret = FALSE; \
 	\
 	cipher = purple_ciphers_find_cipher("md4"); \
@@ -79,7 +80,6 @@
 	PurpleCipher *cipher = NULL; \
 	PurpleCipherContext *context = NULL; \
 	gchar cdigest[33]; \
-	gchar *sdigest = NULL; \
 	gboolean ret = FALSE; \
 	\
 	cipher = purple_ciphers_find_cipher("md5"); \
@@ -142,7 +142,6 @@
 	PurpleCipher *cipher = NULL; \
 	PurpleCipherContext *context = NULL; \
 	gchar cdigest[41]; \
-	gchar *sdigest = NULL; \
 	gboolean ret = FALSE; \
 	\
 	cipher = purple_ciphers_find_cipher("sha1"); \
@@ -198,7 +197,7 @@
 cipher_suite(void) {
 	Suite *s = suite_create("Cipher Suite");
 	TCase *tc = NULL;
-	
+
 	/* md4 tests */
 	tc = tcase_create("MD4");
 	tcase_add_test(tc, test_md4_empty_string);
--- a/libpurple/tests/test_jabber_jutil.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/tests/test_jabber_jutil.c	Sat Mar 24 22:55:24 2007 +0000
@@ -1,4 +1,9 @@
+#include <string.h>
+
 #include "tests.h"
+#include "../account.h"
+#include "../conversation.h"
+#include "../xmlnode.h"
 #include "../protocols/jabber/jutil.h"
 
 START_TEST(test_get_resource)
@@ -29,12 +34,14 @@
 
 START_TEST(test_nodeprep_validate)
 {
+	char *longnode;
+
 	fail_unless(jabber_nodeprep_validate(NULL));
 	fail_unless(jabber_nodeprep_validate("foo"));
 	fail_unless(jabber_nodeprep_validate("%d"));
 	fail_unless(jabber_nodeprep_validate("y\\z"));
 
-	char *longnode = g_strnfill(1023, 'a');
+	longnode = g_strnfill(1023, 'a');
 	fail_unless(jabber_nodeprep_validate(longnode));
 	g_free(longnode);
 }
--- a/libpurple/tests/test_util.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/tests/test_util.c	Sat Mar 24 22:55:24 2007 +0000
@@ -1,3 +1,5 @@
+#include <string.h>
+
 #include "tests.h"
 #include "../util.h"
 
--- a/libpurple/tests/tests.h	Fri Mar 23 14:45:11 2007 +0000
+++ b/libpurple/tests/tests.h	Sat Mar 24 22:55:24 2007 +0000
@@ -6,6 +6,7 @@
 
 /* define the test suites here */
 /* remember to add the suite to the runner in check_libpurple.c */
+Suite * master_suite(void);
 Suite * cipher_suite(void);
 Suite * jabber_jutil_suite(void);
 Suite * util_suite(void);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin.spec.in	Sat Mar 24 22:55:24 2007 +0000
@@ -0,0 +1,495 @@
+# Older RPM doesn't define these by default
+%{!?perl_vendorlib: %define perl_vendorlib %(eval "`%{__perl} -V:installvendorlib`"; echo $installvendorlib)}
+%{!?perl_vendorarch: %define perl_vendorarch %(eval "`%{__perl} -V:installvendorarch`"; echo $installvendorarch)}
+%{!?perl_archlib: %define perl_archlib %(eval "`%{__perl} -V:installarchlib`"; echo $installarchlib)}
+
+# When not doing betas comment this out
+# NOTE: %defines in spec files are evaluated in comments so the correct
+#       way to comment it out is to replace the % with #
+#define beta 7
+
+%if 0%{?beta}
+%define pidginver %(echo "@VERSION@"|sed -e 's/dev//; s/beta.*//')
+%else
+%define pidginver @VERSION@
+%endif
+
+Summary:    A GTK+ based multiprotocol instant messaging client
+Name:       @PACKAGE@
+Version:    %pidginver
+Release:    0%{?beta:.beta%{beta}}
+Epoch:      0
+License:    GPL
+Group:      Applications/Internet
+URL:        http://pidgin.im/
+Packager:   %{packager}
+Source:     %{name}-@VERSION@.tar.bz2
+BuildRoot:  %{_tmppath}/%{name}-%{version}-root
+
+# Generic build requirements
+BuildRequires: libtool, pkgconfig, intltool, gettext, libxml2-devel
+%{?_with_avahi:BuildRequires: avahi-compat-howl-devel}
+%{!?_without_gtkspell:BuildRequires: gtkspell-devel}
+%{?_with_howl:BuildRequires: howl-devel}
+%{?_with_meanwhile:BuildRequires: meanwhile-devel}
+%{?_with_mono:BuildRequires: mono-devel}
+%{?_with_sasl:BuildRequires: cyrus-sasl-devel >= 2}
+%{?_with_silc:BuildRequires: /usr/include/silc/silcclient.h}
+%{?_with_tcl:BuildRequires: tcl, tk, /usr/include/tcl.h}
+%{!?_without_text:BuildRequires: ncurses-devel}
+
+%if "%{_vendor}" == "suse"
+# For SuSE:
+BuildRequires: gnutls-devel
+%{?_with_dbus:BuildRequires: dbus-1-devel >= 0.35}
+%{!?_without_gstreamer:BuildRequires: gstreamer010-devel >= 0.10}
+%else
+%{?_with_dbus:BuildRequires: dbus-devel >= 0.35}
+%{!?_without_gstreamer:BuildRequires: gstreamer-devel >= 0.10}
+%endif
+
+# Mandrake 10.1 and lower || Mandrake 10.2 (and higher?)
+%if "%{_vendor}" == "MandrakeSoft" || "%{_vendor}" == "Mandrakesoft" || "%{_vendor}" == "Mandriva"
+# For Mandrake/Mandriva:
+BuildRequires: libgtk+2.0_0-devel, libnss3-devel, perl-devel
+Obsoletes:  libgaim-remote0
+%else
+# For SuSE, Red Hat, Fedora and others:
+BuildRequires: gtk2-devel
+%if "%{_vendor}" != "suse"
+# For Red Hat, Fedora and others:
+# let's assume RH & FC1 are the only brain-dead distros missing the
+# perl-XML-Parser dependency on intltool and that other RH/FC releases
+# don't care if we specify it here
+BuildRequires: perl-XML-Parser
+BuildRequires: mozilla-nss-devel
+%endif
+%endif
+
+# For some reason perl isn't always automatically detected as a requirement :(
+Requires: perl
+# Gadu-Gadu support was split out temporarily (only as gaim)
+Provides: gaim-gadugadu = %{epoch}:%{version}-%{release}
+
+%package devel
+Summary:    Development headers, documentation, and libraries for Pidgin
+Group:      Applications/Internet
+Requires:   pkgconfig, pidgin = %{epoch}:%{version}
+
+%if 0%{?_with_howl:1} || 0%{?_with_avahi:1}
+%package bonjour
+Summary:    Bonjour plugin for Pidgin
+Group:      Applications/Internet
+Requires:   pidgin = %{epoch}:%{version}
+%endif
+
+%if 0%{?_with_meanwhile:1}
+%package meanwhile
+Summary:    Lotus Sametime plugin for Pidgin using the Meanwhile library
+Group:      Applications/Internet
+Requires:   pidgin = %{epoch}:%{version}
+%endif
+
+%if 0%{?_with_mono:1}
+%package mono
+Summary:    Mono .NET plugin support for Pidgin
+Group:      Applications/Internet
+Requires:   pidgin = %{epoch}:%{version}
+%endif
+
+%if 0%{?_with_silc:1}
+%package silc
+Summary:    SILC (Secure Internet Live Conferencing) plugin for Pidgin
+Group:      Applications/Internet
+Requires:   pidgin = %{epoch}:%{version}
+%endif
+
+%if 0%{?_with_tcl:1}
+%package tcl
+Summary:    Tcl scripting support for Pidgin
+Group:      Applications/Internet
+Requires:   pidgin = %{epoch}:%{version}
+%endif
+
+%if 0%{!?_without_text:1}
+%package -n finch
+Summary:    A text-based user interface for Pidgin
+Group:      Applications/Internet
+Requires:   pidgin = %{epoch}:%{version}
+%endif
+
+%description
+Pidgin allows you to talk to anyone using a variety of messaging
+protocols including AIM, MSN, Yahoo!, Jabber, Bonjour, Gadu-Gadu,
+ICQ, IRC, Novell Groupwise, QQ, Lotus Sametime, SILC, Simple and
+Zephyr.  These protocols are implemented using a modular, easy to
+use design.  To use a protocol, just add an account using the
+account editor.
+
+Pidgin supports many common features of other clients, as well as many
+unique features, such as perl scripting, TCL scripting and C plugins.
+
+Pidgin is not affiliated with or endorsed by America Online, Inc.,
+Microsoft Corporation, Yahoo! Inc., or ICQ Inc.
+
+%description devel
+The pidgin-devel package contains the header files, developer
+documentation, and libraries required for development of Pidgin scripts
+and plugins.
+
+%if 0%{?_with_howl:1} || 0%{?_with_avahi:1}
+%description bonjour
+Bonjour plugin for Pidgin.
+%endif
+
+%if 0%{?_with_meanwhile:1}
+%description meanwhile
+Lotus Sametime plugin for Pidgin using the Meanwhile library.
+%endif
+
+%if 0%{?_with_mono:1}
+%description mono
+Mono plugin loader for Pidgin.  This package will allow you to write or
+use Pidgin plugins written in the .NET programming language.
+%endif
+
+%if 0%{?_with_silc:1}
+%description silc
+SILC (Secure Internet Live Conferencing) plugin for Pidgin.
+%endif
+
+%if 0%{!?without_text:1}
+%description -n finch
+A text-based user interface for Pidgin.  This can be run from a
+standard text console or from a terminal within X Windows.  It
+uses ncurses and our homegrown gnt library for drawing windows
+and text.
+%endif
+
+%if 0%{?_with_tcl:1}
+%description tcl
+Tcl plugin loader for Pidgin.  This package will allow you to write or
+use Pidgin plugins written in the Tcl programming language.
+%endif
+
+%prep
+%setup -q -n %{name}-@VERSION@
+
+%build
+CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{_prefix} \
+                                    --bindir=%{_bindir} \
+                                    --datadir=%{_datadir} \
+                                    --includedir=%{_includedir} \
+                                    --libdir=%{_libdir} \
+                                    --mandir=%{_mandir} \
+                                    --sysconfdir=%{_sysconfdir} \
+                                    --disable-schemas-install \
+                                    %{!?_with_dbus:--disable-dbus} \
+                                    %{?_without_gstreamer:--disable-gstreamer} \
+                                    %{?_without_gtkspell:--disable-gtkspell} \
+                                    %{?_with_mono:--enable-mono} \
+                                    %{?_with_perlmakehack:--with-perl-lib=%{buildroot}%{_prefix}} \
+                                    %{!?_with_perlmakehack:--with-perl-lib=%{_prefix}} \
+                                    %{?_with_sasl:--enable-cyrus-sasl} \
+                                    %{?_with_silc:--with-silc-includes=%{_includedir}/silc} \
+                                    %{?_with_silc:--with-silc-libs=%{_libdir}/silc} \
+                                    %{!?_with_tcl:--disable-tcl} \
+                                    %{?_without_text:--disable-consoleui}
+
+make %{?_smp_mflags}
+
+%install
+rm -rf %{buildroot}
+%if 0%{?_with_perlmakehack:1}
+make prefix=%{buildroot}%{_prefix} bindir=%{buildroot}%{_bindir} \
+     datadir=%{buildroot}%{_datadir} includedir=%{buildroot}%{_includedir} \
+     libdir=%{buildroot}%{_libdir} mandir=%{buildroot}%{_mandir} \
+     sysconfdir=%{buildroot}%{_sysconfdir} \
+     install
+%else
+make DESTDIR=$RPM_BUILD_ROOT install
+%endif
+
+# Delete files that we don't want to put in any of the RPMs
+rm -f $RPM_BUILD_ROOT%{_libdir}/finch/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/pidgin/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/*.la
+rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
+rm -f $RPM_BUILD_ROOT%{perl_archlib}/perllocal.pod
+find $RPM_BUILD_ROOT -type f -name .packlist -exec rm -f {} ';'
+find $RPM_BUILD_ROOT -type f -name '*.bs' -empty -exec rm -f {} ';'
+# do we want to ship the nullclient ?
+rm -f $RPM_BUILD_ROOT%{_bindir}/nullclient
+
+%if 0%{!?_with_howl:1} && 0%{!?_with_avahi:1}
+rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/libbonjour.so
+%endif
+
+%if 0%{!?_with_meanwhile:1}
+rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/libsametime.so
+%endif
+
+%if 0%{!?_with_mono:1}
+rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/mono.so
+rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/*.dll
+%endif
+
+%if 0%{!?_with_silc:1}
+rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/libsilcpurple.so
+%endif
+
+%if 0%{!?_with_tcl:1}
+rm -f $RPM_BUILD_ROOT%{_libdir}/libpurple/tcl.so
+%endif
+
+%if 0%{?_without_text:1}
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/finch.*
+rm -rf $RPM_BUILD_ROOT%{_bindir}/finch
+rm -f $RPM_BUILD_ROOT%{_libdir}/libgnt.so.*
+%endif
+
+%find_lang %{name}
+
+find $RPM_BUILD_ROOT%{_libdir}/pidgin $RPM_BUILD_ROOT%{_libdir}/libpurple -xtype f -print | \
+        sed "s@^$RPM_BUILD_ROOT@@g" | \
+        grep -v /libbonjour.so | \
+        grep -v /libsilcpurple.so | \
+        grep -v /libsametime.so | \
+        grep -v /mono.so | \
+        grep -v /tcl.so | \
+        grep -v ".dll$" | \
+        grep -v ".tcl$" > %{name}-%{version}-coreplugins
+
+# files -f file can only take one filename :(
+cat %{name}.lang >> %{name}-%{version}-coreplugins
+
+%clean
+rm -rf %{buildroot}
+
+%pre
+if [ "$1" -gt 1 -a -n "`which gconftool-2 2>/dev/null`" ]; then
+    export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
+    gconftool-2 --makefile-uninstall-rule \
+        %{_sysconfdir}/gconf/schemas/gaim.schemas >/dev/null || :
+    killall -HUP gconfd-2 || :
+fi
+
+%post
+if [ -n "`which gconftool-2 2>/dev/null`" ]; then
+    export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
+    gconftool-2 --makefile-install-rule \
+        %{_sysconfdir}/gconf/schemas/gaim.schemas > /dev/null || :
+    killall -HUP gconfd-2 || :
+fi
+/sbin/ldconfig
+
+%preun
+if [ "$1" -eq 0 -a -n "`which gconftool-2 2>/dev/null`" ]; then
+    export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
+    gconftool-2 --makefile-uninstall-rule \
+      %{_sysconfdir}/gconf/schemas/gaim.schemas > /dev/null || :
+    killall -HUP gconfd-2 || :
+fi
+
+%postun -p /sbin/ldconfig
+
+%files -f %{name}-%{version}-coreplugins
+%defattr(-, root, root)
+
+%doc AUTHORS
+%doc COPYING
+%doc COPYRIGHT
+%doc ChangeLog
+%doc NEWS
+%doc README
+%doc README.SVN
+%doc doc/FAQ
+%doc doc/the_penguin.txt
+%doc %{_mandir}/man1/pidgin.*
+%doc %{_mandir}/man3*/*
+
+%dir %{_libdir}/pidgin
+%dir %{_libdir}/libpurple
+%attr(755, root, root) %{perl_vendorarch}/Purple*
+%attr(755, root, root) %{perl_vendorarch}/auto/Purple
+
+%{_bindir}/pidgin
+%{_datadir}/pixmaps/*
+%dir %{_datadir}/sounds/pidgin
+%{_datadir}/sounds/pidgin/*
+%{_datadir}/applications/*
+%{_libdir}/libpurple.so.*
+%{_sysconfdir}/gconf/schemas/gaim.schemas
+
+%if 0%{?_with_dbus:1}
+%{_bindir}/purple-client-example
+%{_bindir}/purple-remote
+%{_bindir}/purple-send
+%{_bindir}/purple-send-async
+%{_bindir}/purple-url-handler
+%{_libdir}/libpurple-client.so.*
+%{_datadir}/dbus-1/services/gaim.service
+%doc README.dbus
+%doc libpurple/purple-notifications-example
+%endif
+
+%files devel
+%defattr(-, root, root)
+
+%doc ChangeLog.API
+%doc HACKING
+%doc PLUGIN_HOWTO
+%doc PROGRAMMING_NOTES
+
+%dir %{_includedir}/finch
+%dir %{_includedir}/gnt
+%dir %{_includedir}/libpurple
+%dir %{_includedir}/pidgin
+%{_includedir}/finch/*.h
+%{_includedir}/gnt/*.h
+%{_includedir}/libpurple/*.h
+%{_includedir}/pidgin/*.h
+%{_libdir}/libpurple.so
+%{_libdir}/libgnt.so
+%{_libdir}/pkgconfig/purple.pc
+%{_libdir}/pkgconfig/pidgin.pc
+%{_libdir}/pkgconfig/gnt.pc
+%{_datadir}/aclocal/gaim.m4
+%if 0%{?_with_dbus:1}
+%{_libdir}/libpurple-client.so
+%endif
+
+%if 0%{?_with_howl:1} || 0%{?_with_avahi:1}
+%files bonjour
+%defattr(-, root, root)
+
+%{_libdir}/libpurple/libbonjour.*
+%endif
+
+%if 0%{?_with_meanwhile:1}
+%files meanwhile
+%defattr(-, root, root)
+
+%{_libdir}/libpurple/libsametime.*
+%endif
+
+%if 0%{?_with_mono:1}
+%files mono
+%defattr(-, root, root)
+
+%{_libdir}/libpurple/mono.so
+%{_libdir}/libpurple/*.dll
+%endif
+
+%if 0%{?_with_silc:1}
+%files silc
+%defattr(-, root, root)
+
+%{_libdir}/libpurple/libsilcpurple.*
+%endif
+
+%if 0%{?_with_tcl:1}
+%files tcl
+%defattr(-, root, root)
+
+%{_libdir}/libpurple/tcl.so
+%endif
+
+%if 0%{!?_without_text:1}
+%files -n finch
+%defattr(-, root, root)
+
+%doc %{_mandir}/man1/finch.*
+%{_bindir}/finch
+%{_libdir}/finch/*.so
+%{_libdir}/libgnt.so.*
+%endif
+
+%changelog
+* Sat Mar 24 2007 Stu Tomlinson <stu@nosnilmot.com>
+- Update to reflect renaming to pidgin/libpurple
+
+* Sun Oct  1 2006 Stu Tomlinson <stu@nosnilmot.com>
+- We can build with internal gadu gadu again, so bring it back into the
+  main package
+- Deal with gconf schame uninstallation on package upgrade and removal
+
+* Sun Aug 20 2006 Stu Tomlinson <stu@nosnilmot.com>
+- Make the gstreamer-devel dependency overridable with '--without-gstreamer'
+  to allow building on older distributions without suitable gstreamer
+
+* Tue Aug 15 2006 Mark Doliner <thekingant@users.sourceforge.net>
+- Add a BuildRequire for gstreamer-devel
+- Remove the BuildRequires for audiofile-devel and libao-devel
+
+* Mon May 8 2006 Mark Doliner <thekingant@users.sourceforge.net>
+- Add --with avahi option to compile the gaim-bonjour package against
+  Avahi's Howl compatibility layer
+
+* Wed Mar 29 2006 Stu Tomlinson <stu@nosnilmot.com>
+- Source RPM uses tar.bz2 now to save space
+- Update BuildRequires for new intltool dependencies
+- Add a --with perlmakehack option to allow builds to succeed on RH9
+- Add a --with gadugadu to build (separate) gaim-gadugadu package
+
+* Sat Dec 17 2005 Stu Tomlinson <stu@nosnilmot.com>
+- Add support for beta versions so the subsequent releases are seen as newer
+  by RPM
+- Split of sametime support to gaim-meanwhile
+- Use make DESTDIR=... instead of overloading prefix etc. when installing
+- Default build to include cyrus-sasl support in Jabber
+- Add --with dbus to build with DBUS support
+
+* Sun Dec 04 2005 Christopher O'Brien <siege@preoccupied.net>
+- Added obsoletes gaim-meanwhile
+
+* Sun Oct 30 2005 Stu Tomlinson <stu@nosnilmot.com>
+- Add separate gaim-bonjour package if built with --with-howl
+- Add separate gaim-mono package if built with --with-mono
+- Exclude some unwanted perl files
+
+* Sat Aug 20 2005 Stu Tomlinson <stu@nosnilmot.com>
+- Include libgaimperl.so
+- Include gaim.m4 in gaim-devel
+
+* Thu Apr 28 2005 Stu Tomlinson <stu@nosnilmot.com>
+- Use perl_vendorlib & perl_archlib for better 64bit compat (Jeff Mahoney)
+- Clean up Requires, most should be auto-detected
+- Restore gtkspell-devel build requirement (and add --without gtkspell option)
+- Fix Tcl build requirements to work across more distros
+- Fix SILC build requirements to work across more distros
+
+* Mon Oct 11 2004 John Jolly <john.jolly@gmail.com>
+- Added if "%{_vendor}" == "suse" to handle GnuTLS libraries for SuSE
+
+* Sat Oct  2 2004 Stu Tomlinson <stu@nosnilmot.com>
+- If --with tcl or silc are not specified, make sure the plugins don't
+  exist to prevent RPM complaining about unpackaged files
+
+* Tue Jun 29 2004 Ethan Blanton <eblanton@cs.ohiou.edu>
+- Change Tcl to use --with tcl, the same as SILC, and build a gaim-tcl
+  package if specified.
+
+* Thu Jun 24 2004 Mark Doliner <thekingant@users.sourceforge.net>
+- Add --with silc rebuild option for compiling a separate gaim-silc
+  RPM containing the silc protocol plugin (Stu Tomlinson).
+
+* Wed Jun 23 2004 Ethan Blanton <eblanton@cs.ohiou.edu>
+- Moved gaim headers and a pkgconfig configuration file into the
+  gaim-devel RPM (Stu Tomlinson).
+
+* Thu Jan 15 2004 Ethan Blanton <eblanton@cs.ohiou.edu>
+- Removed the manual strip command, as it seems to be unwarranted if
+  the necessary programs are properly installed.  (For me, this was
+  elfutils.)
+
+* Sun Jul 20 2003 Bjoern Voigt <bjoern@cs.tu-berlin.de>
+- Added pkgconfig build dependency.
+- if "%{_vendor}" != "MandrakeSoft" now also works with rpm 3.x.
+- Added Gaim-specific directories to list of Gaim's files.
+
+* Wed Jul 16 2003 Ethan Blanton <eblanton@cs.ohiou.edu>
+- Complete spec file rewrite to take advantage of "new" RPM features
+  and make things prettier.
+- Use system-supplied %%{_prefix}, %%{_datadir}, etc. rather than
+  attempt to define our own.
--- a/pidgin/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/pidgin/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -4,6 +4,7 @@
 		getopt1.c \
 		Makefile.mingw \
 		pidgin.pc.in \
+		pidgin-uninstalled.pc.in \
 		win32/IdleTracker/Makefile.mingw \
 		win32/IdleTracker/idletrack.c \
 		win32/IdleTracker/idletrack.h \
--- a/pidgin/gtkconv.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/pidgin/gtkconv.c	Sat Mar 24 22:55:24 2007 +0000
@@ -3488,7 +3488,7 @@
 	g_object_unref(pixbuf);
 
 	if (flags && purple_conv_chat_is_user_ignored(chat, name)) {
-		filename = g_build_filename(DATADIR, "pixmaps", "purple", "status", "default", "ignored.png", NULL);
+		filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "status", "default", "ignored.png", NULL);
 		pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
 		g_free(filename);
 		scale2 = gdk_pixbuf_scale_simple(pixbuf, 15, 15, GDK_INTERP_BILINEAR);
--- a/pidgin/gtkdialogs.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/pidgin/gtkdialogs.c	Sat Mar 24 22:55:24 2007 +0000
@@ -332,7 +332,7 @@
 	/* Generate a logo with a version number */
 	logo = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 	gtk_widget_realize(logo);
-	filename = g_build_filename(DATADIR, "pixmaps", "purple", "logo.png", NULL);
+	filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "logo.png", NULL);
 	pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
 	g_free(filename);
 	pidgin_logo_versionize(&pixbuf, logo);
--- a/pidgin/gtkdnd-hints.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/pidgin/gtkdnd-hints.c	Sat Mar 24 22:55:24 2007 +0000
@@ -122,7 +122,7 @@
 	for (i = 0; hint_windows[i].filename != NULL; i++) {
 		gchar *fname;
 
-		fname = g_build_filename(DATADIR, "pixmaps", "purple",
+		fname = g_build_filename(DATADIR, "pixmaps", "pidgin",
 								 hint_windows[i].filename, NULL);
 
 		hint_windows[i].widget = dnd_hints_init_window(fname);
--- a/pidgin/gtkstatusbox.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/pidgin/gtkstatusbox.c	Sat Mar 24 22:55:24 2007 +0000
@@ -298,23 +298,22 @@
 
 static void
 statusbox_got_url(PurpleUtilFetchUrlData *url_data, gpointer user_data,
-                const gchar *themedata, size_t len, const gchar *error_message, 
-		PidginStatusBox *status_box)
+                const gchar *themedata, size_t len, const gchar *error_message)
 {
-        FILE *f;
-        gchar *path;
+	FILE *f;
+	gchar *path;
 
-        if ((error_message != NULL) || (len == 0))
-                return;
+	if ((error_message != NULL) || (len == 0))
+		return;
 
-        f = purple_mkstemp(&path, TRUE);
-        fwrite(themedata, len, 1, f);
-        fclose(f);
+	f = purple_mkstemp(&path, TRUE);
+	fwrite(themedata, len, 1, f);
+	fclose(f);
 
-	icon_choose_cb(path, status_box);
+	icon_choose_cb(path, user_data);
 
-        g_unlink(path);
-        g_free(path);
+	g_unlink(path);
+	g_free(path);
 }
 
 
@@ -322,7 +321,7 @@
 statusbox_uri_handler(const char *proto, const char *cmd, GHashTable *params, void *data)
 {
 	const char *src;
-printf("%s %s\n", proto, cmd);
+
 	if (g_ascii_strcasecmp(proto, "aim"))
 		return FALSE;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/pidgin-uninstalled.pc.in	Sat Mar 24 22:55:24 2007 +0000
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+datadir=@datadir@
+sysconfdir=@sysconfdir@
+
+Name: Pidgin
+Description: Pidgin is a GTK2-based instant messenger application.
+Version: @VERSION@
+Requires: gtk+-2.0 purple
+Cflags: -I${pc_top_builddir}/${pcfiledir}
--- a/pidgin/pidgin.pc.in	Fri Mar 23 14:45:11 2007 +0000
+++ b/pidgin/pidgin.pc.in	Sat Mar 24 22:55:24 2007 +0000
@@ -4,10 +4,10 @@
 includedir=@includedir@
 datadir=@datadir@
 sysconfdir=@sysconfdir@
- 
+
 Name: Pidgin
 Description: Pidgin is a GTK2-based instant messenger application.
 Version: @VERSION@
-Requires: glib-2.0 gtk+-2.0 purple
+Requires: gtk+-2.0 purple
 Cflags: -I${includedir}/pidgin
 
--- a/pidgin/pixmaps/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/pidgin/pixmaps/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -10,7 +10,7 @@
 		edit.png			\
 		pidgin.png			\
 		gaim.svg			\
-		info.png 			\
+		info.png			\
 		insert-image.png		\
 		insert-image-small.png		\
 		insert-link-small.png		\
@@ -23,7 +23,7 @@
 		pause.png			\
 		phone.png		        \
 		send-im.png			\
-		status-online.png  		\
+		status-online.png		\
 		status-offline.png		\
 		status-away.png			\
 		status-invisible.png		\
@@ -46,8 +46,9 @@
 		text_smaller.png		\
 		typed.png			\
 		typing.png			\
+		window-icon.png			\
 		Makefile.mingw			\
-		gaim.ico			
+		gaim.ico
 
 
 pidginbuttonpixdir = $(datadir)/pixmaps/pidgin/buttons
--- a/pidgin/pixmaps/buddy_icons/qq/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/pidgin/pixmaps/buddy_icons/qq/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -100,6 +100,6 @@
 	qq_99.png \
 	qq_100.png
 
-qqbuddyiconspixdir = $(datadir)/pixmaps/gaim/buddy_icons/qq
+qqbuddyiconspixdir = $(datadir)/pixmaps/purple/buddy_icons/qq
 
 qqbuddyiconspix_DATA = $(EXTRA_DIST)
--- a/pidgin/pixmaps/emblems/16/scalable/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/pidgin/pixmaps/emblems/16/scalable/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -1,9 +1,8 @@
-EXTRA_DIST = 	aol-client.svg \
+EXTRA_DIST =	aol-client.svg \
 		blocked.svg \
 		bot.svg \
 		external.svg \
 		female.svg \
-		founder.svg \
 		free-for-chat.svg \
 		game.svg \
 		male.svg \
--- a/pidgin/pixmaps/emotes/none/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/pidgin/pixmaps/emotes/none/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -1,5 +1,5 @@
-gaimsmileypixdir = $(datadir)/pixmaps/pidgin/emotes/none
-gaimsmileypix_DATA = theme 
+pidginsmileypixdir = $(datadir)/pixmaps/pidgin/emotes/none
+pidginsmileypix_DATA = theme
 
-EXTRA_DIST = $(gaimsmileypix_DATA) \
+EXTRA_DIST = $(pidginsmileypix_DATA) \
 	Makefile.mingw
--- a/pidgin/pixmaps/status/default/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/pidgin/pixmaps/status/default/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -42,6 +42,6 @@
 	yahoo.png \
 	zephyr.png
 
-gaimstatuspixdir = $(datadir)/pixmaps/gaim/status/default
+pidginstatuspixdir = $(datadir)/pixmaps/pidgin/status/default
 
-gaimstatuspix_DATA = $(EXTRA_DIST)
+pidginstatuspix_DATA = $(EXTRA_DIST)
--- a/pidgin/pixmaps/tray/16/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/pidgin/pixmaps/tray/16/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -6,13 +6,7 @@
 		tray-offline.png \
 		tray-online.png
 
-EXTRA_DIST = 	tray-away.ico \
-		tray-busy.ico \
-		tray-connecting.ico \
-		tray-extended-away.ico \
-		tray-message.ico \
-		tray-offline.ico \
-		tray-online.ico 
+EXTRA_DIST = $(TRAY_ICONS)
 
 pidgintraypixdir = $(datadir)/pixmaps/pidgin/tray/16
 pidgintraypix_DATA = $(TRAY_ICONS)
--- a/pidgin/pixmaps/tray/22/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/pidgin/pixmaps/tray/22/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -6,13 +6,14 @@
 		tray-offline.png \
 		tray-online.png
 
-EXTRA_DIST = 	tray-away.ico \
+EXTRA_DIST =	$(TRAY_ICONS) \
+		tray-away.ico \
 		tray-busy.ico \
-		tray-connecting.ico \
 		tray-extended-away.ico \
 		tray-message.ico \
 		tray-offline.ico \
-		tray-online.ico 
+		tray-online.ico
+#		tray-connecting.ico
 
 pidgintraypixdir = $(datadir)/pixmaps/pidgin/tray/22
 pidgintraypix_DATA = $(TRAY_ICONS)
--- a/pidgin/plugins/gevolution/Makefile.am	Fri Mar 23 14:45:11 2007 +0000
+++ b/pidgin/plugins/gevolution/Makefile.am	Sat Mar 24 22:55:24 2007 +0000
@@ -1,4 +1,4 @@
-plugindir = $(libdir)/gaim
+plugindir = $(libdir)/pidgin
 
 gevolution_la_LDFLAGS = -module -avoid-version
 
--- a/pidgin/plugins/timestamp_format.c	Fri Mar 23 14:45:11 2007 +0000
+++ b/pidgin/plugins/timestamp_format.c	Sat Mar 24 22:55:24 2007 +0000
@@ -131,13 +131,13 @@
 	PURPLE_PLUGIN_MAGIC,
 	PURPLE_MAJOR_VERSION,
 	PURPLE_MINOR_VERSION,
-	PURPLE_PLUGIN_STANDARD,                             /**< type           */
+	PURPLE_PLUGIN_STANDARD,                           /**< type           */
 	PIDGIN_PLUGIN_TYPE,                               /**< ui_requirement */
 	0,                                                /**< flags          */
 	NULL,                                             /**< dependencies   */
-	PURPLE_PRIORITY_DEFAULT,                            /**< priority       */
+	PURPLE_PRIORITY_DEFAULT,                          /**< priority       */
 
-	NULL,                                             /**< id             */
+	"core-timestamp_format",                          /**< id             */
 	N_("Message Timestamp Formats"),                  /**< name           */
 	VERSION,                                          /**< version        */
 	                                                  /**  summary        */
@@ -147,7 +147,7 @@
 	   "conversation and logging message timestamp "
 	   "formats."),
 	"Richard Laager <rlaager@pidgin.im>",             /**< author         */
-	PURPLE_WEBSITE,                                     /**< homepage       */
+	PURPLE_WEBSITE,                                   /**< homepage       */
 
 	plugin_load,                                      /**< load           */
 	plugin_unload,                                    /**< unload         */
--- a/po/POTFILES.in	Fri Mar 23 14:45:11 2007 +0000
+++ b/po/POTFILES.in	Sat Mar 24 22:55:24 2007 +0000
@@ -1,12 +1,13 @@
-pidgin.desktop.in
+finch/finch.c
 finch/gntaccount.c
 finch/gntblist.c
 finch/gntconn.c
 finch/gntconv.c
 finch/gntdebug.c
-finch/gntgaim.c
+finch/gntft.c
 finch/gntnotify.c
 finch/gntplugin.c
+finch/gntpounce.c
 finch/gntprefs.c
 finch/gntrequest.c
 finch/gntstatus.c
@@ -25,73 +26,16 @@
 finch/libgnt/gnttree.c
 finch/libgnt/gntutils.c
 finch/libgnt/gntwidget.c
+finch/plugins/gntclipboard.c
 finch/plugins/gntgf.c
 finch/plugins/gnthistory.c
 finch/plugins/lastlog.c
-pidgin/eggtrayicon.c
-pidgin/gaimcombobox.c
-pidgin/gaimstock.c
-pidgin/gtkaccount.c
-pidgin/gtkblist.c
-pidgin/gtkcellview.c
-pidgin/gtkconn.c
-pidgin/gtkconv.c
-pidgin/gtkdebug.c
-pidgin/gtkdialogs.c
-pidgin/gtkdocklet.c
-pidgin/gtkexpander.c
-pidgin/gtkft.c
-pidgin/gtkimhtml.c
-pidgin/gtkimhtmltoolbar.c
-pidgin/gtklog.c
-pidgin/gtkmain.c
-pidgin/gtknotify.c
-pidgin/gtkplugin.c
-pidgin/gtkpounce.c
-pidgin/gtkprefs.c
-pidgin/gtkprivacy.c
-pidgin/gtkrequest.c
-pidgin/gtkroomlist.c
-pidgin/gtksavedstatuses.c
-pidgin/gtksound.c
-pidgin/gtkstatusbox.c
-pidgin/gtkutils.c
-pidgin/gtkwhiteboard.c
-pidgin/plugins/cap/cap.c
-pidgin/plugins/contact_priority.c
-pidgin/plugins/convcolors.c
-pidgin/plugins/extplacement.c
-pidgin/plugins/gaiminc.c
-pidgin/plugins/gaimrc.c
-pidgin/plugins/gestures/gestures.c
-pidgin/plugins/gevolution/add_buddy_dialog.c
-pidgin/plugins/gevolution/assoc-buddy.c
-pidgin/plugins/gevolution/eds-utils.c
-pidgin/plugins/gevolution/gevolution.c
-pidgin/plugins/gevolution/gevo-util.c
-pidgin/plugins/gevolution/new_person_dialog.c
-pidgin/plugins/gtk-signals-test.c
-pidgin/plugins/history.c
-pidgin/plugins/iconaway.c
-pidgin/plugins/mailchk.c
-pidgin/plugins/markerline.c
-pidgin/plugins/musicmessaging/musicmessaging.c
-pidgin/plugins/notify.c
-pidgin/plugins/raw.c
-pidgin/plugins/relnot.c
-pidgin/plugins/spellchk.c
-pidgin/plugins/ticker/ticker.c
-pidgin/plugins/timestamp.c
-pidgin/plugins/timestamp_format.c
-pidgin/plugins/xmppconsole.c
-pidgin/plugins/win32/transparency/win2ktrans.c
-pidgin/plugins/win32/winprefs/winprefs.c
 libpurple/account.c
 libpurple/blist.c
 libpurple/connection.c
 libpurple/conversation.c
+libpurple/dbus-server.c
 libpurple/desktopitem.c
-libpurple/dbus-server.c
 libpurple/dnsquery.c
 libpurple/ft.c
 libpurple/gconf/gaim.schemas.in
@@ -106,6 +50,7 @@
 libpurple/plugins/idle.c
 libpurple/plugins/ipc-test-client.c
 libpurple/plugins/ipc-test-server.c
+libpurple/plugins/joinpart.c
 libpurple/plugins/log_reader.c
 libpurple/plugins/mono/loader/mono.c
 libpurple/plugins/newline.c
@@ -201,5 +146,62 @@
 libpurple/server.c
 libpurple/status.c
 libpurple/util.c
-
- 	  	 
+pidgin.desktop.in
+pidgin/eggtrayicon.c
+pidgin/gtkaccount.c
+pidgin/gtkblist.c
+pidgin/gtkcellview.c
+pidgin/gtkconn.c
+pidgin/gtkconv.c
+pidgin/gtkdebug.c
+pidgin/gtkdialogs.c
+pidgin/gtkdocklet.c
+pidgin/gtkexpander.c
+pidgin/gtkft.c
+pidgin/gtkimhtml.c
+pidgin/gtkimhtmltoolbar.c
+pidgin/gtklog.c
+pidgin/gtkmain.c
+pidgin/gtknotify.c
+pidgin/gtkplugin.c
+pidgin/gtkpounce.c
+pidgin/gtkprefs.c
+pidgin/gtkprivacy.c
+pidgin/gtkrequest.c
+pidgin/gtkroomlist.c
+pidgin/gtksavedstatuses.c
+pidgin/gtksound.c
+pidgin/gtkstatusbox.c
+pidgin/gtkutils.c
+pidgin/gtkwhiteboard.c
+pidgin/pidgincombobox.c
+pidgin/pidginstock.c
+pidgin/plugins/cap/cap.c
+pidgin/plugins/contact_priority.c
+pidgin/plugins/convcolors.c
+pidgin/plugins/extplacement.c
+pidgin/plugins/gaiminc.c
+pidgin/plugins/gaimrc.c
+pidgin/plugins/gestures/gestures.c
+pidgin/plugins/gevolution/add_buddy_dialog.c
+pidgin/plugins/gevolution/assoc-buddy.c
+pidgin/plugins/gevolution/eds-utils.c
+pidgin/plugins/gevolution/gevolution.c
+pidgin/plugins/gevolution/gevo-util.c
+pidgin/plugins/gevolution/new_person_dialog.c
+pidgin/plugins/gtk-signals-test.c
+pidgin/plugins/history.c
+pidgin/plugins/iconaway.c
+pidgin/plugins/mailchk.c
+pidgin/plugins/markerline.c
+pidgin/plugins/musicmessaging/musicmessaging.c
+pidgin/plugins/notify.c
+pidgin/plugins/raw.c
+pidgin/plugins/relnot.c
+pidgin/plugins/spellchk.c
+pidgin/plugins/ticker/ticker.c
+pidgin/plugins/timestamp.c
+pidgin/plugins/timestamp_format.c
+pidgin/plugins/win32/transparency/win2ktrans.c
+pidgin/plugins/win32/winprefs/winprefs.c
+pidgin/plugins/xmppconsole.c