summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChun-wei Fan <fanchunwei@src.gnome.org>2020-03-05 16:01:13 +0800
committerChun-wei Fan <fanchunwei@src.gnome.org>2020-03-07 23:22:32 +0800
commitd84be37aaa335e57bb6fe7de6bf4be736652a60d (patch)
tree48a6efc940aa127f762f0168ba0a9234c7ae4d39
parentb55811ea37fc26f6815a18a4d6dc24dae78354fb (diff)
downloadglibmm-d84be37aaa335e57bb6fe7de6bf4be736652a60d.tar.gz
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
-rw-r--r--MSVC_NMake/build-rules-msvc.mak4
-rw-r--r--MSVC_NMake/config-msvc.mak2
-rw-r--r--MSVC_NMake/generate-msvc.mak3
-rw-r--r--glib/glibmm/meson.build61
-rw-r--r--glib/glibmmconfig.h.in13
-rw-r--r--glib/glibmmconfig.h.meson13
-rw-r--r--meson.build2
7 files changed, 33 insertions, 65 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/config-msvc.mak b/MSVC_NMake/config-msvc.mak
index 58f255fc..ddfcd772 100644
--- a/MSVC_NMake/config-msvc.mak
+++ b/MSVC_NMake/config-msvc.mak
@@ -26,7 +26,7 @@ GLIBMM_BASE_CFLAGS = \
/Ivs$(VSVER)\$(CFG)\$(PLAT) \
/I..\untracked\glib /I..\untracked\glib\glibmm \
/I..\glib /I..\glib\glibmm /I.\glibmm \
- /wd4530 /std:c++17 \
+ /wd4530 /wd4251 /wd4275 /std:c++17 \
/FImsvc_recommended_pragmas.h
GIOMM_BASE_CFLAGS = \
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..7bda0eaa 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=1' ]
+
+# 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..aa158038 100644
--- a/glib/glibmmconfig.h.in
+++ b/glib/glibmmconfig.h.in
@@ -107,15 +107,12 @@
#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
-# endif /* GLIBMM_BUILD - _WINDLL */
+# define GLIBMM_API __declspec(dllimport)
+# endif
+/* Build a static or non-native-Windows library */
#else
# define GLIBMM_API
#endif /* GLIBMM_DLL */
diff --git a/glib/glibmmconfig.h.meson b/glib/glibmmconfig.h.meson
index 177f745b..801e3995 100644
--- a/glib/glibmmconfig.h.meson
+++ b/glib/glibmmconfig.h.meson
@@ -109,15 +109,12 @@
#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
-# endif /* GLIBMM_BUILD - _WINDLL */
+# define GLIBMM_API __declspec(dllimport)
+# endif
+/* Build a static or non-native-Windows library */
#else
# define GLIBMM_API
#endif /* GLIBMM_DLL */
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