| 
41 | 41 | else:  | 
42 | 42 |     import tomllib  | 
43 | 43 | 
 
  | 
 | 44 | + | 
 | 45 | +if sys.version_info < (3, 8):  | 
 | 46 | +    import importlib_metadata  | 
 | 47 | +else:  | 
 | 48 | +    import importlib.metadata as importlib_metadata  | 
 | 49 | + | 
 | 50 | + | 
 | 51 | +import packaging.requirements  | 
 | 52 | +import packaging.version  | 
44 | 53 | import pyproject_metadata  | 
45 | 54 | 
 
  | 
46 | 55 | import mesonpy._compat  | 
@@ -658,10 +667,20 @@ def build_editable(self, directory: Path, verbose: bool = False) -> pathlib.Path  | 
658 | 667 |         return wheel_file  | 
659 | 668 | 
 
  | 
660 | 669 | 
 
  | 
 | 670 | +def _compute_dynamic_dependencies(templates) -> List[str]:  | 
 | 671 | +    dependencies = []  | 
 | 672 | +    for template in templates:  | 
 | 673 | +        req = packaging.requirements.Requirement(template)  | 
 | 674 | +        version = packaging.version.parse(importlib_metadata.version(req.name))  | 
 | 675 | +        dependencies.append(template.format(v=version))  | 
 | 676 | +    return dependencies  | 
 | 677 | + | 
 | 678 | + | 
661 | 679 | class Project():  | 
662 | 680 |     """Meson project wrapper to generate Python artifacts."""  | 
663 | 681 | 
 
  | 
664 | 682 |     _ALLOWED_DYNAMIC_FIELDS: ClassVar[List[str]] = [  | 
 | 683 | +        'dependencies',  | 
665 | 684 |         'version',  | 
666 | 685 |     ]  | 
667 | 686 |     _metadata: Optional[pyproject_metadata.StandardMetadata]  | 
@@ -778,6 +797,10 @@ def __init__(  # noqa: C901  | 
778 | 797 |         if self._metadata and 'version' in self._metadata.dynamic:  | 
779 | 798 |             self._metadata.version = self.version  | 
780 | 799 | 
 
  | 
 | 800 | +        if self._metadata and 'dependencies' in self._metadata.dynamic:  | 
 | 801 | +            self._metadata.dependencies = _compute_dynamic_dependencies(  | 
 | 802 | +                self._get_config_key('dynamic').get('dependencies', []))  | 
 | 803 | + | 
781 | 804 |     def _get_config_key(self, key: str) -> Any:  | 
782 | 805 |         value: Any = self._config  | 
783 | 806 |         for part in f'tool.meson-python.{key}'.split('.'):  | 
 | 
0 commit comments