diff --git a/mesonbuild/modules/pkgconfig.py b/mesonbuild/modules/pkgconfig.py index 394b4805d..8ccf5a3f9 100644 --- a/mesonbuild/modules/pkgconfig.py +++ b/mesonbuild/modules/pkgconfig.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +from __future__ import annotations from pathlib import PurePath import os import typing as T @@ -28,11 +29,12 @@ from ..interpreterbase import permittedKwargs, FeatureNew, FeatureDeprecated, Fe if T.TYPE_CHECKING: from . import ModuleState + from ..interpreter import Interpreter already_warned_objs = set() class DependenciesHelper: - def __init__(self, state, name): + def __init__(self, state: ModuleState, name: str) -> None: self.state = state self.name = name self.pub_libs = [] @@ -43,24 +45,24 @@ class DependenciesHelper: self.version_reqs = {} self.link_whole_targets = [] - def add_pub_libs(self, libs): + def add_pub_libs(self, libs) -> None: libs, reqs, cflags = self._process_libs(libs, True) self.pub_libs = libs + self.pub_libs # prepend to preserve dependencies self.pub_reqs += reqs self.cflags += cflags - def add_priv_libs(self, libs): + def add_priv_libs(self, libs) -> None: libs, reqs, _ = self._process_libs(libs, False) self.priv_libs = libs + self.priv_libs self.priv_reqs += reqs - def add_pub_reqs(self, reqs): + def add_pub_reqs(self, reqs) -> None: self.pub_reqs += self._process_reqs(reqs) - def add_priv_reqs(self, reqs): + def add_priv_reqs(self, reqs) -> None: self.priv_reqs += self._process_reqs(reqs) - def _check_generated_pc_deprecation(self, obj): + def _check_generated_pc_deprecation(self, obj) -> None: if not hasattr(obj, 'generated_pc_warn'): return name = obj.generated_pc_warn[0] @@ -77,7 +79,7 @@ class DependenciesHelper: location=obj.generated_pc_warn[1]) already_warned_objs.add((name, obj.name)) - def _process_reqs(self, reqs): + def _process_reqs(self, reqs: T.List[T.Union[str, dependencies.Dependency]]): '''Returns string names of requirements''' processed_reqs = [] for obj in mesonlib.listify(reqs): @@ -104,10 +106,10 @@ class DependenciesHelper: f'or pkgconfig-dependency object, got {obj!r}') return processed_reqs - def add_cflags(self, cflags): + def add_cflags(self, cflags) -> None: self.cflags += mesonlib.stringlistify(cflags) - def _process_libs(self, libs, public: bool): + def _process_libs(self, libs, public: bool) -> T.Tuple[T.List, T.List, T.List]: libs = mesonlib.listify(libs) processed_libs = [] processed_reqs = [] @@ -160,7 +162,7 @@ class DependenciesHelper: return processed_libs, processed_reqs, processed_cflags - def _add_lib_dependencies(self, link_targets, link_whole_targets, external_deps, public, private_external_deps=False): + def _add_lib_dependencies(self, link_targets, link_whole_targets, external_deps, public, private_external_deps: bool = False) -> None: add_libs = self.add_pub_libs if public else self.add_priv_libs # Recursively add all linked libraries for t in link_targets: @@ -178,7 +180,7 @@ class DependenciesHelper: else: add_libs(external_deps) - def _add_link_whole(self, t, public): + def _add_link_whole(self, t, public) -> None: # Don't include static libraries that we link_whole. But we still need to # include their dependencies: a static library we link_whole # could itself link to a shared library or an installed static library. @@ -189,7 +191,7 @@ class DependenciesHelper: if isinstance(t, build.BuildTarget): self._add_lib_dependencies(t.link_targets, t.link_whole_targets, t.external_deps, public) - def add_version_reqs(self, name, version_reqs): + def add_version_reqs(self, name, version_reqs) -> None: if version_reqs: if name not in self.version_reqs: self.version_reqs[name] = set() @@ -199,21 +201,21 @@ class DependenciesHelper: new_vreqs = [s for s in mesonlib.stringlistify(version_reqs)] self.version_reqs[name].update(new_vreqs) - def split_version_req(self, s): + def split_version_req(self, s: str) -> T.Tuple[str, T.Optional[str]]: for op in ['>=', '<=', '!=', '==', '=', '>', '<']: pos = s.find(op) if pos > 0: return s[0:pos].strip(), s[pos:].strip() return s, None - def format_vreq(self, vreq): + def format_vreq(self, vreq: str) -> str: # vreq are '>=1.0' and pkgconfig wants '>= 1.0' for op in ['>=', '<=', '!=', '==', '=', '>', '<']: if vreq.startswith(op): return op + ' ' + vreq[len(op):] return vreq - def format_reqs(self, reqs): + def format_reqs(self, reqs) -> str: result = [] for name in reqs: vreqs = self.version_reqs.get(name, None) @@ -223,7 +225,7 @@ class DependenciesHelper: result += [name] return ', '.join(result) - def remove_dups(self): + def remove_dups(self) -> None: # Set of ids that have already been handled and should not be added any more exclude = set() @@ -279,7 +281,7 @@ class PkgConfigModule(ExtensionModule): INFO = ModuleInfo('pkgconfig') - def __init__(self, interpreter): + def __init__(self, interpreter: Interpreter): super().__init__(interpreter) self.methods.update({ 'generate': self.generate, @@ -331,7 +333,7 @@ class PkgConfigModule(ExtensionModule): # pathlib joining makes sure absolute libdir is not appended to '${prefix}' return ('${prefix}' / libdir).as_posix() - def _generate_pkgconfig_file(self, state, deps, subdirs, name, description, + def _generate_pkgconfig_file(self, state: ModuleState, deps, subdirs, name, description, url, version, pcfile, conflicts, variables, unescaped_variables, uninstalled=False, dataonly=False, pkgroot=None):