+General
+=======
+
For more information about the port or GLib, GTk+ and the GIMP to
-native Windows, see http://www.iki.fi/tml/gimp/win32/ . ("Native"
-means that we use the Win32 API only, and not any POSIX emulation
-layer except that provided by the Microsoft runtime C library, and the
-pthreads emulation library from Cygnus.)
-
-As for now, only the Microsoft compiler and tools are really
-supported. Before compiling, check the BIN definition in
-makefile.msc. Compile with `nmake -f makefile.msc`. Install with
-`nmake -f makefile.msc install`. Cygwin (without cygwin runtime,
-i.e. "mingw32") and maybe LCC-Win32 support will be added later. Note
-that when using the cygwin compiler and other tools *with* the cygwin
-runtime the normal Unix configuration method should work.
-
-The thread support uses the pthreads package from Cygnus, which isn't
-ready yet, and thus really should not be relied upon.
+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.)
+
+If you would want to use the cygwin tools to generate a GLib that
+*does* use the cygwin runtime, the normal Unix configuration method
+should work as if on Unix. Note that successfully producing shared
+libraries (DLLs) most probably requires you to have a very new libtool
+(from March 2001), and to replace the libtool.m4 included in
+acinclude.m4 with the new one, and to replace ltmain.sh.
+
+It is also possible to use the ./configure mechanism when building for
+a mingw configuration. You should be running cygwin for the configure
+script to work, obviously. The same libtool issue has to be taken into
+account as when building for Cygwin: You most probably should have a
+libtool from March 2001 or so, and replace libtool.m4 (in
+acinclude.m4) and ltmain.sh.
+
+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. G_OS_UNIX *is* defined when
+ compiling for Cygwin.
+
+- G_PLATFORM_WIN32 is defined when either G_OS_WIN32 or G_WITH_CYGWIN
+ is defined.
+
+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>