2008-03-07  Tor Lillqvist  <tml@novell.com>

	* README.win32: Updates.


svn path=/trunk/; revision=6636
This commit is contained in:
Tor Lillqvist
2008-03-07 01:47:26 +00:00
committed by Tor Lillqvist
parent 11f624d364
commit 57eb322704
2 changed files with 72 additions and 71 deletions

View File

@@ -1,3 +1,7 @@
2008-03-07 Tor Lillqvist <tml@novell.com>
* README.win32: Updates.
2008-03-05 Tor Lillqvist <tml@novell.com> 2008-03-05 Tor Lillqvist <tml@novell.com>
* glib/glib.symbols: Remove g_uri_get_scheme. * glib/glib.symbols: Remove g_uri_get_scheme.

View File

@@ -8,24 +8,21 @@ General
======= =======
For prebuilt binaries (DLLs and EXEs) and developer packages (headers, For prebuilt binaries (DLLs and EXEs) and developer packages (headers,
import libraries) of GLib, GTK+, GIMP etc for Windows, surf to import libraries) of GLib, Pango, GTK+ etc for Windows, go to
http://www.gimp.org/win32/downloads.html . They are for "native" http://www.gtk.org/download-windows.html . They are for "native"
Windows meaning they use the Win32 API and Microsoft C runtime library Windows meaning they use the Win32 API and Microsoft C runtime library
only, no POSIX (Unix) emulation layer (like Cygwin). only. No POSIX (Unix) emulation layer like Cygwin in involved.
To build GLib on Win32, you can use either gcc or the Microsoft To build GLib on Win32, you can use either gcc ("mingw") or the
compiler and tools. Both the compiler from MSVC 5.0 and from MSVC 6.0 Microsoft compiler and tools. Microsoft's MSVC6 and later have been
have been used successfully. used successfully. People have also successfully cross-compiled GLib
for Win32 from Linux using the cross-mingw packages.
But note that to just *use* GLib on Windows, there is no need to build Note that to just *use* GLib on Windows, there is no need to build it
it yourself. Prepackaged runtime and developer packages are available yourself.
from the website above. On Unix, it is quite normal that system admins
build and install libraries like GLib themselves without bothering to
look for prebuilt packages, especially if prebuilt packages tend to
use installation paths that don't conform to local customs.
On Windows setting up a correct build environment can be quite a task, On Windows setting up a correct build environment can be quite a task,
especially if you are used to just type "./configure; make" on Unix, especially if you are used to just type "./configure; make" on Linux,
and expect things to work as smoothly on Windows. and expect things to work as smoothly on Windows.
The following preprocessor macros are to be used for conditional The following preprocessor macros are to be used for conditional
@@ -51,15 +48,16 @@ Additionally, there are the compiler-specific macros:
- _MSC_VER is defined when using the Microsoft compiler - _MSC_VER is defined when using the Microsoft compiler
- __DMC__ is defined when using the Digital Mars C/C++ compiler - __DMC__ is defined when using the Digital Mars C/C++ compiler
G_OS_WIN32 implies using the Microsoft C runtime MSVCRT.DLL. GLib is G_OS_WIN32 implies using the Microsoft C runtime, normally
not known to work with the older CRTDLL.DLL runtime, or the static msvcrt.dll. GLib is not known to work with the older crtdll.dll
Microsoft C runtime libraries LIBC.LIB and LIBCMT.LIB. It apparently runtime, or the static Microsoft C runtime libraries libc.lib and
does work with the debugging version of MSVCRT.DLL, libcmt.lib. It apparently does work with the debugging version of
MSVCRTD.DLL. Presumably, if compiled with MSVC.NET, it also works with msvcrt.dll, msvcrtd.dll. If compiled with Microsoft compilers newer
MSVCR70.DLL. Please note that it's dubious if you would be allowed by than MSVC6, it also works with their compiler-specific runtimes, like
the license to distrubute a GLib linked to MSVCR70.DLL, as it is not msvcr70.dll or msvcr80.dll. Please note that it's non totally clear if
part of the operating system, but of the MSVC product. MSVCRT.DLL is you would be allowed by the license to distrubute a GLib linked to
part of Windows. msvcr70.dll or msvcr80.dll, as those are not part of the operating
system, but of the MSVC product. msvcrt.dll is part of Windows.
Building software that use GLib or GTK+ Building software that use GLib or GTK+
======================================= =======================================
@@ -68,13 +66,21 @@ Even building software that just *uses* GLib or GTK+ also require to
have the right compiler set up the right way, so if you intend to use 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. gcc, follow the relevant instructions below in that case, too.
Tor uses gcc with the -mms-bitfields flag (used to be called Tor uses gcc with the -mms-bitfields flag which means that in order to
-fnative-struct in gcc 2.x), which means that in order to use the use the prebuilt DLLs (especially of GTK+), if you compile your code
prebuilt DLLs (especially of GTK+), if you compile your code with gcc, with gcc, you *must* also use that flag. This flag means that the
you *must* also use that flag. This flag means that the struct layout struct layout rules are identical to those used by MSVC. This is
rules are identical to those used by MSVC. This is essential if the essential if the same DLLs are to be usable both from gcc- and
same DLLs are to be usable both from gcc- and MSVC-compiled code. This MSVC(6)-compiled code. Such compatibility is desirable.
definitely is something one wants.
When using the prebuilt GLib DLLs that use msvcrt.dll from code that
uses other C runtimes like for example msvcr70.dll, one should note
that one cannot use such GLib API that takes or returns file
descriptors. On Windows, a file descriptor (the small integer as
returned by open() and handled by related functions, and included in
the FILE struct) is an index into a table local to the C runtime
DLL. A file descriptor in one C runtime DLL does not have the same
meaning in another C runtime DLL.
Building GLib Building GLib
============= =============
@@ -88,14 +94,14 @@ gettext-runtime (0.13.1 or newer) from www.gimp.org/win32/downloads.html.
Autoconfiscated build (with gcc) Autoconfiscated build (with gcc)
================================ ================================
Tor uses gcc 3.3.1. Somewhat earlier or later versions presumably also Tor uses gcc 3.4.5 from www.mingw.org, and the rest of the mingw
work. utilities, including MSYS. Somewhat earlier or later versions of gcc
presumably also work fine. Using Cygwin's gcc with the -mno-cygwin
You can either use gcc running on Cygwin, or the "pure" mingw switch is not recommended. In theory it should work to use the
gcc. Using the latter might work better, or at least did at some -no-cygwin flag, but Tor hasn't tested that lately, and it can easily
point. You should be running Cygwin, or maybe cross-compiling from lead to confusion where one mixes up headers for Cygwin from
real Unix, for the configure script to work, obviously. It is also /usr/include with the headers one really should use. Ditto for
possible to use MSYS. libraries.
If you want to use mingw's gcc, install gcc, Win32 headers and If you want to use mingw's gcc, install gcc, Win32 headers and
binutils from www.mingw.org. Set up your PATH so that the mingw gcc is binutils from www.mingw.org. Set up your PATH so that the mingw gcc is
@@ -104,59 +110,51 @@ mingw gcc, you still want to have Cygwin to run make in.
Tor invokes configure using: Tor invokes configure using:
CC='gcc -mcpu=pentium3' CPPFLAGS='-I/target/include' CC='gcc -mtune=pentium3 -mthreads' CPPFLAGS='-I/opt/gnu/include' \
CFLAGS=-O3 LDFLAGS='-L/target/lib' ./configure --with-libiconv LDFLAGS='-L/opt/gnu/lib -Wl,--enable-auto-image-base' CFLAGS=-O2 \
--disable-gtk-doc --prefix=/target --host=i386-pc-mingw32 ./configure --disable-gtk-doc --prefix=$TARGET
(on a single line). The /target/include mentioned contains the header (on a single line). The /opt/gnu mentioned contains the header files
files for libintl and libiconv, and the (import) libraries are in for GNU and (import) libraries for GNU libintl. The build scripts used
/target/lib. This happens to be in the same tree where he configures to produce the prebuilt binaries are included in the "dev" packages.
GLib to be installed, but doesn't have to be.
Please note that the ./configure mechanism should not blindly be used Please note that the ./configure mechanism should not blindly be used
to build a GLib to be distributed to other developers because it to build a GLib to be distributed to other developers because it
produces a compiler-dependent glibconfig.h (and config.h, but that produces a compiler-dependent glibconfig.h. (Also config.h, but that
shouldn't matter, as it isn't seen by GLib-using applications). For shouldn't matter, as it isn't seen by GLib-using applications). For
instance, the typedef for gint64 is long long with gcc, but __int64 instance, the typedef for gint64 is long long with gcc, but __int64
with MSVC. with MSVC.
Except for this and a few other minor issues, there really shouldn't Except for this and a few other minor issues, there really shouldn't
be any reason to distribute separate GLib headers and DLLs for gcc and be any reason to distribute separate GLib headers and DLLs for gcc and
MSVC users, as the compilers generate code that uses the same C MSVC6 users, as the compilers generate code that uses the same C
runtime library. The DLL generated by either compiler is binary runtime library. The DLL generated by either compiler is binary
compatible with the other one. Thus one either has to manually edit compatible with the other one. Thus one either has to manually edit
glibconfig.h afterwards, or use the supplied glibconfig.h.win32 which glibconfig.h afterwards, or use the supplied glibconfig.h.win32 which
has been produced by running configure twice, once using gcc and once has been produced by running configure twice, once using gcc and once
using MSVC, and merging the resulting files with diff -D. using MSVC, and merging the resulting files with diff -D.
For GLib, the DLL is called For MSVC7 and later (Visual C++ .NET 2003, Visual C++ 2005, Visual C++
libglib-2.0-0.dll, and the import libraries libglib-2.0.dll.a and 2008 etc) it is preferred to use specific builds of GLib DLLs that use
glib-2.0.lib. Note that the "2.0" is part of the "basename" of the the same C runtime as the code that uses GLib. Such DLLs should be
library, it is not something that libtool has tucked on. The -0 suffix named differently than the ones that use msvcrt.dll.
is the value of "LT_CURRENT - LT_AGE". The 0 is *not* simply the micro
version number of GLib, although, for GLib 2.2.0, it happens to be the
same. The LT_CURRENT - LT_AGE value will on purpose be kept as zero as
long as binary compatibility is maintained. For the gory details, see
configure.in and libtool documentation.
If you want to run the Cygwin-hosted gcc, and still want to produce For GLib, the DLL is called libglib-2.0-0.dll, and the import
code that does not use Cygwin, but the msvcrt runtime, in theory it libraries libglib-2.0.dll.a and glib-2.0.lib. Note that the "2.0" is
should work to use the -no-cygwin flag, but Tor hasn't tested that part of the "basename" of the library, it is not something that
lately. libtool has added. The -0 suffix is the value of "LT_CURRENT -
LT_AGE". The 0 is *not* simply the micro version number of GLib,
If you would want to use the Cygwin tools to generate a GLib that although, for GLib 2.x.0, it happens to be the same. The LT_CURRENT -
*does* use the Cygwin runtime, the normal Unix configuration method LT_AGE value will on purpose be kept as zero as long as binary
should work as if on Unix. Note that successfully producing shared compatibility is maintained. For the gory details, see configure.in
libraries (DLLs) for Cygwin most probably requires you to have a very and libtool documentation.
new libtool. (And a new libtool probably requires rather new autoconf
and automake.) Tor hasn't tested this in a while, either.
Cross-compiling Cross-compiling
=============== ===============
It is possible to build GLib using a cross compiler. See It is possible to build GLib using a cross compiler. See
docs/reference/glib/html/glib-cross-compiling.html (part of the docs/reference/glib/html/glib-cross-compiling.html (part of the GLib
GLib reference manual) for more information. reference manual) for more information.
Building with MSVC Building with MSVC
================== ==================
@@ -200,10 +198,9 @@ nmake -f makefile.msc DEBUG=1
ways (for example the Gimp plug-in communication). ways (for example the Gimp plug-in communication).
] ]
Required libraries (not build from cvs) Required libraries (not build from svn)
------------------ ------------------
libintl (gnu-intl), libiconv libintl (gnu-intl),
libtiff, libpng, zlib, libjpeg
are available pre-built from the website mentioned above. are available pre-built from the website mentioned above.