diff options
author | Andrew McNulty <amcn102@gmail.com> | 2023-04-24 09:52:28 +0200 |
---|---|---|
committer | Eli Schwartz <eschwartz93@gmail.com> | 2023-08-14 20:02:09 -0400 |
commit | c7308076966c1c55bc117ce9f7a7f49ac96acfa6 (patch) | |
tree | 826fcf546090c3a5155c1d730d34033563038d98 /mesonbuild/dependencies | |
parent | 9d323020321893093492bc7d538c311c61398a1e (diff) | |
download | meson-c7308076966c1c55bc117ce9f7a7f49ac96acfa6.zip meson-c7308076966c1c55bc117ce9f7a7f49ac96acfa6.tar.gz meson-c7308076966c1c55bc117ce9f7a7f49ac96acfa6.tar.bz2 |
Python: Add 'limited_api' kwarg to extension_module
This commit adds a new keyword arg to extension_module() that enables
a user to target the Python Limited API, declaring the version of the
limited API that they wish to target.
Two new unittests have been added to test this functionality.
Diffstat (limited to 'mesonbuild/dependencies')
-rw-r--r-- | mesonbuild/dependencies/python.py | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/mesonbuild/dependencies/python.py b/mesonbuild/dependencies/python.py index 1607728..efb904e 100644 --- a/mesonbuild/dependencies/python.py +++ b/mesonbuild/dependencies/python.py @@ -44,6 +44,7 @@ if T.TYPE_CHECKING: paths: T.Dict[str, str] platform: str suffix: str + limited_api_suffix: str variables: T.Dict[str, str] version: str @@ -94,6 +95,7 @@ class BasicPythonExternalProgram(ExternalProgram): 'paths': {}, 'platform': 'sentinel', 'suffix': 'sentinel', + 'limited_api_suffix': 'sentinel', 'variables': {}, 'version': '0.0', } @@ -197,7 +199,7 @@ class PythonSystemDependency(SystemDependency, _PythonDependencyBase): if self.link_libpython: # link args if mesonlib.is_windows(): - self.find_libpy_windows(environment) + self.find_libpy_windows(environment, limited_api=False) else: self.find_libpy(environment) else: @@ -259,7 +261,7 @@ class PythonSystemDependency(SystemDependency, _PythonDependencyBase): mlog.log(f'Unknown Windows Python platform {self.platform!r}') return None - def get_windows_link_args(self) -> T.Optional[T.List[str]]: + def get_windows_link_args(self, limited_api: bool) -> T.Optional[T.List[str]]: if self.platform.startswith('win'): vernum = self.variables.get('py_version_nodot') verdot = self.variables.get('py_version_short') @@ -277,6 +279,8 @@ class PythonSystemDependency(SystemDependency, _PythonDependencyBase): else: libpath = Path(f'python{vernum}.dll') else: + if limited_api: + vernum = vernum[0] libpath = Path('libs') / f'python{vernum}.lib' # For a debug build, pyconfig.h may force linking with # pythonX_d.lib (see meson#10776). This cannot be avoided @@ -317,7 +321,7 @@ class PythonSystemDependency(SystemDependency, _PythonDependencyBase): return None return [str(lib)] - def find_libpy_windows(self, env: 'Environment') -> None: + def find_libpy_windows(self, env: 'Environment', limited_api: bool = False) -> None: ''' Find python3 libraries on Windows and also verify that the arch matches what we are building for. @@ -332,7 +336,7 @@ class PythonSystemDependency(SystemDependency, _PythonDependencyBase): self.is_found = False return # This can fail if the library is not found - largs = self.get_windows_link_args() + largs = self.get_windows_link_args(limited_api) if largs is None: self.is_found = False return |