| General |
| ======= |
| |
| For more information about the port or GLib, GTk+ and the GIMP to |
| native Windows, and pre-built binaries (DLLs), surf to |
| http://www.gimp.org/win32/ . "Native" means that we use the Win32 API |
| only, and no POSIX (Unix) emulation layer except that provided by the |
| Microsoft runtime C library, and a pthreads emulation library. |
| |
| 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. |
| |
| But note that to just *use* GLib on Windows, there is no need to build |
| it, prebuilt DLLs are available from the webiste above. |
| |
| With gcc I mean 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 (especially 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 some work, it might be possible to use the ./configure mechanism |
| also with a "mingw32" configuration. |
| |
| The following preprocessor macros 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. |
| |
| - G_WITH_CYGWIN is defined if compiling for the Cygwin |
| environment. Note that G_OS_WIN32 is *not* defined in that case, as |
| Cygwin is supposed to behave like Unix. Building for Cygwin is not |
| supported. Some people have presumably done it, but no changes have |
| been submitted back. |
| |
| The Win32 port of GLib and related software uses only G_OS_WIN32. 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: |
| - __GNUC__ is defined when using GCC |
| - _MSC_VER is defined when using the Microsoft compiler |
| |
| G_OS_WIN32 implies using the Microsoft C runtime MSVCRT.DLL. GLib or |
| software using it is not known to work with the older CRTDLL.DLL |
| runtime. |
| |
| Building software that use GLib or GTk+ |
| ======================================= |
| |
| 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. Later versions might also |
| work. |
| |
| 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. |
| |
| Libiconv |
| ======== |
| |
| Before building GLib you must also have the libiconv library, either |
| from the same website mentioned above, or from it's homepage at |
| http://clisp.cons.org/~haible/packages-libiconv.html. |
| |
| 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 GLib source distribution |
| package is built. |
| |
| Building GLib with gcc |
| ====================== |
| |
| I use the latest gcc, gcc-2.95.2. Version 2.95 will most probably also |
| work. |
| |
| 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 a bit 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> |