[glibmm/glibmm-master-use-dllexport: 4/5] Visual Studio builds: build giomm without gendef



commit f294f503dd4782827dbf24a6885283e2eed27b7e
Author: Chun-wei Fan <fanchunwei src gnome org>
Date:   Fri Mar 6 15:02:48 2020 +0800

    Visual Studio builds: build giomm without gendef
    
    Make sure that we are defining GIOMM_API as __declspec(dllexport) when
    building giomm and so stop the use of gendef.exe.  We are now ready to
    drop gendef from the glibmm sources.

 MSVC_NMake/build-rules-msvc.mak | 14 ++-------
 MSVC_NMake/config-msvc.mak      |  1 -
 MSVC_NMake/generate-msvc.mak    |  5 ----
 gio/giomm/meson.build           | 64 +++++++++++++----------------------------
 gio/giommconfig.h.in            |  7 ++---
 gio/giommconfig.h.meson         |  7 ++---
 6 files changed, 28 insertions(+), 70 deletions(-)
---
diff --git a/MSVC_NMake/build-rules-msvc.mak b/MSVC_NMake/build-rules-msvc.mak
index fc9db598..52d1ca55 100644
--- a/MSVC_NMake/build-rules-msvc.mak
+++ b/MSVC_NMake/build-rules-msvc.mak
@@ -99,8 +99,8 @@ $(glibmm_OBJS)
 <<
 
        @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2
-$(GIOMM_DLL): $(GLIBMM_LIB) vs$(VSVER)\$(CFG)\$(PLAT)\giomm\giomm.def $(giomm_OBJS)
-       link /DLL $(LDFLAGS_NOLTCG) $(GLIBMM_LIB) $(GIO_LIBS) $(LIBSIGC_LIB) /implib:$(GIOMM_LIB) 
/def:vs$(VSVER)\$(CFG)\$(PLAT)\giomm\giomm.def -out:$@ @<<
+$(GIOMM_DLL): vs$(VSVER)\$(CFG)\$(PLAT)\giomm $(GLIBMM_LIB) $(giomm_OBJS)
+       link /DLL $(LDFLAGS_NOLTCG) $(GLIBMM_LIB) $(GIO_LIBS) $(LIBSIGC_LIB) /implib:$(GIOMM_LIB) -out:$@ @<<
 $(giomm_OBJS)
 <<
        @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2
@@ -113,11 +113,6 @@ $(giomm_OBJS)
 # <<
 #      @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1
 
-# For the gendef tool
-{.\gendef\}.cc{vs$(VSVER)\$(CFG)\$(PLAT)\}.exe:
-       @if not exist vs$(VSVER)\$(CFG)\$(PLAT)\gendef\ $(MAKE) -f Makefile.vc CFG=$(CFG) 
vs$(VSVER)\$(CFG)\$(PLAT)\gendef
-       $(CXX) $(GLIBMM_BASE_CFLAGS) $(CFLAGS) /Fo$(@D)\gendef\ /Fd$(@D)\gendef\ $< /link $(LDFLAGS) /out:$@
-
 # For the buildable glibmm examples
 vs$(VSVER)\$(CFG)\$(PLAT)\glibmm-ex-compose.exe: ..\examples\compose\main.cc $(GLIBMM_LIB)
 vs$(VSVER)\$(CFG)\$(PLAT)\glibmm-ex-dispatcher2.exe: ..\examples\thread\dispatcher2.cc $(GLIBMM_LIB)
@@ -253,7 +248,6 @@ clean:
        @-if exist vs$(VSVER)\$(CFG)\$(PLAT)\giomm-tests del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\giomm-tests\*.pdb
        @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\giomm-ex\*.obj
        @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\giomm-ex\*.pdb
-       @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\giomm\*.def
        @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\giomm\*.res
        @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\giomm\*.obj
        @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\giomm\*.pdb
@@ -264,15 +258,12 @@ clean:
        @-if exist vs$(VSVER)\$(CFG)\$(PLAT)\glibmm-tests del /f /q 
vs$(VSVER)\$(CFG)\$(PLAT)\glibmm-tests\*.pdb
        @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\glibmm-ex\*.obj
        @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\glibmm-ex\*.pdb
-       @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\glibmm\*.def
        @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\glibmm\*.res
        @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\glibmm\*.obj
        @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\glibmm\*.pdb
        @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\glibmm\*.cc
        @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\glibmm\private\*.h
        @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\glibmm\*.h
-       @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\gendef\*.obj
-       @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\gendef\*.pdb
        @-if exist vs$(VSVER)\$(CFG)\$(PLAT)\giomm-tests rd vs$(VSVER)\$(CFG)\$(PLAT)\giomm-tests
        @-rd vs$(VSVER)\$(CFG)\$(PLAT)\glib-extra-defs-gen
        @-rd vs$(VSVER)\$(CFG)\$(PLAT)\giomm-ex
@@ -282,6 +273,5 @@ clean:
        @-rd vs$(VSVER)\$(CFG)\$(PLAT)\glibmm-ex
        @-rd vs$(VSVER)\$(CFG)\$(PLAT)\glibmm\private
        @-rd vs$(VSVER)\$(CFG)\$(PLAT)\glibmm
-       @-rd vs$(VSVER)\$(CFG)\$(PLAT)\gendef
 
 .SUFFIXES: .cc .h .ccg .hg .obj .cc.m4 .h.m4
diff --git a/MSVC_NMake/config-msvc.mak b/MSVC_NMake/config-msvc.mak
index ddfcd772..2e309287 100644
--- a/MSVC_NMake/config-msvc.mak
+++ b/MSVC_NMake/config-msvc.mak
@@ -75,7 +75,6 @@ GIOMM_LIBNAME = giomm-vc$(VSVER)0$(DEBUG_SUFFIX)-$(GLIBMM_MAJOR_VERSION)_$(GLIBM
 GIOMM_DLL = vs$(VSVER)\$(CFG)\$(PLAT)\$(GIOMM_LIBNAME).dll
 GIOMM_LIB = vs$(VSVER)\$(CFG)\$(PLAT)\$(GIOMM_LIBNAME).lib
 
-GENDEF = vs$(VSVER)\$(CFG)\$(PLAT)\gendef.exe
 GOBJECT_LIBS = gobject-2.0.lib gmodule-2.0.lib glib-2.0.lib
 GIO_LIBS = gio-2.0.lib $(GOBJECT_LIBS)
 
diff --git a/MSVC_NMake/generate-msvc.mak b/MSVC_NMake/generate-msvc.mak
index 978687ee..2f98734b 100644
--- a/MSVC_NMake/generate-msvc.mak
+++ b/MSVC_NMake/generate-msvc.mak
@@ -4,7 +4,6 @@
 # one is maintaining the NMake build files.
 
 # Create the build directories
-vs$(VSVER)\$(CFG)\$(PLAT)\gendef       \
 vs$(VSVER)\$(CFG)\$(PLAT)\glibmm       \
 vs$(VSVER)\$(CFG)\$(PLAT)\glibmm\private       \
 vs$(VSVER)\$(CFG)\$(PLAT)\giomm        \
@@ -16,10 +15,6 @@ vs$(VSVER)\$(CFG)\$(PLAT)\giomm-tests        \
 vs$(VSVER)\$(CFG)\$(PLAT)\glib-extra-defs-gen:
        @-md $@
 
-# Generate .def files
-vs$(VSVER)\$(CFG)\$(PLAT)\giomm\giomm.def: $(GENDEF) vs$(VSVER)\$(CFG)\$(PLAT)\giomm $(giomm_OBJS)
-       vs$(VSVER)\$(CFG)\$(PLAT)\gendef.exe $@ $(GIOMM_LIBNAME) vs$(VSVER)\$(CFG)\$(PLAT)\giomm\*.obj
-
 # Compile schema for giomm settings example
 vs$(VSVER)\$(CFG)\$(PLAT)\gschema.compiled: ..\examples\settings\org.gtkmm.demo.gschema.xml
        $(GLIB_COMPILE_SCHEMAS) --targetdir=vs$(VSVER)\$(CFG)\$(PLAT) ..\examples\settings
diff --git a/gio/giomm/meson.build b/gio/giomm/meson.build
index 7dc21f0f..b60435ef 100644
--- a/gio/giomm/meson.build
+++ b/gio/giomm/meson.build
@@ -3,7 +3,7 @@
 # Input: giomm_build_dep, giomm_pcname, maintainer_mode, project_source_root,
 #        generate_binding_py, handle_built_files_py, m4_files, pm_files,
 #        glibmm_libversion, install_includedir, python3, giomm_rc, gmmproc_dir,
-#        is_host_windows, gendef, gmmproc, generate_wrap_init_pl
+#        is_host_windows, gmmproc, generate_wrap_init_pl
 # Output: giomm_hg_ccg_basenames, giomm_extra_h_files, built_files_root,
 #         giomm_built_h_file_targets, giomm_dep
 
@@ -211,6 +211,16 @@ install_headers(giomm_extra_h_files, subdir: giomm_pcname / 'giomm')
 untracked_giomm = 'untracked' / 'gio' / 'giomm'
 src_untracked_giomm = project_source_root / untracked_giomm
 
+extra_giomm_objects = []
+giomm_cpp_flags = [ '-DGIOMM_BUILD=1' ]
+
+# Build the .rc file for Windows builds and link to it
+if is_host_windows
+  windows = import('windows')
+  giomm_res = windows.compile_resources(giomm_rc)
+  extra_giomm_objects += giomm_res
+endif
+
 if maintainer_mode
 
   # Maintainer mode. Generate .h and .cc files from .hg and .ccg files in ../src.
@@ -292,13 +302,15 @@ if maintainer_mode
   )
 
   extra_include_dirs = ['..', '..' / '..' / 'glib']
-  gio_int_lib = static_library('giomm-int',
+
+  giomm_library = library(giomm_pcname, extra_giomm_objects,
     giomm_used_built_cc_file_targets, giomm_extra_cc_files, built_dummy_h_file_target,
+    version: glibmm_libversion,
     include_directories: extra_include_dirs,
-    cpp_args: '-DGIOMM_BUILD=1',
+    cpp_args: giomm_cpp_flags,
     dependencies: giomm_build_dep,
     link_with: glibmm_library,
-    install: false,
+    install: true,
   )
 
   built_h_cc_dir = meson.current_build_dir()
@@ -339,56 +351,20 @@ else # not maintainer_mode
          '..' / '..' / 'glib', '..' / '..' / 'untracked' / 'glib',
   ]
 
-  # We need this so that we can run gendef.exe to get the .def file
-  # needed for obtaining the .lib file for the giomm DLL
-  gio_int_lib = static_library('giomm-int',
+  giomm_library = library(giomm_pcname, extra_giomm_objects,
     built_cc_files, giomm_extra_cc_files,
+    version: glibmm_libversion,
     include_directories: extra_include_dirs,
-    cpp_args: '-DGIOMM_BUILD=1',
+    cpp_args: giomm_cpp_flags,
     dependencies: giomm_build_dep,
     link_with: glibmm_library,
-    install: false,
+    install: true,
   )
 
   built_h_cc_dir = src_untracked_giomm
 
 endif
 
-giomm_def = []
-giomm_extra_link_args = []
-extra_giomm_objects = []
-
-if is_msvc
-  giomm_def = custom_target('giomm.def',
-    output: 'giomm.def',
-    depends: gio_int_lib,
-    command: [ gendef,
-      '@OUTPUT@',
-      '@0@-@1@.dll'.format(giomm_pcname, glibmm_libversion.split('.')[0]),
-      gio_int_lib.full_path(),
-    ],
-    install: false,
-  )
-  giomm_extra_link_args = ['/def:@0@'.format(giomm_def.full_path())]
-endif
-
-# Build the .rc file for Windows builds and link to it
-if is_host_windows
-  windows = import('windows')
-  giomm_res = windows.compile_resources(giomm_rc)
-  extra_giomm_objects += giomm_res
-endif
-
-giomm_library = library(giomm_pcname, extra_giomm_objects,
-  objects: gio_int_lib.extract_all_objects(),
-  version: glibmm_libversion,
-  dependencies: giomm_build_dep,
-  link_depends: giomm_def,
-  link_args: giomm_extra_link_args,
-  link_with: glibmm_library,
-  install: true,
-)
-
 # Install built .h and _p.h files.
 meson.add_install_script(
   python3.path(), generate_binding_py, 'install_built_h_files',
diff --git a/gio/giommconfig.h.in b/gio/giommconfig.h.in
index 8f27b73d..231a7198 100644
--- a/gio/giommconfig.h.in
+++ b/gio/giommconfig.h.in
@@ -19,14 +19,13 @@
 #undef GIOMM_STATIC_LIB
 
 // Enable DLL-specific stuff only when not building a static library
-#if !defined(__CYGWIN__) && defined(__MINGW32__) && !defined(GIOMM_STATIC_LIB)
+#if !defined(__CYGWIN__) && (defined(__MINGW32__) || defined (_MSC_VER)) && !defined(GIOMM_STATIC_LIB)
 # define GIOMM_DLL 1
 #endif
 
 #ifdef GIOMM_DLL
-# if defined(GIOMM_BUILD) && defined(_WINDLL)
-   /* Do not dllexport as it is handled by gendef on MSVC */
-#  define GIOMM_API
+# if defined(GIOMM_BUILD)
+#  define GIOMM_API __declspec(dllexport)
 # elif !defined(GIOMM_BUILD)
 #  define GIOMM_API __declspec(dllimport)
 # else
diff --git a/gio/giommconfig.h.meson b/gio/giommconfig.h.meson
index 82aedddf..f6159f94 100644
--- a/gio/giommconfig.h.meson
+++ b/gio/giommconfig.h.meson
@@ -19,14 +19,13 @@
 #mesondefine GIOMM_STATIC_LIB
 
 // Enable DLL-specific stuff only when not building a static library
-#if !defined(__CYGWIN__) && defined(__MINGW32__) && !defined(GIOMM_STATIC_LIB)
+#if !defined(__CYGWIN__) && (defined(__MINGW32__) || defined (_MSC_VER)) && !defined(GIOMM_STATIC_LIB)
 # define GIOMM_DLL 1
 #endif
 
 #ifdef GIOMM_DLL
-# if defined(GIOMM_BUILD) && defined(_WINDLL)
-   /* Do not dllexport as it is handled by gendef on MSVC */
-#  define GIOMM_API
+# if defined(GIOMM_BUILD)
+#  define GIOMM_API __declspec(dllexport)
 # elif !defined(GIOMM_BUILD)
 #  define GIOMM_API __declspec(dllimport)
 # else


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