summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/dependencies/__init__.py86
-rw-r--r--mesonbuild/dependencies/boost.py2
-rw-r--r--mesonbuild/dependencies/coarrays.py2
-rw-r--r--mesonbuild/dependencies/cuda.py3
-rw-r--r--mesonbuild/dependencies/detect.py8
-rw-r--r--mesonbuild/dependencies/dev.py15
-rw-r--r--mesonbuild/dependencies/hdf5.py3
-rw-r--r--mesonbuild/dependencies/misc.py33
-rw-r--r--mesonbuild/dependencies/mpi.py3
-rw-r--r--mesonbuild/dependencies/platform.py3
-rw-r--r--mesonbuild/dependencies/python.py5
-rw-r--r--mesonbuild/dependencies/qt.py7
-rw-r--r--mesonbuild/dependencies/scalapack.py3
-rw-r--r--mesonbuild/dependencies/ui.py10
14 files changed, 114 insertions, 69 deletions
diff --git a/mesonbuild/dependencies/__init__.py b/mesonbuild/dependencies/__init__.py
index 7fa1b46be..c6dabc50e 100644
--- a/mesonbuild/dependencies/__init__.py
+++ b/mesonbuild/dependencies/__init__.py
@@ -192,62 +192,66 @@ this approach, and no new dependencies should do this.
# - An ExternalDependency subclass
# - A DependencyFactory object
# - A callable with a signature of (Environment, MachineChoice, Dict[str, Any]) -> List[Callable[[], ExternalDependency]]
+#
+# The internal "defaults" attribute contains a separate dictionary mapping
+# for lazy imports. The values must be:
+# - a string naming the submodule that should be imported from `mesonbuild.dependencies` to populate the dependency
packages.defaults.update({
# From dev:
- 'gtest': 'dev:gtest_factory',
- 'gmock': 'dev:gmock_factory',
- 'llvm': 'dev:llvm_factory',
- 'valgrind': 'dev:ValgrindDependency',
- 'zlib': 'dev:zlib_factory',
- 'jni': 'dev:JNISystemDependency',
- 'jdk': 'dev:JDKSystemDependency',
+ 'gtest': 'dev',
+ 'gmock': 'dev',
+ 'llvm': 'dev',
+ 'valgrind': 'dev',
+ 'zlib': 'dev',
+ 'jni': 'dev',
+ 'jdk': 'dev',
- 'boost': 'boost:BoostDependency',
- 'cuda': 'cuda:CudaDependency',
+ 'boost': 'boost',
+ 'cuda': 'cuda',
# per-file
- 'coarray': 'coarrays:coarray_factory',
- 'hdf5': 'hdf5:hdf5_factory',
- 'mpi': 'mpi:mpi_factory',
- 'scalapack': 'scalapack:scalapack_factory',
+ 'coarray': 'coarrays',
+ 'hdf5': 'hdf5',
+ 'mpi': 'mpi',
+ 'scalapack': 'scalapack',
# From misc:
- 'blocks': 'misc:BlocksDependency',
- 'curses': 'misc:curses_factory',
- 'netcdf': 'misc:netcdf_factory',
- 'openmp': 'misc:OpenMPDependency',
- 'threads': 'misc:threads_factory',
- 'pcap': 'misc:pcap_factory',
- 'cups': 'misc:cups_factory',
- 'libwmf': 'misc:libwmf_factory',
- 'libgcrypt': 'misc:libgcrypt_factory',
- 'gpgme': 'misc:gpgme_factory',
- 'shaderc': 'misc:shaderc_factory',
- 'iconv': 'misc:iconv_factory',
- 'intl': 'misc:intl_factory',
- 'dl': 'misc:dl_factory',
- 'openssl': 'misc:openssl_factory',
- 'libcrypto': 'misc:libcrypto_factory',
- 'libssl': 'misc:libssl_factory',
+ 'blocks': 'misc',
+ 'curses': 'misc',
+ 'netcdf': 'misc',
+ 'openmp': 'misc',
+ 'threads': 'misc',
+ 'pcap': 'misc',
+ 'cups': 'misc',
+ 'libwmf': 'misc',
+ 'libgcrypt': 'misc',
+ 'gpgme': 'misc',
+ 'shaderc': 'misc',
+ 'iconv': 'misc',
+ 'intl': 'misc',
+ 'dl': 'misc',
+ 'openssl': 'misc',
+ 'libcrypto': 'misc',
+ 'libssl': 'misc',
# From platform:
- 'appleframeworks': 'platform:AppleFrameworks',
+ 'appleframeworks': 'platform',
# from python:
- 'python3': 'python:python_factory',
- 'pybind11': 'python:pybind11_factory',
+ 'python3': 'python',
+ 'pybind11': 'python',
# From ui:
- 'gl': 'ui:gl_factory',
- 'gnustep': 'ui:GnuStepDependency',
- 'sdl2': 'ui:sdl2_factory',
- 'wxwidgets': 'ui:WxDependency',
- 'vulkan': 'ui:vulkan_factory',
+ 'gl': 'ui',
+ 'gnustep': 'ui',
+ 'sdl2': 'ui',
+ 'wxwidgets': 'ui',
+ 'vulkan': 'ui',
# from qt
- 'qt4': 'qt:qt4_factory',
- 'qt5': 'qt:qt5_factory',
- 'qt6': 'qt:qt6_factory',
+ 'qt4': 'qt',
+ 'qt5': 'qt',
+ 'qt6': 'qt',
})
_packages_accept_language.update({
'hdf5',
diff --git a/mesonbuild/dependencies/boost.py b/mesonbuild/dependencies/boost.py
index 44f1baf4a..0e4dab9a5 100644
--- a/mesonbuild/dependencies/boost.py
+++ b/mesonbuild/dependencies/boost.py
@@ -23,6 +23,7 @@ from .. import mlog
from .. import mesonlib
from .base import DependencyException, SystemDependency
+from .detect import packages
from .pkgconfig import PkgConfigDependency
from .misc import threads_factory
@@ -738,6 +739,7 @@ class BoostDependency(SystemDependency):
# BOOST_ALL_DYN_LINK should not be required with the known defines below
return ['-DBOOST_ALL_NO_LIB'] # Disable automatic linking
+packages['boost'] = BoostDependency
# See https://www.boost.org/doc/libs/1_72_0/more/getting_started/unix-variants.html#library-naming
# See https://mesonbuild.com/Reference-tables.html#cpu-families
diff --git a/mesonbuild/dependencies/coarrays.py b/mesonbuild/dependencies/coarrays.py
index 70cf4f89e..5cb855614 100644
--- a/mesonbuild/dependencies/coarrays.py
+++ b/mesonbuild/dependencies/coarrays.py
@@ -18,6 +18,7 @@ import typing as T
from .base import DependencyMethods, detect_compiler, SystemDependency
from .cmake import CMakeDependency
+from .detect import packages
from .pkgconfig import PkgConfigDependency
from .factory import factory_methods
@@ -51,6 +52,7 @@ def coarray_factory(env: 'Environment',
candidates.append(functools.partial(CoarrayDependency, env, kwargs))
return candidates
+packages['coarray'] = coarray_factory
class CoarrayDependency(SystemDependency):
diff --git a/mesonbuild/dependencies/cuda.py b/mesonbuild/dependencies/cuda.py
index 89e562ff4..af0ae4b1f 100644
--- a/mesonbuild/dependencies/cuda.py
+++ b/mesonbuild/dependencies/cuda.py
@@ -23,6 +23,7 @@ from .. import mesonlib
from .. import mlog
from ..environment import detect_cpu_family
from .base import DependencyException, SystemDependency
+from .detect import packages
if T.TYPE_CHECKING:
@@ -290,3 +291,5 @@ class CudaDependency(SystemDependency):
for lib in self.requested_modules:
args += self.lib_modules[lib]
return args
+
+packages['cuda'] = CudaDependency
diff --git a/mesonbuild/dependencies/detect.py b/mesonbuild/dependencies/detect.py
index a10131ddd..9428d547b 100644
--- a/mesonbuild/dependencies/detect.py
+++ b/mesonbuild/dependencies/detect.py
@@ -35,12 +35,10 @@ class DependencyPackages(collections.UserDict):
def __missing__(self, key: str) -> PackageTypes:
if key in self.defaults:
- modn, package = self.defaults[key].split(':', maxsplit=1)
- mod = importlib.import_module(f'mesonbuild.dependencies.{modn}')
- value = T.cast('PackageTypes', getattr(mod, package))
- self.data[key] = value
+ modn = self.defaults[key]
+ importlib.import_module(f'mesonbuild.dependencies.{modn}')
- return value
+ return self.data[key]
raise KeyError(key)
def __contains__(self, key: object) -> bool:
diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py
index 9c0349645..ec7015103 100644
--- a/mesonbuild/dependencies/dev.py
+++ b/mesonbuild/dependencies/dev.py
@@ -34,6 +34,7 @@ from ..mesonlib import version_compare, version_compare_many, search_version, st
from .base import DependencyException, DependencyMethods, detect_compiler, strip_system_includedirs, strip_system_libdirs, SystemDependency, ExternalDependency, DependencyTypeName
from .cmake import CMakeDependency
from .configtool import ConfigToolDependency
+from .detect import packages
from .factory import DependencyFactory
from .misc import threads_factory
from .pkgconfig import PkgConfigDependency
@@ -507,6 +508,8 @@ class ValgrindDependency(PkgConfigDependency):
def get_link_args(self, language: T.Optional[str] = None, raw: bool = False) -> T.List[str]:
return []
+packages['valgrind'] = ValgrindDependency
+
class ZlibSystemDependency(SystemDependency):
@@ -671,6 +674,8 @@ class JNISystemDependency(SystemDependency):
return None
+packages['jni'] = JNISystemDependency
+
class JDKSystemDependency(JNISystemDependency):
def __init__(self, environment: 'Environment', kwargs: JNISystemDependencyKW):
@@ -683,29 +688,31 @@ class JDKSystemDependency(JNISystemDependency):
'Use the jni system dependency instead'
))
+packages['jdk'] = JDKSystemDependency
+
-llvm_factory = DependencyFactory(
+packages['llvm'] = llvm_factory = DependencyFactory(
'LLVM',
[DependencyMethods.CMAKE, DependencyMethods.CONFIG_TOOL],
cmake_class=LLVMDependencyCMake,
configtool_class=LLVMDependencyConfigTool,
)
-gtest_factory = DependencyFactory(
+packages['gtest'] = gtest_factory = DependencyFactory(
'gtest',
[DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM],
pkgconfig_class=GTestDependencyPC,
system_class=GTestDependencySystem,
)
-gmock_factory = DependencyFactory(
+packages['gmock'] = gmock_factory = DependencyFactory(
'gmock',
[DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM],
pkgconfig_class=GMockDependencyPC,
system_class=GMockDependencySystem,
)
-zlib_factory = DependencyFactory(
+packages['zlib'] = zlib_factory = DependencyFactory(
'zlib',
[DependencyMethods.PKGCONFIG, DependencyMethods.CMAKE, DependencyMethods.SYSTEM],
cmake_name='ZLIB',
diff --git a/mesonbuild/dependencies/hdf5.py b/mesonbuild/dependencies/hdf5.py
index 4e5820ae5..392bb0964 100644
--- a/mesonbuild/dependencies/hdf5.py
+++ b/mesonbuild/dependencies/hdf5.py
@@ -25,6 +25,7 @@ from ..mesonlib import Popen_safe, OrderedSet, join_args
from ..programs import ExternalProgram
from .base import DependencyException, DependencyMethods
from .configtool import ConfigToolDependency
+from .detect import packages
from .pkgconfig import PkgConfigDependency
from .factory import factory_methods
import typing as T
@@ -178,3 +179,5 @@ def hdf5_factory(env: 'Environment', for_machine: 'MachineChoice',
candidates.append(functools.partial(HDF5ConfigToolDependency, 'hdf5', env, kwargs, language))
return candidates
+
+packages['hdf5'] = hdf5_factory
diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py
index 0c747c4a5..d77566961 100644
--- a/mesonbuild/dependencies/misc.py
+++ b/mesonbuild/dependencies/misc.py
@@ -25,6 +25,7 @@ from .base import DependencyException, DependencyMethods
from .base import BuiltinDependency, SystemDependency
from .cmake import CMakeDependency
from .configtool import ConfigToolDependency
+from .detect import packages
from .factory import DependencyFactory, factory_methods
from .pkgconfig import PkgConfigDependency
@@ -57,6 +58,8 @@ def netcdf_factory(env: 'Environment',
return candidates
+packages['netcdf'] = netcdf_factory
+
class DlBuiltinDependency(BuiltinDependency):
def __init__(self, name: str, env: 'Environment', kwargs: T.Dict[str, T.Any]):
@@ -136,6 +139,8 @@ class OpenMPDependency(SystemDependency):
if not self.is_found:
mlog.log(mlog.yellow('WARNING:'), 'OpenMP found but omp.h missing.')
+packages['openmp'] = OpenMPDependency
+
class ThreadDependency(SystemDependency):
def __init__(self, name: str, environment: 'Environment', kwargs: T.Dict[str, T.Any]) -> None:
@@ -183,6 +188,8 @@ class BlocksDependency(SystemDependency):
self.is_found = True
+packages['blocks'] = BlocksDependency
+
class PcapDependencyConfigTool(ConfigToolDependency):
@@ -489,6 +496,7 @@ def curses_factory(env: 'Environment',
candidates.append(functools.partial(CursesSystemDependency, 'curses', env, kwargs))
return candidates
+packages['curses'] = curses_factory
@factory_methods({DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM})
@@ -524,83 +532,84 @@ def shaderc_factory(env: 'Environment',
candidates.append(functools.partial(ShadercDependency, env, kwargs))
return candidates
+packages['shaderc'] = shaderc_factory
-cups_factory = DependencyFactory(
+packages['cups'] = cups_factory = DependencyFactory(
'cups',
[DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL, DependencyMethods.EXTRAFRAMEWORK, DependencyMethods.CMAKE],
configtool_class=CupsDependencyConfigTool,
cmake_name='Cups',
)
-dl_factory = DependencyFactory(
+packages['dl'] = dl_factory = DependencyFactory(
'dl',
[DependencyMethods.BUILTIN, DependencyMethods.SYSTEM],
builtin_class=DlBuiltinDependency,
system_class=DlSystemDependency,
)
-gpgme_factory = DependencyFactory(
+packages['gpgme'] = gpgme_factory = DependencyFactory(
'gpgme',
[DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL],
configtool_class=GpgmeDependencyConfigTool,
)
-libgcrypt_factory = DependencyFactory(
+packages['libgcrypt'] = libgcrypt_factory = DependencyFactory(
'libgcrypt',
[DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL],
configtool_class=LibGCryptDependencyConfigTool,
)
-libwmf_factory = DependencyFactory(
+packages['libwmf'] = libwmf_factory = DependencyFactory(
'libwmf',
[DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL],
configtool_class=LibWmfDependencyConfigTool,
)
-pcap_factory = DependencyFactory(
+packages['pcap'] = pcap_factory = DependencyFactory(
'pcap',
[DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL],
configtool_class=PcapDependencyConfigTool,
pkgconfig_name='libpcap',
)
-threads_factory = DependencyFactory(
+packages['threads'] = threads_factory = DependencyFactory(
'threads',
[DependencyMethods.SYSTEM, DependencyMethods.CMAKE],
cmake_name='Threads',
system_class=ThreadDependency,
)
-iconv_factory = DependencyFactory(
+packages['iconv'] = iconv_factory = DependencyFactory(
'iconv',
[DependencyMethods.BUILTIN, DependencyMethods.SYSTEM],
builtin_class=IconvBuiltinDependency,
system_class=IconvSystemDependency,
)
-intl_factory = DependencyFactory(
+packages['intl'] = intl_factory = DependencyFactory(
'intl',
[DependencyMethods.BUILTIN, DependencyMethods.SYSTEM],
builtin_class=IntlBuiltinDependency,
system_class=IntlSystemDependency,
)
-openssl_factory = DependencyFactory(
+packages['openssl'] = openssl_factory = DependencyFactory(
'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'])),
)
-libcrypto_factory = DependencyFactory(
+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'])),
)
-libssl_factory = DependencyFactory(
+packages['libssl'] = libssl_factory = DependencyFactory(
'libssl',
[DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM, DependencyMethods.CMAKE],
system_class=OpensslSystemDependency,
diff --git a/mesonbuild/dependencies/mpi.py b/mesonbuild/dependencies/mpi.py
index 8f83ce493..910068143 100644
--- a/mesonbuild/dependencies/mpi.py
+++ b/mesonbuild/dependencies/mpi.py
@@ -21,6 +21,7 @@ import re
from ..environment import detect_cpu_family
from .base import DependencyMethods, detect_compiler, SystemDependency
from .configtool import ConfigToolDependency
+from .detect import packages
from .factory import factory_methods
from .pkgconfig import PkgConfigDependency
@@ -100,6 +101,8 @@ def mpi_factory(env: 'Environment',
return candidates
+packages['mpi'] = mpi_factory
+
class _MPIConfigToolDependency(ConfigToolDependency):
diff --git a/mesonbuild/dependencies/platform.py b/mesonbuild/dependencies/platform.py
index 6d32555e3..87726b579 100644
--- a/mesonbuild/dependencies/platform.py
+++ b/mesonbuild/dependencies/platform.py
@@ -17,6 +17,7 @@
from __future__ import annotations
from .base import DependencyTypeName, ExternalDependency, DependencyException
+from .detect import packages
from ..mesonlib import MesonException
import typing as T
@@ -58,3 +59,5 @@ class AppleFrameworks(ExternalDependency):
@staticmethod
def log_tried() -> str:
return 'framework'
+
+packages['appleframeworks'] = AppleFrameworks
diff --git a/mesonbuild/dependencies/python.py b/mesonbuild/dependencies/python.py
index 24100071e..160772888 100644
--- a/mesonbuild/dependencies/python.py
+++ b/mesonbuild/dependencies/python.py
@@ -20,6 +20,7 @@ import typing as T
from .. import mesonlib, mlog
from .base import process_method_kw, DependencyMethods, DependencyTypeName, ExternalDependency, SystemDependency
from .configtool import ConfigToolDependency
+from .detect import packages
from .factory import DependencyFactory
from .framework import ExtraFrameworkDependency
from .pkgconfig import PkgConfigDependency
@@ -407,7 +408,9 @@ def python_factory(env: 'Environment', for_machine: 'MachineChoice',
return candidates
-pybind11_factory = DependencyFactory(
+packages['python3'] = python_factory
+
+packages['pybind11'] = pybind11_factory = DependencyFactory(
'pybind11',
[DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL, DependencyMethods.CMAKE],
configtool_class=Pybind11ConfigToolDependency,
diff --git a/mesonbuild/dependencies/qt.py b/mesonbuild/dependencies/qt.py
index 6d3185938..1a86bd28a 100644
--- a/mesonbuild/dependencies/qt.py
+++ b/mesonbuild/dependencies/qt.py
@@ -24,6 +24,7 @@ import typing as T
from .base import DependencyException, DependencyMethods
from .configtool import ConfigToolDependency
+from .detect import packages
from .framework import ExtraFrameworkDependency
from .pkgconfig import PkgConfigDependency
from .factory import DependencyFactory
@@ -467,21 +468,21 @@ class Qt6PkgConfigDependency(Qt6WinMainMixin, QtPkgConfigDependency):
return _qt_get_private_includes(mod_inc_dir, module, self.version)
-qt4_factory = DependencyFactory(
+packages['qt4'] = qt4_factory = DependencyFactory(
'qt4',
[DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL],
pkgconfig_class=Qt4PkgConfigDependency,
configtool_class=Qt4ConfigToolDependency,
)
-qt5_factory = DependencyFactory(
+packages['qt5'] = qt5_factory = DependencyFactory(
'qt5',
[DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL],
pkgconfig_class=Qt5PkgConfigDependency,
configtool_class=Qt5ConfigToolDependency,
)
-qt6_factory = DependencyFactory(
+packages['qt6'] = qt6_factory = DependencyFactory(
'qt6',
[DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL],
pkgconfig_class=Qt6PkgConfigDependency,
diff --git a/mesonbuild/dependencies/scalapack.py b/mesonbuild/dependencies/scalapack.py
index be8ee7031..257e4aaaa 100644
--- a/mesonbuild/dependencies/scalapack.py
+++ b/mesonbuild/dependencies/scalapack.py
@@ -22,6 +22,7 @@ from ..mesonlib import OptionKey
from .base import DependencyMethods
from .base import DependencyException
from .cmake import CMakeDependency
+from .detect import packages
from .pkgconfig import PkgConfigDependency
from .factory import factory_methods
@@ -52,6 +53,8 @@ def scalapack_factory(env: 'Environment', for_machine: 'MachineChoice',
return candidates
+packages['scalapack'] = scalapack_factory
+
class MKLPkgConfigDependency(PkgConfigDependency):
diff --git a/mesonbuild/dependencies/ui.py b/mesonbuild/dependencies/ui.py
index f3879bec0..1dffa1f6b 100644
--- a/mesonbuild/dependencies/ui.py
+++ b/mesonbuild/dependencies/ui.py
@@ -29,6 +29,7 @@ from ..environment import detect_cpu_family
from .base import DependencyException, DependencyMethods, DependencyTypeName, SystemDependency
from .configtool import ConfigToolDependency
+from .detect import packages
from .factory import DependencyFactory
if T.TYPE_CHECKING:
@@ -136,6 +137,8 @@ class GnuStepDependency(ConfigToolDependency):
version = '1'
return version
+packages['gnustep'] = GnuStepDependency
+
class SDL2DependencyConfigTool(ConfigToolDependency):
@@ -187,6 +190,7 @@ class WxDependency(ConfigToolDependency):
raise DependencyException('wxwidgets module argument is not a string')
return candidates
+packages['wxwidgets'] = WxDependency
class VulkanDependencySystem(SystemDependency):
@@ -244,20 +248,20 @@ class VulkanDependencySystem(SystemDependency):
self.link_args.append(lib)
return
-gl_factory = DependencyFactory(
+packages['gl'] = gl_factory = DependencyFactory(
'gl',
[DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM],
system_class=GLDependencySystem,
)
-sdl2_factory = DependencyFactory(
+packages['sdl2'] = sdl2_factory = DependencyFactory(
'sdl2',
[DependencyMethods.PKGCONFIG, DependencyMethods.CONFIG_TOOL, DependencyMethods.EXTRAFRAMEWORK, DependencyMethods.CMAKE],
configtool_class=SDL2DependencyConfigTool,
cmake_name='SDL2',
)
-vulkan_factory = DependencyFactory(
+packages['vulkan'] = vulkan_factory = DependencyFactory(
'vulkan',
[DependencyMethods.PKGCONFIG, DependencyMethods.SYSTEM],
system_class=VulkanDependencySystem,