Mercurial > pidgin.yaz
changeset 15885:c6e563dfaa7a
More s/gaim/pidgin/ and s/gaim/purple/ and make the RPM spec file work a bit
line wrap: on
line diff
--- a/Makefile.am Sat Mar 24 17:07:17 2007 +0000 +++ b/Makefile.am Sat Mar 24 17:51:05 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,16 +24,13 @@ 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
--- a/configure.ac Sat Mar 24 17:07:17 2007 +0000 +++ b/configure.ac Sat Mar 24 17:51:05 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 Sat Mar 24 17:07:17 2007 +0000 +++ b/finch/Makefile.am Sat Mar 24 17:51:05 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 Sat Mar 24 17:07:17 2007 +0000 +++ b/finch/libgnt/wms/Makefile.am Sat Mar 24 17:51:05 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 Sat Mar 24 17:07:17 2007 +0000 +++ b/finch/plugins/Makefile.am Sat Mar 24 17:51:05 2007 +0000 @@ -9,7 +9,7 @@ gnthistory.la \ gntlastlog.la -plugindir = $(libdir)/gaim +plugindir = $(libdir)/finch gntgf_la_SOURCES = gntgf.c gnthistory_la_SOURCES = gnthistory.c
--- a/gaim.pc.in Sat Mar 24 17:07:17 2007 +0000 +++ b/gaim.pc.in Sat Mar 24 17:51:05 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 Sat Mar 24 17:07:17 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 Sat Mar 24 17:07:17 2007 +0000 +++ b/libpurple/Makefile.am Sat Mar 24 17:51:05 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/gaim-client-example.c Sat Mar 24 17:07:17 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 Sat Mar 24 17:07:17 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 Sat Mar 24 17:07:17 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 Sat Mar 24 17:07:17 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¶m2=value2&... - FunctionName?param1=value1¶m2=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 Sat Mar 24 17:07:17 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 Sat Mar 24 17:07:17 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 Sat Mar 24 17:07:17 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 Sat Mar 24 17:07:17 2007 +0000 +++ b/libpurple/gconf/gaim.schemas.in Sat Mar 24 17:51:05 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/plugins/perl/Makefile.am Sat Mar 24 17:07:17 2007 +0000 +++ b/libpurple/plugins/perl/Makefile.am Sat Mar 24 17:51:05 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 Sat Mar 24 17:07:17 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 17:51:05 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/protocols/silc/Makefile.am Sat Mar 24 17:07:17 2007 +0000 +++ b/libpurple/protocols/silc/Makefile.am Sat Mar 24 17:51:05 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 +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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/purple-client-example.c Sat Mar 24 17:51:05 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 17:51:05 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 17:51:05 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 17:51:05 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¶m2=value2&... + FunctionName?param1=value1¶m2=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 17:51:05 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 17:51:05 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 17:51:05 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 17:51:05 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 Sat Mar 24 17:07:17 2007 +0000 +++ b/libpurple/tests/Makefile.am Sat Mar 24 17:51:05 2007 +0000 @@ -14,6 +14,7 @@ check_libpurple_CFLAGS=\ @CHECK_CFLAGS@ \ $(GLIB_CFLAGS) \ + $(DEBUG_CFLAGS) \ -I.. \ -DBUILDDIR=\"$(top_builddir)\"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin.spec.in Sat Mar 24 17:51:05 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 Sat Mar 24 17:07:17 2007 +0000 +++ b/pidgin/Makefile.am Sat Mar 24 17:51:05 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 Sat Mar 24 17:07:17 2007 +0000 +++ b/pidgin/gtkconv.c Sat Mar 24 17:51:05 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 Sat Mar 24 17:07:17 2007 +0000 +++ b/pidgin/gtkdialogs.c Sat Mar 24 17:51:05 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 Sat Mar 24 17:07:17 2007 +0000 +++ b/pidgin/gtkdnd-hints.c Sat Mar 24 17:51:05 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);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/pidgin-uninstalled.pc.in Sat Mar 24 17:51:05 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 Sat Mar 24 17:07:17 2007 +0000 +++ b/pidgin/pidgin.pc.in Sat Mar 24 17:51:05 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/buddy_icons/qq/Makefile.am Sat Mar 24 17:07:17 2007 +0000 +++ b/pidgin/pixmaps/buddy_icons/qq/Makefile.am Sat Mar 24 17:51:05 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 Sat Mar 24 17:07:17 2007 +0000 +++ b/pidgin/pixmaps/emblems/16/scalable/Makefile.am Sat Mar 24 17:51:05 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 Sat Mar 24 17:07:17 2007 +0000 +++ b/pidgin/pixmaps/emotes/none/Makefile.am Sat Mar 24 17:51:05 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 Sat Mar 24 17:07:17 2007 +0000 +++ b/pidgin/pixmaps/status/default/Makefile.am Sat Mar 24 17:51:05 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)