Skip to content

Commit 57178e8

Browse files
bruchar1nirbheek
authored andcommitted
fix bug with openssl when cmake is missing
Fixes #12098 DependencyFactory was returning a lambda, but it has no log_tried() function
1 parent bd3341f commit 57178e8

File tree

5 files changed

+39
-4
lines changed

5 files changed

+39
-4
lines changed

mesonbuild/dependencies/cmake.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,3 +652,19 @@ def get_variable(self, *, cmake: T.Optional[str] = None, pkgconfig: T.Optional[s
652652
if default_value is not None:
653653
return default_value
654654
raise DependencyException(f'Could not get cmake variable and no default provided for {self!r}')
655+
656+
657+
class CMakeDependencyFactory:
658+
659+
def __init__(self, name: T.Optional[str] = None, modules: T.Optional[T.List[str]] = None):
660+
self.name = name
661+
self.modules = modules
662+
663+
def __call__(self, name: str, env: Environment, kwargs: T.Dict[str, T.Any], language: T.Optional[str] = None, force_use_global_compilers: bool = False) -> CMakeDependency:
664+
if self.modules:
665+
kwargs['modules'] = self.modules
666+
return CMakeDependency(self.name or name, env, kwargs, language, force_use_global_compilers)
667+
668+
@staticmethod
669+
def log_tried() -> str:
670+
return CMakeDependency.log_tried()

mesonbuild/dependencies/misc.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from .. import mlog
2424
from .base import DependencyException, DependencyMethods
2525
from .base import BuiltinDependency, SystemDependency
26-
from .cmake import CMakeDependency
26+
from .cmake import CMakeDependency, CMakeDependencyFactory
2727
from .configtool import ConfigToolDependency
2828
from .detect import packages
2929
from .factory import DependencyFactory, factory_methods
@@ -599,19 +599,19 @@ def shaderc_factory(env: 'Environment',
599599
'openssl',
600600
[DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM, DependencyMethods.CMAKE],
601601
system_class=OpensslSystemDependency,
602-
cmake_class=lambda name, env, kwargs: CMakeDependency('OpenSSL', env, dict(kwargs, modules=['OpenSSL::Crypto', 'OpenSSL::SSL'])),
602+
cmake_class=CMakeDependencyFactory('OpenSSL', modules=['OpenSSL::Crypto', 'OpenSSL::SSL']),
603603
)
604604

605605
packages['libcrypto'] = libcrypto_factory = DependencyFactory(
606606
'libcrypto',
607607
[DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM, DependencyMethods.CMAKE],
608608
system_class=OpensslSystemDependency,
609-
cmake_class=lambda name, env, kwargs: CMakeDependency('OpenSSL', env, dict(kwargs, modules=['OpenSSL::Crypto'])),
609+
cmake_class=CMakeDependencyFactory('OpenSSL', modules=['OpenSSL::Crypto']),
610610
)
611611

612612
packages['libssl'] = libssl_factory = DependencyFactory(
613613
'libssl',
614614
[DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM, DependencyMethods.CMAKE],
615615
system_class=OpensslSystemDependency,
616-
cmake_class=lambda name, env, kwargs: CMakeDependency('OpenSSL', env, dict(kwargs, modules=['OpenSSL::SSL'])),
616+
cmake_class=CMakeDependencyFactory('OpenSSL', modules=['OpenSSL::SSL']),
617617
)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
project('bug', 'cpp')
2+
3+
# When cmake is not available,
4+
# this triggers the bug described in #12098
5+
openssl_dep = dependency('openssl')
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[binaries]
2+
3+
cmake = '/path/to/nothing'
4+
5+
[built-in options]
6+
7+
pkg_config_path = ''

unittests/platformagnostictests.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,3 +271,10 @@ def test_meson_package_cache_dir(self):
271271
builddir = os.path.join(srcdir, '_build')
272272
self.change_builddir(builddir)
273273
self.init(srcdir, override_envvars={'MESON_PACKAGE_CACHE_DIR': os.path.join(srcdir, 'cache_dir')})
274+
275+
def test_cmake_openssl_not_found_bug(self):
276+
"""Issue #12098"""
277+
testdir = os.path.join(self.unit_test_dir, '117 openssl cmake bug')
278+
self.meson_native_files.append(os.path.join(testdir, 'nativefile.ini'))
279+
out = self.init(testdir, allow_fail=True)
280+
self.assertNotIn('Unhandled python exception', out)

0 commit comments

Comments
 (0)