| General |
| ======= |
| |
| For more information about the port or GLib, GTk+ and the GIMP to |
| native Windows, and pre-built binary packages, see |
| http://www.iki.fi/tml/gimp/win32/ . "Native" means that we use the |
| Win32 API only, and not any POSIX operating system emulation layer |
| except that provided by the Microsoft runtime C library. Actually, |
| a pthreads emulation library is used. |
| |
| To build GLib on Win32, you can use either gcc or the Microsoft |
| compiler and tools. Both the compiler from MSVC 5.0 and from MSVC 6.0 |
| have been used successfully. However, the makefiles for MSVC are not |
| up-to-date, sorry. If you fix the makefile.msc files, and manage to |
| build with MSVC, please send the updated makefile.msc files to the |
| gimpwin-dev list. |
| |
| With gcc I mean gcc-2.95 or gcc-2.95.2 as distributed by Mumit Khan, |
| either as a mingw version (preferred), or running under cygwin. To |
| successfully use gcc, follow the instructions below. We want to use |
| gcc -mno-cygwin, i.e. produce executables (.exe and .dll files) that |
| do *not* require the cygwin runtime library. This is called "mingw". |
| I also use the -fnative-struct flag, which means that in order to use |
| the prebuilt DLLs (especiall of GTK+), you *must* also use that flag. |
| (This flag means that the struct layout is identical to that used by |
| MSVC.) |
| |
| To test the GLib functions, go to the tests subdirectory and enter |
| `nmake -f makefile.msc check` or `make -f makefile.mingw check`. |
| |
| If you would want to use the cygwin tools to generate executables that |
| *do* use the cygwin runtime, the normal Unix configuration method |
| should work as if on Unix. But it won't produce DLLs. At least I |
| haven't succeeded in that. Also, I have no idea what changes are |
| necessary to the code for it to run successfully on cygwin. |
| |
| With a little work, it might be possible to use the ./configure |
| mechanism also with a "mingw32" configuration. |
| |
| The following preprocessor macro are used for conditional compilation |
| related to Win32: |
| |
| - G_OS_WIN32 is defined when compiling for Win32, *and* without |
| any POSIX emulation, other that to the extent provided by the |
| bundled Microsoft C library (msvcrt.dll) and the pthreads-win32 |
| library. For instance, pathnames are in the native Windows syntax. |
| |
| - _WIN32 is defined by the compiler |
| |
| The Win32 port uses the combination with both of those on. As |
| G_OS_WIN32 is defined in glibconfig.h, it is available to all source |
| files that use GLib (or GTk+, which uses GLib). |
| |
| Additionally, there are the compiler-specific macros: |
| - _MSC_VER is defined when using the Microsoft compiler |
| - __GNUC__ is defined when using GCC |
| |
| Some of the usage of these macros used to be a bit mixed up, and had |
| to be straightened out when adding the gcc support. In particular, I |
| used to check for _MSC_VER in some places where I really wanted to |
| check for the Microsoft C library, and those checks has now been |
| changed to G_OS_WIN32. |
| |
| G_OS_WIN32 implies using the Microsoft C runtime MSVCRT.DLL. |
| |
| Building software that use GLib or GTk+ |
| ======================================= |
| |
| Unfortunately, even building software that just *use* GLib or GTk+ |
| also require to have the right compiler set up the right way, so if |
| you intend to use gcc, follow the relevant instructions below in that |
| case, too. |
| |
| Pthreads library |
| ================ |
| |
| Before building you must get the pthreads library for Win32 from |
| http://sourceware.cygnus.com/pthreads-win32/. The pthreads-win32 |
| snapshot from 1999-05-30 is the one that should be used. Edit the |
| location of the pthreads library and include files in makefile.msc or |
| makefile.mingw. The pthreads distribution includes the precompiled dll |
| and import libraries both for MSVC and gcc. |
| |
| The pthreads for Win32 package that the thread support uses supposedly |
| isn't quite ready yet, and thus threads stuff should not be relied |
| upon for anything serious. |
| |
| Where are the makefiles? |
| ======================== |
| |
| If you are building from a CVS snapshot, you will not have any |
| makefile.mingw or makefile.msc file. You should copy the corresponding |
| makefile.mingw.in or makefile.msc.in file to that name, and edit the |
| line that sets GLIB_VER to the correct version number. |
| |
| This is done automatically when an official distribution package is |
| built. |
| |
| Building with gcc |
| ================= |
| |
| I use the latest and greatest gcc, gcc-2.95.2. 2.95 will also work. |
| Earlier version might, but you are on your own. |
| |
| You can either use gcc running on cygwin, or the "pure" mingw |
| gcc. Using the latter is much easier. |
| |
| Just fetch the latest version of gcc for mingw and the msvcrt runtime, |
| currently from |
| ftp://ftp.nanotech.wisc.edu/pub/khan/gnu-win32/mingw32/snapshots/gcc-2.95.2-1/ |
| . |
| |
| Download the three zip archives: the gcc-<version>-msvcrt, |
| mingw-msvcrt-<timestamp> and binutils-<timestamp>-msvcrt, and unpack |
| them in a suitable directory. |
| |
| Set up your PATH so that the gcc from the bin directory that got |
| created above is the one that gets used. You can skip steps 1--5 |
| below. Even if you run the mingw gcc, you still want to have cygwin to |
| run make in. |
| |
| If you want to run a cygwin-based gcc, it gets much more |
| complicated. We still want gcc to produce code that does not use |
| cygwin, but the msvcrt runtime. The way to do this can be quite |
| complex, and the instructions are not included here. Contact me if you |
| want some possibly outdated, misleading and incomplete advice. |
| |
| Building with MSVC |
| ================== |
| |
| If using the Microsoft toolchain, build with `nmake -f |
| makefile.msc`. Install with `nmake -f makefile.msc install`. |
| |
| --Tor Lillqvist <tml@iki.fi> |