Fix some problems in writing out varargs tests in configure.in
[platform/upstream/glib.git] / README.win32
index 178c073..480db91 100644 (file)
+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 emulation layer except that provided
-by the Microsoft runtime C library. Additionally, a pthreads emulation
-library is used.
-
-To build GLib on Win32, you can use either the Microsoft compiler and
-tools, or egcs-1.1.2 running under cygwin-b20.1. Both the compiler
-from MSVC 5.0 and from MSVC 6.0 have been used successfully. If you
-build with egcs, note that the produced executables and DLLs do *not*
-require the cygwin dll ("mingw32"). That's the whole point of this
-porting effort, more or less.
-
-The egcs support was added quite recently, but seems to work in all
-respects. Debugging with gdk works.
-
-Before building you must get the pthreads library for Windows from
-http://sourceware.cygnus.com/pthreads-win32/. The pthreads-win32
-snapshot from 1999-04-07 is the one that should be used. Edit the
-location of the pthreads library and include files in
-makefile.msc.
+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.
 
-If using the Microsoft toolchain, build with `nmake -f
-makefile.msc`. Install with `nmake -f makefile.msc install`.
-If using egcs, build using `make -f makefile.cygwin`.
+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.
 
-To test the GLib functions, go to the tests subdirectory and enter
-`nmake -f makefile.msc check`.
+But note that to just *use* GLib on Windows, there is no need to build
+it, prebuilt DLLs are available from the webiste above.
 
-If you would want to use the cygwin tools to generate executables that
-*do* usethe cygwin runtime the normal Unix configuration method should
-work as if on Unix (knock on wood).
+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.)
 
-With a little work, it might be possible to use the ./configure
-mechanism also with a "mingw32" configuration.
+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.
 
-The following preprocessor macros are used for conditional compilation 
-related to Win32:
+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.
 
-- WIN32 is defined when compiling for the Win32 platform, regardless
-  if using the X11 or Win32 windowing API (in the case of GLib, this
-  dimension isn't significant), regardless whether using a more or
-  less complete POSIX emulation runtime layer (like Cygwin) or not.
+The following preprocessor macros are used for conditional compilation
+related to Win32:
 
-- NATIVE_WIN32 is defined when compiling for Win32, *and* without
+- 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 and the pthreads-win32 library. For
-  instance, pathnames are in the native Windows syntax.
+  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 uses the combination with both of those on.
+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
-- __GNUC__ is defined when using GCC (i.e. egcs)
 
-Some of the usage of these macros was 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
-NATIVE_WIN32.
+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`. 
 
-The pthreads for Win32 package that the thread support uses isn't
-quite ready yet, and thus threads really should not be relied upon.
+--Tor Lillqvist <tml@iki.fi>