Tor Lillqvist <tml@iki.fi>
Hans Breuer <hans@breuer.org>

Note that this document is not really maintained in a serious
fashion. Lots of information here might be misleading or outdated. You
have been warned.

The general parts, and the section about gcc and autoconfiscated
build, and about a Visual Studio build are by Tor Lillqvist.

General
=======

For prebuilt binaries (DLLs and EXEs) and developer packages (headers,
import libraries) of GLib, Pango, GTK+ etc for Windows, go to
http://www.gtk.org/download-windows.html . They are for "native"
Windows meaning they use the Win32 API and Microsoft C runtime library
only. No POSIX (Unix) emulation layer like Cygwin in involved.

To build GLib on Win32, you can use either gcc ("mingw") or the
Microsoft compiler and tools. For the latter, MSVC6 and later have
been used successfully. Also the Digital Mars C/C++ compiler has
reportedly been used.

You can also cross-compile GLib for Windows from Linux using the
cross-compiling mingw packages for your distro.

Note that to just *use* GLib on Windows, there is no need to build it
yourself.

On Windows setting up a correct build environment can be quite a task,
especially if you are used to just type "./configure; make" on Linux,
and expect things to work as smoothly on Windows.

The following preprocessor macros are to be used for conditional
compilation related to Win32 in GLib-using code:

- G_OS_WIN32 is defined when compiling for native Win32, without
  any POSIX emulation, other than to the extent provided by the
  bundled Microsoft C library (msvcr*.dll).

- 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 by a GLib
  for Cygwin.

- G_PLATFORM_WIN32 is defined when either G_OS_WIN32 or G_WITH_CYGWIN
  is defined.

These macros are defined in glibconfig.h, and are thus available in
all source files that include <glib.h>.

Additionally, there are the compiler-specific macros:
- __GNUC__ is defined when using gcc
- _MSC_VER is defined when using the Microsoft compiler
- __DMC__ is defined when using the Digital Mars C/C++ compiler

G_OS_WIN32 implies using the Microsoft C runtime, normally
msvcrt.dll. GLib is not known to work with the older crtdll.dll
runtime, or the static Microsoft C runtime libraries libc.lib and
libcmt.lib. It apparently does work with the debugging version of
msvcrt.dll, msvcrtd.dll. If compiled with Microsoft compilers newer
than MSVC6, it also works with their compiler-specific runtimes, like
msvcr70.dll or msvcr80.dll. Please note that it's non totally clear if
you would be allowed by the license to distrubute a GLib linked to
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.

For people using Visual Studio 2005 or later:

If you are building GLib-based libraries or applications, or GLib itself
and you see a C4819 error (or warning, before C4819 is treated as an error
in msvc_recommended_pragmas.h), please be advised that this error/warning should
not be disregarded, as this likely means portions of the build is not being
done correctly, as this is an issue of Visual Studio running on CJK (East Asian)
locales.  This is an issue that also affects builds of other projects, such as
QT, Firefox, LibreOffice/OpenOffice, Pango and GTK+, along with many other projects.

To overcome this problem, please set your system's locale setting for non-Unicode to
English (United States), reboot, and restart the build, and the code should build
normally.  See also this GNOME Wiki page [1] that gives a bit further info on this.

In Visual Studio 2015 and later, the /utf-8 option is provided, which is set by the
latest Meson releases when building GLib, and can be used in other project files
that uses GLib to avoid the need of setting your system's locale setting for
non-Unicode and the subsequent requirement to restart the system.

Building software that use GLib or GTK+
=======================================

Building software that just *uses* GLib or GTK+ also require to have
the right compiler set up the right way. If you intend to use gcc,
follow the relevant instructions below in that case, too.

Tor uses gcc with the -mms-bitfields flag which means that in order to
use the prebuilt DLLs (especially of GTK+), if you compile your code
with gcc, you *must* also use that flag. This flag means that the
struct layout rules are identical to those used by MSVC. This is
essential if the same DLLs are to be usable both from gcc- and
MSVC-compiled code. Such compatibility is desirable.

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 take 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
=============

Again, first decide whether you really want to do this.

Before building GLib you must also have a GNU gettext-runtime
developer package. Get prebuilt binaries of gettext-runtime from
http://www.gtk.org/download-windows.html .

Autoconfiscated build (with gcc)
================================

Tor uses gcc 3.4.5 and the rest of the mingw utilities, including MSYS
from www.mingw.org. Somewhat earlier or later versions of gcc
presumably also work fine.

Using Cygwin's gcc with the -mno-cygwin switch is not recommended. In
theory it should work, but Tor hasn't tested that lately. It can
easily lead to confusing situations where one mixes headers for Cygwin
from /usr/include with the headers for native software one really
should use. Ditto for libraries.

If you want to use mingw's gcc, install gcc, win32api, binutils and
MSYS from www.mingw.org.

Tor invokes configure using:

CC='gcc -mtune=pentium3 -mthreads' CPPFLAGS='-I/opt/gnu/include' \
	LDFLAGS='-L/opt/gnu/lib -Wl,--enable-auto-image-base' CFLAGS=-O2 \
	./configure --disable-gtk-doc --prefix=$TARGET

The /opt/gnu mentioned contains the header files for GNU and (import)
libraries for GNU libintl. The build scripts used to produce the
prebuilt binaries are included in the "dev" packages.

Please note that the ./configure mechanism should not blindly be used
to build a GLib to be distributed to other developers because it
produces a compiler-dependent glibconfig.h. For instance, the typedef
for gint64 is long long with gcc, but __int64 with MSVC.

Except for this and a few other minor issues, there shouldn't be any
reason to distribute separate GLib headers and DLLs for gcc and MSVC6
users, as the compilers generate code that uses the same C runtime
library.

The DLL generated by either compiler is binary compatible with the
other one. Thus one either has to manually edit glibconfig.h
afterwards.

For MSVC7 and later (Visual C++ .NET 2003, Visual C++ 2005, Visual C++
2008 etc) it is preferred to use specific builds of GLib DLLs that use
the same C runtime as the code that uses GLib.

For GLib, the DLL that uses msvcrt.dll is called libglib-2.0-0.dll,
and the import libraries libglib-2.0.dll.a and glib-2.0.lib. Note that
the "2.0" is part of the "basename" of the library, it is not
something that libtool has added. The -0 suffix is added by libtool
and is the value of "LT_CURRENT - LT_AGE". The 0 should *not* be
thought to be part of the version number of GLib. 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.ac
and libtool documentation.

Building with Visual Studio
===========================

Meson is now the supported method of building GLib using Visual Studio.

Note that you will need a libintl implementation, zlib, and libFFI, and
optionally PCRE1, which should preferably be built with the same compiler
that is now being used to build GLib.  Ensure that their headers, .lib's
and DLLs can be found in the paths specified by the INCLUDE, LIB and PATH
envvars.  The Meson build process will pull in a copy of the ZLib and the
libFFI sources if they cannot be found, and will build an in-source copy
of PCRE1 if PCRE1 cannt be found.

One can also refer to the following page for building the dependencies:

https://wiki.gnome.org/Projects/GTK%2B/Win32/MSVCCompilationOfGTKStack

You will also need the following items:
-Python 3.6.x, you need the 32-bit version if you are building GLib
 as a 32-bit/x86 build, or the amd64/x64 version for building 64-bit/x86-64
 builds.  You will then need to install or update Meson by using pip.
-The Ninja build tool, required for Visual Studio 2008, 2012 and 2013 builds,
 and optional for 2010, 2015 and 2017 builds, where Visual Studio projects
 can be generated instead of the Ninja build files.
-GIT for Windows is highly recommended, in the case where some required
 dependencies are not found, and Meson makes use of GIT to download
 the sources to build in the build process.

To do a build using Meson, do the following:

-Open a Visual Studio (or SDK) command prompt that matches the Visual Studio
 version and build platform (Win32/x86, x64, etc.) that will be used in all
 the following steps.

-Create an empty directory/folder for the build.  It needs to be in the same
 drive as where your GLib sources are located (i.e. $(GLIB_SRCDIR)).  cd into
 that directory/folder.

-Setup your PATH envvar:

   set PATH=%PATH%;$(PYTHON_INSTALL_DIR);$(NINJA_DIR)

 where PYTHON_INSTALL_DIR is where Python 3.6.x+ is installed to, and NINJA_DIR
 is where your ninja executable can be found.  The NINJA_DIR can be omitted if one
 passes --backend=vs to the Meson configuration line, for Visual Studio 2010, 2015
 and 2017 builds.

-Configure the build using Meson:

    python $(PYTHON_INSTALL_DIR)\scripts\meson.py $(GLIB_SRCDIR) --buildtype=$(build_configuration) --prefix=$(INSTALL_PREFIX) [--backend=vs]

 Please see the Meson docs for an explanation for --buildtype, the path passed for
 --prefix need not to be on the same drive as where the build is carried out, but
 it is recommended to use forward slashes for this path.  The --backend=vs can be
 used if the Visual Studio project generator is preferred over using Ninja, for
 Visual Studio 2010, 2015 and 2017 builds.

-Build, test and install the build:
 Run ninja (and ninja test and ninja install) or open the generated Visual Studio
 projects to compile, test and install the build.

Note that if building the sources with Visual Studio 2008, note the following
additional items:

-You need to run the following lines from your build directory, to embed the manifests
 that are generated during the build, assuming the built binaries are installed
 to $(PREFIX), after a successful build/installation:

for /r %f in (*.dll.manifest) do if exist $(PREFIX)\bin\%~nf mt /manifest %f $(PREFIX)\bin\%~nf;2
for /r %f in (*.exe.manifest) do if exist $(PREFIX)\bin\%~nf mt /manifest %f $(PREFIX)\bin\%~nf;1

-If building for amd64/x86_64/x64, sometimes the compilation of sources may seem to hang, which
 is caused by an optimization issue in the 2008 x64 compiler.  You need to use Task Manager to
 remove all running instances of cl.exe, which will cause the build process to terminate.  Update
 the build flags of the sources that hang on compilation by changing its "/O2" flag to "/O1"
 in build.ninja, and  retry the build, where things should continue to build normally.  At the
 time of writing, this is needed for compiling glib/gtestutils.c,  gio/gsettings.c and
 gio/gsettingsschema.c
