pkgconfig: move uninstalled devenv handling from setup to the module hook

msetup.py doesn't need to know the gory details of PkgConfigDependency,
or directly import it at program startup. It's also slightly wasteful to
generate a devenv for the -uninstalled directory when a project doesn't
even, in the end, use the pkgconfig module anyway.
pull/11907/head
Eli Schwartz 2 years ago
parent 620bdf5895
commit 418063cc47
No known key found for this signature in database
GPG Key ID: CEB167EFB5722BD6
  1. 11
      mesonbuild/modules/pkgconfig.py
  2. 4
      mesonbuild/msetup.py

@ -27,6 +27,7 @@ from .. import mesonlib
from .. import mlog
from ..coredata import BUILTIN_DIR_OPTIONS
from ..dependencies import ThreadDependency
from ..dependencies.pkgconfig import PkgConfigDependency
from ..interpreter.type_checking import D_MODULE_VERSIONS_KW, INSTALL_DIR_KW, VARIABLES_KW, NoneType
from ..interpreterbase import FeatureNew, FeatureDeprecated
from ..interpreterbase.decorators import ContainerTypeInfo, KwargInfo, typed_kwargs, typed_pos_args
@ -153,7 +154,7 @@ class DependenciesHelper:
and obj.get_id() in self.metadata):
self._check_generated_pc_deprecation(obj)
processed_reqs.append(self.metadata[obj.get_id()].filebase)
elif isinstance(obj, dependencies.PkgConfigDependency):
elif isinstance(obj, PkgConfigDependency):
if obj.found():
processed_reqs.append(obj.name)
self.add_version_reqs(obj.name, obj.version_reqs)
@ -197,7 +198,7 @@ class DependenciesHelper:
processed_reqs.append(self.metadata[obj.get_id()].filebase)
elif isinstance(obj, dependencies.ValgrindDependency):
pass
elif isinstance(obj, dependencies.PkgConfigDependency):
elif isinstance(obj, PkgConfigDependency):
if obj.found():
processed_reqs.append(obj.name)
self.add_version_reqs(obj.name, obj.version_reqs)
@ -381,6 +382,7 @@ class PkgConfigModule(NewExtensionModule):
# Track already generated pkg-config files This is stored as a class
# variable so that multiple `import()`s share metadata
devenv: T.Optional[build.EnvironmentVariables] = None
_metadata: T.ClassVar[T.Dict[str, MetaData]] = {}
def __init__(self) -> None:
@ -389,6 +391,9 @@ class PkgConfigModule(NewExtensionModule):
'generate': self.generate,
})
def postconf_hook(self, b: build.Build) -> None:
b.devenv.append(self.devenv)
def _get_lname(self, l: T.Union[build.SharedLibrary, build.StaticLibrary, build.CustomTarget, build.CustomTargetIndex],
msg: str, pcfile: str) -> str:
if isinstance(l, (build.CustomTargetIndex, build.CustomTarget)):
@ -734,6 +739,8 @@ class PkgConfigModule(NewExtensionModule):
if not isinstance(lib, str) and lib.get_id() not in self._metadata:
self._metadata[lib.get_id()] = MetaData(
filebase, name, state.current_node)
if self.devenv is None:
self.devenv = PkgConfigDependency.get_env(state.environment, mesonlib.MachineChoice.HOST, uninstalled=True)
return ModuleReturnValue(res, [res])

@ -19,8 +19,7 @@ from pathlib import Path
import typing as T
from . import build, coredata, environment, interpreter, mesonlib, mintro, mlog
from .dependencies import PkgConfigDependency
from .mesonlib import MachineChoice, MesonException
from .mesonlib import MesonException
git_ignore_file = '''# This file is autogenerated by Meson. If you change or delete it, it won't be recreated.
*
@ -301,7 +300,6 @@ class MesonApp:
def finalize_postconf_hooks(self, b: build.Build, intr: interpreter.Interpreter) -> None:
b.devenv.append(intr.backend.get_devenv())
b.devenv.append(PkgConfigDependency.get_env(intr.environment, MachineChoice.HOST, uninstalled=True))
for mod in intr.modules.values():
mod.postconf_hook(b)

Loading…
Cancel
Save