[glib] build: Use Meson's find_library() for MSVC builds as needed
- From: Chun-wei Fan <fanchunwei src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] build: Use Meson's find_library() for MSVC builds as needed
- Date: Thu, 17 Aug 2017 09:50:55 +0000 (UTC)
commit 32d6a76b98657cec971327ffaa7866f3c801a379
Author: Chun-wei Fan <fanchunwei src gnome org>
Date: Tue Aug 15 17:08:47 2017 +0800
build: Use Meson's find_library() for MSVC builds as needed
Some of the dependencies' build systems for Visual Studio do not provide a
pkg-config file upon build, so we use find_library() for them when the
corresponding pkg-config files are not found during Visual Studio builds,
so that one will not need to make up pkg-config files for them, which
could be error-prone. These .lib names match the names that are built
with the officially supported build system that is used by their
respective Visual Studio support.
For ZLib, this will make gio-2.0.pc reflect on the zlib .lib based on
what is found, or whether we use the fallback/bundled ZLib, when we
don't have a pkg-config file for ZLib on MSVC. We still need to depend
on Meson to be updated to put the correct link argument for linking ZLib
in the pkg-config case.
https://bugzilla.gnome.org/show_bug.cgi?id=783270
gio/tests/meson.build | 12 ++++++++++++
meson.build | 43 +++++++++++++++++++++++++++++++++++++++++--
2 files changed, 53 insertions(+), 2 deletions(-)
---
diff --git a/gio/tests/meson.build b/gio/tests/meson.build
index 0967f14..e149a4b 100644
--- a/gio/tests/meson.build
+++ b/gio/tests/meson.build
@@ -80,6 +80,18 @@ test_c_args = [
# Check for libdbus1 - Optional - is only used in the GDBus test cases
# 1.2.14 required for dbus_message_set_serial
dbus1_dep = dependency('dbus-1', required : false, version : '>= 1.2.14')
+if not dbus1_dep.found()
+ if cc.get_id() == 'msvc'
+ # MSVC: Search for the DBus library by the configuration, which corresponds
+ # to the output of CMake builds of DBus. Note that debugoptimized
+ # is really a Release build with .PDB files.
+ if buildtype == 'debug'
+ dbus1_dep = cc.find_library('dbus-1d', required : false)
+ else
+ dbus1_dep = cc.find_library('dbus-1', required : false)
+ endif
+ endif
+endif
if dbus1_dep.found()
glib_conf.set('HAVE_DBUS1', 1)
diff --git a/meson.build b/meson.build
index ff3ccaa..35fd732 100644
--- a/meson.build
+++ b/meson.build
@@ -130,6 +130,10 @@ else
endif
glibconfig_conf.set('glib_os', glib_os)
+# We need to know the build type to determine what .lib files we need on Visual Studio
+# for dependencies that don't normally come with pkg-config files for Visual Studio builds
+buildtype = get_option('buildtype')
+
# check for header files
headers = [
@@ -1359,13 +1363,48 @@ if get_option('with-pcre') == 'internal'
use_system_pcre = false
else
pcre = dependency('libpcre', required : false) # Should check for Unicode support, too. FIXME
+ if not pcre.found()
+ if cc.get_id() == 'msvc'
+ # MSVC: Search for the PCRE library by the configuration, which corresponds
+ # to the output of CMake builds of PCRE. Note that debugoptimized
+ # is really a Release build with .PDB files.
+ if buildtype == 'debug'
+ pcre = cc.find_library('pcred', required : false)
+ else
+ pcre = cc.find_library('pcre', required : false)
+ endif
+ endif
+ endif
use_system_pcre = pcre.found()
endif
glib_conf.set('USE_SYSTEM_PCRE', use_system_pcre)
libm = cc.find_library('m', required : false)
libffi_dep = dependency('libffi', version : '>= 3.0.0', fallback : ['libffi', 'ffi_dep'])
-libz_dep = dependency('zlib', fallback : ['zlib', 'zlib_dep'])
+zlib_libname = '-lz'
+if cc.get_id() != 'msvc'
+ libz_dep = dependency('zlib', fallback : ['zlib', 'zlib_dep'])
+else
+ # MSVC: Don't use the bundled ZLib sources until we are sure that we can't
+ # find the ZLib .lib
+ libz_dep = dependency('zlib', required : false)
+
+ # MSVC: Search for the ZLib .lib, which corresponds to the results of
+ # of using ZLib's win32/makefile.msc.
+ if not libz_dep.found()
+ libz_dep = cc.find_library('zlib1', required : false)
+ if libz_dep.found()
+ zlib_libname = '-lzlib1'
+ else
+ libz_dep = cc.find_library('zlib', required : false)
+ if libz_dep.found()
+ zlib_libname = '-lzlib'
+ else
+ zlib_dep = subproject('zlib').get_variable('zlib_dep')
+ endif
+ endif
+ endif
+endif
# Only used on non-glibc targets
libintl = cc.find_library('intl', required : false)
@@ -1414,7 +1453,7 @@ glib_conf.set('SIZEOF___INT64', 8)
# Various substs needed for our pkg-config files
# FIXME: Derive these from the dependency() objects (Meson support needed)
-glib_conf.set('ZLIB_LIBS', '-lz')
+glib_conf.set('ZLIB_LIBS', zlib_libname)
glib_conf.set('LIBFFI_LIBS', '-lffi')
if libintl.found()
glib_conf.set('INTLLIBS', '-lintl')
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]