[glibmm/glibmm-master-use-dllexport: 7/7] build: Do not use gendef.exe for glibmm



commit c3a4b297717c033b81ee90c33c6c84eb4223da58
Author: Chun-wei Fan <fanchunwei src gnome org>
Date:   Thu Mar 5 16:01:13 2020 +0800

    build: Do not use gendef.exe for glibmm
    
    Clean up the build files a bit and update the glibmmconfig.h.[in|meson] so that
    we use __declspec(dllexport) when GLIBMM_BUILD is defined (i.e. during the
    build of glibmm) on Visual Studio.
    
    Also, for the meson builds, disable warnings 4251 and 4275 as they all relate
    to building DLLs regarding symbol export, which is harmless as we know clearly
    that we are indeed building DLLs in our case, and we have already set
    GLIBMM_API appropriately

 MSVC_NMake/build-rules-msvc.mak |  4 +--
 MSVC_NMake/generate-msvc.mak    |  3 --
 glib/glibmm/meson.build         | 61 +++++++++++++----------------------------
 glib/glibmmconfig.h.in          |  5 ++--
 glib/glibmmconfig.h.meson       |  5 ++--
 meson.build                     |  2 +-
 6 files changed, 26 insertions(+), 54 deletions(-)
---
diff --git a/MSVC_NMake/build-rules-msvc.mak b/MSVC_NMake/build-rules-msvc.mak
index 1512a881..fc9db598 100644
--- a/MSVC_NMake/build-rules-msvc.mak
+++ b/MSVC_NMake/build-rules-msvc.mak
@@ -93,8 +93,8 @@ $**
 # $(dependent_objects)
 # <<
 #      @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2
-$(GLIBMM_DLL): vs$(VSVER)\$(CFG)\$(PLAT)\glibmm\glibmm.def $(glibmm_OBJS)
-       link /DLL $(LDFLAGS_NOLTCG) $(GOBJECT_LIBS) $(LIBSIGC_LIB) /implib:$(GLIBMM_LIB) 
/def:vs$(VSVER)\$(CFG)\$(PLAT)\glibmm\glibmm.def -out:$@ @<<
+$(GLIBMM_DLL): vs$(VSVER)\$(CFG)\$(PLAT)\glibmm $(glibmm_OBJS)
+       link /DLL $(LDFLAGS_NOLTCG) $(GOBJECT_LIBS) $(LIBSIGC_LIB) /implib:$(GLIBMM_LIB) -out:$@ @<<
 $(glibmm_OBJS)
 <<
 
diff --git a/MSVC_NMake/generate-msvc.mak b/MSVC_NMake/generate-msvc.mak
index 5c441523..978687ee 100644
--- a/MSVC_NMake/generate-msvc.mak
+++ b/MSVC_NMake/generate-msvc.mak
@@ -17,9 +17,6 @@ vs$(VSVER)\$(CFG)\$(PLAT)\glib-extra-defs-gen:
        @-md $@
 
 # Generate .def files
-vs$(VSVER)\$(CFG)\$(PLAT)\glibmm\glibmm.def: $(GENDEF) vs$(VSVER)\$(CFG)\$(PLAT)\glibmm $(glibmm_OBJS)
-       vs$(VSVER)\$(CFG)\$(PLAT)\gendef.exe $@ $(GLIBMM_LIBNAME) vs$(VSVER)\$(CFG)\$(PLAT)\glibmm\*.obj
-
 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
 
diff --git a/glib/glibmm/meson.build b/glib/glibmm/meson.build
index 7797166a..10b4f5dc 100644
--- a/glib/glibmm/meson.build
+++ b/glib/glibmm/meson.build
@@ -131,6 +131,16 @@ install_headers(glibmm_extra_ph_files, subdir: glibmm_pcname / 'glibmm' / 'priva
 untracked_glibmm = 'untracked' / 'glib' / 'glibmm'
 src_untracked_glibmm = project_source_root / untracked_glibmm
 
+extra_glibmm_objects = []
+glibmm_cpp_args = [ '-DGLIBMM_BUILD' ]
+
+# Build the .rc file for Windows builds and link to it
+if is_host_windows
+  windows = import('windows')
+  glibmm_res = windows.compile_resources(glibmm_rc)
+  extra_glibmm_objects += glibmm_res
+endif
+
 if maintainer_mode
 
   # Maintainer mode. Generate .h and .cc files from .hg and .ccg files in ../src.
@@ -232,12 +242,14 @@ if maintainer_mode
   )
 
   extra_include_dirs = ['..']
-  glib_int_lib = static_library('glibmm-int',
+
+  glibmm_library = library(glibmm_pcname, extra_glibmm_objects,
     glibmm_built_cc_file_targets, glibmm_extra_cc_files, built_dummy_h_file_target,
     include_directories: extra_include_dirs,
-    cpp_args: '-DGLIBMM_BUILD=1',
+    cpp_args: glibmm_cpp_args,
+    version: glibmm_libversion,
     dependencies: glibmm_build_dep,
-    install: false,
+    install: true,
   )
 
   built_h_cc_dir = meson.current_build_dir()
@@ -283,54 +295,19 @@ else # not maintainer_mode
 
   extra_include_dirs = [ '..', '..' / '..' / '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 glibmm DLL
-  glib_int_lib = static_library('glibmm-int',
+  glibmm_library = library(glibmm_pcname, extra_glibmm_objects,
     built_cc_files, glibmm_extra_cc_files,
     include_directories: extra_include_dirs,
-    cpp_args: '-DGLIBMM_BUILD=1',
+    cpp_args: glibmm_cpp_args,
+    version: glibmm_libversion,
     dependencies: glibmm_build_dep,
-    install: false,
+    install: true,
   )
 
   built_h_cc_dir = src_untracked_glibmm
 
 endif
 
-glibmm_def = []
-glibmm_extra_link_args = []
-extra_glibmm_objects = []
-
-if is_msvc
-  glibmm_def = custom_target('glibmm.def',
-    output: 'glibmm.def',
-    depends: glib_int_lib,
-    command: [ gendef,
-      '@OUTPUT@',
-      '@0@-@1@.dll'.format(glibmm_pcname, glibmm_libversion.split('.')[0]),
-      glib_int_lib.full_path(),
-    ],
-    install: false,
-  )
-  glibmm_extra_link_args = ['/def:@0@'.format(glibmm_def.full_path())]
-endif
-
-# Build the .rc file for Windows builds and link to it
-if is_host_windows
-  windows = import('windows')
-  glibmm_res = windows.compile_resources(glibmm_rc)
-  extra_glibmm_objects += glibmm_res
-endif
-
-glibmm_library = library(glibmm_pcname, extra_glibmm_objects,
-  objects: glib_int_lib.extract_all_objects(),
-  version: glibmm_libversion,
-  dependencies: glibmm_build_dep,
-  link_depends: glibmm_def,
-  link_args: glibmm_extra_link_args,
-  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/glib/glibmmconfig.h.in b/glib/glibmmconfig.h.in
index 56e7a42e..0c28c686 100644
--- a/glib/glibmmconfig.h.in
+++ b/glib/glibmmconfig.h.in
@@ -107,9 +107,8 @@
 #endif
 
 #ifdef GLIBMM_DLL
-# if defined(GLIBMM_BUILD) && defined(_WINDLL)
-   /* Do not dllexport as it is handled by gendef on MSVC */
-#  define GLIBMM_API
+# if defined(GLIBMM_BUILD)
+#  define GLIBMM_API __declspec(dllexport)
 # elif !defined(GLIBMM_BUILD)
 #  define GLIBMM_API __declspec(dllimport)
 # else
diff --git a/glib/glibmmconfig.h.meson b/glib/glibmmconfig.h.meson
index 177f745b..257a7c97 100644
--- a/glib/glibmmconfig.h.meson
+++ b/glib/glibmmconfig.h.meson
@@ -109,9 +109,8 @@
 #endif
 
 #ifdef GLIBMM_DLL
-# if defined(GLIBMM_BUILD) && defined(_WINDLL)
-   /* Do not dllexport as it is handled by gendef on MSVC */
-#  define GLIBMM_API
+# if defined(GLIBMM_BUILD)
+#  define GLIBMM_API __declspec(dllexport)
 # elif !defined(GLIBMM_BUILD)
 #  define GLIBMM_API __declspec(dllimport)
 # else
diff --git a/meson.build b/meson.build
index 29a0b1b5..2636e563 100644
--- a/meson.build
+++ b/meson.build
@@ -189,7 +189,7 @@ add_project_arguments(warning_flags, language: 'cpp')
 #       that should not be overlooked stand out.
 if is_msvc
   disabled_warnings = cpp_compiler.get_supported_arguments([
-    '/FImsvc_recommended_pragmas.h', '/wd4267', '/wd4530', '/wd4589', '/utf-8'
+    '/FImsvc_recommended_pragmas.h', '/wd4251', '/wd4275', '/wd4267', '/wd4530', '/wd4589', '/utf-8'
   ])
   add_project_arguments(disabled_warnings, language: 'cpp')
 endif


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