summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.com>2019-08-01 18:57:43 -0400
committerOlivier CrĂȘte <olivier.crete@collabora.com>2019-08-02 12:29:47 -0400
commit549f957696ecc0e93f9d6f377927001928b7225e (patch)
tree8b1c2bad829bb77b90a9a30f27debf532d712d4a
parent48bb97116f313c4122fac3484d894f445d1c4bee (diff)
downloadlibnice-549f957696ecc0e93f9d6f377927001928b7225e.tar.gz
meson: Add non-pkgconfig test for OpenSSL
This makes it work with Windows MSVC builds of OpenSSL which don't include a pkg-config file.
-rw-r--r--meson.build55
1 files changed, 44 insertions, 11 deletions
diff --git a/meson.build b/meson.build
index 20da9a3..42c0816 100644
--- a/meson.build
+++ b/meson.build
@@ -186,32 +186,65 @@ gthread_dep = dependency('gthread-2.0',
# Cryto library
opt_cryptolib = get_option('crypto-library')
-message('Crypto library: ' + opt_cryptolib)
+message('Crypto librar requested: ' + opt_cryptolib)
if opt_cryptolib != 'openssl'
crypto_dep = dependency('gnutls', version: gnutls_req, required: false)
cdata.set('HAVE_GNUTLS', crypto_dep.found())
- if not crypto_dep.found()
- if opt_cryptolib != 'auto'
- error('GnuTLS requested as crypto library, but not found')
- endif
- crypto_dep = dependency('openssl', required: false,
+ if not crypto_dep.found() and opt_cryptolib == 'auto'
+ crypto_dep = dependency('openssl', required: false,
fallback: ['openssl', 'openssl_dep'])
cdata.set('HAVE_OPENSSL', crypto_dep.found())
endif
else
crypto_dep = dependency('openssl', required: false)
cdata.set('HAVE_OPENSSL', crypto_dep.found())
- if not crypto_dep.found()
- if opt_cryptolib != 'auto'
- error('OpenSSL requested as crypto library, but not found')
- endif
+ if not crypto_dep.found() and openssl == 'auto'
crypto_dep = dependency('gnutls', version: gnutls_req, required: false)
cdata.set('HAVE_GNUTLS', crypto_dep.found())
endif
endif
+if not crypto_dep.found() and opt_cryptolib != 'gnutls'
+ # MSVC builds of OpenSSL does not generate pkg-config files,
+ # so we check for it manually here in this case, if we can't find those files
+ # Based on the CMake check for OpenSSL in CURL's CMakeLists.txt,
+ # on which headers we should check for
+ openssl_headers = []
+ foreach h : ['crypto.h', 'engine.h', 'err.h', 'pem.h',
+ 'rsa.h', 'ssl.h', 'x509.h', 'rand.h', 'tls1.h']
+ openssl_headers += 'openssl/' + h
+ endforeach
+
+ # OpenSSL 1.1.x and 1.0.x (or earlier) have different .lib names,
+ # so we need to look for the correct pair
+
+ # Find either libcrypto.lib (1.1.x) or libeay32.lib (1.0.x or earlier) first
+ libcrypto_dep = cc.find_library('crypto', required: false)
+ if libcrypto_dep.found()
+ libssl = 'ssl'
+ else
+ libcrypto_dep = cc.find_library('eay32', required: false)
+ libssl = 'ssleay32'
+ endif
+
+ if libcrypto_dep.found()
+ # Find the corresponding SSL library depending on which crypto .lib we found
+ libssl_dep = cc.find_library(libssl, required: false, has_headers: openssl_headers)
+ endif
+
+ if libcrypto_dep.found() and libssl_dep.found()
+ crypto_dep = [libcrypto_dep, libssl_dep]
+ endif
+endif
+
if not crypto_dep.found()
- error('Either GnuTLS or OpenSSL is required as crypto library, but neither was found')
+ if opt_cryptolib == 'gnutls'
+ error('GnuTLS requested as crypto library, but not found')
+ elif opt_cryptolib == 'gnutls'
+ error('OpenSSL requested as crypto library, but not found')
+ else
+ error('Either GnuTLS or OpenSSL is required as crypto library, but neither was found')
+ endif
endif
# GStreamer