| 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. |
| |
| 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. |
| |
| 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 is |
| not known to work with the older CRTDLL.DLL runtime, or the static |
| Microsoft C runtime libraries. |
| |
| 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. |
| |
| 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. Libiconv has |
| makefiles for building with MS Visual C only, but as it is one source |
| file only, building it "by hand" with gcc isn't hard. |
| |
| 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 |
| @GLIB_VERSION@ strings 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.3. Version 2.95.2 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, |
| from www.mingw.org. |
| |
| Set up your PATH so that the gcc from the bin directory that got |
| created above is the one that gets used. Even if you run the mingw |
| gcc, you still want to have Cygwin to run make in. |
| |
| Then run make -f makefile.mingw. |
| |
| I 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. This is essential if the same DLLs are to be usable both from |
| gcc- and MSVC-compiled code, which definitely is a good thing.) |
| |
| It is also possible to use the auto*, ./configure and libtool |
| mechanism when building for mingw. You should be running Cygwin, or |
| maybe cross-compiling from real Unix, 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 very new |
| libtool. Remember to invoke configure with CC='gcc -fnative-struct' if |
| you want to produce DLLs binary compatible with the "official" ones. |
| |
| But please note that the ./configure mechanism should not blindly be |
| used to build a GLib to be distributed to potential developers because |
| it produces a compiler-dependent glibconfig.h (and config.h, but that |
| shouldn't matter). For instance, the typedef for gint64 is long long |
| with gcc, but __int64 with MSVC. Otherwise, there really shouldn't be |
| any reason to distribute separate GLib DLLs for gcc and MSVC users, as |
| both compiler+tools generate code that uses the same C runtime |
| library. Thus one either has to edit glibconfig.h afterwards, or use |
| the hand-written config.h.win32 and glibconfig.h.win32. |
| |
| There are probably also other hickups when using auto* and configure |
| to build for mingw, sigh. Every now and then I try to get rid of the |
| hand-written makefiles and configuration headers for Win32, and start |
| fooling around with auto* etc, but after a while give up and fall |
| back. At least, it used to be like that. Lately I have again been |
| working on using auto*/configure/libtool on Win32, and it now seems to |
| work well enough (with some patches applied to the current CVS |
| libtool...). |
| |
| The hand-written makefile.mingw(.in) files, and the stuff in the |
| "build" module has been updated to produce DLLs and import libraries |
| that match what Makefile.am and libtool produces. |
| |
| If you want to run the 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. In theory it should work to use the |
| -no-cygwin flag, but I haven't tested that lately. |
| |
| 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. (And a new libtool probably requires rather new autoconf and |
| automake.) |
| |
| Building with MSVC |
| ================== |
| |
| If using the Microsoft toolchain, build with `nmake -f |
| makefile.msc`. |
| |
| --Tor Lillqvist <tml@iki.fi> |