[glibmm/use-dllexport-2-62: 3/3] build: Do not use gendef.exe for glibmm
- From: Chun-wei Fan <fanchunwei src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glibmm/use-dllexport-2-62: 3/3] build: Do not use gendef.exe for glibmm
- Date: Sat, 7 Mar 2020 16:11:52 +0000 (UTC)
commit 9ec8cb88c8ecf41b63635754075765b785f9713c
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/config-msvc.mak | 2 +-
MSVC_NMake/generate-msvc.mak | 3 --
glib/glibmm/meson.build | 61 +++++++++++++----------------------------
glib/glibmmconfig.h.in | 11 +++-----
glib/glibmmconfig.h.meson | 11 +++-----
meson.build | 2 +-
7 files changed, 31 insertions(+), 63 deletions(-)
---
diff --git a/MSVC_NMake/build-rules-msvc.mak b/MSVC_NMake/build-rules-msvc.mak
index f6d5c2fc..f28a5377 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$(PDBVER)\$(CFG)\$(PLAT)\glibmm\glibmm.def $(glibmm_OBJS)
- link /DLL $(LDFLAGS_NOLTCG) $(GOBJECT_LIBS) $(LIBSIGC_LIB) /implib:$(GLIBMM_LIB)
/def:vs$(PDBVER)\$(CFG)\$(PLAT)\glibmm\glibmm.def -out:$@ @<<
+$(GLIBMM_DLL): vs$(PDBVER)\$(CFG)\$(PLAT)\glibmm $(glibmm_OBJS)
+ link /DLL $(LDFLAGS_NOLTCG) $(GOBJECT_LIBS) $(LIBSIGC_LIB) /implib:$(GLIBMM_LIB) -out:$@ @<<
$(glibmm_OBJS)
<<
diff --git a/MSVC_NMake/config-msvc.mak b/MSVC_NMake/config-msvc.mak
index 872e9cb0..6ed22ecd 100644
--- a/MSVC_NMake/config-msvc.mak
+++ b/MSVC_NMake/config-msvc.mak
@@ -26,7 +26,7 @@ GLIBMM_BASE_CFLAGS = \
/Ivs$(PDBVER)\$(CFG)\$(PLAT) \
/I..\untracked\glib /I..\untracked\glib\glibmm \
/I..\glib /I..\glib\glibmm /I.\glibmm \
- /wd4530 /EHsc \
+ /wd4530 /wd4251 /wd4275 /EHsc \
/FImsvc_recommended_pragmas.h
GIOMM_BASE_CFLAGS = \
diff --git a/MSVC_NMake/generate-msvc.mak b/MSVC_NMake/generate-msvc.mak
index ed897e5e..7b67f436 100644
--- a/MSVC_NMake/generate-msvc.mak
+++ b/MSVC_NMake/generate-msvc.mak
@@ -17,9 +17,6 @@ vs$(PDBVER)\$(CFG)\$(PLAT)\glib-extra-defs-gen:
@-md $@
# Generate .def files
-vs$(PDBVER)\$(CFG)\$(PLAT)\glibmm\glibmm.def: $(GENDEF) vs$(PDBVER)\$(CFG)\$(PLAT)\glibmm $(glibmm_OBJS)
- vs$(PDBVER)\$(CFG)\$(PLAT)\gendef.exe $@ $(GLIBMM_LIBNAME) vs$(PDBVER)\$(CFG)\$(PLAT)\glibmm\*.obj
-
vs$(PDBVER)\$(CFG)\$(PLAT)\giomm\giomm.def: $(GENDEF) vs$(PDBVER)\$(CFG)\$(PLAT)\giomm $(giomm_OBJS)
vs$(PDBVER)\$(CFG)\$(PLAT)\gendef.exe $@ $(GIOMM_LIBNAME) vs$(PDBVER)\$(CFG)\$(PLAT)\giomm\*.obj
diff --git a/glib/glibmm/meson.build b/glib/glibmm/meson.build
index c69dd3c8..6915e2b5 100644
--- a/glib/glibmm/meson.build
+++ b/glib/glibmm/meson.build
@@ -145,6 +145,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.
@@ -246,12 +256,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()
@@ -297,54 +309,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 abaaeb31..f534812f 100644
--- a/glib/glibmmconfig.h.in
+++ b/glib/glibmmconfig.h.in
@@ -146,16 +146,13 @@
#endif
#ifdef GLIBMM_DLL
-# if defined(GLIBMM_BUILD) && defined(_WINDLL)
- /* Do not dllexport as it is handled by gendef on MSVC */
-# define GLIBMM_API
-# elif !defined(GLIBMM_BUILD)
-# define GLIBMM_API __declspec(dllimport)
+# if defined(GLIBMM_BUILD)
+# define GLIBMM_API __declspec(dllexport)
# else
- /* Build a static library */
-# define GLIBMM_API
+# define GLIBMM_API __declspec(dllimport)
# endif /* GLIBMM_BUILD - _WINDLL */
#else
+/* Build a static library or a non-native-Windows library */
# define GLIBMM_API
#endif /* GLIBMM_DLL */
diff --git a/glib/glibmmconfig.h.meson b/glib/glibmmconfig.h.meson
index 12e80ac6..c9de14a8 100644
--- a/glib/glibmmconfig.h.meson
+++ b/glib/glibmmconfig.h.meson
@@ -147,16 +147,13 @@
#endif
#ifdef GLIBMM_DLL
-# if defined(GLIBMM_BUILD) && defined(_WINDLL)
- /* Do not dllexport as it is handled by gendef on MSVC */
-# define GLIBMM_API
-# elif !defined(GLIBMM_BUILD)
-# define GLIBMM_API __declspec(dllimport)
+# if defined(GLIBMM_BUILD)
+# define GLIBMM_API __declspec(dllexport)
# else
- /* Build a static library */
-# define GLIBMM_API
+# define GLIBMM_API __declspec(dllimport)
# endif /* GLIBMM_BUILD - _WINDLL */
#else
+/* Build a static library or a non-native-Windows library */
# define GLIBMM_API
#endif /* GLIBMM_DLL */
diff --git a/meson.build b/meson.build
index 16297a8a..daa536e0 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', '/wd4146', '/wd4267', '/wd4530', '/wd4589', '/utf-8'
+ '/FImsvc_recommended_pragmas.h', '/wd4146', '/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]