Cygwin Gnome

Patches to make DLL builds of the Gnome 1.4 libraries and desktop on Cygwin

Patches for a few applications are now also included (see Applications below)

Last updated: 4 March 2003    See here for the latest News

It is advisable to re-visit this page when building gnome on cygwin, or before reporting any problems, to make sure you have the latest patches and hints.
If you have visited this page previously in MS Internet Explorer, you may have to hold down the Control key while clicking the Refresh button to get the latest update.


Introduction

This site is the result of a project to get the Gnome 1.4 desktop working on Windows, using Cygwin as a porting tool and user environment. This project is now finished, I am unlikely to do much more work on it; and although the port is far from complete the following components are working/workable with NT/2K/XP on NTFS:

In addition, some applications have been compiled successfully with these libraries and are running on this desktop, including dillo, ee, ggv, ghex, gnome-pim, gnotepad+, gnumeric, sylpheed, and xchat. Note that these applications have not been updated or tested for some time, and may not all work with the latest cygwin gnome packages

Although performance will never approach linux, or even an apology for linux, it is still quite useable. That said, this is still beta quality with many rough edges. Volunteers to move this work forward are very welcome.

Lack of webspace, bandwidth, and resources mean that I can only publish source-code patches, not binaries. Therefore you will have to obtain the original sources and compile them yourself. Gnome is a very large package, and so this is only really suitable for people with experience with cygwin, cygwin-xfree86, and gnome.


Original Sources

Gnome:http://www.gnome.org/
Cygwin:http://www.cygwin.com/
Gmp:http://www.swox.com/gmp/
Sawfish (and librep/rep-gtk):http://sawmill.sourceforge.net/

Other Cygwin Gnome Sites

statically linked libs and apps:http://www.geocities.co.jp/SiliconValley/1596/en/cygwin.html
screensavers and more:http://lassauge.free.fr/cygwin/

Usage

This work was done on Windows 2000, but the patched sources should also build OK on NT and XP. The build has not yet been tested on Windows 9x/Me. The system builds and runs very well on my Windows 2000/NTFS laptop.

The patches do not attempt to deal with the text file/binary file issue. I keep all my gnome data files in unix format (\n line-endings) and all my mounts are in binary mode. Volunteers to extend this work in that direction are very welcome.

You will first need to install cygwin, including the cygwin-xfree86 packages. See the links at the top of this page for instructions and download information. Use a current release of Cygwin: I last did a build with version 1.3.20-1 of cygwin1.dll, with the full set of cygwin packages as updated on 1 March 2003. Note that gnome definitely does not work with cygwin release 1.3.13 to 1.3.15 inclusive, as these releases all have a fatal bug in their implementation of poll().

Download the Gnome sources from your favourite gnome mirror. You will generally find the sources in the "GNOME/sources" directory of the mirror. Make sure you get the correct version to match the patch. (Note that the 1.4 release of gnome is no longer the latest).

For most packages, the default configure is sufficient. See the "Notes" column in the following Patches table for exceptions to this. I recommend that the Gnome packages are installed into a Gnome-specific root, such as /opt/gnome, rather than the default /usr/local, in order to simplify maintenance (as a last resort when you are having problems, at least then you have the option of rm -rf). Make sure that the "bin" directory of the install root of each package is in your PATH before you configure each package; also you need to have /usr/X11R6/bin in your PATH.

I have put together a single download file that contains all the patches and the script that I use to automate the build. I strongly recommend that you use this automated build, and accept all its default configuration, for your first attempt; this will give you the best chance of success-first-time.


Disclaimers

  1. These patches are supplied completely without warranty or any implied fitness for purpose. They may or may not damage your system or your life beyond repair. Download them or use them entirely at your own risk.
  2. I am not able to offer any support for these patches, Gnome, Cygwin, or anything else mentioned here or elsewhere. Please treat these patches as a work-in-progress (see Disclaimer number 1) and view them as a starting point, not a finished article. If your system is identical to mine, then Gnome will build exactly as it did for me. If your system is in any way different to mine (and it certainly will be) then expect to do some problem-solving of your own.
  3. The functionality provided by building gnome with these patches is far from complete. But its a start, so I think its worth publishing.

Notes

 

ben@thebeach ~/gnome
$ find /usr/bin /usr/lib /usr/X11R6/bin /opt/gnome/bin /opt/gnome/lib -name "*.dll" -print | sed -e '/cygwin1.dll$/ d' > /tmp/dll.lst
ben@thebeach ~/gnome $ rebase -v -d -b 0x70000000 -o 0x10000 -T /tmp/dll.lst
ben@thebeach ~/gnome $ rm /tmp/dll.lst


The Patches

All the patches to build the basic gnome desktop are contained in the single .tar.bz2 file, together with a script to automate the configuration and build process:

cygwin-gnome-patches.tar.bz2 (108k)

See the README file within the archive for instructions.


Manual Builds

Alternatively, obtain individual patches from the following tables (use the right-mouse button and select "Save Target As").

Each package should be built and installed in the order given in these tables. The configure command given is the one that I use which "works for me" (tm). Try "CFLAGS=-g" for debugging; or use configure --help to find other options.

You should at least read the files INSTALL and README in each package for special instructions.

Pre-requisite libraries

PackagePatch FileNotes
cygextras-0.3.3 cygextras-0.3.3.tar.bz2 cygextras is a dll containing various functions required by Gnome modules but missing from cygwin1.dll. The source code for these functions was gleaned by me from various sources. Currently comprises check_ntsec() needed by ORBit, and getdelim() and needed by gnome-vfs.
CFLAGS=-O2 ./configure --prefix=/opt/gnome
gmp-4.1 gmp-4.1-cygwin.patch Required for sawfish
make check fails because the Makefiles are not patched to find the test programs correctly. You can run the tests manually, however. One test fails, but this does not appear to affect sawfish.
CFLAGS=-O2 ./configure --prefix=/opt/gnome --enable-shared --disable-static
librep-0.15.2 librep-0.15.2-cygwin.patch Required for sawfish
CFLAGS=-O2 ./configure --prefix=/opt/gnome --with-gmp-prefix=/opt/gnome

Gnome base libraries

PackagePatch FileNotes
audiofile-0.2.3 audiofile-0.2.3-cygwin.patch Note: mkinstalldirs does not have execute permission in this package. Use chmod +x mkinstalldirs before configuring.
CFLAGS=-O2 ./configure --prefix=/opt/gnome
esound-0.2.29 esound-0.2.29-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome
glib-1.2.10 glib-1.2.10-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome --with-threads=posix
gtk+-1.2.10 gtk+-1.2.10-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome
imlib-1.9.14 imlib-1.9.14-cygwin.patch CFLAGS=-O2 CPPFLAGS=-I/usr/include/libpng ./configure --prefix=/opt/gnome
gtk-engines-0.12 gtk-engines-0.12-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome
ORBit-0.5.17 ORBit-0.5.17-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome
xml-i18n-tools-0.9 no patch required CFLAGS=-O2 ./configure --prefix=/opt/gnome
libxml-1.8.17 libxml-1.8.17-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome
oaf-0.6.10 oaf-0.6.10-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome
GConf-1.0.9 GConf-1.0.9-cygwin.patch CFLAGS=-O2 CXXFLAGS=-O2 CPPFLAGS=-I/usr/include/libpng ./configure --prefix=/opt/gnome
gnome-libs-1.4.2 gnome-libs-1.4.2-cygwin.patch Antialias text does not work in the test-gnome app. Do not know why.
CFLAGS=-O2 CPPFLAGS="-I/opt/gnome/include -I/usr/include/libpng -I/usr/include/db2" LIBS=-ldb ./configure --prefix=/opt/gnome
gdk-pixbuf-0.21.0 gdk-pixbuf-0.21.0-cygwin.patch CFLAGS=-O2 CPPFLAGS=-I/usr/include/libpng ./configure --prefix=/opt/gnome --disable-mmx
libghttp-1.0.9 libghttp-1.0.9-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome
libglade-0.17 libglade-0.17-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome
scrollkeeper-0.2 scrollkeeper-0.2-cygwin.patch LIBS=-lintl CFLAGS=-O2 ./configure --localstatedir=/opt/gnome/var --prefix=/opt/gnome
gnome-mime-data-2.0.1 No patch required. CFLAGS=-O2 ./configure --prefix=/opt/gnome
gnome-vfs-1.0.5 gnome-vfs-1.0.5-cygwin.patch It may be necessary to rebase your cygwin dlls to use this library.
Currently test-async-cancel fails - this is under investigation.
CFLAGS=-O2 PKG_CONFIG_PATH=/opt/gnome/lib/pkgconfig ./configure --prefix=/opt/gnome --enable-gconf
libgtop-1.0.13 libgtop-1.0.13-cygwin.patch CFLAGS=-O2 LIBS=-lintl ./configure --prefix=/opt/gnome --with-libgtop-examples --without-libgtop-guile

Gnome core applications

PackagePatch FileNotes
control-center-1.4.0.5 control-center-1.4.0.5-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome
gnome-core-1.4.2 gnome-core-1.4.2-cygwin.patch The panel currently occasionally fails on start-up, especially when the processor is under heavy load.
CFLAGS=-O2 CPPFLAGS=-I/usr/include/libpng ./configure --prefix=/opt/gnome
glade-0.6.4 glade-0.6.4-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome
rep-gtk-0.15 rep-gtk-0.15-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome
sawfish-1.1-gtk1 sawfish-1.1-gtk1-cygwin.patch The source tar file contains file names that are illegal on Windows. Use the following sequence of commands to extract it:
tar zxvf sawfish-1.1-gtk1.tar.gz --exclude=sawfish-1.1-gtk1/lisp/sawfish/ui/WIDGETS --exclude="sawfish-1.1-gtk1/themes/Crux/*active*"
tar zxvf sawfish-1.1-gtk1.tar.gz --to-stdout sawfish-1.1-gtk1/lisp/sawfish/ui/WIDGETS > sawfish-1.1-gtk1/lisp/sawfish/ui/WIDGETS.txt
for file in $(tar ztf sawfish-1.1-gtk1.tar.gz | grep :)
do tar zxvf sawfish-1.1-gtk1.tar.gz --to-stdout $file > $(echo $file | sed 's/:/_/g')
done
The configure command is:
CFLAGS=-O2 CPPFLAGS="-I/opt/gnome/include -I/usr/include/libpng" ./configure --prefix=/opt/gnome --with-rep-prefix=/opt/gnome
gnome-applets-1.4.1 gnome-applets-1.4.1-cygwin.patch CFLAGS=-O2 LIBS=-lintl ./configure --prefix=/opt/gnome
gnome-utils-1.4.1.2 gnome-utils-1.4.1.2-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome --with-messages=/var/log/messages
mc-4.5.55 no patch required Note: Midnight commander is now included in the cygwin distribution, but does not include the gnome gui. You must build this package to get a functional gnome desktop. Do not install in /usr as you will then overwrite the default cygwin installation.
CFLAGS=-O2 CPPFLAGS=-I/opt/gnome/include LIBS=-lintl ./configure --prefix=/opt/gnome --with-mmap --without-subshell
gnome-games-1.4.0.4 gnome-games-1.4.0.4-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome
gnome-print-0.37 gnome-print-0.37-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome
gnome-pim-1.4.6 gnome-print-1.4.6-cygwin.patch Gnome calendar and diary. Requires guile.
CFLAGS=-O2 CXXFLAGS=-O2 ./configure --prefix=/opt/gnome
gtop-1.0.13 gtop-1.0.13-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome
startgnome-0.5 startgnome-0.5.tar.bz2 A source-code bundle, installs convenience startup-scripts.
./configure --prefix=/opt/gnome

Gnome optional core libraries

These packages are not needed for correct operation of the desktop, but may add useful functionality.
PackagePatch FileNotes
gnome-user-docs-1.4.1.1 No patch required contains the gnome documentation. You can safely omit this if you do not need the docs, as nothing else depends on it.
./configure --prefix=/opt/gnome
gnome-audio-1.4.0 No patch required contains various sound files for the gnome desktop. You can safely omit this if you do not want gnome to whistle and burp at you, as nothing else depends on it.
no configure script in this one, just make and make install

Gnome additional libraries

These libraries are not used by the desktop, but are necessary for many other gnome applications
PackagePatch FileNotes
bonobo-1.0.22 bonobo-1.0.22-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome
gal-0.22 gal-0.22-cygwin.patch CFLAGS=-O2 ./configure --prefix=/opt/gnome
gtkhtml-1.1.7 gtk-1.1.7-cygwin.patch This package contains filenames that are distinguished only by case. We therefore have to rename some files as they are extracted - this requires two invocations of tar, as:
tar jxvf gtk-1.1.7.tar.bz2 --exclude="gtk-1.1.7/components/html-editor/Spell*";
tar jxvf gtk-1.1.7.tar.bz2 --to-stdout gtk-1.1.7/components/html-editor/Spell.idl > gtk-1.1.7/components/html-editor/Spell-idl.idl
The configure command is:
CFLAGS=-O2 ./configure --prefix=/opt/gnome --with-gconf --without-bonobo

For example, here is the sequence of commands to build the first package, audiofile. Substitute the PATH, "/sources", "/patches", the CFLAGS and prefix values appropriately. (Ben is our puppy - he loves the beach).

1.set up the PATH: 
 

ben@thebeach ~/gnome
$ PATH=/opt/gnome/bin:/usr/X11R6/bin:$PATH
2.unpack the source tarball: 
 

ben@thebeach ~/gnome
$ tar zxvf /sources/audiofile-0.2.3.tar.gz
3.change directory to the unpacked sources: 
 

ben@thebeach ~/gnome
$ cd audiofile-0.2.3
4.apply the patch: 
 

ben@thebeach ~/gnome/audiofile-0.2.3
$ patch -p1 < /patches/audiofile-0.2.3-cygwin.patch
5.configure: 
 

ben@thebeach ~/gnome/audiofile-0.2.3
$ CFLAGS=-O2 ./configure --prefix=/opt/gnome
6.make: 
 

ben@thebeach ~/gnome/audiofile-0.2.3
$ make
7.check: 
 

ben@thebeach ~/gnome/audiofile-0.2.3
$ make check
8.install: 
 

ben@thebeach ~/gnome/audiofile-0.2.3
$ make install


Hints for building Gnome

Whether you use the supplied autobuild script, or configure the packages manually, you should make sure that you do not have "." in your PATH. This is to ensure that the "make install" target uses /bin/install.exe, and not the file "INSTALL" in the top level directory of each package.

Automated build

Manual build


Running Gnome

start up

I provide scripts in the startgnome package to make it easier to start a gnome session on cygwin.

startgnome is designed to be run from a cygwin command line: it uses xinit to start the X server and gnome-session in such a way that the X server automatically shuts down when you log out of the gnome-session. Simply typing startgnome is sufficent to start gnome; for users familiar with the usual startx program (or xinit) it is possible to pass arguments to startgnome in the same format as that program to change behaviour for just this one session (see man startx). Note that ~/.startgnomerc is the default client, not ~/.xinitrc.

startgnome.bat is designed to be invoked from a desktop shortcut. It is just a wrapper for startgnome in the same way that the cygwin cygwin.bat script is a wrapper for bash. I recommend that you copy it to the same directory as cygwin.bat (c:\cygwin). When using startgnome.bat directly, a Windows console is created that contains the output messages from gnome-session. If you prefer not to have this console, but instead send the messages to a log file, you can start use run.exe that is distributed with cygwin xfree86 as:

c:\cygwin\usr\X11R6\bin\run c:\cygwin\startgnome.bat /f
In this case output is sent to the default log file /tmp/gnome.log. You can choose a different log file by passing its (posix) name as a second parameter to startgnome.bat:
c:\cygwin\usr\X11R6\bin\run c:\cygwin\startgnome.bat /f /home/me/mylog
(Note: logfile redirection does not work on Windows 9x/Me)

when startup fails

Gnome may fail to start properly because of file permission problems (particularly if you run without ntsec one time, then with ntsec the next, or vice-versa). Once this happens it may be difficult to re-start because the broken session may have been saved so that it always re-starts broken, or because the files still have wrong permissions. To get around this, the easiest fix is to delete the session state files and start again with a fresh default session. startgnome should delete the system temporary state directories /tmp/orbit-$USER /tmp/.esd /tmp/.sawfish-$USER (although permission problems may prevent this so you may have to delete them from Windows Explorer). The user session state is in the directories ~/.gnome*. Note that by deleting the files in ~/.gnome* you will delete any changes you have made to the session configuration, including menus, applets, background, etc, etc; but sometimes it is the only way to get a gnome session started (this is still experimental stuff, after all).

shutdown

You should always shutdown your gnome session by selecting "Log out" from the Desktop menu. This will allow all gnome programs to shut down gracefully, saving their state to disk where appropriate. The X server will terminate once the gnome session has shut down, which typically takes 20 - 30 seconds.

Occasionally, some process will not be terminated. For example, esd often continues to run; or if you have a gnome-terminal active then bash may remain. The consequences of this depends on whether you use run.exe with startgnome.bat. If you do use run.exe, then the X window will disappear, and all will appear to have terminated. But ps -ef in a cygwin shell will show that some processes have remained. When you come to shutdown Windows, it will give warnings about cmd.exe not shutting down correctly. Just tell Windows to terminate them. If you do not use run.exe, then you will find that the DOS console window remains. You can close this window manually, and that will terminate the remaining processes from your gnome session.


Contact

Comments, fixes, offers to take on proper development and maintenance should be sent to Steven O'Brien (steven dot obrien2 at ntlworld dot com)
Please do not send or attach large log files, traces, or binaries. Remember these patches are completely unsupported, so do not expect detailed help (or even any help) building or running Gnome.

If anyone else also has, or is working on, a port of Gnome to Cygwin, then maybe we should compare notes.

If anyone knows of a real practical use for the Gnome desktop on Windows, then please share it with the rest of us. The libraries should help porting many apps of course; and I like Glines; but now that I can run the desktop, I have to ask myself - why?


Request for Volunteers

This project needs volunteers to keep it alive. If you would like to give time to: please contact me at the above e-mail address.


Applications

A small number of useful applications are now also available here. Please be warned, however, that these patches are not actively maintained and so may not work with the current Gnome libraries. Again, only source code patches are supplied. If you have ported any applications using libraries built with these patches, then please let me know. I can include your patch on this site (with appropriate acknowledgment), or just add a link to your site.

Please see my applications page for details.