Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions mesonbuild/dependencies/cmake.py
Original file line number Diff line number Diff line change
Expand Up @@ -652,3 +652,19 @@ def get_variable(self, *, cmake: T.Optional[str] = None, pkgconfig: T.Optional[s
if default_value is not None:
return default_value
raise DependencyException(f'Could not get cmake variable and no default provided for {self!r}')


class CMakeDependencyFactory:

def __init__(self, name: T.Optional[str] = None, modules: T.Optional[T.List[str]] = None):
self.name = name
self.modules = modules

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:
if self.modules:
kwargs['modules'] = self.modules
return CMakeDependency(self.name or name, env, kwargs, language, force_use_global_compilers)

@staticmethod
def log_tried() -> str:
return CMakeDependency.log_tried()
8 changes: 4 additions & 4 deletions mesonbuild/dependencies/misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from .. import mlog
from .base import DependencyException, DependencyMethods
from .base import BuiltinDependency, SystemDependency
from .cmake import CMakeDependency
from .cmake import CMakeDependency, CMakeDependencyFactory
from .configtool import ConfigToolDependency
from .detect import packages
from .factory import DependencyFactory, factory_methods
Expand Down Expand Up @@ -599,19 +599,19 @@ def shaderc_factory(env: 'Environment',
'openssl',
[DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM, DependencyMethods.CMAKE],
system_class=OpensslSystemDependency,
cmake_class=lambda name, env, kwargs: CMakeDependency('OpenSSL', env, dict(kwargs, modules=['OpenSSL::Crypto', 'OpenSSL::SSL'])),
cmake_class=CMakeDependencyFactory('OpenSSL', modules=['OpenSSL::Crypto', 'OpenSSL::SSL']),
)

packages['libcrypto'] = libcrypto_factory = DependencyFactory(
'libcrypto',
[DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM, DependencyMethods.CMAKE],
system_class=OpensslSystemDependency,
cmake_class=lambda name, env, kwargs: CMakeDependency('OpenSSL', env, dict(kwargs, modules=['OpenSSL::Crypto'])),
cmake_class=CMakeDependencyFactory('OpenSSL', modules=['OpenSSL::Crypto']),
)

packages['libssl'] = libssl_factory = DependencyFactory(
'libssl',
[DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM, DependencyMethods.CMAKE],
system_class=OpensslSystemDependency,
cmake_class=lambda name, env, kwargs: CMakeDependency('OpenSSL', env, dict(kwargs, modules=['OpenSSL::SSL'])),
cmake_class=CMakeDependencyFactory('OpenSSL', modules=['OpenSSL::SSL']),
)
5 changes: 5 additions & 0 deletions test cases/unit/117 openssl cmake bug/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
project('bug', 'cpp')

# When cmake is not available,
# this triggers the bug described in #12098
openssl_dep = dependency('openssl')
7 changes: 7 additions & 0 deletions test cases/unit/117 openssl cmake bug/nativefile.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[binaries]

cmake = '/path/to/nothing'

[built-in options]

pkg_config_path = ''
7 changes: 7 additions & 0 deletions unittests/platformagnostictests.py
Original file line number Diff line number Diff line change
Expand Up @@ -271,3 +271,10 @@ def test_meson_package_cache_dir(self):
builddir = os.path.join(srcdir, '_build')
self.change_builddir(builddir)
self.init(srcdir, override_envvars={'MESON_PACKAGE_CACHE_DIR': os.path.join(srcdir, 'cache_dir')})

def test_cmake_openssl_not_found_bug(self):
"""Issue #12098"""
testdir = os.path.join(self.unit_test_dir, '117 openssl cmake bug')
self.meson_native_files.append(os.path.join(testdir, 'nativefile.ini'))
out = self.init(testdir, allow_fail=True)
self.assertNotIn('Unhandled python exception', out)