meson: Fix Python library searching on Windows

Neither LIBDIR nor LIBPL are set with the native windows Python
(unlike MSYS2), so we need to use `prefix` which takes us to the
rootdir of the Python installation.

The name is also different: it's python312.dll, not python3.12.dll.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6734>
This commit is contained in:
Nirbheek Chauhan 2024-04-26 03:37:47 +05:30 committed by GStreamer Marge Bot
parent 753aeccde7
commit d7eeb62f38

View file

@ -45,39 +45,53 @@ pylib_loc = get_option('libpython-dir')
fsmod = import('fs') fsmod = import('fs')
pylib_prefix = 'lib' pylib_prefix = 'lib'
pylib_suffix = 'so' pylib_suffix = 'so'
pylib_ver = python_dep.version()
pylib_locs = []
if host_system == 'windows' if host_system == 'windows'
if cc.get_argument_syntax() == 'msvc' if cc.get_argument_syntax() == 'msvc'
pylib_prefix = '' pylib_prefix = ''
endif endif
pylib_suffix = 'dll' pylib_suffix = 'dll'
pylib_ver = pylib_ver.replace('.', '')
elif host_system == 'darwin' elif host_system == 'darwin'
pylib_suffix = 'dylib' pylib_suffix = 'dylib'
endif endif
pylib_fnames = [] pylib_fnames = []
# Library name with soversion, non-devel package # Library name with soversion, non-devel package
if python.has_variable('INSTSONAME') if python.has_variable('INSTSONAME')
# For example, libpython3.12.so.1.0 (Linux), libpython3.11.dll.a (MSYS2), etc.
pylib_fnames += python.get_variable('INSTSONAME') pylib_fnames += python.get_variable('INSTSONAME')
endif endif
# Library name without soversion, devel package, framework, etc. # Library name without soversion, devel package, framework, etc.
if python.has_variable('LDLIBRARY') if python.has_variable('LDLIBRARY')
# For example, libpython3.12.so (Linux), libpython3.11.dll.a (MSYS2), etc.
pylib_fnames += python.get_variable('LDLIBRARY') pylib_fnames += python.get_variable('LDLIBRARY')
endif endif
# Manually construct name as a fallback # Manually construct name as a fallback
pylib_fnames += [ pylib_fnames += [
pylib_prefix + 'python' + python_dep.version() + python_abi_flags + '.' + pylib_suffix pylib_prefix + 'python' + pylib_ver + python_abi_flags + '.' + pylib_suffix
] ]
if pylib_loc != '' if pylib_loc != ''
pylib_locs = [pylib_loc] pylib_locs = [pylib_loc]
else else
pylib_locs = [ if python.has_variable('LIBDIR')
python.get_variable('LIBDIR', ''), pylib_locs += python.get_variable('LIBDIR')
python.get_variable('LIBPL', ''), endif
] if python.has_variable('LIBPL')
pylib_locs += python.get_variable('LIBPL')
endif
# On Windows, python312.dll is in the rootdir where Python is installed,
# which is configured as the "prefix" in sysconfig.
if host_system == 'windows'
pylib_locs += python.get_variable('prefix')
endif
endif endif
pylib_fname = '' pylib_fname = ''
foreach loc: pylib_locs foreach loc: pylib_locs
foreach fname: pylib_fnames foreach fname: pylib_fnames
if fsmod.exists(loc / fname) fpath = loc / fname
debug(f'Looking for Python library at: @fpath@')
if fsmod.exists(fpath)
pylib_fname = fname pylib_fname = fname
message(f'PY_LIB_FNAME = @fname@ (@loc@)') message(f'PY_LIB_FNAME = @fname@ (@loc@)')
break break