diff options
author | Nirbheek Chauhan <nirbheek@centricular.com> | 2016-12-09 18:57:52 +0530 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2016-12-10 00:58:50 +0200 |
commit | 2c5680d7218d421be22e07598abe4f8f6c385187 (patch) | |
tree | 0cf8bd19212439a6289477df8e77c43e3826a272 /mesonbuild | |
parent | 4ef495c5969ac97fcb2887980fdf7e9cabbfc58a (diff) | |
download | meson-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.py | 49 |
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 |