diff --git a/build/win32/Makefile.am b/build/win32/Makefile.am
index f48c8e3eb3..af2f66ded8 100644
--- a/build/win32/Makefile.am
+++ b/build/win32/Makefile.am
@@ -4,4 +4,8 @@ SUBDIRS = \
vs9 \
vs10
+EXTRA_DIST += \
+ gen-file-list-gtk.py \
+ gengir_gtk.bat
+
-include $(top_srcdir)/git.mk
diff --git a/build/win32/gen-file-list-gtk.py b/build/win32/gen-file-list-gtk.py
new file mode 100644
index 0000000000..a727d5c3ea
--- /dev/null
+++ b/build/win32/gen-file-list-gtk.py
@@ -0,0 +1,140 @@
+#!/usr/bin/python
+# vim: encoding=utf-8
+# Generate the file lists for processing with g-ir-scanner
+import os
+import sys
+import re
+import string
+import subprocess
+import optparse
+
+def gen_gdk_filelist(srcroot, subdir, dest):
+ vars = read_vars_from_AM(os.path.join(srcroot, subdir, 'Makefile.am'),
+ vars = {},
+ conds = {},
+ filters = ['gdk_public_h_sources', 'gdk_c_sources'])
+
+ vars['gdk_enums'] = 'gdkenumtypes.c gdkenumtypes.h'
+
+ files = vars['gdk_public_h_sources'].split() + \
+ vars['gdk_c_sources'].split() + \
+ vars['gdk_enums'].split()
+
+ sources = [i for i in files if (i != 'gdkkeysyms-compat.h')]
+
+ with open(dest, 'w') as d:
+ for i in sources:
+ d.write(srcroot + '\\' + subdir + '\\' + i.replace('/', '\\') + '\n')
+
+def gen_filelist_gtk(srcroot, subdir, dest):
+ vars = read_vars_from_AM(os.path.join(srcroot, 'gtk', 'Makefile.am'),
+ vars = {},
+ conds = {'USE_WIN32':True},
+ filters = ['gtkinclude_HEADERS',
+ 'deprecatedinclude_HEADERS',
+ 'gtk_base_c_sources'])
+
+ vars['gtk_other_src'] = 'gtkprintoperation-win32.c gtktypebuiltins.h gtktypebuiltins.c'
+
+ files = vars['gtkinclude_HEADERS'].split() + \
+ vars['deprecatedinclude_HEADERS'].split() + \
+ vars['gtk_base_c_sources'].split() + \
+ vars['gtk_other_src'].split()
+
+ sources = [i for i in files if not (i.endswith('private.h')) and i != 'gtktextdisplay.h' and i != 'gtktextlayout.h']
+
+ with open(dest, 'w') as d:
+ for i in sources:
+ d.write(srcroot + '\\' + subdir + '\\' + i.replace('/', '\\') + '\n')
+
+def read_vars_from_AM(path, vars = {}, conds = {}, filters = None):
+ '''
+ path: path to the Makefile.am
+ vars: predefined variables
+ conds: condition variables for Makefile
+ filters: if None, all variables defined are returned,
+ otherwise, it is a list contains that variables should be returned
+ '''
+ cur_vars = vars.copy()
+ RE_AM_VAR_REF = re.compile(r'\$\((\w+?)\)')
+ RE_AM_VAR = re.compile(r'^\s*(\w+)\s*=(.*)$')
+ RE_AM_INCLUDE = re.compile(r'^\s*include\s+(\w+)')
+ RE_AM_CONTINUING = re.compile(r'\\\s*$')
+ RE_AM_IF = re.compile(r'^\s*if\s+(\w+)')
+ RE_AM_ELSE = re.compile(r'^\s*else')
+ RE_AM_ENDIF = re.compile(r'^\s*endif')
+ def am_eval(cont):
+ return RE_AM_VAR_REF.sub(lambda x: cur_vars.get(x.group(1), ''), cont)
+ with open(path, 'r') as f:
+ contents = f.readlines()
+ #combine continuing lines
+ i = 0
+ ncont = []
+ while i < len(contents):
+ line = contents[i]
+ if RE_AM_CONTINUING.search(line):
+ line = RE_AM_CONTINUING.sub('', line)
+ j = i + 1
+ while j < len(contents) and RE_AM_CONTINUING.search(contents[j]):
+ line += RE_AM_CONTINUING.sub('', contents[j])
+ j += 1
+ else:
+ if j < len(contents):
+ line += contents[j]
+ i = j
+ else:
+ i += 1
+ ncont.append(line)
+
+ #include, var define, var evaluation
+ i = -1
+ skip = False
+ oldskip = []
+ while i < len(ncont) - 1:
+ i += 1
+ line = ncont[i]
+ mo = RE_AM_IF.search(line)
+ if mo:
+ oldskip.append(skip)
+ skip = False if mo.group(1) in conds and conds[mo.group(1)] \
+ else True
+ continue
+ mo = RE_AM_ELSE.search(line)
+ if mo:
+ skip = not skip
+ continue
+ mo = RE_AM_ENDIF.search(line)
+ if mo:
+ if oldskip:
+ skip = oldskip.pop()
+ continue
+ if not skip:
+ mo = RE_AM_INCLUDE.search(line)
+ if mo:
+ cur_vars.update(read_vars_from_AM(am_eval(mo.group(1)), cur_vars, conds, None))
+ continue
+ mo = RE_AM_VAR.search(line)
+ if mo:
+ cur_vars[mo.group(1)] = am_eval(mo.group(2).strip())
+ continue
+
+ #filter:
+ if filters != None:
+ ret = {}
+ for i in filters:
+ ret[i] = cur_vars.get(i, '')
+ return ret
+ else:
+ return cur_vars
+
+def main(argv):
+ srcroot = '..\\..'
+ subdir_gdk = 'gdk'
+ subdir_gtk = 'gtk'
+
+ gen_gdk_filelist(srcroot, subdir_gdk, 'gdk_list')
+ gen_filelist_gtk(srcroot, subdir_gtk, 'gtk_list')
+ return 0
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
diff --git a/build/win32/gengir_gtk.bat b/build/win32/gengir_gtk.bat
new file mode 100644
index 0000000000..d8a82f2bea
--- /dev/null
+++ b/build/win32/gengir_gtk.bat
@@ -0,0 +1,176 @@
+@echo off
+
+setlocal EnableDelayedExpansion
+
+rem Needed environmental variables:
+rem PLAT: Windows platform-Win32 (i.e. x86) or x64 (i.e. x86-64)
+rem CONF: Configuration Type, Release or Debug
+rem VSVER: Visual C++ version used [9, 10 or 11]
+rem BASEDIR: Where the dependent libraries/headers are located
+rem PKG_CONFIG_PATH: Where the GLib/ATK/Pango/GDK-Pixbuf and their dependent pkg-config .pc files can be found
+rem MINGWDIR: Installation path of MINGW GCC, so gcc.exe can be found in %MINGWDIR%\bin.
+
+rem Note that the Python executable/installation and all the runtime dependencies of the
+rem library/libraries need to be in your PATH or %BASEBIN%\bin.
+
+rem Check the environemental variables...
+if /i "%PLAT%" == "Win32" goto PLAT_OK
+if /i "%PLAT%" == "x64" goto PLAT_OK
+if /i "%PLAT%" == "x86" (
+ set PLAT=Win32
+ goto PLAT_OK
+)
+if /i "%PLAT%" == "x86-64" (
+ set PLAT=x64
+ goto PLAT_OK
+)
+goto ERR_PLAT
+
+:PLAT_OK
+if "%VSVER%" == "9" goto VSVER_OK
+if "%VSVER%" == "10" goto VSVER_OK
+if "%VSVER%" == "11" goto VSVER_OK
+goto ERR_VSVER
+:VSVER_OK
+if /i "%CONF%" == "Release" goto CONF_OK
+if /i "%CONF%" == "Debug" goto CONF_OK
+goto ERR_CONF
+:CONF_OK
+if "%BASEDIR%" == "" goto ERR_BASEDIR
+if not exist %BASEDIR% goto ERR_BASEDIR
+
+if "%PKG_CONFIG_PATH%" == "" goto ERR_PKGCONFIG
+if not exist %PKG_CONFIG_PATH%\gobject-2.0.pc goto ERR_PKGCONFIG
+
+if "%MINGWDIR%" == "" goto ERR_MINGWDIR
+if not exist %MINGWDIR%\bin\gcc.exe goto ERR_MINGWDIR
+
+set CC=cl
+set BINDIR=%CD%\vs%VSVER%\%CONF%\%PLAT%\bin
+set INCLUDE=%BASEDIR%\include\glib-2.0;%BASEDIR%\lib\glib-2.0\include;%INCLUDE%
+set LIB=%BINDIR%;%BASEDIR%\lib;%LIB%
+set PATH=%BINDIR%;%BASEDIR%\bin;%PATH%;%MINGWDIR%\bin
+set PYTHONPATH=%BASEDIR%\lib\gobject-introspection;%BINDIR%
+
+echo Creating filelist files for generating GDK3/GTK3 .gir's...
+call python gen-file-list-gtk.py
+
+echo Setup .bat for generating GDK3/GTK3 .gir's...
+
+rem ===============================================================================
+rem Begin setup of gtk_gir.bat to create Gdk-3.0.gir
+rem (The ^^ is necessary to span the command to multiple lines on Windows cmd.exe!)
+rem ===============================================================================
+
+echo echo Generating Gdk-3.0.gir...> gtk_gir.bat
+echo @echo off>> gtk_gir.bat
+echo.>> gtk_gir.bat
+rem ===============================================================
+rem Setup the command line flags to g-ir-scanner for Gdk-3.0.gir...
+rem ===============================================================
+echo python %BASEDIR%\bin\g-ir-scanner --verbose -I..\.. -I..\..\gdk ^^>> gtk_gir.bat
+echo -I%BASEDIR%\include\glib-2.0 -I%BASEDIR%\lib\glib-2.0\include ^^>> gtk_gir.bat
+echo -I%BASEDIR%\include\pango-1.0 -I%BASEDIR%\include\atk-1.0 ^^>> gtk_gir.bat
+echo -I%BASEDIR%\include\gdk-pixbuf-2.0 -I%BASEDIR%\include ^^>> gtk_gir.bat
+echo --namespace=Gdk --nsversion=3.0 ^^>> gtk_gir.bat
+echo --include=Gio-2.0 --include=GdkPixbuf-2.0 ^^>> gtk_gir.bat
+echo --include=Pango-1.0 --include=cairo-1.0 ^^>> gtk_gir.bat
+echo --no-libtool --library=gdk-3-vs%VSVER% ^^>> gtk_gir.bat
+echo --reparse-validate --add-include-path=%BASEDIR%\share\gir-1.0 --add-include-path=. ^^>> gtk_gir.bat
+echo --pkg-export gdk-3.0 --warn-all --c-include="gdk/gdk.h" ^^>> gtk_gir.bat
+echo -I..\.. -DG_LOG_DOMAIN=\"Gdk\" -DGDK_COMPILATION ^^>> gtk_gir.bat
+echo --filelist=gdk_list ^^>> gtk_gir.bat
+echo -o Gdk-3.0.gir>> gtk_gir.bat
+echo.>> gtk_gir.bat
+
+echo Completed setup of .bat for generating Gdk-3.0.gir.
+echo.>> gtk_gir.bat
+
+rem =================================================
+rem Finish setup of gtk_gir.bat to create Gtk-3.0.gir
+rem =================================================
+
+rem ===============================================================================
+rem Begin setup of gtk_gir.bat to create Gtk-3.0.gir
+rem (The ^^ is necessary to span the command to multiple lines on Windows cmd.exe!)
+rem ===============================================================================
+
+echo echo Generating Gtk-3.0.gir...>> gtk_gir.bat
+echo.>> gtk_gir.bat
+rem ===============================================================
+rem Setup the command line flags to g-ir-scanner for Gtk-3.0.gir...
+rem ===============================================================
+echo python %BASEDIR%\bin\g-ir-scanner --verbose -I..\.. -I..\..\gtk -I..\..\gdk ^^>> gtk_gir.bat
+echo -I%BASEDIR%\include\glib-2.0 -I%BASEDIR%\lib\glib-2.0\include ^^>> gtk_gir.bat
+echo -I%BASEDIR%\include\pango-1.0 -I%BASEDIR%\include\atk-1.0 ^^>> gtk_gir.bat
+echo -I%BASEDIR%\include\gdk-pixbuf-2.0 -I%BASEDIR%\include ^^>> gtk_gir.bat
+echo --namespace=Gtk --nsversion=3.0 ^^>> gtk_gir.bat
+echo --include=Atk-1.0 ^^>> gtk_gir.bat
+echo --include-uninstalled=./Gdk-3.0.gir ^^>> gtk_gir.bat
+echo --no-libtool --library=gtk-3-vs%VSVER% ^^>> gtk_gir.bat
+echo --reparse-validate --add-include-path=%BASEDIR%\share\gir-1.0 --add-include-path=. ^^>> gtk_gir.bat
+echo --pkg-export gtk+-3.0 --warn-all --c-include="gtk/gtkx.h" ^^>> gtk_gir.bat
+echo -I..\.. -DG_LOG_DOMAIN=\"Gtk\" -DGTK_LIBDIR=\"/dummy/lib\" ^^>> gtk_gir.bat
+echo -DGTK_DATADIR=\"/dummy/share\" -DGTK_DATA_PREFIX=\"/dummy\" ^^>> gtk_gir.bat
+echo -DGTK_SYSCONFDIR=\"/dummy/etc\" -DGTK_VERSION=\"3.6.2\" ^^>> gtk_gir.bat
+echo -DGTK_BINARY_VERSION=\"3.0.0\" -DGTK_HOST=\"i686-pc-vs%VSVER%\" ^^>> gtk_gir.bat
+echo -DGTK_COMPILATION -DGTK_PRINT_BACKENDS=\"file\" ^^>> gtk_gir.bat
+echo -DGTK_PRINT_PREVIEW_COMMAND=\"undefined-gtk-print-preview-command\" ^^>> gtk_gir.bat
+echo -DGTK_FILE_SYSTEM_ENABLE_UNSUPPORTED -DGTK_PRINT_BACKEND_ENABLE_UNSUPPORTED ^^>> gtk_gir.bat
+echo -DINCLUDE_IM_am_et -DINCLUDE_IM_cedilla -DINCLUDE_IM_cyrillic_translit ^^>> gtk_gir.bat
+echo -DINCLUDE_IM_ime -DINCLUDE_IM_inuktitut -DINCLUDE_IM_ipa ^^>> gtk_gir.bat
+echo -DINCLUDE_IM_multipress -DINCLUDE_IM_thai -DINCLUDE_IM_ti_er ^^>> gtk_gir.bat
+echo -DINCLUDE_IM_ti_et -DINCLUDE_IM_viqr --filelist=gtk_list ^^>> gtk_gir.bat
+echo -o Gtk-3.0.gir>> gtk_gir.bat
+echo.>> gtk_gir.bat
+
+echo Completed setup of .bat for generating Gtk-3.0.gir.
+echo.>> gtk_gir.bat
+
+rem =================================================
+rem Finish setup of gtk_gir.bat to create Gtk-3.0.gir
+rem =================================================
+
+rem =======================
+rem Now generate the .gir's
+rem =======================
+CALL gtk_gir.bat
+
+rem Clean up the .bat/filelists for generating the .gir files...
+del gtk_gir.bat
+del gdk_list
+del gtk_list
+
+rem Now compile the generated .gir files
+%BASEDIR%\bin\g-ir-compiler --includedir=. --debug --verbose Gdk-3.0.gir -o Gdk-3.0.typelib
+%BASEDIR%\bin\g-ir-compiler --includedir=. --debug --verbose Gtk-3.0.gir -o Gtk-3.0.typelib
+rem Copy the generated .girs and .typelibs to their appropriate places
+
+mkdir ..\..\build\win32\vs%VSVER%\%CONF%\%PLAT%\share\gir-1.0
+move /y *.gir %BASEDIR%\share\gir-1.0\
+
+mkdir ..\..\build\win32\vs%VSVER%\%CONF%\%PLAT%\lib\girepository-1.0
+move /y *.typelib %BASEDIR%\lib\girepository-1.0\
+
+goto DONE
+
+:ERR_PLAT
+echo You need to specify a valid Platform [set PLAT=Win32 or PLAT=x64]
+goto DONE
+:ERR_VSVER
+echo You need to specify your Visual Studio version [set VSVER=9 or VSVER=10 or VSVER=11]
+goto DONE
+:ERR_CONF
+echo You need to specify a valid Configuration [set CONF=Release or CONF=Debug]
+goto DONE
+:ERR_BASEDIR
+echo You need to specify a valid BASEDIR.
+goto DONE
+:ERR_PKGCONFIG
+echo You need to specify a valid PKG_CONFIG_PATH
+goto DONE
+:ERR_MINGWDIR
+echo You need to specify a valid MINGWDIR, where a valid gcc installation can be found.
+goto DONE
+:DONE
+
diff --git a/build/win32/vs10/Makefile.am b/build/win32/vs10/Makefile.am
index 9f93d4c35d..24e5f46886 100644
--- a/build/win32/vs10/Makefile.am
+++ b/build/win32/vs10/Makefile.am
@@ -1,29 +1,30 @@
include $(top_srcdir)/Makefile.decl
-EXTRA_DIST += \
- README.txt \
- gtk+.sln \
- gtk+.props \
- gdk-win32.vcxproj \
- gdk-win32.vcxproj.filters \
- gdk.vcxproj \
- gdk.vcxprojin \
- gdk.vcxproj.filters \
- gdk.vcxproj.filtersin \
- gtk.vcxproj \
- gtk.vcxprojin \
- gtk.vcxproj.filters \
- gtk.vcxproj.filtersin \
- gtk3-demo.vcxproj \
- gtk3-demo.vcxproj.filters \
- gtk3-demo-application.vcxproj \
- gtk3-demo-application.vcxproj.filters \
- gtka11y.vcxproj \
- gtka11y.vcxproj.filters \
- gtka11y.vcxprojin \
- gtka11y.vcxproj.filtersin \
- gailutil.vcxproj \
- gailutil.vcxproj.filters \
+EXTRA_DIST += \
+ README.txt \
+ gtk+.sln \
+ gtk+.props \
+ gdk-win32.vcxproj \
+ gdk-win32.vcxproj.filters \
+ gdk.vcxproj \
+ gdk.vcxprojin \
+ gdk.vcxproj.filters \
+ gdk.vcxproj.filtersin \
+ gtk.vcxproj \
+ gtk.vcxprojin \
+ gtk.vcxproj.filters \
+ gtk.vcxproj.filtersin \
+ gtk3-demo.vcxproj \
+ gtk3-demo.vcxproj.filters \
+ gtk3-demo-application.vcxproj \
+ gtk3-demo-application.vcxproj.filters \
+ gtka11y.vcxproj \
+ gtka11y.vcxproj.filters \
+ gtka11y.vcxprojin \
+ gtka11y.vcxproj.filtersin \
+ gailutil.vcxproj \
+ gailutil.vcxproj.filters \
+ gengir.vcxproj \
install.vcxproj
-include $(top_srcdir)/git.mk
diff --git a/build/win32/vs10/gengir.vcxproj b/build/win32/vs10/gengir.vcxproj
new file mode 100644
index 0000000000..3d94c27fa5
--- /dev/null
+++ b/build/win32/vs10/gengir.vcxproj
@@ -0,0 +1,108 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {2093D218-190E-4194-9421-3BA7CBF33B15}
+ gengir
+ Win32Proj
+
+
+
+ Utility
+ MultiByte
+ true
+
+
+ Utility
+ MultiByte
+
+
+ Utility
+ MultiByte
+ true
+
+
+ Utility
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(GlibEtcInstallRoot)\
+
+ $(GlibEtcInstallRoot)\
+
+ $(GlibEtcInstallRoot)\
+
+ $(GlibEtcInstallRoot)\
+
+
+
+
+ $(DoGenGir)
+
+
+
+
+ $(DoGenGir)
+
+
+
+
+ $(DoGenGir)
+
+
+
+
+ $(DoGenGir)
+
+
+
+
+ {fc5aadb5-95cd-4bf0-ba8b-0c16fe7073f7}
+ false
+
+
+ {fc5aadb5-95cd-4bf0-ba8b-0c16fe7073f5}
+ false
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build/win32/vs9/Makefile.am b/build/win32/vs9/Makefile.am
index 02437aaf63..d52df20e49 100644
--- a/build/win32/vs9/Makefile.am
+++ b/build/win32/vs9/Makefile.am
@@ -1,19 +1,20 @@
include $(top_srcdir)/Makefile.decl
-EXTRA_DIST += \
- README.txt \
- gtk+.sln \
- gtk+.vsprops \
- gdk-win32.vcproj \
- gdk.vcproj \
- gdk.vcprojin \
- gtk.vcproj \
- gtk.vcprojin \
- gtk3-demo.vcproj \
- gtk3-demo-application.vcproj \
- gtka11y.vcproj \
- gtka11y.vcprojin \
- gailutil.vcproj \
+EXTRA_DIST += \
+ README.txt \
+ gtk+.sln \
+ gtk+.vsprops \
+ gdk-win32.vcproj \
+ gdk.vcproj \
+ gdk.vcprojin \
+ gtk.vcproj \
+ gtk.vcprojin \
+ gtk3-demo.vcproj \
+ gtk3-demo-application.vcproj \
+ gtka11y.vcproj \
+ gtka11y.vcprojin \
+ gailutil.vcproj \
+ gengir.vcproj \
install.vcproj
-include $(top_srcdir)/git.mk
diff --git a/build/win32/vs9/gengir.vcproj b/build/win32/vs9/gengir.vcproj
new file mode 100644
index 0000000000..ef20564fbe
--- /dev/null
+++ b/build/win32/vs9/gengir.vcproj
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+