diff --git a/build/win32/Makefile.am b/build/win32/Makefile.am
index b72d35d9fe..6cbb59645d 100644
--- a/build/win32/Makefile.am
+++ b/build/win32/Makefile.am
@@ -7,4 +7,6 @@ SUBDIRS = \
vs11 \
vs12
+EXTRA_DIST += process-in-win32.py
+
-include $(top_srcdir)/git.mk
diff --git a/build/win32/process-in-win32.py b/build/win32/process-in-win32.py
new file mode 100644
index 0000000000..00c4c01938
--- /dev/null
+++ b/build/win32/process-in-win32.py
@@ -0,0 +1,100 @@
+#!/usr/bin/python
+# vim: encoding=utf-8
+# expand Windows-specific *.in files
+# for Visual Studio Builds
+
+import os
+import sys
+import re
+import string
+import argparse
+
+
+def open_compat(src, mode):
+ if (sys.version_info.major < 3):
+ return open(src, mode)
+ else:
+ return open(src, mode, encoding='utf-8', errors='surrogateescape')
+
+def get_version(srcroot):
+ ver = {}
+ RE_VERSION = re.compile(r'^m4_define\(\[(gtk_\w+)\],\s*\[(\d+)\]\)')
+ RE_FLOAT_VERSION = re.compile(r'^m4_define\(\[(gtk_\w+)\],\s*\[(\d+\.\d*)\]\)')
+ with open(os.path.join(srcroot, 'configure.ac'), 'r') as ac:
+ for i in ac:
+ mo = RE_VERSION.search(i)
+ if mo:
+ ver[mo.group(1).upper()] = int(mo.group(2))
+ mo = RE_FLOAT_VERSION.search(i)
+ if mo:
+ ver[mo.group(1).upper()] = float(mo.group(2))
+
+ ver['GTK_BINARY_AGE'] = 100 * ver['GTK_MINOR_VERSION'] + ver['GTK_MICRO_VERSION']
+ ver['GTK_VERSION'] = '%d.%d.%d' % (ver['GTK_MAJOR_VERSION'],
+ ver['GTK_MINOR_VERSION'],
+ ver['GTK_MICRO_VERSION'])
+ ver['LT_RELEASE'] = '%d.%d' % (ver['GTK_MAJOR_VERSION'], ver['GTK_MINOR_VERSION'])
+ ver['LT_CURRENT'] = 100 * \
+ ver['GTK_MINOR_VERSION'] + \
+ ver['GTK_MICRO_VERSION'] - \
+ ver['GTK_INTERFACE_AGE']
+ ver['LT_REVISION'] = ver['GTK_INTERFACE_AGE']
+ ver['LT_AGE'] = ver['GTK_BINARY_AGE'] - ver['GTK_INTERFACE_AGE']
+ ver['LT_CURRENT_MINUS_AGE'] = ver['LT_CURRENT'] - ver['LT_AGE']
+ return ver
+
+def process_in(src, dest, vars):
+ RE_VARS = re.compile(r'@(\w+?)@')
+
+ with open_compat(src, 'r') as s:
+ with open_compat(dest, 'w') as d:
+ for i in s:
+ i = RE_VARS.sub(lambda x: str(vars[x.group(1)]), i)
+ d.write(i)
+
+def get_srcroot():
+ if not os.path.isabs(__file__):
+ path = os.path.abspath(__file__)
+ else:
+ path = __file__
+ dirname = os.path.dirname(path)
+ return os.path.abspath(os.path.join(dirname, '..', '..'))
+
+def main(argv):
+ prog_desc = 'Create Various autogenerated Win32-specific Source Files'
+ parser = argparse.ArgumentParser(description=prog_desc)
+ parser.add_argument('--gtkwin32rc', dest='gtkwin32rc', action='store_const',
+ const=1,
+ help='Generate gtk-win32.rc')
+
+ parser.add_argument('--gtk3manifest', dest='gtk3manifest', action='store_const',
+ const=1,
+ help='Generate libgtk3.manifest (Not used now)')
+
+ args = parser.parse_args()
+ no_args = True
+
+ if args.gtkwin32rc is not None:
+ srcroot = get_srcroot()
+
+ ver = get_version(srcroot)
+
+ process_in(os.path.join(srcroot, 'gtk', 'gtk-win32.rc.in'),
+ os.path.join(srcroot, 'gtk', 'gtk-win32.rc'),
+ ver)
+ no_args = False
+
+ if args.gtk3manifest is not None:
+ print('Not Used... Will add once gtk/libgtk3.manifest.in is added')
+ #manifest = {}
+ #manifest['EXE_MANIFEST_ARCHITECTURE'] = '*'
+ #process_in(os.path.join(srcroot, 'gtk', 'libgtk3.manifest.in',
+ # os.path.join(srcroot, 'gtk', 'libgtk3.manifest',
+ # manifest)
+ no_args = False
+
+ if no_args is True:
+ raise SystemExit('Action argument required. Please see %s --help for details.' % __file__)
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
diff --git a/build/win32/vs10/gtk-gen-srcs.props b/build/win32/vs10/gtk-gen-srcs.props
index 7afca8a2a7..c86b6b00c7 100644
--- a/build/win32/vs10/gtk-gen-srcs.props
+++ b/build/win32/vs10/gtk-gen-srcs.props
@@ -58,14 +58,13 @@ echo $(Configuration) > ..\..\..\MSVC_$(Configuration)
:DONE_GDKCONFIG_H
-set PATH=$(PATH);$(PythonPath)
-
cd ..\..\..\gtk
-python $(GlibEtcInstallRoot)\bin\gdbus-codegen --interface-prefix org.Gtk. --c-namespace _Gtk --generate-c-code gtkdbusgenerated ./gtkdbusinterfaces.xml
+$(PythonPath)\python $(GlibEtcInstallRoot)\bin\gdbus-codegen --interface-prefix org.Gtk. --c-namespace _Gtk --generate-c-code gtkdbusgenerated ./gtkdbusinterfaces.xml
cd $(SolutionDir)
+ $(PythonPath)\python ..\process-in-win32.py --gtkwin32rc
<_PropertySheetDisplayName>gtkgensrcsprops
@@ -83,5 +82,8 @@ cd $(SolutionDir)
$(GenerateGtkDbusBuiltSources)
+
+ $(GenerateGtkWin32RC)
+
-
\ No newline at end of file
+
diff --git a/build/win32/vs10/gtk.vcxproj.filtersin b/build/win32/vs10/gtk.vcxproj.filtersin
index f6be8055fc..da9351127e 100644
--- a/build/win32/vs10/gtk.vcxproj.filtersin
+++ b/build/win32/vs10/gtk.vcxproj.filtersin
@@ -19,6 +19,7 @@
Resource Files
+ Resource Files
#include "libgtk.vs10.sourcefiles.filters"
diff --git a/build/win32/vs10/gtk.vcxprojin b/build/win32/vs10/gtk.vcxprojin
index 0686775365..80af761ff3 100644
--- a/build/win32/vs10/gtk.vcxprojin
+++ b/build/win32/vs10/gtk.vcxprojin
@@ -173,6 +173,20 @@
$(GenerateGtkDbusBuiltSources)
..\..\..\gtk\gtkdbusgenerated.c;..\..\..\gtk\gtkdbusgenerated.h;%(Outputs)
+
+ Generating GTK+ Win32 Version Resource...
+ $(GenerateGtkWin32RC)
+ ..\..\..\gtk\gtk-win32.rc;%(Outputs)
+ Generating GTK+ Win32 Version Resource...
+ $(GenerateGtkWin32RC)
+ ..\..\..\gtk\gtk-win32.rc;%(Outputs)
+ Generating GTK+ Win32 Version Resource...
+ $(GenerateGtkWin32RC)
+ ..\..\..\gtk\gtk-win32.rc;%(Outputs)
+ Generating GTK+ Win32 Version Resource...
+ $(GenerateGtkWin32RC)
+ ..\..\..\gtk\gtk-win32.rc;%(Outputs)
+
diff --git a/build/win32/vs9/gtk-gen-srcs.vsprops b/build/win32/vs9/gtk-gen-srcs.vsprops
index 7b1d0db234..24ac945f79 100644
--- a/build/win32/vs9/gtk-gen-srcs.vsprops
+++ b/build/win32/vs9/gtk-gen-srcs.vsprops
@@ -57,11 +57,13 @@ echo $(ConfigurationName) > ..\..\..\MSVC_$(ConfigurationName)
-
\ No newline at end of file
+
+
diff --git a/build/win32/vs9/gtk.vcprojin b/build/win32/vs9/gtk.vcprojin
index b7e40c798f..3dc5477c88 100644
--- a/build/win32/vs9/gtk.vcprojin
+++ b/build/win32/vs9/gtk.vcprojin
@@ -192,6 +192,36 @@
/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+