python3 dep: Check arch of libraries before using
On Windows, we can build with both 32-bit and 64-bit compilers, but the Python is either 32-bit or 64-bit. Check the architecture of the found Python libraries and don't use them if they don't match our build_machine. Also skip the tests if the Python 3 dependency is not found.
This commit is contained in:
parent
4ef495c596
commit
2c5680d721
|
@ -1290,18 +1290,7 @@ class Python3Dependency(Dependency):
|
|||
pass
|
||||
if not self.is_found:
|
||||
if mesonlib.is_windows():
|
||||
inc = sysconfig.get_path('include')
|
||||
platinc = sysconfig.get_path('platinclude')
|
||||
self.cargs = ['-I' + inc]
|
||||
if inc != platinc:
|
||||
self.cargs.append('-I' + platinc)
|
||||
# Nothing exposes this directly that I coulf find
|
||||
basedir = sysconfig.get_config_var('base')
|
||||
vernum = sysconfig.get_config_var('py_version_nodot')
|
||||
self.libs = ['-L{}/libs'.format(basedir),
|
||||
'-lpython{}'.format(vernum)]
|
||||
self.is_found = True
|
||||
self.version = sysconfig.get_config_var('py_version_short')
|
||||
self._find_libpy3_windows(environment)
|
||||
elif mesonlib.is_osx():
|
||||
# In OSX the Python 3 framework does not have a version
|
||||
# number in its name.
|
||||
|
@ -1315,6 +1304,42 @@ class Python3Dependency(Dependency):
|
|||
else:
|
||||
mlog.log('Dependency', mlog.bold(self.name), 'found:', mlog.red('NO'))
|
||||
|
||||
def _find_libpy3_windows(self, env):
|
||||
'''
|
||||
Find python3 libraries on Windows and also verify that the arch matches
|
||||
what we are building for.
|
||||
'''
|
||||
pyarch = sysconfig.get_platform()
|
||||
arch = detect_cpu_family(env.coredata.compilers)
|
||||
if arch == 'x86':
|
||||
arch = '32'
|
||||
elif arch == 'x86_64':
|
||||
arch = '64'
|
||||
else:
|
||||
# We can't cross-compile Python 3 dependencies on Windows yet
|
||||
mlog.log('Unknown architecture {!r} for'.format(arch),
|
||||
mlog.bold(self.name))
|
||||
self.is_found = False
|
||||
return
|
||||
# Pyarch ends in '32' or '64'
|
||||
if arch != pyarch[-2:]:
|
||||
mlog.log('Need', mlog.bold(self.name),
|
||||
'for {}-bit, but found {}-bit'.format(arch, pyarch[-2:]))
|
||||
self.is_found = False
|
||||
return
|
||||
inc = sysconfig.get_path('include')
|
||||
platinc = sysconfig.get_path('platinclude')
|
||||
self.cargs = ['-I' + inc]
|
||||
if inc != platinc:
|
||||
self.cargs.append('-I' + platinc)
|
||||
# Nothing exposes this directly that I coulf find
|
||||
basedir = sysconfig.get_config_var('base')
|
||||
vernum = sysconfig.get_config_var('py_version_nodot')
|
||||
self.libs = ['-L{}/libs'.format(basedir),
|
||||
'-lpython{}'.format(vernum)]
|
||||
self.version = sysconfig.get_config_var('py_version_short')
|
||||
self.is_found = True
|
||||
|
||||
def get_compile_args(self):
|
||||
return self.cargs
|
||||
|
||||
|
|
|
@ -3,10 +3,14 @@ project('Python extension module', 'c',
|
|||
# Because Windows Python ships only with optimized libs,
|
||||
# we must build this project the same way.
|
||||
|
||||
py3_dep = dependency('python3')
|
||||
py3_dep = dependency('python3', required : false)
|
||||
|
||||
subdir('ext')
|
||||
if py3_dep.found()
|
||||
subdir('ext')
|
||||
|
||||
test('extmod',
|
||||
find_program('blaster.py'),
|
||||
env : ['PYTHONPATH=' + pypathdir])
|
||||
test('extmod',
|
||||
find_program('blaster.py'),
|
||||
env : ['PYTHONPATH=' + pypathdir])
|
||||
else
|
||||
error('MESON_SKIP_TEST: Python3 libraries not found, skipping test.')
|
||||
endif
|
||||
|
|
|
@ -2,10 +2,9 @@ project('cython', 'c',
|
|||
default_options : ['warning_level=3'])
|
||||
|
||||
cython = find_program('cython3', required : false)
|
||||
py3_dep = dependency('python3', required : false)
|
||||
|
||||
if cython.found()
|
||||
py3_dep = dependency('python3')
|
||||
|
||||
if cython.found() and py3_dep.found()
|
||||
subdir('libdir')
|
||||
|
||||
test('cython tester',
|
||||
|
@ -13,5 +12,5 @@ if cython.found()
|
|||
env : ['PYTHONPATH=' + pydir]
|
||||
)
|
||||
else
|
||||
error('MESON_SKIP_TEST: Cython not found, skipping test.')
|
||||
error('MESON_SKIP_TEST: Cython3 or Python3 libraries not found, skipping test.')
|
||||
endif
|
||||
|
|
Loading…
Reference in New Issue