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.
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.
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/ |
statically linked libs and apps: | http://www.geocities.co.jp/SiliconValley/1596/en/cygwin.html |
---|---|
screensavers and more: | http://lassauge.free.fr/cygwin/ |
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
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.
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:
See the README file within the archive for instructions.
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.
These packages are not needed for correct operation of the desktop, but may add useful functionality.
These libraries are not used by the desktop, but are necessary for many other gnome applications
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).
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.
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:
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.
Comments, fixes, offers to take on proper development and maintenance should be sent to Steven O'Brien (steven dot obrien2 at ntlworld dot com)
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?
Please see my applications page for details.
Disclaimers
Notes
Run-time loaded dlls (which are used extensively by Gnome) may cause the cygwin fork()
call to fail. This is because the child process must load the dll to exactly the same
address as the parent process loaded it, and this is not always possible.
The only solution available currently is to rebase your DLLS, using the rebase package
that is now part of the official cygwin distribution. The "rebaseall" tool will only
rebase dlls installed with cygwin setup.exe, so you will have to select the dlls manually.
The command sequence I use is:
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
Most of this work was done before the autotools (autoconf, automake, libtool, and the rest) were included in the cygwin distribution. The technique used here to generate dlls is outdated and deprecated for official cygwin packages.
Therefore you should not take these patches as models for your own ports. Instead, you should consult the cygwin website and mailing list archives for information on
how to use the latest autotools in cygwin. Try a google search for "relibtoolize site:cygwin.com", for example.
The patches apply some changes to generated files, and generally do other silly things that mean they cannot be easily merged into the original product development projects.
But, with the release of gnome 2.x, development work on gnome 1.4 is effectively finished; and although bug-fix patches may still be accepted, there is no point in doing the
(large) amount of work necessary to get cygwin-specific modifications into the mainline gnome 1.4 CVS. If you have the necessary time, and enthusiasm to get cygwin-gnome
fully integrated with the mainline gnome development, then you should concentrate on gnome 2.
The Patches
cygwin-gnome-patches.tar.bz2 (108k)
Manual Builds
Pre-requisite libraries
Package Patch File Notes
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/gnomeGnome base libraries
Package Patch File Notes
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
Package Patch File Notes
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/gnomeGnome optional core libraries
Package Patch File Notes
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 installGnome additional libraries
Package Patch File Notes
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
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
Automated build
./autobuild --from <package-name>
./autobuild --only <package-name>.
Manual build
Some packages may need to be installed before make check will succeed - in this case just reverse the order of steps 7 and 8.
Running Gnome
start up
I provide scripts in the startgnome package to make it easier to start a gnome
session on cygwin.
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.
Contact
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.
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.