Gtk+/Win32 amateur release engeneering

I’m in the middle of a long weekend, and without too many things to do, so I’ve spending it trying something that I was looking forward to do from some time now. Build GTK+ and all its dependencies from scratch for win32.

Since I started all this PyGTK on Windows thing, one of the very first problems that I realized is, GTK+ redistribution on windows for third party apps just sucks. We cannot expect Windows users to take care on the GTK+ runtime versions they already have installed (we cannot expect that from Linux users also, but package managers already do that job). However, it’s not trivial to build gtk+ for windows (now I know how much pain it is), so most third party apps just ask users to install the GTK+ runtime, or package the runtime installer inside the application installer, like Gaim (sorry, pidgim) does for instance. I can imagine most users saying, what the hell is GTK+ and why are you asking me to install it? (You can replace the ‘GTK+’ string with ‘Java’, ‘Python’, ‘Mono’, it’s the same problem for all them).

Layout idea stolen from GMAE 😉

So my goal is to find a way that anyone can build and package their own tool chain, but avoiding the pain of dealing with configure and cross building issues. For that purposes I’ve created a jhbuildrc  so people just grab it and add their own tool chain by inheriting from the standard module set. And after 3 days of burning out my cpu and patching weird packages like zlib or jpeg, you can get a fresh jhbuildrc that only needs jhbuild and mingw32 to be installed.

My personal challenge now is produce an installable package runtime like the gladewin32 one, but releasing the NSiS scripts so anyone can build their own installers. This could be really helpful for projects like Pidgin so they don’t need third party installers.

Right now I’m wondering to automate the override of the unneeded parts, like the whole gettext stuff. This is really easy with the {PANGO, ATK+, GTK+} set since tml already has zip builders that only gets the imprescindible stuff. But I need to figure out what can be done with the underlaying bits.

Now I wonder where to put all this stuff since I would like to keep them on a visible place so people don’t loose their time trying to do what I did, I will try to ask to the release team what do they think. By the way, even after all the pain, is impressive to see how everything was built successfully, kudos to tml for the huge efforts for port and support the whole stack on the Win32 platform.


9 thoughts on “Gtk+/Win32 amateur release engeneering

  1. Cool picture! And thanks for your work on this and the PyGTK website, I think it’s important that someone does this stuff. But why do you write NSIS with a lowercase “i” ? 🙂


  2. I’ve been playing around with building stuff on Windows on-and-off for a while. For whatever reason, I actually found that building things using tml’s pre-build zip files was easier via cross-compiling, than natively with mingw.
    Using jhbuild was on my list of things to try some time, but now I don’t have to. Woo!
    I’ve always wondered if having dpkg/rpm on windows would be a good thing or not.


  3. @James:
    I’m glad to have helped you! You’re welcome to join the gtk-win32 gnome mailing list if you think you can help us to do a sane and flexible windows runtime releases.
    On the dpkg/rpm side, you already have .msi files, which is the windows version of dpkg/rpm, the problem is that the tools for creating them are not very popular and easy to deal with, although microsoft has released one as free software: WiX.
    I will have a look at it later but now I would like to focus on create an installer like the gladewin32 one. And once there, start improving and going further.


  4. Hello Alberto,
    I’m very pleased that someone with a voice onb p.g.o noticed the difficulty of having gtk+ applications running on Windows; each application comes with it’s version of gtk+, and you’re likely to broke something when you install a new software.
    I talked with some people about this problem in GUADEC 2005. I wanted to request to build all gtk+ software, under a Foundation validated stack. Not being a developper I was not able to build this project.


  5. I appreciate your work. You are helping a lot of us get into open source. I think it’s a big deal.
    thank you!


  6. Please work with the Gimp and Inkscape guys to produce a single common shared gtk+ msi/exe runtime install package.
    You may think asking to install a separate gtk+ thing confuses users but having a dozen gtk apps install a dozen conflicting and slightly different runtimes will confuse them more.
    Don’t *assume* people want a single install file at all costs.
    People hate conflicts more than separate install packages.


  7. Please not yet another windows installer. There is only one correct installer package format for windows and that is a .msi file. If you’re going to the bother of integrating your installer source into the buildtree you may as well do it properly with WIX Msi’s are the correct format because they very easy for windows admins to remote install to thousands of pc’s. They can only do this with msi installers not exe’s. If you only released an exe installer then other projects (Gaim for example) couldn’t release a msi because it would depend on your exe and not be remote deployable. Have a read at


  8. Thanks all for the good feedback 🙂
    WiX is free software, but it depends on Windows and .NET, I build this stuff using linux for some resource problems, I don’t have money for another workstation. And I’m not about spend my whole day on windows just to package this, others have to do that, I can do the build stuff and give anyone the binaries in the form that they like, but I’m not going to spent too much time running windows.
    Maybe it sounds rude, but I have tools on linux that I cannot use on windows.


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