aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2016-12-09 18:57:52 +0530
committerJussi Pakkanen <jpakkane@gmail.com>2016-12-10 00:58:50 +0200
commit2c5680d7218d421be22e07598abe4f8f6c385187 (patch)
tree0cf8bd19212439a6289477df8e77c43e3826a272 /mesonbuild
parent4ef495c5969ac97fcb2887980fdf7e9cabbfc58a (diff)
downloadmeson-2c5680d7218d421be22e07598abe4f8f6c385187.zip
meson-2c5680d7218d421be22e07598abe4f8f6c385187.tar.gz
meson-2c5680d7218d421be22e07598abe4f8f6c385187.tar.bz2
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.
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/dependencies.py49
1 files changed, 37 insertions, 12 deletions
diff --git a/mesonbuild/dependencies.py b/mesonbuild/dependencies.py
index b76c3cb..82d1b75 100644
--- a/mesonbuild/dependencies.py
+++ b/mesonbuild/dependencies.py
@@ -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