This blog will track the development of Vulture: a native Win32 front-end for the multi-protocol instant-messaging library libpurple, which underlies Pidgin. The project is part of Google’s Summer of Code 2009, and will be mentored by John Bailey, to both of whom I am very grateful.

There is already a port of Pidgin to Windows which works perfectly adequately for most purposes. It uses the GTK+ toolkit, however, which brings with it some problems: some minor, such as widgets looking noticeably different from native ones; others more substantial, such as the lack of support for IMEs. There are also some UI conventions used by Pidgin itself that are not often seen in Windows applications. Resolving these shortcomings is the main reason for this project’s existence.

Vulture will be written in C, using the Win32 API. There is also another Win32 libpurple UI Summer of Code project this year, being developed by Wade Fagen, which will take a higher-level approach.

The mainstay of this blog will be progress reports, with occasional articles taking a detailed look at some aspect of development. Comments are welcome.


13 comments so far

  1. Ibrahim on

    Could you provide instructions on how to compile this for those following along at home? Do you just use the usual setup for building Pidgin on Windows?

  2. Gregor Dick on

    Yes, it’s the usual setup: running `make install’ will build Vulture, too. It’s still very rough-cut — you’ll need to arrange the glib binaries yourself, for example — but I’ll tidy it up and document it all in due course.

    • Ibrahim on

      Hmm, I can’t seem to get it to build, I think you forgot to commit vulture.h to monotone? At the least, I don’t seem to have one from checking it out through monotone, and it seems like that’s preventing it from compiling.

      I’m also sort of trying to get Pidgin to build without Cygwin and only msys/mingw, but that’s another story. But what do you mean by arranging glib binaries? I’ve got glib DLLs scattered around my system, I’m sure, but I don’t know whether there’s any specific place I would have needed to put them.

      • Gregor Dick on

        Ah, sorry about that. I\’ve fixed that; thanks for pointing it out.

        The glib binaries need to be in the DLL search path. Vulture doesn\’t do any of the trickery that Pidgin does to load them from the GTK installation directory.

        Cygwin shouldn\’t be necessary for Vulture itself, so it shouldn\’t add any headaches above what you\’d otherwise have.

  3. Ibrahim on

    Hmm, now I’m having problems with windres.exe, but that’s OK. Right now it’s complaining about not being able to find .\manifest.xml. What version of windres are you using? I think the winpidgin build fetcher script downloaded GNU windres 2.17.50 20060824 for me, and then I realized that I already had a newer version of mingw so I got rid of the one in the win32-dev directory, and tried with GNU windres (GNU Binutils)

    With the older version, I got a completely different error which I can’t find right now; with the newer version, I get another error when building pidgin from the vulture branch, but if I just try to build vulture I only get the error about manifest.xml Hmm, this is all very odd, I’ll try to figure something out. I assume it all builds properly for you? I guess there are definitely good chances that there’s a problem on my end, so I wouldn’t worry about it too much, but if there are other things missing from monotone, that would be cool.

    • Ibrahim on

      Oh, the error with the older version of windres is this:

      C:\cygwin\home\Ibrahim\win32-dev\mingw\bin\windres.exe: vulture-res.rc:54: syntax error

      Not very specific.

      • Gregor Dick on

        Sorry about that, it was another file I forgot to check in. It’s fixed now.

        There’s a bug in recent verions of windres that causes it not to handle string literal contatenation correctly in some cases, which doesn’t affect Vulture but does affect Pidgin. I worked around it temporarily by editing the automatically-generated offending resource script.

        As a first guess about the syntax error, I’d wonder whether your Win32 headers were up-to-date.

  4. Ibrahim on

    Awesome, I got it to build properly. Sorry for bugging you, although I suppose you would have wanted to check those things anyway.

    • Ibrahim on

      Hmm, it doesn’t quite run properly, I’ve copied a bunch of DLLs to the directory and it crashes normally, unless I run it through gdb and then I see that it’s still missing some libraries, but at the least I can see the GUI. I’ve got the following dlls in my directory, probably more than necessary but I just dumped everything in there that I could think of.

      $ ls | grep .dll

      • Ibrahim on

        Mmm, I actually threw in a few more DLLs from glib and it seems to run now without running through gdb, although it still doesn’t log me in yet, but maybe that’s expected. It’s a good start though.

    • Gregor Dick on

      No trouble at all — it’s very helpful, in fact, since otherwise I’d have a tree that wouldn’t build for who-knows how long.

      The only libraries that should be needed are libglib-2.0-0.dll and libgthread-2.0-0.dll.

      Logging in should work, but you need to enable the accounts first in the account manager dialogue (Accounts->Manage Accounts). You can’t initiate conversations yet, but you can receive messages and thereafter reply to them.

  5. Bogdan on


    Please tell me how could I get Pidgin version which contains Vulture?

    Any help will be greatly appreciated.:)

    • Gregor Dick on


      There are no binary releases yet, but the (unstable) source is available in the mtn repository at

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: