2010-12-04 15:37:08 +01:00
2010-11-11 14:12:04 -05:00
2008-07-01 22:57:50 +00:00
2010-12-03 15:41:37 -05:00
2009-12-21 22:24:59 -05:00
2010-05-11 08:37:35 -04:00
2010-12-04 15:28:27 +02:00
2010-12-04 15:28:27 +02:00
2006-03-24 03:09:08 +00:00
2002-12-28 21:24:40 +00:00
2004-05-04 20:12:19 +00:00
2005-01-10 15:56:14 +00:00
2006-08-23 03:51:48 +00:00
2007-11-19 09:26:25 +00:00
2010-12-02 20:21:02 +01:00
2010-08-03 19:54:02 +02:00
2001-04-03 18:48:46 +00:00
2006-03-11 02:24:52 +00:00
2010-06-27 23:30:02 +03:00
2010-06-23 23:19:58 -04:00
2008-07-01 22:57:50 +00:00
2007-08-08 03:11:35 +00:00
2008-07-01 22:57:50 +00:00
2010-11-29 13:04:15 -05:00
2009-08-24 10:08:53 +03:00

The Win32 backend in GTK+ is not as stable or correct as the X11 one.



For prebuilt runtime and developer packages see

http://ftp.gnome.org/pub/gnome/binaries/win32/



Building GTK+ on Win32

======================



First you obviously need developer packages for the compile-time

dependencies: Pango, atk, glib, gettext-runtime, libiconv, libpng,

zlib, libtiff at least. See

http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies .



After installing the dependencies, there are two ways to build GTK+

for win32.



1) GNU tools, ./configure && make install

-----------------------------------------



This requires you have mingw and MSYS.



Use the configure script, and the resulting Makefiles (which use

libtool and gcc to do the compilation). I use this myself, but it can

be hard to setup correctly.



The full script I run to build GTK+ 2.16 unpacked from a source

distribution is as below. This is from bulding GTK+ 2.16.5. I don't

use any script like this to build the development branch, as I don't

distribute any binaries from development branches.



# This is a shell script that calls functions and scripts from

# tml@iki.fi's personal work envíronment. It is not expected to be

# usable unmodified by others, and is included only for reference.



MOD=gtk+

VER=2.16.5

REV=1

ARCH=win32



THIS=${MOD}_${VER}-${REV}_${ARCH}



RUNZIP=${MOD}_${VER}-${REV}_${ARCH}.zip

DEVZIP=${MOD}-dev_${VER}-${REV}_${ARCH}.zip



HEX=`echo $THIS | md5sum | cut -d' ' -f1`

TARGET=c:/devel/target/$HEX



usedev

usemsvs6



(



set -x



DEPS=`latest --arch=${ARCH} glib atk cairo pango libpng zlib libtiff jpeg`

PROXY_LIBINTL=`latest --arch=${ARCH} proxy-libintl`



PKG_CONFIG_PATH=

for D in $DEPS; do

    PATH=/devel/dist/${ARCH}/$D/bin:$PATH

    [ -d /devel/dist/${ARCH}/$D/lib/pkgconfig ] && PKG_CONFIG_PATH=/devel/dist/${ARCH}/$D/lib/pkgconfig:$PKG_CONFIG_PATH

done



LIBPNG=`latest --arch=${ARCH} libpng`

ZLIB=`latest --arch=${ARCH} zlib`

LIBTIFF=`latest --arch=${ARCH} libtiff`

JPEG=`latest --arch=${ARCH} jpeg`



patch -p0 <<'EOF'

EOF



lt_cv_deplibs_check_method='pass_all' \

CC='gcc -mtune=pentium3 -mthreads' \

CPPFLAGS="-I/devel/dist/${ARCH}/${LIBPNG}/include \

-I/devel/dist/${ARCH}/${ZLIB}/include \

-I/devel/dist/${ARCH}/${LIBTIFF}/include \

-I/devel/dist/${ARCH}/${JPEG}/include \

-I/devel/dist/${ARCH}/${PROXY_LIBINTL}/include" \

LDFLAGS="-L/devel/dist/${ARCH}/${LIBPNG}/lib \

-L/devel/dist/${ARCH}/${ZLIB}/lib \

-L/devel/dist/${ARCH}/${LIBTIFF}/lib \

-L/devel/dist/${ARCH}/${JPEG}/lib \

-L/devel/dist/${ARCH}/${PROXY_LIBINTL}/lib -Wl,--exclude-libs=libintl.a \

-Wl,--enable-auto-image-base" \

LIBS=-lintl \

CFLAGS=-O2 \

./configure \

--with-gdktarget=win32 \

--disable-gdiplus \

--with-included-immodules \

--without-libjasper \

--enable-debug=yes \

--enable-explicit-deps=no \

--disable-gtk-doc \

--disable-static \

--prefix=$TARGET &&



libtoolcacheize &&

rm gtk/gtk.def &&

(PATH="$PWD/gdk-pixbuf/.libs:/devel/target/$HEX/bin:$PATH" make -j3 install || (rm .libtool-cache* && PATH="/devel/target/$HEX/bin:$PATH" make -j3 install)) &&



PATH="/devel/target/$HEX/bin:$PATH" gdk-pixbuf-query-loaders >/devel/target/$HEX/etc/gtk-2.0/gdk-pixbuf.loaders &&



grep -v -E 'Automatically generated|Created by|LoaderDir =' <$TARGET/etc/gtk-2.0/gdk-pixbuf.loaders >$TARGET/etc/gtk-2.0/gdk-pixbuf.loaders.temp &&

    mv $TARGET/etc/gtk-2.0/gdk-pixbuf.loaders.temp $TARGET/etc/gtk-2.0/gdk-pixbuf.loaders &&

grep -v -E 'Automatically generated|Created by|ModulesPath =' <$TARGET/etc/gtk-2.0/gtk.immodules >$TARGET/etc/gtk-2.0/gtk.immodules.temp &&

    mv $TARGET/etc/gtk-2.0/gtk.immodules.temp $TARGET/etc/gtk-2.0/gtk.immodules &&



./gtk-zip.sh &&



mv /tmp/${MOD}-${VER}.zip /tmp/$RUNZIP &&

mv /tmp/${MOD}-dev-${VER}.zip /tmp/$DEVZIP



) 2>&1 | tee /devel/src/tml/packaging/$THIS.log



(cd /devel && zip /tmp/$DEVZIP src/tml/packaging/$THIS.{sh,log}) &&

manifestify /tmp/$RUNZIP /tmp/$DEVZIP



You should not just copy the above blindly. There are some things in

the script that are very specific to *my* build setup on *my* current

machine. For instance the "latest" command, the "usedev" and

"usemsvs6" shell functions, the /devel/dist folder. The above script

is really just meant for reference, to give an idea. You really need

to understand what things like PKG_CONFIG_PATH are and set them up

properly after installing the dependencies before building GTK+.



As you see above, after running configure, one can just say "make

install", like on Unix. A post-build fix is needed, running

gdk-pixbuf-query-loaders once more to get a correct gdk-pixbuf.loaders

file.



For a 64-bit build you need to remove the gtk/gtk.def file and let it

be regenerated by the makefilery. This is because the 64-bit GTK dll

has a slightly different list of exported function names. This is on

purpose and not a bug. The API is the same at the source level, and

the same #defines of some function names to actually have a _utf8

suffix is used (just to keep the header simpler). But the

corresponding non-suffixed function to maintain ABI stability are not

needed in the 64-bit case (because there are no older EXEs around that

would require such for ABI stability).





2) Microsoft's tools

--------------------



Use the Microsoft compiler, cl and Make, nmake. Say nmake -f

makefile.msc in gdk and gtk. Be prepared to manually edit various

makefile.msc files, and the makefile snippets in build/win32.



Alternative 1 also generates Microsoft import libraries (.lib), if you

have lib.exe available. It might also work for cross-compilation from

Unix.



I use method 1 myself. Hans Breuer has been taking care of the MSVC

makefiles. At times, we disagree a bit about various issues, and for

instance the makefile.msc files might not produce identically named

DLLs and import libraries as the "autoconfiscated" makefiles and

libtool do. If this bothers you, you will have to fix the makefiles.



Using GTK+ on Win32

===================



To use GTK+ on Win32, you also need either one of the above mentioned

compilers. Other compilers might work, but don't count on it. Look for

prebuilt developer packages (DLLs, import libraries, headers) on the

above website.



Multi-threaded use of GTK+ on Win32

===================================



Multi-threaded GTK+ programs might work on Windows in special simple

cases, but not in general. Sorry. If you have all GTK+ and GDK calls

in the same thread, it might work. Otherwise, probably not at

all. Possible ways to fix this are being investigated.



Wintab

======



The tablet support uses the Wintab API. The Wintab development kit is

no longer required. The wintab.h header file is bundled with GTK+

sources. Unfortunately it seems that only Wacom tablets come with

support for the Wintab API nowadays.



--Tor Lillqvist <tml@iki.fi>, <tml@novell.com>

S
Description
GTK is a multi-platform toolkit for creating graphical user interfaces.
Readme 570 MiB
Languages
C 90.8%
CSS 7.3%
Meson 0.5%
SCSS 0.4%
GLSL 0.3%
Other 0.5%