[gtk+] Visual C++ Builds: Build Introspection for GdkWin32



commit 46802d33e1c1f7bfeda3784eceedb4aae1459106
Author: Chun-wei Fan <fanchunwei src gnome org>
Date:   Thu Apr 3 15:49:05 2014 +0800

    Visual C++ Builds: Build Introspection for GdkWin32
    
    Add support to build the introspection files for GdkWin32, as done recently
    in the autotools builds and clean up the NMake Makefile for building the
    introspection files a bit.
    
    For some reason, gdk_win32_display_manager_get_type() was not exported in
    gdk-3.0.lib, force its export, so that the GdkWin32-3.0.gir can be built
    properly with the Visual C++ builds.  This is a known problem that some
    symbols in static libraries that are linked into a DLL in Visual C++, even
    if they were marked with __declspec(dllexport) via _GDK_EXTERN.

 build/gen-file-list-gtk.py                    |   20 +++++++-
 build/gtk-introspection-msvc.mak              |   58 ++++++++++++++++---------
 build/win32/vs10/gtk-copy-gdk-broadway.props  |    3 +
 build/win32/vs10/gtk-ignore-broadway.props    |    1 +
 build/win32/vs9/gtk-copy-gdk-broadway.vsprops |    4 ++
 build/win32/vs9/gtk-ignore-broadway.vsprops   |    1 +
 6 files changed, 63 insertions(+), 24 deletions(-)
---
diff --git a/build/gen-file-list-gtk.py b/build/gen-file-list-gtk.py
index 34a46fd..f25cf4a 100644
--- a/build/gen-file-list-gtk.py
+++ b/build/gen-file-list-gtk.py
@@ -28,10 +28,23 @@ def gen_gdk_filelist(srcroot, subdir, dest):
         for i in sources:
             d.write(srcroot + '\\' + subdir + '\\' + i.replace('/', '\\') + '\n')
 
-def gen_filelist_gtk(srcroot, subdir, dest):
+def gen_gdkwin32_filelist(srcroot, subdir, dest):
+    vars = read_vars_from_AM(os.path.join(srcroot, subdir, 'Makefile.am'),
+                             vars = {},
+                             conds = {'HAVE_INTROSPECTION': True,
+                                      'OS_WIN32': True},
+                             filters = ['w32_introspection_files'])
+
+    files = vars['w32_introspection_files'].split()
+
+    with open(dest, 'w') as d:
+        for i in files:
+            d.write(srcroot + '\\' + subdir + '\\' + i.replace('/', '\\') + '\n')
+
+def gen_gtk_filelist(srcroot, subdir, dest):
     vars = read_vars_from_AM(os.path.join(srcroot, 'gtk', 'Makefile.am'),
                              vars = {},
-                             conds = {'USE_WIN32':True,
+                             conds = {'USE_WIN32': True,
                                       'USE_QUARTZ': False,
                                       'USE_X11': False,
                                       'USE_EXTERNAL_ICON_CACHE': False},
@@ -60,7 +73,8 @@ def main(argv):
     subdir_gtk = 'gtk'
 
     gen_gdk_filelist(srcroot, subdir_gdk, 'gdk_list')
-    gen_filelist_gtk(srcroot, subdir_gtk, 'gtk_list')
+    gen_gdkwin32_filelist(srcroot, subdir_gdk, 'gdkwin32_list')
+    gen_gtk_filelist(srcroot, subdir_gtk, 'gtk_list')
     return 0
 
 if __name__ == '__main__':
diff --git a/build/gtk-introspection-msvc.mak b/build/gtk-introspection-msvc.mak
index 2da6c48..ba6c441 100644
--- a/build/gtk-introspection-msvc.mak
+++ b/build/gtk-introspection-msvc.mak
@@ -6,6 +6,9 @@ APIVERSION = 3.0
 
 CHECK_PACKAGE = gdk-pixbuf-2.0 atk pangocairo gio-2.0
 
+built_install_girs = Gdk-$(APIVERSION).gir GdkWin32-$(APIVERSION).gir Gtk-$(APIVERSION).gir
+built_install_typelibs = Gdk-$(APIVERSION).typelib GdkWin32-$(APIVERSION).typelib Gtk-$(APIVERSION).typelib
+
 !if "$(PLAT)" == "x64"
 TIME_T_DEFINE = -Dtime_t=long long
 !else
@@ -15,9 +18,9 @@ TIME_T_DEFINE = -Dtime_t=long
 !include introspection-msvc.mak
 
 !if "$(BUILD_INTROSPECTION)" == "TRUE"
-all: setgirbuildnev Gdk-$(APIVERSION).gir Gdk-$(APIVERSION).typelib Gtk-$(APIVERSION).gir 
Gtk-$(APIVERSION).typelib
+all: setgirbuildnev $(built_install_girs) $(built_install_typelibs)
 
-gdk_list gtk_list:
+gdk_list gdkwin32_list gtk_list:
        @-echo Generating Filelist to Introspect for GDK/GTK...
        $(PYTHON2) gen-file-list-gtk.py
 
@@ -28,6 +31,10 @@ setgirbuildnev:
        @set PKG_CONFIG_PATH=$(PKG_CONFIG_PATH)
        @set LIB=win32\vs$(VSVER)\$(CFG)\$(PLAT)\bin;$(LIB)
 
+win32\vs$(VSVER)\$(CFG)\$(PLAT)\bin\GdkWin32-$(APIVERSION).lib: 
win32\vs$(VSVER)\$(CFG)\$(PLAT)\bin\gdk-$(APIVERSION).lib
+       @-echo Copying win32\vs$(VSVER)\$(CFG)\$(PLAT)\bin\GdkWin32-$(APIVERSION).lib from 
win32\vs$(VSVER)\$(CFG)\$(PLAT)\bin\gdk-$(APIVERSION).lib...
+       @-copy /b win32\vs$(VSVER)\$(CFG)\$(PLAT)\bin\gdk-$(APIVERSION).lib 
win32\vs$(VSVER)\$(CFG)\$(PLAT)\bin\GdkWin32-$(APIVERSION).lib
+
 Gdk-$(APIVERSION).gir: gdk_list
        @-echo Generating Gdk-$(APIVERSION).gir...
        $(PYTHON2) $(G_IR_SCANNER) --verbose -I.. -I..\gdk      \
@@ -41,7 +48,22 @@ Gdk-$(APIVERSION).gir: gdk_list
        --reparse-validate --add-include-path=$(G_IR_INCLUDEDIR) --add-include-path=.   \
        --pkg-export gdk-3.0 --warn-all --c-include="gdk/gdk.h" \
        -DG_LOG_DOMAIN=\"Gdk\" -DGDK_COMPILATION        \
-       --filelist=gdk_list     -o Gdk-3.0.gir
+       --filelist=gdk_list     -o $@
+
+GdkWin32-$(APIVERSION).gir: gdkwin32_list win32\vs$(VSVER)\$(CFG)\$(PLAT)\bin\GdkWin32-$(APIVERSION).lib
+       @-echo Generating GdkWin32-$(APIVERSION).gir...
+       $(PYTHON2) $(G_IR_SCANNER) --verbose -I.. -I..\gdk      \
+       -I$(BASEDIR)\include\glib-2.0 -I$(BASEDIR)\lib\glib-2.0\include \
+       -I$(BASEDIR)\include\pango-1.0 -I$(BASEDIR)\include\atk-1.0     \
+       -I$(BASEDIR)\include\gdk-pixbuf-2.0 -I$(BASEDIR)\include        \
+       $(TIME_T_DEFINE) --namespace=GdkWin32 --nsversion=3.0   \
+       --include=Gio-2.0 --include=GdkPixbuf-2.0       \
+       --include=Pango-1.0     --include-uninstalled=./Gdk-$(APIVERSION).gir   \
+       --no-libtool --library=gdk-3.0  \
+       --reparse-validate --add-include-path=$(G_IR_INCLUDEDIR) --add-include-path=.   \
+       --pkg-export gdk-win32-3.0 --warn-all --c-include="gdk/gdkwin32.h"      \
+       -DG_LOG_DOMAIN=\"Gdk\" -DGDK_COMPILATION        \
+       --filelist=gdkwin32_list        -o $@
 
 Gtk-$(APIVERSION).gir: gtk_list
        $(PYTHON2) $(G_IR_SCANNER) --verbose -I.. -I..\gtk -I..\gdk     \
@@ -56,7 +78,7 @@ Gtk-$(APIVERSION).gir: gtk_list
        --pkg-export gtk+-3.0 --warn-all --c-include="gtk/gtkx.h"       \
        -DG_LOG_DOMAIN=\"Gtk\" -DGTK_LIBDIR=\"/dummy/lib\"      \
        $(TIME_T_DEFINE) -DGTK_DATADIR=\"/dummy/share\" -DGTK_DATA_PREFIX=\"/dummy\"    \
-       -DGTK_SYSCONFDIR=\"/dummy/etc\" -DGTK_VERSION=\"3.11.8\"        \
+       -DGTK_SYSCONFDIR=\"/dummy/etc\" -DGTK_VERSION=\"3.12.0\"        \
        -DGTK_BINARY_VERSION=\"3.0.0\" -DGTK_HOST=\"i686-pc-vs$(VSVER)\"        \
        -DGTK_COMPILATION -DGTK_PRINT_BACKENDS=\"file\" \
        -DGTK_PRINT_PREVIEW_COMMAND=\"undefined-gtk-print-preview-command\"     \
@@ -65,21 +87,15 @@ Gtk-$(APIVERSION).gir: gtk_list
        -DINCLUDE_IM_ime -DINCLUDE_IM_inuktitut -DINCLUDE_IM_ipa        \
        -DINCLUDE_IM_multipress -DINCLUDE_IM_thai -DINCLUDE_IM_ti_er    \
        -DINCLUDE_IM_ti_et -DINCLUDE_IM_viqr --filelist=gtk_list        \
-       -o Gtk-3.0.gir
-
-Gdk-$(APIVERSION).typelib: Gdk-$(APIVERSION).gir
-       @-echo Compiling Gdk-$(APIVERSION).typelib...
-       $(G_IR_COMPILER) --includedir=. --debug --verbose Gdk-$(APIVERSION).gir -o Gdk-$(APIVERSION).typelib
+       -o $@
 
-Gtk-$(APIVERSION).typelib: Gtk-$(APIVERSION).gir Gdk-$(APIVERSION).typelib
-       @-echo Compiling Gtk-$(APIVERSION).typelib...
-       $(G_IR_COMPILER) --includedir=. --debug --verbose Gtk-$(APIVERSION).gir -o Gtk-$(APIVERSION).typelib
+$(built_install_typelibs): $(built_install_girs)
+       @-echo Compiling $*.typelib...
+       @-$(G_IR_COMPILER) --includedir=. --debug --verbose $*.gir -o $@
 
-install-introspection: setgirbuildnev Gdk-$(APIVERSION).gir Gdk-$(APIVERSION).typelib Gtk-$(APIVERSION).gir 
Gtk-$(APIVERSION).typelib
-       @-copy Gdk-$(APIVERSION).gir $(G_IR_INCLUDEDIR)
-       @-copy /b Gdk-$(APIVERSION).typelib $(G_IR_TYPELIBDIR)
-       @-copy Gtk-$(APIVERSION).gir $(G_IR_INCLUDEDIR)
-       @-copy /b Gtk-$(APIVERSION).typelib $(G_IR_TYPELIBDIR)
+install-introspection: setgirbuildnev $(built_install_girs) $(built_install_typelibs)
+       @-copy *.gir $(G_IR_INCLUDEDIR)
+       @-copy /b *.typelib $(G_IR_TYPELIBDIR)
 
 !else
 all:
@@ -87,10 +103,10 @@ all:
 !endif
 
 clean:
-       @-del /f/q Gtk-$(APIVERSION).typelib
-       @-del /f/q Gtk-$(APIVERSION).gir
-       @-del /f/q Gdk-$(APIVERSION).typelib
-       @-del /f/q Gdk-$(APIVERSION).gir
+       @-del /f/q *.typelib
+       @-del /f/q *.gir
+       @-del /f/q win32\vs$(VSVER)\$(CFG)\$(PLAT)\bin\GdkWin32-$(APIVERSION).lib
        @-del /f/q gtk_list
+       @-del /f/q gdkwin32_list
        @-del /f/q gdk_list
        @-del /f/q *.pyc
diff --git a/build/win32/vs10/gtk-copy-gdk-broadway.props b/build/win32/vs10/gtk-copy-gdk-broadway.props
index d62e744..65279ca 100644
--- a/build/win32/vs10/gtk-copy-gdk-broadway.props
+++ b/build/win32/vs10/gtk-copy-gdk-broadway.props
@@ -7,6 +7,9 @@
     <_PropertySheetDisplayName>gtkcopygdkbroadwayprops</_PropertySheetDisplayName>
   </PropertyGroup>
   <ItemDefinitionGroup>
+    <Link>
+      <AdditionalOptions>/EXPORT:gdk_win32_display_manager_get_type</AdditionalOptions>
+    </Link
     <PostBuildEvent>
       <Command>
 if "$(Configuration)" == "Release" goto END
diff --git a/build/win32/vs10/gtk-ignore-broadway.props b/build/win32/vs10/gtk-ignore-broadway.props
index cbe02f7..f86c36b 100644
--- a/build/win32/vs10/gtk-ignore-broadway.props
+++ b/build/win32/vs10/gtk-ignore-broadway.props
@@ -12,6 +12,7 @@
     </ProjectReference>
     <Link>
       <AdditionalDependencies>$(OutDir)\gdk-win32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalOptions>/EXPORT:gdk_win32_display_manager_get_type</AdditionalOptions>
     </Link>
   </ItemDefinitionGroup>
 </Project>
\ No newline at end of file
diff --git a/build/win32/vs9/gtk-copy-gdk-broadway.vsprops b/build/win32/vs9/gtk-copy-gdk-broadway.vsprops
index 148dab2..93161c3 100644
--- a/build/win32/vs9/gtk-copy-gdk-broadway.vsprops
+++ b/build/win32/vs9/gtk-copy-gdk-broadway.vsprops
@@ -6,6 +6,10 @@
        InheritedPropertySheets=".\gtk-build-defines.vsprops"
        >
        <Tool
+               Name="VCLinkerTool"
+               AdditionalOptions="/EXPORT:gdk_win32_display_manager_get_type"
+       />
+       <Tool
                Name="VCPostBuildEventTool"
                CommandLine="
 if &quot;$(ConfigurationName)&quot; == &quot;Release_Broadway&quot; goto DoRelease&#x0D;&#x0A;
diff --git a/build/win32/vs9/gtk-ignore-broadway.vsprops b/build/win32/vs9/gtk-ignore-broadway.vsprops
index c392d68..f703fd9 100644
--- a/build/win32/vs9/gtk-ignore-broadway.vsprops
+++ b/build/win32/vs9/gtk-ignore-broadway.vsprops
@@ -9,5 +9,6 @@
                Name="VCLinkerTool"
                LinkLibraryDependencies="false"
                AdditionalDependencies="$(OutDir)\gdk-win32.lib"
+               AdditionalOptions="/EXPORT:gdk_win32_display_manager_get_type"
        />
 </VisualStudioPropertySheet>
\ No newline at end of file


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]