Visual Studio builds: Process cairo-1.0.gir.in
authorChun-wei Fan <fanchunwei@src.gnome.org>
Tue, 12 Mar 2013 09:36:37 +0000 (17:36 +0800)
committerChun-wei Fan <fanchunwei@src.gnome.org>
Tue, 12 Mar 2013 09:36:37 +0000 (17:36 +0800)
Use a simple Python script that uses Python REGEX abilities to create
cairo-1.0.gir from cairo-1.0.gir.in with the correct values for Cairo, for
use in the Visual Studio builds of g-i.  It can be later extended if
needed.

Also dist this, and call this script from gengir.bat so that cairo-1.0.gir
and cairo-1.0.typelib can be built and "installed"

https://bugzilla.gnome.org/show_bug.cgi?id=692165

build/win32/Makefile.am
build/win32/create_nonglib_gir.py [new file with mode: 0644]
build/win32/gengir.bat

index 499c5cf..f404aa1 100644 (file)
@@ -5,6 +5,7 @@ EXTRA_DIST = \
        everything.def  \
        foo.def \
        gengir.bat      \
+       create_nonglib_gir.py   \
        gettype.def     \
        gimarshallingtests.def  \
        gtkfrob.def     \
diff --git a/build/win32/create_nonglib_gir.py b/build/win32/create_nonglib_gir.py
new file mode 100644 (file)
index 0000000..e3df714
--- /dev/null
@@ -0,0 +1,72 @@
+#!/usr/bin/python\r
+#\r
+# Expand the bundled *.gir.in files\r
+# for use in Visual C++ builds of G-I\r
+#\r
+# Author: Fan, Chun-wei\r
+# Date: January 21, 2013\r
+#\r
+# (Adapted from setup.py in\r
+# $(glib_src_root)/build/win32/setup.py written by Shixin Zeng)\r
+\r
+import os\r
+import sys\r
+import re\r
+import string\r
+import subprocess\r
+import optparse\r
+\r
+def process_in(src, dest, vars):\r
+    RE_VARS = re.compile(r'%(\w+?)%')\r
+    with open(src, 'r') as s:\r
+        with open(dest, 'w') as d:\r
+            for i in s:\r
+                i = RE_VARS.sub(lambda x: str(vars[x.group(1)]), i)\r
+                d.write(i)\r
+\r
+def get_vsver(vsver):\r
+    return {\r
+        '9': '9',\r
+        '10': '10',\r
+        '11': '11',\r
+        '2008': '9',\r
+        '2010': '10',\r
+        '2012': '11',\r
+        }.get(vsver, '0')\r
+\r
+def parent_dir(path):\r
+    if not os.path.isabs(path):\r
+        path = os.path.abspath(path)\r
+    if os.path.isfile(path):\r
+        path = os.path.dirname(path)\r
+    return os.path.split(path)[0]\r
+\r
+def setup_vars_cairo(src, dest, vsver):\r
+    vars = {}\r
+    vars['CAIRO_GIR_PACKAGE'] = 'cairo-gobject'\r
+    vars['CAIRO_SHARED_LIBRARY'] = '%s-vs%s.dll' % (vars['CAIRO_GIR_PACKAGE'], vsver)\r
+    process_in (src, dest, vars)\r
+\r
+def main(argv):\r
+    parser = optparse.OptionParser()\r
+    parser.add_option('--vsver', dest='vsver', action='store', help='Version of Visual Studio used, 9 or 2008 for VS 2008, 10 or 2010 for VS2010, 11 or 2012 for VS2012')\r
+    opt, args = parser.parse_args(argv)\r
+    if opt.vsver is None:\r
+        print ('vsver must be specified.  Please use %s -h to see the valid values' % os.path.basename(__file__))\r
+        sys.exit()\r
+    vsver = get_vsver(opt.vsver)\r
+    if vsver is '0':\r
+        print ('You must specify a valid vsver.  Please use %s -h to see the valid values' % os.path.basename(__file__))\r
+        sys.exit()\r
+\r
+    # Get the srcroot and the path where the bundled .gir files reside in the package\r
+    srcroot = parent_dir(parent_dir(__file__))\r
+    preset_gir_path = os.path.join(srcroot, 'gir')\r
+\r
+    # Set up variables in cairo-1.0.gir.in to produce cairo-1.0.gir\r
+    setup_vars_cairo(os.path.join(preset_gir_path, 'cairo-1.0.gir.in'),\r
+                     os.path.join(preset_gir_path, 'cairo-1.0.gir'),\r
+                     vsver)\r
+\r
+if __name__ == '__main__':\r
+    sys.exit(main(sys.argv))\r
index 70c5b85..c5984cb 100644 (file)
@@ -257,8 +257,10 @@ g-ir-compiler --includedir=. --debug --verbose Gio-2.0.gir -o Gio-2.0.typelib
 g-ir-compiler --includedir=. --debug --verbose GIRepository-2.0.gir -o GIRepository-2.0.typelib
 
 rem Now process the bundled .gir files
+python create_nonglib_gir.py --vsver=%VSVER%
 set CURRDIR=%CD%
 cd ..\..\gir
+g-ir-compiler --includedir=. --debug --verbose cairo-1.0.gir -o cairo-1.0.typelib
 g-ir-compiler --includedir=. --debug --verbose freetype2-2.0.gir -o freetype2-2.0.typelib
 g-ir-compiler --includedir=. --debug --verbose GL-1.0.gir -o GL-1.0.typelib
 g-ir-compiler --includedir=. --debug --verbose libxml2-2.0.gir -o libxml2-2.0.typelib