in case we have to abort the program, debugging is enabled and we are not
[platform/upstream/glib.git] / README.win32
index 8d83009..693fea4 100644 (file)
@@ -10,8 +10,8 @@ library is used.
 
 To build GLib on Win32, you can use either the Microsoft compiler and
 tools, or gcc. Both the compiler from MSVC 5.0 and from MSVC 6.0 have
-been used successfully. With gcc I mean egcs-1.1.2 (as distributed by
-Mumit Khan), running under cygwin-b20.1. To successfully use gcc,
+been used successfully. With gcc I mean gcc-2.95 as distributed by
+Mumit Khan, running under cygwin-b20.1. 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 sometimes called "mingw32".
@@ -46,7 +46,7 @@ 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 (i.e. egcs)
+- __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
@@ -90,55 +90,31 @@ 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 the definition of _dev_t in the header
-mingw32/sys/types.h to correspond to what type actually is used by
-msvcrt.dll. It should be unsigned int, not short. Otherwise stat()
-calls will fail.
-
-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`.
+with gdb works. I use the latest and greatest gcc and mingw32.
+Somewhat earlier versions will also work, but you are on your own.
+
+Read and understand these instruction carefully. If you don't
+understand or can't follow the instructions, you probably shouldn't
+want to build glib (or gtk or gimp) yourself anyway.
+
+Fetch gcc-2.95 built for cygwin from
+ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/cygwin/gcc-2.95/gcc-2.95-cygb20.tar.gz
+Install it somewhere, for instance "C:\gcc-2.95" (/gcc-2.95 as seen
+from cygwin). We call this directory $GCCDIR below. You will have
+subdirectories "H-i586-cygwin32" and "include" under $GCCDIR.
+
+Next, you need to modify the gcc setup to use the msvcrt runtime
+instead of crtdll. Also, the mingw32 and win32 API headers and import
+libraries need to be added. I have collected all the necessary
+additions in the file
+http://www.iki.fi/tml/gimp/win32/gcc-2.95-additions.zip . Install that
+in $GCCDIR. If you really want to do everything by yourself, follow
+the instructions in
+http://www.iki.fi/tml/gimp/win32/gcc-environment-setup.html
+
+Next, go back to the GLib directory and build using `make -f
+makefile.cygwin`.  Building the dlls uses the script build-dll which
+is somewhat of a hack. But I couldn't get things working in a cleaner
+way.
+
+--Tor Lillqvist <tml@iki.fi>