-If using the Microsoft toolchain, build with `nmake -f
-makefile.msc`. Install with `nmake -f makefile.msc install`.
-
-Building with gcc
-=================
-
-The gcc support was added quite recently, but seems to work. Debugging
-with gdb works. I prefer to use the msvcrt runtime and not the default
-crtdll. Especially, as the pthread library also uses msvcrt, using
-crtdll would probably not be a good idea at all. Using msvcrt can be
-achieved by applying the following diff to the specs file, which
-typically is installed as
-C:\cygnus\cygwin-b20\H-i586-cygwin32\lib\gcc-lib\i586-cygwin32\egcs-2.91.66\specs.
-
-Sorry for the illegibility of this diff, but the specs file is like
-that... This patch replaces -lcrtdll with -lmsvcrt, replaces crt1 with
-crt2, removes -lmoldname (because using functions from it would pull
-in crtdll.dll), and defines __MSVCRT__.
-
---- specs.ORIG Sun Apr 25 00:40:40 1999
-+++ specs Sun Apr 25 00:48:04 1999
-@@ -23 +23 @@
--%{pg:-lgmon} %{!mno-cygwin:-lcygwin} %{mno-cygwin:-lmingw32 -lmoldname -lcrtdll} %{mwindows:-luser32 -lgdi32 -lcomdlg32} -lkernel32 -ladvapi32 -lshell32
-+%{pg:-lgmon} %{!mno-cygwin:-lcygwin} %{mno-cygwin:-lmingw32 -lmsvcrt} %{mwindows:-luser32 -lgdi32 -lcomdlg32} -lkernel32 -ladvapi32 -lshell32
-@@ -29 +29 @@
--%{mdll: %{!mno-cygwin:dllcrt0%O%s} %{mno-cygwin:dllcrt1%O%s}} %{!mdll: %{!mno-cygwin:crt0%O%s} %{mno-cygwin:crt1%O%s} %{pg:gcrt0%O%s}}
-+%{mdll: %{!mno-cygwin:dllcrt0%O%s} %{mno-cygwin:dllcrt2%O%s}} %{!mdll: %{!mno-cygwin:crt0%O%s} %{mno-cygwin:crt2%O%s} %{pg:gcrt0%O%s}}
-@@ -38 +38 @@
---Di386 -D_WIN32 -DWINNT -D_X86_=1 -D__STDC__=1 -D__stdcall=__attribute__((__stdcall__)) -D__cdecl=__attribute__((__cdecl__)) -D__declspec(x)=__attribute__((x)) -Asystem(winnt) -Acpu(i386) -Amachine(i386)
-+-Di386 -D_WIN32 %{mno-cygwin:-D__MSVCRT__ } -DWINNT -D_X86_=1 -D__STDC__=1 -D__stdcall=__attribute__((__stdcall__)) -D__cdecl=__attribute__((__cdecl__)) -D__declspec(x)=__attribute__((x)) -Asystem(winnt) -Acpu(i386) -Amachine(i386)
-
-You should also fix two bugs in the mingw32 headers: The type of
-_dev_t in the header mingw32/sys/types.h should be unsigned int, not
-short. The type for st_uid in sys/stat.h to be short, not int. This is
-what the Microsoft's headers and runtime library use. Otherwise
-accessing the fields in a stat struct as filled in by the stat and
-fstat functions in the MS library will cause various interesting
-failures.
-
-You also will have to get the mingw32 source snapshot from
-http://www.geocities.com/Tokyo/Towers/6162/mingw32_980701_tar.gz (this
-is the source to the "mingw32" part of Mumit Khan's egcs-1.1.2
-distribution.) Unpack it and fix the prototype and call to
-__getmainargs() in init.c to include one more parameter, an int *,
-which should be passed the address of a zero int. Code snippets below:
-
-...
-#ifdef __MSVCRT__
-extern void __getmainargs(int *, char***, char***, int, int *);
-#else
-...
-#ifdef __MSVCRT__
- int newmode = 0;
- (void) __getmainargs(&_argc, &_argv, &dummy_environ, _CRT_glob, &newmode);
-#else
-...
-
-Remake dllcrt2.o (which is the file which gets linked into dlls when
-using msvcrt, as per the specs file above), and move it into place
-(typically C:\cygnus\cygwin-b20\H-i586-cygwin32\i586-cygwin32\lib\dllcrt2.o).
-
-Next, go back to the GLib directory and build using `make -f makefile.cygwin`.
-Building the dlls uses the script build-dll which is an awful hack. But
-I couldn't get things working in a cleaner way.
-
---Tor Lillqvist <tml@iki.fi>
+If you are building from a CVS snapshot, you will not have any
+makefile.msc files. You should copy the corresponding makefile.msc.in
+file to that name, and replace any @...@ strings with the correct
+value.
+
+This is done automatically when an official GLib source distribution
+package is built, so if you get GLib from a source distribution
+package, there should be makefile.msc files ready to use (after some
+editing).
+
+The hand-written makefile.msc files, and the stuff in the "build"
+subdirectory, produce DLLs and import libraries that match what the
+so-called autoconfiscated build produces.
+
+All the MSVC makefiles are for the command line build with nmake. If
+you want to use the VC-UI you can simply create wrapper .dsp makefiles
+(read the VC docs how to do so).
+
+Some modules may require Perl to auto-generate files. The goal (at
+least Hans's) is to not require any more tools.
+
+Build with:
+
+nmake -f makefile.msc
+ or
+nmake -f makefile.msc DEBUG=1
+
+[
+ The former will create 'release' versions of the DLLs. If you
+ plan to distribute you DLLs please use this command. The latter
+ will create DLLs with debug information _and_ link them with
+ msvcrtd.dll instead of msvcrt.dll.
+ Beware: There are known problems with mixing DLLs in one
+ application, which are build against different runtimes.
+ Especially the index-to-file mapping used by 'unix-style' file
+ operation - _open() _pipe() etc. - breaks sometimes in strange
+ ways (for example the Gimp plug-in communication).
+]
+
+Required libraries (not build from cvs)
+------------------
+ libintl (gnu-intl), libiconv
+ libtiff, libpng, zlib, libjpeg
+
+are available pre-built from the website mentioned above.
+
+Versioning
+----------
+Instead of the Unix and auto* way of tracking versions and resolving
+dependencies (configure; make; make install) involving autoconf,
+automake, libtool and friends the MSVC build uses a different
+approach.
+
+The core of it's versioning is the file build/win32/module.defs.
+It contains entries of the form MODULE_VER, e.g.:
+
+ GLIB_VER = 2.0
+ LIBICONV_VER = 1.3
+
+and the placement of these modules defined as MODULE, e.g.:
+
+ GLIB = $(TOP)/glib
+ LIBICONV = $(TOP)/libiconv-$(LIBICONV_VER)
+
+whereas TOP is defined as the relative path from the respective
+module directory to your top build directory. Every makefile.msc
+needs to define TOP before including the common make file part
+make.msc, which than includes module.defs, like:
+
+TOP = ../..
+!INCLUDE $(TOP)/glib/build/win32/make.msc
+
+(Taken from gtk+/gdk/makefile.msc)
+
+With this provision it is possible to create almost placement
+independent makefiles without requiring to 'install' the libraries and
+headers into a common place (as it is done on Unix, and as Tor does
+when producing his zipfiles with prebuilt GLib, GTK+ etc).
+
+Special Files
+-------------
+ config.h.win32.in : @XXX_MAJOR_VERSION@ needs to be replaced by
+the current version/build number. The resulting file is to be saved
+as 'config.h.win32'. This should be automatically done if a package
+gets build on the Unix platform.
+
+ makefile.msc.in : @XXX_MAJOR_VERSION@ to be replaced. Save as
+makefile.msc.
+
+ <module>.def : every function which should be used from the outside of
+a dll needs to be marked for 'export'. It is common that one needs to change
+these files after some api changes occured. If there are variables to be
+exported another mechanism is needed, like :
+
+ #ifdef G_OS_WIN32
+ # ifdef GDK_COMPILATION
+ # define GDKVAR __declspec(dllexport)
+ # else
+ # define GDKVAR extern __declspec(dllimport)
+ # endif
+ #else
+ # define GDKVAR extern
+ #endif
+
+
+
+Directory Structure
+-------------------
+all modules should be build in a common directory tree otherwise you
+need to adapt the file 'module.defs'. They are listed here in increasing
+dependencies order.
+
+<common rootdir without spaces>
+ |
+ +- glib
+ | |
+ | +- build : [this module lives in the cvs root dir]
+ | | +- win32
+ | | .\module.defs : defines (relative) locations of the headers
+ | | and libs and version numbers to be include
+ | | in dll names
+ | | .\make.msc : include by almost every 'makefile.msc'
+ | |
+ | | .\README.WIN32 : more information how to build
+ | | .\glibconfig.h.win32.in : similar to config.h.win32.in
+ | | .\makefile.msc : master makefile, sub dir makefiles should work
+ | |
+ | +- glib
+ | +- gmodule
+ | +- gthread : does _not_ depend on pthread anymore
+ | +- gobject
+ |
+ +- pango
+ | +- pango : 'native' build does not require extra libs and
+ | | includes the minimal required text renderer
+ | | (there is also a currently slightly broken FreeType2
+ | | based implementation for win32)
+ | +- modules (not yet build)
+ |
+ +- atk
+ | +- atk
+ | .\makefile.msc : build here
+ |
+ +- gtk+
+ | | .\config.h.win32 : for all the below
+ | |
+ | +- gdk-pixbuf
+ | | .\gdk_pixbuf.rc.in : version resource for the DLLs. Needs
+ | | to be converted (filled with version info)
+ | | as described above.
+ | |
+ | +- gdk
+ | | | .\makefile.msc : some auto-generation is needed to build in the
+ | | | in the subdirectory
+ | | +- win32
+ | |
+ | +- gtk
+
+ |
+ +- gimp
+ | .\makefile.msc : master makefile to build The Gimp. The makefiles
+ | from the sub dirs should work stand alone, but than
+ | the user needs to know the build order
+
+ |
+ +- dia : additionally depends on libart_lgpl (in cvs)
+ | and libxml2 ( see http://www.xmlsoft.org/ )
+ +- lib
+ +- app
+ +- objects
+ +- plug-ins
+ +- python
+