aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2017-02-17 15:41:14 -0500
committerGitHub <noreply@github.com>2017-02-17 15:41:14 -0500
commit16adedf6bc941745d3f10a2ad70fe710dfe1b206 (patch)
tree27f71e8a9c6f5d86c015913a74c2ee5b7a21b1fe
parentcda24a641df045ebcfff1251e649c2411a3babcb (diff)
parent1f2f01076555f943023d1fb74e4977750db5d8a3 (diff)
downloadmeson-16adedf6bc941745d3f10a2ad70fe710dfe1b206.zip
meson-16adedf6bc941745d3f10a2ad70fe710dfe1b206.tar.gz
meson-16adedf6bc941745d3f10a2ad70fe710dfe1b206.tar.bz2
Merge pull request #1377 from mesonbuild/64_32
Fix mixed x86/amd64 Linux platforms
-rw-r--r--mesonbuild/dependencies.py20
-rw-r--r--mesonbuild/environment.py21
-rw-r--r--test cases/linuxlike/5 dependency versions/meson.build2
3 files changed, 39 insertions, 4 deletions
diff --git a/mesonbuild/dependencies.py b/mesonbuild/dependencies.py
index c894b0e..9525ffa 100644
--- a/mesonbuild/dependencies.py
+++ b/mesonbuild/dependencies.py
@@ -1,4 +1,4 @@
-# Copyright 2013-2015 The Meson development team
+# Copyright 2013-2017 The Meson development team
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -589,6 +589,9 @@ class BoostDependency(Dependency):
mlog.log('Dependency Boost (%s) found:' % module_str, mlog.green('YES'), info)
else:
mlog.log("Dependency Boost (%s) found:" % module_str, mlog.red('NO'))
+ if 'cpp' not in self.environment.coredata.compilers:
+ raise DependencyException('Tried to use Boost but a C++ compiler is not defined.')
+ self.cpp_compiler = self.environment.coredata.compilers['cpp']
def detect_win_root(self):
globtext = 'c:\\local\\boost_*'
@@ -721,8 +724,19 @@ class BoostDependency(Dependency):
args.append('-L' + os.path.join(self.boost_root, 'lib'))
for module in self.requested_modules:
module = BoostDependency.name2lib.get(module, module)
- if module in self.lib_modules or module in self.lib_modules_mt:
- linkcmd = '-lboost_' + module
+ libname = 'boost_' + module
+ # The compiler's library detector is the most reliable so use that first.
+ default_detect = self.cpp_compiler.find_library(libname, self.environment, [])
+ if default_detect is not None:
+ if module == 'unit_testing_framework':
+ emon_args = self.cpp_compiler.find_library('boost_test_exec_monitor')
+ else:
+ emon_args = None
+ args += default_detect
+ if emon_args is not None:
+ args += emon_args
+ elif module in self.lib_modules or module in self.lib_modules_mt:
+ linkcmd = '-l' + libname
args.append(linkcmd)
# FIXME a hack, but Boost's testing framework has a lot of
# different options and it's hard to determine what to do
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
index e143b0b..51a3d43 100644
--- a/mesonbuild/environment.py
+++ b/mesonbuild/environment.py
@@ -121,6 +121,18 @@ def detect_cpu_family(compilers):
if trial.startswith('arm'):
return 'arm'
if trial in ('amd64', 'x64'):
+ trial = 'x86_64'
+ if trial == 'x86_64':
+ # On Linux (and maybe others) there can be any mixture of 32/64 bit
+ # code in the kernel, Python, system etc. The only reliable way
+ # to know is to check the compiler defines.
+ for c in compilers.values():
+ try:
+ if c.has_define('__i386__'):
+ return 'x86'
+ except mesonlib.MesonException:
+ # Ignore compilers that do not support has_define.
+ pass
return 'x86_64'
# Add fixes here as bugs are reported.
return trial
@@ -131,6 +143,15 @@ def detect_cpu(compilers):
else:
trial = platform.machine().lower()
if trial in ('amd64', 'x64'):
+ trial = 'x86_64'
+ if trial == 'x86_64':
+ # Same check as above for cpu_family
+ for c in compilers.values():
+ try:
+ if c.has_define('__i386__'):
+ return 'i686' # All 64 bit cpus have at least this level of x86 support.
+ except mesonlib.MesonException:
+ pass
return 'x86_64'
# Add fixes here as bugs are reported.
return trial
diff --git a/test cases/linuxlike/5 dependency versions/meson.build b/test cases/linuxlike/5 dependency versions/meson.build
index 20b3df5..1b01cd6 100644
--- a/test cases/linuxlike/5 dependency versions/meson.build
+++ b/test cases/linuxlike/5 dependency versions/meson.build
@@ -1,4 +1,4 @@
-project('dep versions', 'c')
+project('dep versions', 'c', 'cpp')
# Find external dependency without version
zlib = dependency('zlib')